#include #define TRUE 1 #define FALSE 0 -- #define vec_dotproduct(x,y) dpl_reduce_plus_i(dpl_mult(x,y)) #define NO 1 #define YES 2 #define OVERLAP 3 #define MAYBE 4 #define SPHERE 1.0 #define HALFSPACE 2.0 #define CYLINDER 3.0 #define CONE 4.0 #define PI 3.14159265358979323846 var 'sqrt':real->real; var 'sqrt':int->real; #define X 1 #define Y 2 #define Z 3 #define SCALAR #define GLOBAL #ifdef GLOBAL var prim : [[[real]]]; #endif GLOBAL function vec_add(v:[real], w:[real]):[real] return [i in [1..#v] : v[i] + w[i]$]; function vec_sub(v:[real], w:[real]):[real] return [i in [1..#v] : v[i] - w[i]$]; function vec_dotproduct(v, w) return +/ [i in [1..#v]: v[i] * w[i]$]; #ifdef notdef function vec_crossproduct(v:[real], w:[real]):[real] return [v[2]*w[3] - v[3]*w[2], v[3]*w[1]-v[1]*w[3], v[1]*w[2]-v[2]*w[1]]; #else #define vec_crossproduct(v,w) \ ([v[2]*w[3] - v[3]*w[2], v[3]*w[1]-v[1]*w[3], v[1]*w[2]-v[2]*w[1]]) #endif notdef function filter(flags:[bool], x:[[real]]):[[real]] return [i in [1..#x]| flags[i]: x[i]]; function filter2D(flags:[[bool]], x:[[[real]]]):[[[real]]] return [i in [1..#x] | ||/ flags[i] : filter(flags[i], x[i])]; function vec_add_scalar(v:[real], s:real):[real] return [i in [1..#v]:v[i] + s]; function listadd(full_list:[[[real]]], x:real, y:real, r:real):[[[real]]] return [ L in full_list: [v in L : vec_add(v,[x,y,0.0])] ++ [v in L : vec_add(v,[x,y,r])] ]; #if 1 function subdivide(cube_list:[[[real]]], cube_radius:real):[[[real]]] return listadd(cube_list, 0.0, 0.0, cube_radius) ++ listadd(cube_list, 0.0, cube_radius, cube_radius) ++ listadd(cube_list, cube_radius, 0.0, cube_radius) ++ listadd(cube_list, cube_radius, cube_radius, cube_radius); function cube_pixmap_value(qlval:int, cube_size:real, maybe_factor:real):real return if qlval == YES then cube_size else if cube_size == 1.0 && (qlval == MAYBE || qlval == OVERLAP) then maybe_factor else 0.0; #ifdef SCALAR qnot = [NO, YES, OVERLAP, MAYBE, YES, NO, OVERLAP, MAYBE]; function qnot_or_id(qlval:int, p2:int):int return qnot[ qlval + 4 * p2 ]; #else function qnot_or_id(qlval:[[[int]]], i:int, j:int, prim_idx:[int]):int return let qnot = [NO, YES, OVERLAP, MAYBE, YES, NO, OVERLAP, MAYBE] in qnot[ qlval[i][j][prim_idx[1]] + 4 * prim_idx[2] ]; #endif SCALAR #ifdef GLOBAL function sphere_in_halfspace(center:[real], radius:real, k:int, radius_squared:real):int return let point = prim[k][2], normal = prim[k][3], outside = 0.0 > vec_dotproduct(vec_sub(center,point),normal), dist_tmp = vec_dotproduct(normal, vec_sub(point,center)), dist_squared = (dist_tmp * dist_tmp) / -- distance center to plane vec_dotproduct(normal,normal) -- == (N.(p-c) ^ 2) / N.N in if outside then if dist_squared > radius_squared then NO else OVERLAP else if dist_squared >= radius_squared then YES else OVERLAP; #else function sphere_in_halfspace(center:[real], radius:real, prim:[[real]], radius_squared:real):int return let point = prim[2], normal = prim[3], outside = 0 > vec_dotproduct(vec_sub(center,point),normal), dist_tmp = vec_dotproduct(normal, vec_sub(point,center)), dist_squared = (dist_tmp * dist_tmp) / -- distance center to plane vec_dotproduct(normal,normal) -- == (N.(p-c) ^ 2) / N.N in if outside then if dist_squared > radius_squared then NO else OVERLAP else if dist_squared >= radius_squared then YES else OVERLAP; #endif GLOBAL #ifdef GLOBAL function sphere_in_sphere(center:[real], radius:real, k:int, radius_squared:real):int return let csg_center = prim[k][2], csg_radius = prim[k][3][1], direction = vec_sub(center, csg_center), dist_squared = vec_dotproduct(direction, direction), radius_add_sqr = (csg_radius + radius) * (csg_radius + radius) in if dist_squared > radius_add_sqr then NO else if csg_radius <= radius then OVERLAP else if dist_squared <= (csg_radius - radius) * (csg_radius - radius) then YES else OVERLAP; #else function sphere_in_sphere(center:[real], radius:real, prim:[[real]], radius_squared:real):int return let csg_center = prim[2], csg_radius = prim[3][1], direction = vec_sub(center, csg_center), dist_squared = vec_dotproduct(direction, direction), radius_add_sqr = (csg_radius + radius) * (csg_radius + radius) in if dist_squared > radius_add_sqr then NO else if csg_radius <= radius then OVERLAP else if dist_squared <= (csg_radius - radius) * (csg_radius - radius) then YES else OVERLAP; #endif GLOBAL #ifdef GLOBAL function sphere_in_cyl(center:[real], radius:real, k:int, radius_squared:real):int return let -------------------------------------------------------- -- sphere <= cylinder_infinite? -- compute distance^2 from center to cylinder line -- == ((c-bot)x(top-bot)).((c-bot)x(top-bot))/ ((top-bot).(top-bot)) -------------------------------------------------------- csg_center = prim[k][2], csg_top = prim[k][3], csg_radius_top = prim[k][4][1], direction = vec_sub(csg_top,csg_center), v = vec_sub(center,csg_center), normal = vec_crossproduct(v, direction), dist_line_sqr = vec_dotproduct(normal,normal) / vec_dotproduct(direction,direction), csg_radius = csg_radius_top, dist_squared = dist_line_sqr, --------------------------------------------------------- -- CUBE_SPHERE <= DERIVED_SPHERE? (use csg_radius, dist_squared) -- sphere <= sphere (c',r')? |c-c'|>r+r'=>N , |c-c'|<=r'-r=>Y , else O --------------------------------------------------------- radius_add_sqr = (csg_radius + radius) * (csg_radius + radius) in if dist_squared > radius_add_sqr then NO else if csg_radius <= radius then OVERLAP else let radius_sub_sqr = (csg_radius - radius) * (csg_radius - radius) in if dist_squared <= radius_sub_sqr then YES else OVERLAP; #else function sphere_in_cyl(center:[real], radius:real, prim:[[real]], radius_squared:real):int return let -------------------------------------------------------- -- sphere <= cylinder_infinite? -- compute distance^2 from center to cylinder line -- == ((c-bot)x(top-bot)).((c-bot)x(top-bot))/ ((top-bot).(top-bot)) -------------------------------------------------------- csg_center = prim[2], csg_top = prim[3], csg_radius_top = prim[4][1], direction = vec_sub(csg_top,csg_center), v = vec_sub(center,csg_center), normal = vec_crossproduct(v, direction), dist_line_sqr = vec_dotproduct(normal,normal) / vec_dotproduct(direction,direction), csg_radius = csg_radius_top, dist_squared = dist_line_sqr, --------------------------------------------------------- -- CUBE_SPHERE <= DERIVED_SPHERE? (use csg_radius, dist_squared) -- sphere <= sphere (c',r')? |c-c'|>r+r'=>N , |c-c'|<=r'-r=>Y , else O --------------------------------------------------------- radius_add_sqr = (csg_radius + radius) * (csg_radius + radius) in if dist_squared > radius_add_sqr then NO else if csg_radius <= radius then OVERLAP else let radius_sub_sqr = (csg_radius - radius) * (csg_radius - radius) in if dist_squared <= radius_sub_sqr then YES else OVERLAP; #endif GLOBAL #ifdef SCALAR function sphere_in_primitive( center:[real], radius:real, k:int):int return let op = prim[k][1][1], radius_squared = radius * radius in if HALFSPACE == op then sphere_in_halfspace(center, radius, k, radius_squared) else if op == SPHERE then sphere_in_sphere(center, radius, k, radius_squared) else if CYLINDER == op then sphere_in_cyl(center, radius, k, radius_squared) else NO; -- barf back NO for unknown operand #else function sphere_in_primitive(center:[real], radius:real, prim:[[real]]):int return let op = prim[1][1], radius_squared = radius * radius in if HALFSPACE == op then sphere_in_halfspace(center, radius, prim[2], prim[3], radius_squared) else if op == SPHERE then sphere_in_sphere(center, radius, prim, radius_squared) else if CYLINDER == op then sphere_in_cyl(center, radius, prim, radius_squared) else NO; -- barf back NO for unknown operand #endif SCALAR function qand_or(disj:int, qlseq:[int]):int return if ||/ [i in qlseq : i == disj] then disj else if &&/ [i in qlseq : i == 3-disj] then 3-disj else if ||/[i in qlseq: i == MAYBE] then MAYBE else if #[i in qlseq | i == OVERLAP : 1] == 1 then OVERLAP else MAYBE; #endif #ifdef GLOBAL function recursive_chop_and_drop(cube_size:real, cube_list:[[[real]]], disj:bool, csg_normal:[[[int]]]):[[[real]]] #else function chop_and_drop(cube_size:real, cube_list:[[[real]]], disj:bool, primitives:[[[real]]], csg_normal:[[[int]]]):[[[real]]] #endif return let outer = if disj then YES else NO, inner = if disj then NO else YES, cube_radius = cube_size / 2, sphere_radius = cube_radius * sqrt(2), maybe_factor = cube_radius*(3/(2*sqrt(2)*PI)), cubes_in_prim = [i in [1..#cube_list]: [j in [1..#cube_list[i]]: [k in [1..#prim]: #ifdef GLOBAL sphere_in_primitive( vec_add_scalar(cube_list[i][j], cube_radius), sphere_radius, k) #else sphere_in_primitive( vec_add_scalar(cube_list[i][j], cube_radius), sphere_radius, primitives[k]) #endif GLOBAL ] ] ], cubes_in_csg = [i in [1..#cube_list]: [j in [1..#cube_list[i]]: qand_or(outer, [inner_conj in csg_normal: qand_or( inner, [prim_index in inner_conj: #ifdef SCALAR qnot_or_id( cubes_in_prim[i][j][prim_index[1]], prim_index[2]) #else qnot_or_id( cubes_in_prim, i, j, prim_index) #endif SCALAR ] ) ] ) ] ], pixmap_add_prefilter = [i in [1..#cube_list]: [ cube_list[i][1][X], cube_list[i][1][Y], +/ [j in [1..#cube_list[i]]: cube_pixmap_value( cubes_in_csg[i][j], cube_size, maybe_factor ) ] ] ], pixmap_add = [i in [1..#pixmap_add_prefilter] | 0.0 != pixmap_add_prefilter[i][Z]: pixmap_add_prefilter[i]] in if cube_size <= 1.0 then [pixmap_add] else [pixmap_add] ++ #ifdef GLOBAL recursive_chop_and_drop(cube_size / 2, subdivide(filter2D( [i in [1..#cube_list]: [j in [1..#cube_list[i]]: cubes_in_csg[i][j] == MAYBE || cubes_in_csg[i][j] == OVERLAP]], cube_list), cube_size / 2), disj, csg_normal); #else chop_and_drop(cube_size / 2, subdivide(filter2D( [i in [1..#cube_list]: [j in [1..#cube_list[i]]: cubes_in_csg[i][j] == MAYBE || cubes_in_csg[i][j] == OVERLAP]], cube_list), cube_size / 2), disj, primitives, csg_normal); #endif GLOBAL #ifdef GLOBAL function chop_and_drop(cube_size:real, cube_list:[[[real]]], disj:bool, primitives:[[[real]]], csg_normal:[[[int]]]):[[[real]]] { prim = primitives; return recursive_chop_and_drop(cube_size, cube_list, disj, csg_normal); } #endif GLOBAL #if 0 A = subdivide([[[0,0,0]]], 4); #endif #if 0 A = [i in [1..4]:sphere_in_primitive([i,0,0],4.5,[[1.0],[0.0,0.0,0.0],[3.0]])]; #endif #if 0 A = listadd([[[0,0,0],[1,2,3]]],10,20,30); #endif #if 1 A = chop_and_drop(16.0, [[[0.0, 0.0, 0.0]]], false, [[[1.0, 1.0, 1.0], [8.000, 8.000, -128.012], [128.261, 128.261, 128.261]], [[1.0, 1.0, 1.0], [9.934, 9.923, 0.221], [1.603, 1.603, 1.603]]], [[[1, TRUE]], [[2, FALSE]]]); #ifdef CODE_GEN show_p("Expecting"); show_p([[], [], [], [], [[8.0, 8.0, 0.169], [8.0, 9.0, 0.338], [9.0, 8.0, 0.338], [9.0, 9.0, 0.338], [8.0, 10.0, 0.338], [8.0, 11.0, 0.169], [9.0, 10.0, 0.338], [9.0, 11.0, 0.338], [10.0, 8.0, 0.338], [10.0, 9.0, 0.338], [11.0, 8.0, 0.169], [11.0, 9.0, 0.338], [10.0, 10.0, 0.338], [10.0, 11.0, 0.338], [11.0, 10.0, 0.338], [11.0, 11.0, 0.169]]]); #endif CODE_GEN show_p(A); #endif #if 0 A = chop_and_drop(16, [[[0, 0, 0]]], false, [[[1, 1, 1], [8.000, 8.000, -140.859], [141.086, 141.086, 141.086]], [[1, 1, 1], [10.116, 10.103, -0.616], [0.882, 0.882, 0.882]], [[1, 1, 1], [8.000, 8.000, -140.859], [141.086, 141.086, 141.086]], [[1, 1, 1], [9.765, 9.752, -0.606], [0.882, 0.882, 0.882]], [[1, 1, 1], [8.000, 8.000, -140.859], [141.086, 141.086, 141.086]], [[1, 1, 1], [9.415, 9.401, -0.598], [0.882, 0.882, 0.882]], [[1, 1, 1], [8.000, 8.000, -140.859], [141.086, 141.086, 141.086]], [[1, 1, 1], [9.065, 9.051, -0.592], [0.882, 0.882, 0.882]], [[1, 1, 1], [8.000, 8.000, -140.859], [141.086, 141.086, 141.086]], [[1, 1, 1], [8.714, 8.700, -0.623], [0.882, 0.882, 0.882]], [[1, 1, 1], [8.000, 8.000, -140.859], [141.086, 141.086, 141.086]], [[1, 1, 1], [8.013, 7.998, -0.584], [0.882, 0.882, 0.882]], [[1, 1, 1], [8.000, 8.000, -140.859], [141.086, 141.086, 141.086]], [[1, 1, 1], [8.364, 8.349, -0.620], [0.882, 0.882, 0.882]]], [[[1, TRUE], [3, TRUE], [5, TRUE], [7, TRUE], [9, TRUE], [11, TRUE], [13, TRUE]], [[1, TRUE], [3, TRUE], [5, TRUE], [7, TRUE], [9, TRUE], [11, TRUE], [14, FALSE]], [[1, TRUE], [3, TRUE], [5, TRUE], [7, TRUE], [9, TRUE], [12, FALSE], [13, TRUE]], [[1, TRUE], [3, TRUE], [5, TRUE], [7, TRUE], [9, TRUE], [12, FALSE], [14, FALSE]], [[1, TRUE], [3, TRUE], [5, TRUE], [7, TRUE], [10, FALSE], [11, TRUE], [13, TRUE]], [[1, TRUE], [3, TRUE], [5, TRUE], [7, TRUE], [10, FALSE], [11, TRUE], [14, FALSE]], [[1, TRUE], [3, TRUE], [5, TRUE], [7, TRUE], [10, FALSE], [12, FALSE], [13, TRUE]], [[1, TRUE], [3, TRUE], [5, TRUE], [7, TRUE], [10, FALSE], [12, FALSE], [14, FALSE]], [[1, TRUE], [3, TRUE], [5, TRUE], [8, FALSE], [9, TRUE], [11, TRUE], [13, TRUE]], [[1, TRUE], [3, TRUE], [5, TRUE], [8, FALSE], [9, TRUE], [11, TRUE], [14, FALSE]], [[1, TRUE], [3, TRUE], [5, TRUE], [8, FALSE], [9, TRUE], [12, FALSE], [13, TRUE]], [[1, TRUE], [3, TRUE], [5, TRUE], [8, FALSE], [9, TRUE], [12, FALSE], [14, FALSE]], [[1, TRUE], [3, TRUE], [5, TRUE], [8, FALSE], [10, FALSE], [11, TRUE], [13, TRUE]], [[1, TRUE], [3, TRUE], [5, TRUE], [8, FALSE], [10, FALSE], [11, TRUE], [14, FALSE]], [[1, TRUE], [3, TRUE], [5, TRUE], [8, FALSE], [10, FALSE], [12, FALSE], [13, TRUE]], [[1, TRUE], [3, TRUE], [5, TRUE], [8, FALSE], [10, FALSE], [12, FALSE], [14, FALSE]], [[1, TRUE], [3, TRUE], [6, FALSE], [7, TRUE], [9, TRUE], [11, TRUE], [13, TRUE]], [[1, TRUE], [3, TRUE], [6, FALSE], [7, TRUE], [9, TRUE], [11, TRUE], [14, FALSE]], [[1, TRUE], [3, TRUE], [6, FALSE], [7, TRUE], [9, TRUE], [12, FALSE], [13, TRUE]], [[1, TRUE], [3, TRUE], [6, FALSE], [7, TRUE], [9, TRUE], [12, FALSE], [14, FALSE]], [[1, TRUE], [3, TRUE], [6, FALSE], [7, TRUE], [10, FALSE], [11, TRUE], [13, TRUE]], [[1, TRUE], [3, TRUE], [6, FALSE], [7, TRUE], [10, FALSE], [11, TRUE], [14, FALSE]], [[1, TRUE], [3, TRUE], [6, FALSE], [7, TRUE], [10, FALSE], [12, FALSE], [13, TRUE]], [[1, TRUE], [3, TRUE], [6, FALSE], [7, TRUE], [10, FALSE], [12, FALSE], [14, FALSE]], [[1, TRUE], [3, TRUE], [6, FALSE], [8, FALSE], [9, TRUE], [11, TRUE], [13, TRUE]], [[1, TRUE], [3, TRUE], [6, FALSE], [8, FALSE], [9, TRUE], [11, TRUE], [14, FALSE]], [[1, TRUE], [3, TRUE], [6, FALSE], [8, FALSE], [9, TRUE], [12, FALSE], [13, TRUE]], [[1, TRUE], [3, TRUE], [6, FALSE], [8, FALSE], [9, TRUE], [12, FALSE], [14, FALSE]], [[1, TRUE], [3, TRUE], [6, FALSE], [8, FALSE], [10, FALSE], [11, TRUE], [13, TRUE]], [[1, TRUE], [3, TRUE], [6, FALSE], [8, FALSE], [10, FALSE], [11, TRUE], [14, FALSE]], [[1, TRUE], [3, TRUE], [6, FALSE], [8, FALSE], [10, FALSE], [12, FALSE], [13, TRUE]], [[1, TRUE], [3, TRUE], [6, FALSE], [8, FALSE], [10, FALSE], [12, FALSE], [14, FALSE]], [[1, TRUE], [4, FALSE], [5, TRUE], [7, TRUE], [9, TRUE], [11, TRUE], [13, TRUE]], [[1, TRUE], [4, FALSE], [5, TRUE], [7, TRUE], [9, TRUE], [11, TRUE], [14, FALSE]], [[1, TRUE], [4, FALSE], [5, TRUE], [7, TRUE], [9, TRUE], [12, FALSE], [13, TRUE]], [[1, TRUE], [4, FALSE], [5, TRUE], [7, TRUE], [9, TRUE], [12, FALSE], [14, FALSE]], [[1, TRUE], [4, FALSE], [5, TRUE], [7, TRUE], [10, FALSE], [11, TRUE], [13, TRUE]], [[1, TRUE], [4, FALSE], [5, TRUE], [7, TRUE], [10, FALSE], [11, TRUE], [14, FALSE]], [[1, TRUE], [4, FALSE], [5, TRUE], [7, TRUE], [10, FALSE], [12, FALSE], [13, TRUE]], [[1, TRUE], [4, FALSE], [5, TRUE], [7, TRUE], [10, FALSE], [12, FALSE], [14, FALSE]], [[1, TRUE], [4, FALSE], [5, TRUE], [8, FALSE], [9, TRUE], [11, TRUE], [13, TRUE]], [[1, TRUE], [4, FALSE], [5, TRUE], [8, FALSE], [9, TRUE], [11, TRUE], [14, FALSE]], [[1, TRUE], [4, FALSE], [5, TRUE], [8, FALSE], [9, TRUE], [12, FALSE], [13, TRUE]], [[1, TRUE], [4, FALSE], [5, TRUE], [8, FALSE], [9, TRUE], [12, FALSE], [14, FALSE]], [[1, TRUE], [4, FALSE], [5, TRUE], [8, FALSE], [10, FALSE], [11, TRUE], [13, TRUE]], [[1, TRUE], [4, FALSE], [5, TRUE], [8, FALSE], [10, FALSE], [11, TRUE], [14, FALSE]], [[1, TRUE], [4, FALSE], [5, TRUE], [8, FALSE], [10, FALSE], [12, FALSE], [13, TRUE]], [[1, TRUE], [4, FALSE], [5, TRUE], [8, FALSE], [10, FALSE], [12, FALSE], [14, FALSE]], [[1, TRUE], [4, FALSE], [6, FALSE], [7, TRUE], [9, TRUE], [11, TRUE], [13, TRUE]], [[1, TRUE], [4, FALSE], [6, FALSE], [7, TRUE], [9, TRUE], [11, TRUE], [14, FALSE]], [[1, TRUE], [4, FALSE], [6, FALSE], [7, TRUE], [9, TRUE], [12, FALSE], [13, TRUE]], [[1, TRUE], [4, FALSE], [6, FALSE], [7, TRUE], [9, TRUE], [12, FALSE], [14, FALSE]], [[1, TRUE], [4, FALSE], [6, FALSE], [7, TRUE], [10, FALSE], [11, TRUE], [13, TRUE]], [[1, TRUE], [4, FALSE], [6, FALSE], [7, TRUE], [10, FALSE], [11, TRUE], [14, FALSE]], [[1, TRUE], [4, FALSE], [6, FALSE], [7, TRUE], [10, FALSE], [12, FALSE], [13, TRUE]], [[1, TRUE], [4, FALSE], [6, FALSE], [7, TRUE], [10, FALSE], [12, FALSE], [14, FALSE]], [[1, TRUE], [4, FALSE], [6, FALSE], [8, FALSE], [9, TRUE], [11, TRUE], [13, TRUE]], [[1, TRUE], [4, FALSE], [6, FALSE], [8, FALSE], [9, TRUE], [11, TRUE], [14, FALSE]], [[1, TRUE], [4, FALSE], [6, FALSE], [8, FALSE], [9, TRUE], [12, FALSE], [13, TRUE]], [[1, TRUE], [4, FALSE], [6, FALSE], [8, FALSE], [9, TRUE], [12, FALSE], [14, FALSE]], [[1, TRUE], [4, FALSE], [6, FALSE], [8, FALSE], [10, FALSE], [11, TRUE], [13, TRUE]], [[1, TRUE], [4, FALSE], [6, FALSE], [8, FALSE], [10, FALSE], [11, TRUE], [14, FALSE]], [[1, TRUE], [4, FALSE], [6, FALSE], [8, FALSE], [10, FALSE], [12, FALSE], [13, TRUE]], [[1, TRUE], [4, FALSE], [6, FALSE], [8, FALSE], [10, FALSE], [12, FALSE], [14, FALSE]], [[2, FALSE], [3, TRUE], [5, TRUE], [7, TRUE], [9, TRUE], [11, TRUE], [13, TRUE]], [[2, FALSE], [3, TRUE], [5, TRUE], [7, TRUE], [9, TRUE], [11, TRUE], [14, FALSE]], [[2, FALSE], [3, TRUE], [5, TRUE], [7, TRUE], [9, TRUE], [12, FALSE], [13, TRUE]], [[2, FALSE], [3, TRUE], [5, TRUE], [7, TRUE], [9, TRUE], [12, FALSE], [14, FALSE]], [[2, FALSE], [3, TRUE], [5, TRUE], [7, TRUE], [10, FALSE], [11, TRUE], [13, TRUE]], [[2, FALSE], [3, TRUE], [5, TRUE], [7, TRUE], [10, FALSE], [11, TRUE], [14, FALSE]], [[2, FALSE], [3, TRUE], [5, TRUE], [7, TRUE], [10, FALSE], [12, FALSE], [13, TRUE]], [[2, FALSE], [3, TRUE], [5, TRUE], [7, TRUE], [10, FALSE], [12, FALSE], [14, FALSE]], [[2, FALSE], [3, TRUE], [5, TRUE], [8, FALSE], [9, TRUE], [11, TRUE], [13, TRUE]], [[2, FALSE], [3, TRUE], [5, TRUE], [8, FALSE], [9, TRUE], [11, TRUE], [14, FALSE]], [[2, FALSE], [3, TRUE], [5, TRUE], [8, FALSE], [9, TRUE], [12, FALSE], [13, TRUE]], [[2, FALSE], [3, TRUE], [5, TRUE], [8, FALSE], [9, TRUE], [12, FALSE], [14, FALSE]], [[2, FALSE], [3, TRUE], [5, TRUE], [8, FALSE], [10, FALSE], [11, TRUE], [13, TRUE]], [[2, FALSE], [3, TRUE], [5, TRUE], [8, FALSE], [10, FALSE], [11, TRUE], [14, FALSE]], [[2, FALSE], [3, TRUE], [5, TRUE], [8, FALSE], [10, FALSE], [12, FALSE], [13, TRUE]], [[2, FALSE], [3, TRUE], [5, TRUE], [8, FALSE], [10, FALSE], [12, FALSE], [14, FALSE]], [[2, FALSE], [3, TRUE], [6, FALSE], [7, TRUE], [9, TRUE], [11, TRUE], [13, TRUE]], [[2, FALSE], [3, TRUE], [6, FALSE], [7, TRUE], [9, TRUE], [11, TRUE], [14, FALSE]], [[2, FALSE], [3, TRUE], [6, FALSE], [7, TRUE], [9, TRUE], [12, FALSE], [13, TRUE]], [[2, FALSE], [3, TRUE], [6, FALSE], [7, TRUE], [9, TRUE], [12, FALSE], [14, FALSE]], [[2, FALSE], [3, TRUE], [6, FALSE], [7, TRUE], [10, FALSE], [11, TRUE], [13, TRUE]], [[2, FALSE], [3, TRUE], [6, FALSE], [7, TRUE], [10, FALSE], [11, TRUE], [14, FALSE]], [[2, FALSE], [3, TRUE], [6, FALSE], [7, TRUE], [10, FALSE], [12, FALSE], [13, TRUE]], [[2, FALSE], [3, TRUE], [6, FALSE], [7, TRUE], [10, FALSE], [12, FALSE], [14, FALSE]], [[2, FALSE], [3, TRUE], [6, FALSE], [8, FALSE], [9, TRUE], [11, TRUE], [13, TRUE]], [[2, FALSE], [3, TRUE], [6, FALSE], [8, FALSE], [9, TRUE], [11, TRUE], [14, FALSE]], [[2, FALSE], [3, TRUE], [6, FALSE], [8, FALSE], [9, TRUE], [12, FALSE], [13, TRUE]], [[2, FALSE], [3, TRUE], [6, FALSE], [8, FALSE], [9, TRUE], [12, FALSE], [14, FALSE]], [[2, FALSE], [3, TRUE], [6, FALSE], [8, FALSE], [10, FALSE], [11, TRUE], [13, TRUE]], [[2, FALSE], [3, TRUE], [6, FALSE], [8, FALSE], [10, FALSE], [11, TRUE], [14, FALSE]], [[2, FALSE], [3, TRUE], [6, FALSE], [8, FALSE], [10, FALSE], [12, FALSE], [13, TRUE]], [[2, FALSE], [3, TRUE], [6, FALSE], [8, FALSE], [10, FALSE], [12, FALSE], [14, FALSE]], [[2, FALSE], [4, FALSE], [5, TRUE], [7, TRUE], [9, TRUE], [11, TRUE], [13, TRUE]], [[2, FALSE], [4, FALSE], [5, TRUE], [7, TRUE], [9, TRUE], [11, TRUE], [14, FALSE]], [[2, FALSE], [4, FALSE], [5, TRUE], [7, TRUE], [9, TRUE], [12, FALSE], [13, TRUE]], [[2, FALSE], [4, FALSE], [5, TRUE], [7, TRUE], [9, TRUE], [12, FALSE], [14, FALSE]], [[2, FALSE], [4, FALSE], [5, TRUE], [7, TRUE], [10, FALSE], [11, TRUE], [13, TRUE]], [[2, FALSE], [4, FALSE], [5, TRUE], [7, TRUE], [10, FALSE], [11, TRUE], [14, FALSE]], [[2, FALSE], [4, FALSE], [5, TRUE], [7, TRUE], [10, FALSE], [12, FALSE], [13, TRUE]], [[2, FALSE], [4, FALSE], [5, TRUE], [7, TRUE], [10, FALSE], [12, FALSE], [14, FALSE]], [[2, FALSE], [4, FALSE], [5, TRUE], [8, FALSE], [9, TRUE], [11, TRUE], [13, TRUE]], [[2, FALSE], [4, FALSE], [5, TRUE], [8, FALSE], [9, TRUE], [11, TRUE], [14, FALSE]], [[2, FALSE], [4, FALSE], [5, TRUE], [8, FALSE], [9, TRUE], [12, FALSE], [13, TRUE]], [[2, FALSE], [4, FALSE], [5, TRUE], [8, FALSE], [9, TRUE], [12, FALSE], [14, FALSE]], [[2, FALSE], [4, FALSE], [5, TRUE], [8, FALSE], [10, FALSE], [11, TRUE], [13, TRUE]], [[2, FALSE], [4, FALSE], [5, TRUE], [8, FALSE], [10, FALSE], [11, TRUE], [14, FALSE]], [[2, FALSE], [4, FALSE], [5, TRUE], [8, FALSE], [10, FALSE], [12, FALSE], [13, TRUE]], [[2, FALSE], [4, FALSE], [5, TRUE], [8, FALSE], [10, FALSE], [12, FALSE], [14, FALSE]], [[2, FALSE], [4, FALSE], [6, FALSE], [7, TRUE], [9, TRUE], [11, TRUE], [13, TRUE]], [[2, FALSE], [4, FALSE], [6, FALSE], [7, TRUE], [9, TRUE], [11, TRUE], [14, FALSE]], [[2, FALSE], [4, FALSE], [6, FALSE], [7, TRUE], [9, TRUE], [12, FALSE], [13, TRUE]], [[2, FALSE], [4, FALSE], [6, FALSE], [7, TRUE], [9, TRUE], [12, FALSE], [14, FALSE]], [[2, FALSE], [4, FALSE], [6, FALSE], [7, TRUE], [10, FALSE], [11, TRUE], [13, TRUE]], [[2, FALSE], [4, FALSE], [6, FALSE], [7, TRUE], [10, FALSE], [11, TRUE], [14, FALSE]], [[2, FALSE], [4, FALSE], [6, FALSE], [7, TRUE], [10, FALSE], [12, FALSE], [13, TRUE]], [[2, FALSE], [4, FALSE], [6, FALSE], [7, TRUE], [10, FALSE], [12, FALSE], [14, FALSE]], [[2, FALSE], [4, FALSE], [6, FALSE], [8, FALSE], [9, TRUE], [11, TRUE], [13, TRUE]], [[2, FALSE], [4, FALSE], [6, FALSE], [8, FALSE], [9, TRUE], [11, TRUE], [14, FALSE]], [[2, FALSE], [4, FALSE], [6, FALSE], [8, FALSE], [9, TRUE], [12, FALSE], [13, TRUE]], [[2, FALSE], [4, FALSE], [6, FALSE], [8, FALSE], [9, TRUE], [12, FALSE], [14, FALSE]], [[2, FALSE], [4, FALSE], [6, FALSE], [8, FALSE], [10, FALSE], [11, TRUE], [13, TRUE]], [[2, FALSE], [4, FALSE], [6, FALSE], [8, FALSE], [10, FALSE], [11, TRUE], [14, FALSE]], [[2, FALSE], [4, FALSE], [6, FALSE], [8, FALSE], [10, FALSE], [12, FALSE], [13, TRUE]], [[2, FALSE], [4, FALSE], [6, FALSE], [8, FALSE], [10, FALSE], [12, FALSE], [14, FALSE]]]); show_p("Expecting"); show_p([[], [], [], [], [[8, 8, 0.169], [8, 9, 0.169], [9, 8, 0.169], [9, 9, 0.169], [9, 10, 0.169], [10, 9, 0.169], [10, 10, 0.169]]]); show_p(A); #endif #if 0 A = chop_and_drop(16.0, [[[0.0, 0.0, 0.0]]], false, [[[1, 1, 1], [8.000, 8.000, -140.859], [141.086, 141.086, 141.086]], [[1, 1, 1], [8.013, 7.998, 0.227], [3.527, 3.527, 3.527]]], [[[1, TRUE]], [[2, FALSE]]]); show_p("Expecting"); show_p([[], [], [], [], [[5, 5, 0.338], [4, 6, 0.338], [4, 7, 0.506], [5, 6, 0.506], [5, 7, 0.675], [6, 4, 0.338], [6, 5, 0.506], [7, 4, 0.506], [7, 5, 0.675], [6, 6, 1.506], [6, 7, 2.338], [7, 6, 2.338], [7, 7, 2.338], [4, 8, 0.506], [4, 9, 0.338], [5, 8, 0.675], [5, 9, 0.506], [5, 10, 0.338], [6, 8, 2.338], [6, 9, 1.506], [7, 8, 2.338], [7, 9, 2.338], [6, 10, 0.506], [6, 11, 0.338], [7, 10, 0.675], [7, 11, 0.506], [8, 4, 0.506], [8, 5, 0.675], [9, 4, 0.338], [9, 5, 0.506], [8, 6, 2.338], [8, 7, 2.338], [9, 6, 1.506], [9, 7, 2.338], [10, 5, 0.338], [10, 6, 0.506], [10, 7, 0.675], [11, 6, 0.338], [11, 7, 0.506], [8, 8, 2.338], [8, 9, 2.338], [9, 8, 2.338], [9, 9, 1.506], [8, 10, 0.675], [8, 11, 0.506], [9, 10, 0.506], [9, 11, 0.338], [10, 8, 0.675], [10, 9, 0.506], [11, 8, 0.506], [11, 9, 0.338], [10, 10, 0.338]]]); show_p(A); #endif #if 0 A = chop_and_drop(32.0, [[[0.0, 0.0, 0.0]]], false, [[[1.0, 1.0, 1.0], [16.000, 16.000, -451.211], [452.623, 452.623, 452.623]], [[1.0, 1.0, 1.0], [16.000, 16.000, -451.211], [451.494, 451.494, 451.494]], [[3.0, 3.0, 3.0], [16.042, 15.995, 0.284], [16.042, 15.995, 1.412], [11.287, 11.287, 11.287]], [[1.0, 1.0, 1.0], [16.000, 16.000, -451.211], [451.494, 451.494, 451.494]], [[1.0, 1.0, 1.0], [16.008, 15.999, -360.686], [361.196, 361.196, 361.196]], [[1.0, 1.0, 1.0], [16.000, 16.000, -451.211], [451.494, 451.494, 451.494]], [[1.0, 1.0, 1.0], [16.042, 15.995, 0.284], [1.129, 1.129, 1.129]], [[1.0, 1.0, 1.0], [16.000, 16.000, -451.211], [451.494, 451.494, 451.494]], [[1.0, 1.0, 1.0], [16.038, 15.996, -44.301], [45.149, 45.149, 45.149]]], [[[1, FALSE]], [[2, TRUE]], [[3, FALSE]], [[4, TRUE], [6, TRUE], [8, TRUE]], [[4, TRUE], [6, TRUE], [9, FALSE]], [[4, TRUE], [7, FALSE], [8, TRUE]], [[4, TRUE], [7, FALSE], [9, FALSE]], [[5, FALSE], [6, TRUE], [8, TRUE]], [[5, FALSE], [6, TRUE], [9, FALSE]], [[5, FALSE], [7, FALSE], [8, TRUE]], [[5, FALSE], [7, FALSE], [9, FALSE]]]); #ifdef CODE_GEN show_p("Expecting"); Ap = [[], [], [], [], [], [[5, 10, 0.169], [5, 11, 0.169], [6, 9, 0.169], [7, 8, 0.169], [7, 9, 0.169], [6, 10, 0.169], [6, 11, 0.169], [7, 10, 0.169], [7, 11, 0.169], [4, 13, 0.169], [5, 12, 0.169], [5, 13, 0.169], [4, 14, 0.169], [4, 15, 0.169], [5, 14, 0.169], [5, 15, 0.169], [6, 12, 0.169], [6, 13, 0.169], [7, 12, 0.169], [7, 13, 0.169], [6, 14, 0.169], [6, 15, 0.169], [7, 14, 0.169], [7, 15, 0.169], [8, 7, 0.169], [9, 6, 0.169], [9, 7, 0.169], [10, 5, 0.169], [11, 5, 0.169], [10, 6, 0.169], [10, 7, 0.169], [11, 6, 0.169], [11, 7, 0.169], [12, 5, 0.169], [13, 4, 0.169], [13, 5, 0.169], [12, 6, 0.169], [12, 7, 0.169], [13, 6, 0.169], [13, 7, 0.169], [14, 4, 0.169], [14, 5, 0.169], [15, 4, 0.169], [15, 5, 0.169], [14, 6, 0.169], [14, 7, 0.169], [15, 6, 0.169], [15, 7, 0.169], [8, 8, 0.169], [8, 9, 0.169], [9, 8, 0.169], [9, 9, 0.169], [8, 10, 0.169], [8, 11, 0.169], [9, 10, 0.169], [9, 11, 0.169], [10, 8, 0.169], [10, 9, 0.169], [11, 8, 0.169], [11, 9, 0.169], [10, 10, 0.169], [10, 11, 0.169], [11, 10, 0.169], [11, 11, 0.169], [8, 12, 0.169], [8, 13, 0.169], [9, 12, 0.169], [9, 13, 0.169], [8, 14, 0.169], [8, 15, 0.169], [9, 14, 0.169], [9, 15, 0.169], [10, 12, 0.169], [10, 13, 0.169], [11, 12, 0.169], [11, 13, 0.169], [10, 14, 0.169], [10, 15, 0.169], [11, 14, 0.169], [11, 15, 0.169], [12, 8, 0.169], [12, 9, 0.169], [13, 8, 0.169], [13, 9, 0.169], [12, 10, 0.169], [12, 11, 0.169], [13, 10, 0.169], [13, 11, 0.169], [14, 8, 0.169], [14, 9, 0.169], [15, 8, 0.169], [15, 9, 0.169], [14, 10, 0.169], [14, 11, 0.169], [15, 10, 0.169], [15, 11, 0.169], [12, 12, 0.169], [12, 13, 0.169], [13, 12, 0.169], [13, 13, 0.169], [12, 14, 0.169], [12, 15, 0.169], [13, 14, 0.169], [13, 15, 0.169], [14, 12, 0.169], [14, 13, 0.169], [15, 12, 0.169], [15, 13, 0.169], [14, 14, 0.338], [14, 15, 0.338], [15, 14, 0.338], [15, 15, 0.338], [4, 16, 0.169], [4, 17, 0.169], [5, 16, 0.169], [5, 17, 0.169], [4, 18, 0.169], [5, 18, 0.169], [5, 19, 0.169], [6, 16, 0.169], [6, 17, 0.169], [7, 16, 0.169], [7, 17, 0.169], [6, 18, 0.169], [6, 19, 0.169], [7, 18, 0.169], [7, 19, 0.169], [5, 20, 0.169], [5, 21, 0.169], [6, 20, 0.169], [6, 21, 0.169], [7, 20, 0.169], [7, 21, 0.169], [6, 22, 0.169], [7, 22, 0.169], [7, 23, 0.169], [8, 16, 0.169], [8, 17, 0.169], [9, 16, 0.169], [9, 17, 0.169], [8, 18, 0.169], [8, 19, 0.169], [9, 18, 0.169], [9, 19, 0.169], [10, 16, 0.169], [10, 17, 0.169], [11, 16, 0.169], [11, 17, 0.169], [10, 18, 0.169], [10, 19, 0.169], [11, 18, 0.169], [11, 19, 0.169], [8, 20, 0.169], [8, 21, 0.169], [9, 20, 0.169], [9, 21, 0.169], [8, 22, 0.169], [8, 23, 0.169], [9, 22, 0.169], [9, 23, 0.169], [10, 20, 0.169], [10, 21, 0.169], [11, 20, 0.169], [11, 21, 0.169], [10, 22, 0.169], [10, 23, 0.169], [11, 22, 0.169], [11, 23, 0.169], [12, 16, 0.169], [12, 17, 0.169], [13, 16, 0.169], [13, 17, 0.169], [12, 18, 0.169], [12, 19, 0.169], [13, 18, 0.169], [13, 19, 0.169], [14, 16, 0.338], [14, 17, 0.338], [15, 16, 0.338], [15, 17, 0.338], [14, 18, 0.169], [14, 19, 0.169], [15, 18, 0.169], [15, 19, 0.169], [12, 20, 0.169], [12, 21, 0.169], [13, 20, 0.169], [13, 21, 0.169], [12, 22, 0.169], [12, 23, 0.169], [13, 22, 0.169], [13, 23, 0.169], [14, 20, 0.169], [14, 21, 0.169], [15, 20, 0.169], [15, 21, 0.169], [14, 22, 0.169], [14, 23, 0.169], [15, 22, 0.169], [15, 23, 0.169], [8, 24, 0.169], [9, 24, 0.169], [9, 25, 0.169], [10, 24, 0.169], [10, 25, 0.169], [11, 24, 0.169], [11, 25, 0.169], [10, 26, 0.169], [11, 26, 0.169], [12, 24, 0.169], [12, 25, 0.169], [13, 24, 0.169], [13, 25, 0.169], [12, 26, 0.169], [13, 26, 0.169], [13, 27, 0.169], [14, 24, 0.169], [14, 25, 0.169], [15, 24, 0.169], [15, 25, 0.169], [14, 26, 0.169], [14, 27, 0.169], [15, 26, 0.169], [15, 27, 0.169], [16, 4, 0.169], [16, 5, 0.169], [17, 4, 0.169], [17, 5, 0.169], [16, 6, 0.169], [16, 7, 0.169], [17, 6, 0.169], [17, 7, 0.169], [18, 4, 0.169], [18, 5, 0.169], [19, 5, 0.169], [18, 6, 0.169], [18, 7, 0.169], [19, 6, 0.169], [19, 7, 0.169], [20, 5, 0.169], [21, 5, 0.169], [20, 6, 0.169], [20, 7, 0.169], [21, 6, 0.169], [21, 7, 0.169], [22, 6, 0.169], [22, 7, 0.169], [23, 7, 0.169], [16, 8, 0.169], [16, 9, 0.169], [17, 8, 0.169], [17, 9, 0.169], [16, 10, 0.169], [16, 11, 0.169], [17, 10, 0.169], [17, 11, 0.169], [18, 8, 0.169], [18, 9, 0.169], [19, 8, 0.169], [19, 9, 0.169], [18, 10, 0.169], [18, 11, 0.169], [19, 10, 0.169], [19, 11, 0.169], [16, 12, 0.169], [16, 13, 0.169], [17, 12, 0.169], [17, 13, 0.169], [16, 14, 0.338], [16, 15, 0.338], [17, 14, 0.338], [17, 15, 0.338], [18, 12, 0.169], [18, 13, 0.169], [19, 12, 0.169], [19, 13, 0.169], [18, 14, 0.169], [18, 15, 0.169], [19, 14, 0.169], [19, 15, 0.169], [20, 8, 0.169], [20, 9, 0.169], [21, 8, 0.169], [21, 9, 0.169], [20, 10, 0.169], [20, 11, 0.169], [21, 10, 0.169], [21, 11, 0.169], [22, 8, 0.169], [22, 9, 0.169], [23, 8, 0.169], [23, 9, 0.169], [22, 10, 0.169], [22, 11, 0.169], [23, 10, 0.169], [23, 11, 0.169], [20, 12, 0.169], [20, 13, 0.169], [21, 12, 0.169], [21, 13, 0.169], [20, 14, 0.169], [20, 15, 0.169], [21, 14, 0.169], [21, 15, 0.169], [22, 12, 0.169], [22, 13, 0.169], [23, 12, 0.169], [23, 13, 0.169], [22, 14, 0.169], [22, 15, 0.169], [23, 14, 0.169], [23, 15, 0.169], [24, 7, 0.169], [24, 8, 0.169], [24, 9, 0.169], [25, 9, 0.169], [24, 10, 0.169], [24, 11, 0.169], [25, 10, 0.169], [25, 11, 0.169], [26, 10, 0.169], [26, 11, 0.169], [24, 12, 0.169], [24, 13, 0.169], [25, 12, 0.169], [25, 13, 0.169], [24, 14, 0.169], [24, 15, 0.169], [25, 14, 0.169], [25, 15, 0.169], [26, 12, 0.169], [26, 13, 0.169], [27, 12, 0.169], [27, 13, 0.169], [26, 14, 0.169], [26, 15, 0.169], [27, 14, 0.169], [27, 15, 0.169], [16, 16, 0.338], [16, 17, 0.338], [17, 16, 0.338], [17, 17, 0.338], [16, 18, 0.169], [16, 19, 0.169], [17, 18, 0.169], [17, 19, 0.169], [18, 16, 0.169], [18, 17, 0.169], [19, 16, 0.169], [19, 17, 0.169], [18, 18, 0.169], [18, 19, 0.169], [19, 18, 0.169], [19, 19, 0.169], [16, 20, 0.169], [16, 21, 0.169], [17, 20, 0.169], [17, 21, 0.169], [16, 22, 0.169], [16, 23, 0.169], [17, 22, 0.169], [17, 23, 0.169], [18, 20, 0.169], [18, 21, 0.169], [19, 20, 0.169], [19, 21, 0.169], [18, 22, 0.169], [18, 23, 0.169], [19, 22, 0.169], [19, 23, 0.169], [20, 16, 0.169], [20, 17, 0.169], [21, 16, 0.169], [21, 17, 0.169], [20, 18, 0.169], [20, 19, 0.169], [21, 18, 0.169], [21, 19, 0.169], [22, 16, 0.169], [22, 17, 0.169], [23, 16, 0.169], [23, 17, 0.169], [22, 18, 0.169], [22, 19, 0.169], [23, 18, 0.169], [23, 19, 0.169], [20, 20, 0.169], [20, 21, 0.169], [21, 20, 0.169], [21, 21, 0.169], [20, 22, 0.169], [20, 23, 0.169], [21, 22, 0.169], [21, 23, 0.169], [22, 20, 0.169], [22, 21, 0.169], [23, 20, 0.169], [23, 21, 0.169], [22, 22, 0.169], [22, 23, 0.169], [23, 22, 0.169], [23, 23, 0.169], [16, 24, 0.169], [16, 25, 0.169], [17, 24, 0.169], [17, 25, 0.169], [16, 26, 0.169], [16, 27, 0.169], [17, 26, 0.169], [17, 27, 0.169], [18, 24, 0.169], [18, 25, 0.169], [19, 24, 0.169], [19, 25, 0.169], [18, 26, 0.169], [18, 27, 0.169], [19, 26, 0.169], [20, 24, 0.169], [20, 25, 0.169], [21, 24, 0.169], [21, 25, 0.169], [20, 26, 0.169], [21, 26, 0.169], [22, 24, 0.169], [22, 25, 0.169], [23, 24, 0.169], [24, 16, 0.169], [24, 17, 0.169], [25, 16, 0.169], [25, 17, 0.169], [24, 18, 0.169], [24, 19, 0.169], [25, 18, 0.169], [25, 19, 0.169], [26, 16, 0.169], [26, 17, 0.169], [27, 16, 0.169], [27, 17, 0.169], [26, 18, 0.169], [26, 19, 0.169], [27, 18, 0.169], [27, 19, 0.169], [24, 20, 0.169], [24, 21, 0.169], [25, 20, 0.169], [25, 21, 0.169], [24, 22, 0.169], [24, 23, 0.169], [25, 22, 0.169], [26, 20, 0.169], [26, 21, 0.169]]]; show_p(Ap); #endif CODE_GEN show_p(A); #endif #if 0 A = chop_and_drop(16, [[[0, 0, 0]]], false, [[[1, 1, 1], [8.000, 8.000, -353.426], [353.605, 353.605, 353.605]], [[1, 1, 1], [8.000, 8.000, -353.426], [353.517, 353.517, 353.517]], [[3, 3, 3], [8.000, 7.999, 0.091], [8.000, 7.999, 0.179], [3.535, 3.535, 3.535]], [[1, 1, 1], [8.000, 8.000, -353.426], [353.605, 353.605, 353.605]], [[1, 1, 1], [8.000, 8.000, -353.426], [353.517, 353.517, 353.517]], [[3, 3, 3], [2.866, 13.590, 0.009], [2.865, 13.591, 0.097], [1.768, 1.768, 1.768]], [[1, 1, 1], [8.000, 8.000, -353.426], [353.561, 353.561, 353.561]], [[1, 1, 1], [8.000, 8.000, -353.426], [353.517, 353.517, 353.517]], [[3, 3, 3], [2.866, 13.590, 0.009], [2.865, 13.591, 0.053], [7.954, 7.954, 7.954]], [[1, 1, 1], [8.000, 8.000, -353.426], [353.518, 353.518, 353.518]], [[1, 1, 1], [8.000, 8.000, -353.426], [353.517, 353.517, 353.517]], [[3, 3, 3], [2.866, 13.590, 0.009], [2.866, 13.590, 0.010], [7.954, 7.954, 7.954]]], [[[1, FALSE]], [[2, TRUE]], [[3, FALSE]], [[4, FALSE], [7, FALSE]], [[4, FALSE], [8, TRUE]], [[4, FALSE], [9, FALSE]], [[4, FALSE], [10, TRUE], [11, FALSE], [12, TRUE]], [[5, TRUE], [7, FALSE]], [[5, TRUE], [8, TRUE]], [[5, TRUE], [9, FALSE]], [[5, TRUE], [10, TRUE], [11, FALSE], [12, TRUE]], [[6, FALSE], [7, FALSE]], [[6, FALSE], [8, TRUE]], [[6, FALSE], [9, FALSE]], [[6, FALSE], [10, TRUE], [11, FALSE], [12, TRUE]]]); Ap = [[], [], [], [], [[5, 5, 0.169], [4, 6, 0.169], [4, 7, 0.169], [5, 6, 0.169], [5, 7, 0.169], [6, 6, 0.169], [6, 7, 0.169], [7, 6, 0.169], [7, 7, 0.169], [4, 8, 0.169], [4, 9, 0.169], [5, 8, 0.169], [5, 9, 0.169], [5, 10, 0.169], [6, 8, 0.169], [6, 9, 0.169], [7, 8, 0.169], [7, 9, 0.169], [6, 10, 0.169], [6, 11, 0.169], [7, 10, 0.169], [7, 11, 0.169], [8, 7, 0.169], [8, 8, 0.169], [8, 9, 0.169], [9, 8, 0.169], [9, 9, 0.169], [8, 10, 0.169], [8, 11, 0.169], [9, 10, 0.169], [9, 11, 0.169], [10, 10, 0.169]]]; show_p(A); show_p(Ap); #endif