diff --git a/README.md b/README.md index b0314243..aeca5d4c 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# dotSCAD 1.3 +# dotSCAD 2 (RC) -> Reduce the burden of 3D modeling in mathematics. Compatible with OpenSCAD 2015.03 or laters. +> **Reduce the burden of 3D modeling in mathematics. Based on OpenSCAD 2019.05.** -![dotSCAD](WhirlingTaiwan.JPG) +![dotSCAD](TaiwaneseBlackBear.JPG) [![license/LGPL](https://img.shields.io/badge/license-LGPL-blue.svg)](https://github.com/JustinSDK/lib-openscad/blob/master/LICENSE) @@ -16,6 +16,16 @@ Every module or function is located in the file which has the same name as the m line2d(p1 = [0, 0], p2 = [5, 0], width = 1); +Some module files are organized in a directory. For example, px_circle.scad exists in `pixel` directory. You have to prefix the directory name when including `px_circle`. + + include ; + points = px_circle(radius = 10); + for(pt = points) { + translate(pt) square(1); + } + +## Dependencies + Some modules depend on other modules. For example, the `polyline2d` module depends on the `line2d` module, so you also have to `include ;` besides `include ;`. include ; @@ -23,11 +33,11 @@ Some modules depend on other modules. For example, the `polyline2d` module depen polyline2d(points = [[1, 2], [-5, -4], [-5, 3], [5, 5]], width = 1); -If OpenSCAD generates "WARNING: Ignoring unknown xxx function" or "WARNING: Ignoring unknown xxx module" when using one module of dotSCAD. Just try to `include ;`. +If OpenSCAD generates "WARNING: Ignoring unknown xxx function" or "WARNING: Ignoring unknown xxx module" when using one module of dotSCAD. Just try to `include ;` or `include ` if xxx.scad exists in `dir` directory. Too many dependencies? Because OpenSCAD doesn't provide namespace management, I personally think that exposing dependencies is better than hiding them. In this way, users can have their own way to manage dependencies. How to categorize dependencies is up to you. For example, you can include your commonly-used modules and functions in "commonly_used.scad" and then `include ;` in the ".scad" file of your project. -If you really don't want to care about dependencies, `include ;` or `use ;` come to save you. +**If you really don't want to care about dependencies, `include ;` or `use ;` come to save you.** ## Documentation @@ -63,12 +73,9 @@ If you really don't want to care about dependencies, `include ;` o - Functon - [rotate_p](https://openhome.cc/eGossip/OpenSCAD/lib-rotate_p.html) - - [sub_str](https://openhome.cc/eGossip/OpenSCAD/lib-sub_str.html) - - [split_str](https://openhome.cc/eGossip/OpenSCAD/lib-split_str.html) - - [parse_number](https://openhome.cc/eGossip/OpenSCAD/lib-parse_number.html) - [cross_sections](https://openhome.cc/eGossip/OpenSCAD/lib-cross_sections.html) - [paths2sections](https://openhome.cc/eGossip/OpenSCAD/lib-paths2sections.html) - - [path_scaling_sections](https://openhome.cc/eGossip/OpenSCAD/lib-path_scaling_sections.html) + - [path_scaling_sections](https://openhome.cc/eGossip/OpenSCAD/lib2-path_scaling_sections.html) - [bijection_offset](https://openhome.cc/eGossip/OpenSCAD/lib-bijection_offset.html) - [in_polyline](https://openhome.cc/eGossip/OpenSCAD/lib-in_polyline.html) - [in_shape](https://openhome.cc/eGossip/OpenSCAD/lib-in_shape.html) @@ -117,19 +124,34 @@ If you really don't want to care about dependencies, `include ;` o - [archimedean_spiral_extrude](https://openhome.cc/eGossip/OpenSCAD/lib-archimedean_spiral_extrude.html) - [sphere_spiral_extrude](https://openhome.cc/eGossip/OpenSCAD/lib-sphere_spiral_extrude.html) +- Utilities + - [util/sub_str](https://openhome.cc/eGossip/OpenSCAD/lib2-sub_str.html) + - [util/split_str](https://openhome.cc/eGossip/OpenSCAD/lib2-split_str.html) + - [util/parse_number](https://openhome.cc/eGossip/OpenSCAD/lib2-parse_number.html) + - [util/reverse](https://openhome.cc/eGossip/OpenSCAD/lib2-reverse.html) + - [util/slice](https://openhome.cc/eGossip/OpenSCAD/lib2-slice.html) + - [util/sort](https://openhome.cc/eGossip/OpenSCAD/lib2-sort.html) + - Matrix - - [m_cumulate](https://openhome.cc/eGossip/OpenSCAD/lib-m_cumulate.html) - - [m_translation](https://openhome.cc/eGossip/OpenSCAD/lib-m_translation.html) - - [m_rotation](https://openhome.cc/eGossip/OpenSCAD/lib-m_rotation.html) - - [m_scaling](https://openhome.cc/eGossip/OpenSCAD/lib-m_scaling.html) - - [m_mirror](https://openhome.cc/eGossip/OpenSCAD/lib-m_mirror.html) - - [m_shearing](https://openhome.cc/eGossip/OpenSCAD/lib-m_shearing.html) + - [matrix/m_cumulate](https://openhome.cc/eGossip/OpenSCAD/lib2-m_cumulate.html) + - [matrix/m_translation](https://openhome.cc/eGossip/OpenSCAD/lib2-m_translation.html) + - [matrix/m_rotation](https://openhome.cc/eGossip/OpenSCAD/lib2-m_rotation.html) + - [matrix/m_scaling](https://openhome.cc/eGossip/OpenSCAD/lib2-m_scaling.html) + - [matrix/m_mirror](https://openhome.cc/eGossip/OpenSCAD/lib2-m_mirror.html) + - [matrix/m_shearing](https://openhome.cc/eGossip/OpenSCAD/lib2-m_shearing.html) -- Other - - [turtle2d](https://openhome.cc/eGossip/OpenSCAD/lib-turtle2d.html) - - [turtle3d](https://openhome.cc/eGossip/OpenSCAD/lib-turtle3d.html) - - [log](https://openhome.cc/eGossip/OpenSCAD/lib-log.html) +- Turtle + - [turtle/turtle2d](https://openhome.cc/eGossip/OpenSCAD/lib2-turtle2d.html) + - [turtle/turtle3d](https://openhome.cc/eGossip/OpenSCAD/lib2-turtle3d.html) +- Pixel + - [pixel/px_line](https://openhome.cc/eGossip/OpenSCAD/lib2-px_line.html) + - [pixel/px_polyline](https://openhome.cc/eGossip/OpenSCAD/lib2-px_polyline.html) + - [pixel/px_circle](https://openhome.cc/eGossip/OpenSCAD/lib2-px_circle.html) + - [pixel/px_cylinder](https://openhome.cc/eGossip/OpenSCAD/lib2-px_cylinder.html) + - [pixel/px_sphere](https://openhome.cc/eGossip/OpenSCAD/lib2-px_sphere.html) + - [pixel/px_polygon](https://openhome.cc/eGossip/OpenSCAD/lib2-px_polygon.html) + ## Bugs and Feedback For bugs, questions and discussions please use the [Github Issues](https://github.com/JustinSDK/dotSCAD/issues). diff --git a/RELEASE.md b/RELEASE.md index 16f2767f..313be215 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,5 +1,23 @@ > Version numbers are based on [Semantic Versioning](https://semver.org/). +# v2.0 +- Use new features of OpenSCAD-2019.05 to refactor internal implementation. +- Delete the `log` module which is never used. +- Directory changed. + - `m_cumulate`, `m_mirror`, `m_rotation`, `m_scaling`, `m_shearing` and `m_translation` are moved into the `matrix` directory. + - `turtle2d` and `turtle3d` are moved into the `turtle` directory. + - `parse_number`, `split_str` and `sub_str` are moved into the `util` directory. +- New modules and functions. + - [pixel/px_line](https://openhome.cc/eGossip/OpenSCAD/lib2-px_line.html) + - [pixel/px_polyline](https://openhome.cc/eGossip/OpenSCAD/lib2-px_polyline.html) + - [pixel/px_circle](https://openhome.cc/eGossip/OpenSCAD/lib2-px_circle.html) + - [pixel/px_cylinder](https://openhome.cc/eGossip/OpenSCAD/lib2-px_cylinder.html) + - [pixel/px_sphere](https://openhome.cc/eGossip/OpenSCAD/lib2-px_sphere.html) + - [pixel/px_polygon](https://openhome.cc/eGossip/OpenSCAD/lib2-px_polygon.html) + - [util/reverse](https://openhome.cc/eGossip/OpenSCAD/lib2-reverse.html) + - [util/slice](https://openhome.cc/eGossip/OpenSCAD/lib2-slice.html) + - [util/sort](https://openhome.cc/eGossip/OpenSCAD/lib2-sort.html) + # v1.3.3 - Bugfixes - `in_shape`: Wrong variable name. diff --git a/TaiwaneseBlackBear.JPG b/TaiwaneseBlackBear.JPG new file mode 100644 index 00000000..034759f2 Binary files /dev/null and b/TaiwaneseBlackBear.JPG differ diff --git a/all/dotSCAD.scad b/all/dotSCAD.scad index f26a1e46..939a7d0d 100644 --- a/all/dotSCAD.scad +++ b/all/dotSCAD.scad @@ -27,6 +27,7 @@ include ; include ; include ; include ; +<<<<<<< HEAD include ; include ; include ; @@ -37,6 +38,10 @@ include ; include ; include ; include ; +======= +include ; +include ; +>>>>>>> v2 include ; include ; include ; @@ -66,6 +71,7 @@ include ; include ; include ; include ; +<<<<<<< HEAD include ; include ; include ; @@ -76,4 +82,33 @@ include ; include ; include ; include ; -include ; \ No newline at end of file +include ; +======= +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +>>>>>>> v2 diff --git a/docs/images/lib2-px_circle-1.JPG b/docs/images/lib2-px_circle-1.JPG new file mode 100644 index 00000000..271049cc Binary files /dev/null and b/docs/images/lib2-px_circle-1.JPG differ diff --git a/docs/images/lib2-px_circle-2.JPG b/docs/images/lib2-px_circle-2.JPG new file mode 100644 index 00000000..9c0908ee Binary files /dev/null and b/docs/images/lib2-px_circle-2.JPG differ diff --git a/docs/images/lib2-px_cylinder-1.JPG b/docs/images/lib2-px_cylinder-1.JPG new file mode 100644 index 00000000..cc67dd68 Binary files /dev/null and b/docs/images/lib2-px_cylinder-1.JPG differ diff --git a/docs/images/lib2-px_cylinder-2.JPG b/docs/images/lib2-px_cylinder-2.JPG new file mode 100644 index 00000000..fcfd565c Binary files /dev/null and b/docs/images/lib2-px_cylinder-2.JPG differ diff --git a/docs/images/lib2-px_line-1.JPG b/docs/images/lib2-px_line-1.JPG new file mode 100644 index 00000000..e7fa7f50 Binary files /dev/null and b/docs/images/lib2-px_line-1.JPG differ diff --git a/docs/images/lib2-px_line-2.JPG b/docs/images/lib2-px_line-2.JPG new file mode 100644 index 00000000..dc99811c Binary files /dev/null and b/docs/images/lib2-px_line-2.JPG differ diff --git a/docs/images/lib2-px_polygon-1.JPG b/docs/images/lib2-px_polygon-1.JPG new file mode 100644 index 00000000..bc5928be Binary files /dev/null and b/docs/images/lib2-px_polygon-1.JPG differ diff --git a/docs/images/lib2-px_polyline-1.JPG b/docs/images/lib2-px_polyline-1.JPG new file mode 100644 index 00000000..cc2a2e85 Binary files /dev/null and b/docs/images/lib2-px_polyline-1.JPG differ diff --git a/docs/images/lib2-px_polyline-2.JPG b/docs/images/lib2-px_polyline-2.JPG new file mode 100644 index 00000000..302b2ed4 Binary files /dev/null and b/docs/images/lib2-px_polyline-2.JPG differ diff --git a/docs/images/lib2-px_sphere-1.JPG b/docs/images/lib2-px_sphere-1.JPG new file mode 100644 index 00000000..3d823a20 Binary files /dev/null and b/docs/images/lib2-px_sphere-1.JPG differ diff --git a/docs/lib-archimedean_spiral_extrude.md b/docs/lib-archimedean_spiral_extrude.md index 41e5e3b3..6929701d 100644 --- a/docs/lib-archimedean_spiral_extrude.md +++ b/docs/lib-archimedean_spiral_extrude.md @@ -4,8 +4,6 @@ Extrudes a 2D shape along the path of an archimedean spiral. When using this module, you should use points to represent the 2D shape. If your 2D shape is not solid, indexes of triangles are required. See [polysections](https://openhome.cc/eGossip/OpenSCAD/lib-polysections.html) for details. -Dependencies: `rotate_p`, `archimedean_spiral`, `cross_sections`, `polysections`. - ## Parameters - `shape_pts` : A list of points represent a shape. See the example below. diff --git a/docs/lib-bezier_smooth.md b/docs/lib-bezier_smooth.md index 4ab9057d..99daef6c 100644 --- a/docs/lib-bezier_smooth.md +++ b/docs/lib-bezier_smooth.md @@ -2,8 +2,6 @@ Given a path, the `bezier_smooth` function uses bazier curves to smooth all corners. You can use it to create smooth lines or rounded shapes. -Dependencies: the `bezier_curve` function. - ## Parameters - `path_pts` : A list of points represent the path. diff --git a/docs/lib-bezier_surface.md b/docs/lib-bezier_surface.md index 494dbce6..ad969885 100644 --- a/docs/lib-bezier_surface.md +++ b/docs/lib-bezier_surface.md @@ -2,8 +2,6 @@ Given a set of control points, the `bezier_surface` function returns points of the Bézier surface. Combined with the `function_grapher` module defined in my library, you can create a Bézier surface. -It depends on the `bezier_curve` function so remember to include bezier_curve.scad. - ## Parameters - `t_step` : The distance between two points of the Bézier path. diff --git a/docs/lib-cross_sections.md b/docs/lib-cross_sections.md index d04def35..c52d6266 100644 --- a/docs/lib-cross_sections.md +++ b/docs/lib-cross_sections.md @@ -2,8 +2,6 @@ Given a 2D shape, points and angles along the path, this function will return all cross-sections. Combined with the `polysections` module, you can create a specific path extrusion. -It depends on the `rotate_p` function. Remember to include "rotate_p.scad". - ## Parameters - `shape_pts`: A list of points represent a shape. See the example below. diff --git a/docs/lib-crystal_ball.md b/docs/lib-crystal_ball.md index c8c193c4..a5c7b076 100644 --- a/docs/lib-crystal_ball.md +++ b/docs/lib-crystal_ball.md @@ -4,8 +4,6 @@ Uses spherical coordinate system to create a crystal ball. ![Spherical coordinates (r, θ, φ) often used in mathematics](https://upload.wikimedia.org/wikipedia/commons/d/dc/3D_Spherical_2.svg) -Dependencies: `rotate_p`, `cross_sections`, `polysections`, `ring_extrude`, `shape_pie`. - ## Parameters - `radius` : The radial distance r. diff --git a/docs/lib-function_grapher.md b/docs/lib-function_grapher.md index a313adc6..ec8e8180 100644 --- a/docs/lib-function_grapher.md +++ b/docs/lib-function_grapher.md @@ -2,8 +2,6 @@ Given a set of points `[x, y, f(x, y)]` where `f(x, y)` is a mathematics function, the `function_grapher` module can create the graph of `f(x, y)`. -It depends on the `line3d`, `polyline3d`, `hull_polyline3d` modules so you have to include "line3d.scad", "polyline3d.scad" and "hull_polyline3d.scad". - ## Parameters - `points` : A set of points `[x, y, f(x, y)]`. See examples below. diff --git a/docs/lib-golden_spiral.md b/docs/lib-golden_spiral.md index 6968de9f..fbc22fae 100644 --- a/docs/lib-golden_spiral.md +++ b/docs/lib-golden_spiral.md @@ -4,8 +4,6 @@ Gets all points and angles on the path of a golden spiral based on Fibonacci num It returns a vector of `[[x, y], angle]`. -Because of depending on `circle_path` and `rotate_p`, remember to include "circle_path.scad" and "rotate_p.scad". - ## Parameters - `from` : The nth Fibonacci number you wanna start from. diff --git a/docs/lib-golden_spiral_extrude.md b/docs/lib-golden_spiral_extrude.md index 64bead22..b5c6b100 100644 --- a/docs/lib-golden_spiral_extrude.md +++ b/docs/lib-golden_spiral_extrude.md @@ -4,8 +4,6 @@ Extrudes a 2D shape along the path of a golden spiral. When using this module, you should use points to represent the 2D shape. If your 2D shape is not solid, indexes of triangles are required. See [polysections](https://openhome.cc/eGossip/OpenSCAD/lib-polysections.html) for details. -Dependencies: `circle_path`, `rotate_p`, `golden_spiral`, `cross_sections`, `polysections`. - ## Parameters - `shape_pts` : A list of points represent a shape. See the example below. diff --git a/docs/lib-helix_extrude.md b/docs/lib-helix_extrude.md index 7e0b2a89..3951a134 100644 --- a/docs/lib-helix_extrude.md +++ b/docs/lib-helix_extrude.md @@ -6,8 +6,6 @@ When using this module, you should use points to represent the 2D shape. If your Its `$fa`, `$fs` and `$fn` parameters are consistent with the `cylinder` module. -Dependencies: `helix`, `rotate_p`, `cross_sections`, `polysections`. - ## Parameters - `shape_pts` : A list of points represent a shape. See the example below. diff --git a/docs/lib-log.md b/docs/lib-log.md deleted file mode 100644 index d60249d7..00000000 --- a/docs/lib-log.md +++ /dev/null @@ -1,46 +0,0 @@ -# log - -A log module which supports simple level configurations and color titles. - -## Parameters - -- `$log_level` : The accepted values are `"OFF"` (-1), `"INFO"` (20), - `"WARNING"` (30), `"ERROR"` (40) or positive integers. The default value is `"INFO"`. -- `level` : The accepted values are `"OFF"` (-1), `"INFO"` (20), - `"WARNING"` (30), `"ERROR"` (40) or positive integers. If the value is greater or equal to `$log_level`, the `echo` message will display in the console. -- `level_color` : Controls the color of level title. It accepts the same values as the CSS `color` property. - -## Examples - - include ; - - log() - echo(" INFO message"); - - log("WARNING") - echo(" WARNING message"); - - log("ERROR") { - echo(" ERROR message 1"); - echo(" ERROR message 2"); - } - -![log](images/lib-log-1.JPG) - - include ; - - $log_level = "WARNING"; - - log() - echo(" INFO message"); - - log("WARNING", "purple") - echo(" WARNING message"); - - log("ERROR", "rgb(255, 100, 100)") { - echo(" ERROR message 1"); - echo(" ERROR message 2"); - } - -![log](images/lib-log-2.JPG) - diff --git a/docs/lib-parse_number.md b/docs/lib-parse_number.md deleted file mode 100644 index 4312a01d..00000000 --- a/docs/lib-parse_number.md +++ /dev/null @@ -1,16 +0,0 @@ -# parse_number - -Parses the string argument as an number. It depends on the `split_str` and the `sub_str` functions so remember to include split_str.scad and sub_str.scad. - -## Parameters - -- `t` : A string containing the number representation to be parsed. - -## Examples - - include ; - include ; - include ; - - echo(parse_number("10") + 1); // ECHO: 11 - echo(parse_number("-1.1") + 1); // ECHO: -0.1 diff --git a/docs/lib-path_extrude.md b/docs/lib-path_extrude.md index edd92bbc..c8425f9f 100644 --- a/docs/lib-path_extrude.md +++ b/docs/lib-path_extrude.md @@ -2,8 +2,6 @@ It extrudes a 2D shape along a path. This module is suitable for a path created by a continuous function. -It depends on the `rotate_p` function and the `polysections` module. Remember to include "rotate_p.scad" and "polysections.scad". - When using this module, you should use points to represent the 2D shape. If your 2D shape is not solid, indexes of triangles are required. See [polysections](https://openhome.cc/eGossip/OpenSCAD/lib-polysections.html) for details. ## Parameters diff --git a/docs/lib-polyline2d.md b/docs/lib-polyline2d.md index 98d4e560..b7674673 100644 --- a/docs/lib-polyline2d.md +++ b/docs/lib-polyline2d.md @@ -1,6 +1,6 @@ # polyline2d -Creates a polyline from a list of `x`, `y` coordinates. When the end points are `CAP_ROUND`, you can use `$fa`, `$fs` or `$fn` to controll the circle module used internally. It depends on the `line2d` module so you have to `include` line2d.scad. +Creates a polyline from a list of `x`, `y` coordinates. When the end points are `CAP_ROUND`, you can use `$fa`, `$fs` or `$fn` to controll the circle module used internally. ## Parameters diff --git a/docs/lib-polyline3d.md b/docs/lib-polyline3d.md index ef6f1614..ac123ffb 100644 --- a/docs/lib-polyline3d.md +++ b/docs/lib-polyline3d.md @@ -1,6 +1,6 @@ # polyline3d -Creates a polyline from a list of `[x, y, z]` coordinates. It depends on the `line3d` module so you have to `include` line3d.scad. +Creates a polyline from a list of `[x, y, z]` coordinates. ## Parameters diff --git a/docs/lib-ring_extrude.md b/docs/lib-ring_extrude.md index fe88e3c4..823f9dfc 100644 --- a/docs/lib-ring_extrude.md +++ b/docs/lib-ring_extrude.md @@ -4,8 +4,6 @@ Rotational extrusion spins a 2D shape around the Z-axis. It's similar to the bui Because we cannot retrieve the shape points of built-in 2D modules, it's necessary to provide `shapt_pts` and `triangles`. -This module depends on `rotate_p`, `cross_section` and `polysections`. Remember to include corresponding ".scad". - If your 2D shape is not solid, indexes of triangles are required. See [polysections](https://openhome.cc/eGossip/OpenSCAD/lib-polysections.html) for details. ## Parameters diff --git a/docs/lib-shape_glued2circles.md b/docs/lib-shape_glued2circles.md index e9894500..1568fb2b 100644 --- a/docs/lib-shape_glued2circles.md +++ b/docs/lib-shape_glued2circles.md @@ -2,8 +2,6 @@ Returns shape points of two glued circles. They can be used with xxx_extrude modules of dotSCAD. The shape points can be also used with the built-in polygon module. -Dependencies: `rotate_p`, `bezier_curve`, `shape_pie`. - ## Parameters - `radius` : The radius of two circles. diff --git a/docs/lib-shape_path_extend.md b/docs/lib-shape_path_extend.md index af34bbac..f9fc36b0 100644 --- a/docs/lib-shape_path_extend.md +++ b/docs/lib-shape_path_extend.md @@ -4,8 +4,6 @@ It extends a 2D stroke along a path to create a 2D shape. This module is suitabl When using this function, you should use points to represent the 2D stroke. -It depends on the `rotate_p` function. Remember to include "rotate_p.scad". - ## Parameters - `stroke_pts` : A list of points represent a stroke. See the example below. diff --git a/docs/lib-sphere_spiral.md b/docs/lib-sphere_spiral.md index 9b776716..2c6adde2 100644 --- a/docs/lib-sphere_spiral.md +++ b/docs/lib-sphere_spiral.md @@ -1,6 +1,6 @@ # sphere_spiral -Creates all points and angles on the path of a spiral around a sphere. It returns a vector of `[[x, y, z], [ax, ay, az]]`. `[x, y, z]` is actually obtained from rotating `[radius, 0, 0]` by `[ax, ay, az]`. It depends on the `rotate_p` function. Remember to include rotate_p.scad first. +Creates all points and angles on the path of a spiral around a sphere. It returns a vector of `[[x, y, z], [ax, ay, az]]`. `[x, y, z]` is actually obtained from rotating `[radius, 0, 0]` by `[ax, ay, az]`. ## Parameters diff --git a/docs/lib-sphere_spiral_extrude.md b/docs/lib-sphere_spiral_extrude.md index 44f5d17a..53ceea4b 100644 --- a/docs/lib-sphere_spiral_extrude.md +++ b/docs/lib-sphere_spiral_extrude.md @@ -4,8 +4,6 @@ Extrudes a 2D shape along the path of a sphere spiral. When using this module, you should use points to represent the 2D shape. If your 2D shape is not solid, indexes of triangles are required. See [polysections](https://openhome.cc/eGossip/OpenSCAD/lib-polysections.html) for details. -Dependencies: `rotate_p`, `sphere_spiral`, `cross_sections`, `polysections`. - ## Parameters - `shape_pts` : A list of points represent a shape. See the example below. diff --git a/docs/lib-m_cumulate.md b/docs/lib2-m_cumulate.md similarity index 72% rename from docs/lib-m_cumulate.md rename to docs/lib2-m_cumulate.md index ff1b604e..207cd103 100644 --- a/docs/lib-m_cumulate.md +++ b/docs/lib2-m_cumulate.md @@ -6,14 +6,16 @@ The power of using transformation matrice is that you can cumulate all transform ## Parameters +The dir changed since 2.0. + - `matrice` : A list of 4x4 transformation matrice. ## Examples - include ; - include ; - include ; - include + include ; + include ; + include ; + include m = m_cumulate([ m_translation([10, 20, 10]), m_scaling(2), m_rotation(60)] diff --git a/docs/lib2-m_mirror.md b/docs/lib2-m_mirror.md new file mode 100644 index 00000000..744649c0 --- /dev/null +++ b/docs/lib2-m_mirror.md @@ -0,0 +1,25 @@ +# m_mirror + +The dir changed since 2.0. + +Generate a 4x4 transformation matrix which can pass into `multmatrix` to mirror the child element on a plane through the origin. + +**Since:** 1.1 + +## Parameters + +- `v` : The normal vector of a plane intersecting the origin through which to mirror the object. + +## Examples + + include ; + + rotate([0, 0, 10]) + cube([3, 2, 1]); + + multmatrix(m_mirror([1, 1, 0])) + rotate([0, 0, 10]) + cube([3, 2, 1]); + +![m_mirror](images/lib-m_mirror-1.JPG) + diff --git a/docs/lib-m_rotation.md b/docs/lib2-m_rotation.md similarity index 94% rename from docs/lib-m_rotation.md rename to docs/lib2-m_rotation.md index 5fc24248..b546dd98 100644 --- a/docs/lib-m_rotation.md +++ b/docs/lib2-m_rotation.md @@ -1,5 +1,7 @@ # m_rotation +The dir changed since 2.0. + Generate a 4x4 transformation matrix which can pass into `multmatrix` to rotate the child element about the axis of the coordinate system or around an arbitrary axis. **Since:** 1.1 @@ -11,7 +13,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to rotate ## Examples - include ; + include ; point = [20, 0, 0]; a = [0, -45, 45]; diff --git a/docs/lib-m_scaling.md b/docs/lib2-m_scaling.md similarity index 85% rename from docs/lib-m_scaling.md rename to docs/lib2-m_scaling.md index ad695763..f4c13ce3 100644 --- a/docs/lib-m_scaling.md +++ b/docs/lib2-m_scaling.md @@ -1,5 +1,7 @@ # m_scaling +The dir changed since 2.0. + Generate a 4x4 transformation matrix which can pass into `multmatrix` to scale its child elements using the specified vector. **Since:** 1.1 @@ -10,7 +12,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to scale i ## Examples - include ; + include ; cube(10); translate([15, 0, 0]) diff --git a/docs/lib-m_shearing.md b/docs/lib2-m_shearing.md similarity index 95% rename from docs/lib-m_shearing.md rename to docs/lib2-m_shearing.md index 6f3a6868..de7e07d2 100644 --- a/docs/lib-m_shearing.md +++ b/docs/lib2-m_shearing.md @@ -1,5 +1,7 @@ # m_shearing +The dir changed since 2.0. + Generate a 4x4 transformation matrix which can pass into `multmatrix` to shear all child elements along the X-axis, Y-axis, or Z-axis in 3D. **Since:** 1.1 @@ -12,7 +14,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to shear a ## Examples - include ; + include ; color("red") { multmatrix(m_shearing(sx = [1, 0])) diff --git a/docs/lib-m_translation.md b/docs/lib2-m_translation.md similarity index 85% rename from docs/lib-m_translation.md rename to docs/lib2-m_translation.md index e8bed044..9efd52f0 100644 --- a/docs/lib-m_translation.md +++ b/docs/lib2-m_translation.md @@ -1,5 +1,7 @@ # m_translation +The dir changed since 2.0. + Generate a 4x4 transformation matrix which can pass into `multmatrix` to translates (moves) its child elements along the specified vector. **Since:** 1.1 @@ -10,7 +12,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to transla ## Examples - include ; + include ; cube(2, center = true); multmatrix(m_translation([5, 0, 0])) diff --git a/docs/lib2-parse_number.md b/docs/lib2-parse_number.md new file mode 100644 index 00000000..95a0c861 --- /dev/null +++ b/docs/lib2-parse_number.md @@ -0,0 +1,18 @@ +# parse_number + +The dir changed since 2.0. + +Parses the string argument as an number. + +## Parameters + +- `t` : A string containing the number representation to be parsed. + +## Examples + + include ; + include ; + include ; + + echo(parse_number("10") + 1); // ECHO: 11 + echo(parse_number("-1.1") + 1); // ECHO: -0.1 diff --git a/docs/lib-path_scaling_sections.md b/docs/lib2-path_scaling_sections.md similarity index 96% rename from docs/lib-path_scaling_sections.md rename to docs/lib2-path_scaling_sections.md index e8392b3e..ce393a37 100644 --- a/docs/lib-path_scaling_sections.md +++ b/docs/lib2-path_scaling_sections.md @@ -18,7 +18,6 @@ You can use any point as the first point of the edge path. Just remember that yo include ; include ; include ; - include ; include ; taiwan = shape_taiwan(100); @@ -42,7 +41,6 @@ You can use any point as the first point of the edge path. Just remember that yo include ; include ; include ; - include ; include ; include ; @@ -67,7 +65,6 @@ You can use any point as the first point of the edge path. Just remember that yo include ; include ; - include ; include ; include ; include ; @@ -105,7 +102,6 @@ You can use any point as the first point of the edge path. Just remember that yo include ; include ; include ; - include ; include ; include ; diff --git a/docs/lib2-px_circle.md b/docs/lib2-px_circle.md new file mode 100644 index 00000000..18d5e16b --- /dev/null +++ b/docs/lib2-px_circle.md @@ -0,0 +1,32 @@ +# px_circle + +Returns points that can be used to draw a pixel-style circle. + +**Since:** 2.0 + +## Parameters + +- `radius` : The circle radius. The value must be an integer. +- `filled` : Default to `false`. Set it `true` if you want a filled circle. + +## Examples + + include ; + + for(pt = px_circle(10)) { + translate(pt) + square(1, center = true); + } + +![px_circle](images/lib2-px_circle-1.JPG) + + include ; + + for(pt = px_circle(10, filled = true)) { + translate(pt) + linear_extrude(1, scale = 0.5) + square(1, center = true); + } + +![px_circle](images/lib2-px_circle-2.JPG) + diff --git a/docs/lib2-px_cylinder.md b/docs/lib2-px_cylinder.md new file mode 100644 index 00000000..dd26b81f --- /dev/null +++ b/docs/lib2-px_cylinder.md @@ -0,0 +1,33 @@ +# px_cylinder + +Returns points that can be used to draw a pixel-style cylinder. + +**Since:** 2.0 + +## Parameters + +- `radius` : The radius of the cylinder. It also accepts a vector `[r1, r2]`. `r1` is the bottom radius and `r2` is the top radius of a cone. Values must be an integer. +- `h` : The height of the cylinder or cone. +- `filled` : Default to `false`. Set it `true` if you want a filled cylinder. +- `thickness`: Default to 1. The thickness when `filled` is `false`. The value must be an integer. + +## Examples + + include ; + + for(pt = px_cylinder([10, 15], 10)) { + translate(pt) + cube(1, center = true); + } + +![px_cylinder](images/lib2-px_cylinder-1.JPG) + + include ; + + for(pt = px_cylinder([20, 15], h = 10, thickness = 3)) { + translate(pt) + cube(1, center = true); + } + +![px_cylinder](images/lib2-px_cylinder-2.JPG) + diff --git a/docs/lib2-px_line.md b/docs/lib2-px_line.md new file mode 100644 index 00000000..284b9ca7 --- /dev/null +++ b/docs/lib2-px_line.md @@ -0,0 +1,31 @@ +# px_line + +Given two points. `px_line` returns points that can be used to draw a pixel-style line. + +**Since:** 2.0 + +## Parameters + +- `p1` : The start point `[x, y]` or `[x, y, z]`. x, y, z must be integer. +- `p2` : The end point `[x, y]` or `[x, y, z]`. x, y, z must be integer. + +## Examples + + include ; + + for(pt = px_line([-10, 0], [20, 50])) { + translate(pt) + square(1, center = true); + } + +![px_line](images/lib2-px_line-1.JPG) + + include ; + + for(pt = px_line([-10, 0, -10], [20, 50, 10])) { + translate(pt) + cube(1, center = true); + } + +![px_line](images/lib2-px_line-2.JPG) + diff --git a/docs/lib2-px_polygon.md b/docs/lib2-px_polygon.md new file mode 100644 index 00000000..1e326d91 --- /dev/null +++ b/docs/lib2-px_polygon.md @@ -0,0 +1,39 @@ +# px_polygon + +Returns points that can be used to draw a pixel-style polygon. + +**Since:** 2.0 + +## Parameters + +- `points` : A list of points. Each point can be `[x, y]`. x, y must be integer. +- `filled` : Default to `false`. Set it `true` if you want a filled polygon. + +## Examples + + include ; + include ; + include ; + include ; + include ; + + pentagram = [ + for(pt = shape_pentagram(15)) + [round(pt[0]), round(pt[1])] + ]; + + for(pt = px_polygon(pentagram)) { + translate(pt) + linear_extrude(1, scale = 0.5) + square(1, center = true); + } + + translate([30, 0]) + for(pt = px_polygon(pentagram, filled = true)) { + translate(pt) + linear_extrude(1, scale = 0.5) + square(1, center = true); + } + +![px_polygon](images/lib2-px_polygon-1.JPG) + diff --git a/docs/lib2-px_polyline.md b/docs/lib2-px_polyline.md new file mode 100644 index 00000000..220be428 --- /dev/null +++ b/docs/lib2-px_polyline.md @@ -0,0 +1,55 @@ +# px_polyline + +Given a list of points. `px_polyline` returns points that can be used to draw a pixel-style polyline. + +**Since:** 2.0 + +## Parameters + +- `points` : A list of points. Each point can be `[x, y]` or `[x, y, z]`. x, y, z must be integer. + +## Examples + + include ; + include ; + include ; + + pentagram = [ + for(pt = shape_pentagram(15)) + [round(pt[0]), round(pt[1])] + ]; + + for(pt = px_polyline(concat(pentagram, [pentagram[0]]))) { + translate(pt) + linear_extrude(1, scale = 0.5) + square(1, center = true); + } + +![px_polyline](images/lib2-px_polyline-1.JPG) + + include ; + include ; + include ; + include ; + + points_angles = sphere_spiral( + radius = 20, + za_step = 5 + ); + + points = [ + for(pa = points_angles) + let(pt = pa[0]) + [round(pt[0]), round(pt[1]), round(pt[2])] + ]; + + for(a = [0:30:330]) { + rotate(a) + for(pt = px_polyline(points)) { + translate(pt) + cube(1, center = true); + } + } + +![px_polyline](images/lib2-px_polyline-2.JPG) + diff --git a/docs/lib2-px_sphere.md b/docs/lib2-px_sphere.md new file mode 100644 index 00000000..5dcec60c --- /dev/null +++ b/docs/lib2-px_sphere.md @@ -0,0 +1,22 @@ +# px_sphere + +Returns points that can be used to draw a pixel-style sphere. + +**Since:** 2.0 + +## Parameters + +- `radius` : The radius of the sphere. The value must be an integer. +- `filled` : Default to `false`. Set it `true` if you want a filled sphere. +- `thickness`: Default to 1. The thickness when `filled` is `false`. The value must be an integer. + +## Examples + + include ; + + for(pt = px_sphere(10)) { + translate(pt) + cube(1, center = true); + } + +![px_sphere](images/lib2-px_sphere-1.JPG) diff --git a/docs/lib2-reverse.md b/docs/lib2-reverse.md new file mode 100644 index 00000000..fc8c7696 --- /dev/null +++ b/docs/lib2-reverse.md @@ -0,0 +1,16 @@ +# reverse + +Reverse a list. + +**Since: **: 2.0 + +## Parameters + +- `lt` : The list to be reversed. + +## Examples + + include ; + + echo(reverse([1, 2, 3])); // ECHO: [3, 2, 1] + diff --git a/docs/lib2-slice.md b/docs/lib2-slice.md new file mode 100644 index 00000000..6e656f45 --- /dev/null +++ b/docs/lib2-slice.md @@ -0,0 +1,18 @@ +# slice + +Returns a list selected from `begin` to `end`, or to the `end` of the list (`end` not included). + +**Since:** 2.0 + +## Parameters + +- `lt` : The original list. +- `begin` : The beginning index, inclusive. +- `end` : The ending index, exclusive. If it's omitted, the list begins with the character at the specified `begin` and extends to the end of the original list. + +## Examples + + include ; + + echo(slice([for(c = "helloworld") c], 0, 5)); // ECHO: ["h", "e", "l", "l", "o"] + echo(slice([for(c = "helloworld") c], 5)); // ECHO: ["w", "o", "r", "l", "d"] diff --git a/docs/lib2-sort.md b/docs/lib2-sort.md new file mode 100644 index 00000000..5d674771 --- /dev/null +++ b/docs/lib2-sort.md @@ -0,0 +1,32 @@ +# sort + +Sorts the elements of a list in ascending order. The list is a list-of-list construct, such as `[[a0, a1, a2...], [b0, b1, b2,...], [c0, c1, c2,...],...]`. When sorting, the function looks only at one index position of each sublist. + +**Since:** 2.0 + +## Parameters + +- `lt` : The original list. +- `by` : Can be `"x"`、`"y"`、`"z"`, or `"idx"` (Default). +- `idx` : When `by` is `"idx"`, the value of `idx` is used. The Default value is 0. + +## Examples + + include ; + + assert( + [[2, 0, 0], [5, 0, 0], [7, 0, 0], [9, 0, 0], [10, 0, 0]] == + sort([[10, 0, 0], [5, 0, 0], [7, 0, 0], [2, 0, 0], [9, 0, 0]]) + ); + + assert( + [[2, 0, 0], [5, 0, 0], [7, 0, 0], [9, 0, 0], [10, 0, 0]] == + sort([[10, 0, 0], [5, 0, 0], [7, 0, 0], [2, 0, 0], [9, 0, 0]], by = "x") + ); + + assert( + [[0, 2, 0], [0, 5, 0], [0, 7, 0], [0, 9, 0], [0, 10, 0]] == + sort([[0, 10, 0], [0, 5, 0], [0, 7, 0], [0, 2, 0], [0, 9, 0]], by = "idx", idx = 1) + ); + + diff --git a/docs/lib-split_str.md b/docs/lib2-split_str.md similarity index 63% rename from docs/lib-split_str.md rename to docs/lib2-split_str.md index fcbba9ef..d1d12636 100644 --- a/docs/lib-split_str.md +++ b/docs/lib2-split_str.md @@ -1,6 +1,8 @@ # split_str -Splits the given string around matches of the given delimiting character. It depeneds on the `sub_str` function so remember to `include `. +The dir changed since 2.0. + +Splits the given string around matches of the given delimiting character. ## Parameters @@ -9,8 +11,8 @@ Splits the given string around matches of the given delimiting character. It dep ## Examples - include ; - include ; + include ; + include ; echo(split_str("hello,world", ",")); // ECHO: ["hello", "world"] diff --git a/docs/lib-sub_str.md b/docs/lib2-sub_str.md similarity index 70% rename from docs/lib-sub_str.md rename to docs/lib2-sub_str.md index 2d565eae..a3d01e6a 100644 --- a/docs/lib-sub_str.md +++ b/docs/lib2-sub_str.md @@ -1,6 +1,8 @@ # sub_str -Returns a new string that is a substring of the given string. +The dir changed since 2.0. + +Returns the part of the string from `begin` to `end`, or to the `end` of the string (`end` not included). ## Parameters @@ -10,7 +12,7 @@ Returns a new string that is a substring of the given string. ## Examples - include ; + include ; echo(sub_str("helloworld", 0, 5)); // ECHO: "hello" echo(sub_str("helloworld", 5)); // ECHO: "world" diff --git a/docs/lib-turtle2d.md b/docs/lib2-turtle2d.md similarity index 97% rename from docs/lib-turtle2d.md rename to docs/lib2-turtle2d.md index 90112e45..71c844c1 100644 --- a/docs/lib-turtle2d.md +++ b/docs/lib2-turtle2d.md @@ -1,5 +1,7 @@ # turtle2d +The dir changed since 2.0. + An OpenSCAD implementation of Turtle Graphics. It moves on the xy plane. You can get the cooridinate `[x, y]` or `angle` of its current position. ## Parameters @@ -16,7 +18,7 @@ An OpenSCAD implementation of Turtle Graphics. It moves on the xy plane. You can ## Examples include ; - include ; + include ; module turtle_spiral(t_before, times, side_leng, angle, width) { $fn = 24; @@ -47,7 +49,7 @@ An OpenSCAD implementation of Turtle Graphics. It moves on the xy plane. You can ![turtle2d](images/lib-turtle2d-1.JPG) include ; - include ; + include ; module turtle_spiral(t_before, side_leng, d_step, min_leng, angle, width) { $fn = 24; diff --git a/docs/lib-turtle3d.md b/docs/lib2-turtle3d.md similarity index 97% rename from docs/lib-turtle3d.md rename to docs/lib2-turtle3d.md index 32028c54..dbe41c60 100644 --- a/docs/lib-turtle3d.md +++ b/docs/lib2-turtle3d.md @@ -1,11 +1,11 @@ # turtle3d +The dir changed since 2.0. + An OpenSCAD implementation of 3D Turtle Graphics. When using the function, imagine that you are sitting on the turtle. You move or turn the turtle from the your viewpoint, not the viewpoint of OpenSCAD coordinates. For more details, please see [3D turtle graphics](https://openhome.cc/eGossip/OpenSCAD/3DTurtleGraphics.html). - - ## Parameters - `cmd` : A string command. Different commands use different numbers of arguments. @@ -17,7 +17,7 @@ For more details, please see [3D turtle graphics](https://openhome.cc/eGossip/Op ## Examples - include ; + include ; include ; leng = 10; @@ -47,7 +47,7 @@ For more details, please see [3D turtle graphics](https://openhome.cc/eGossip/Op ![turtle3d](images/lib-turtle3d-1.JPG) - include ; + include ; include ; module tree(t, leng, leng_scale1, leng_scale2, leng_limit, diff --git a/examples/TaiwaneseBlackBear.scad b/examples/TaiwaneseBlackBear.scad new file mode 100644 index 00000000..8e30937a --- /dev/null +++ b/examples/TaiwaneseBlackBear.scad @@ -0,0 +1,47 @@ +include ; +include ; +include ; +include ; +include ; +include ; +include ; + +module blocks(points) { + for(pt = points) { + translate(pt) + cube(1, center = true); + } +} + +// Well, quick and dirty!! +color("MediumSeaGreen") + translate([3, -5, -27]) + for(pt = px_polygon([for(p = shape_taiwan(92, distance = 1)) [round(p[0]), round(p[1])]], filled = true)) { + translate(pt) + linear_extrude(1, scale = 0.5) + square(1, center = true); + } + +color(c = [0.3, 0.3, 0.3]) { + blocks(px_sphere(10)); + translate([7, 0, 9]) blocks(px_sphere(3)); + translate([-7, 0, 9]) blocks(px_sphere(3)); + translate([0, 0, -13]) blocks(px_sphere(12)); + translate([6, 0, -26]) blocks(px_cylinder([3, 4], 6)); + translate([-6, 0, -26]) blocks(px_cylinder([3, 4], 6)) + translate([10, 0, -13]) cube([6, 5, 10], center = true); + translate([-10, 0, -13]) cube([6, 5, 10], center = true); +} +color("white") { + translate([3, -7, 2]) blocks(px_sphere(2)); + translate([-3, -7, 2]) blocks(px_sphere(2)); + translate([0, -7, 0]) blocks(px_sphere(3)); + translate([0, -9, -4]) blocks(px_sphere(1)); + blocks(px_polyline([[0, -12, -10], [5, -9, -7], [8, -6, -6]])); + blocks(px_polyline([[0, -12, -10], [5, -9, -8], [8, -6, -7]])); + blocks(px_polyline([[0, -12, -10], [5, -9, -9], [8, -6, -8]])); + blocks(px_polyline([[0, -12, -10], [5, -9, -9], [8, -6, -8]])); + blocks(px_polyline([[0, -12, -10], [-5, -9, -7], [-8, -6, -6]])); + blocks(px_polyline([[0, -12, -10], [-5, -9, -8], [-8, -6, -7]])); + blocks(px_polyline([[0, -12, -10], [-5, -9, -9], [-8, -6, -8]])); +} \ No newline at end of file diff --git a/examples/dancing_taiwan.scad b/examples/dancing_taiwan.scad new file mode 100644 index 00000000..9d803909 --- /dev/null +++ b/examples/dancing_taiwan.scad @@ -0,0 +1,69 @@ +include ; +include ; +include ; +include ; +include ; +include ; +include ; + +x1 = 4; // [-20:4] +x2 = 3; // [-20:4] +x3 = 4; // [-20:4] +y1 = 20; +y2 = 40; +y3 = 90; +twist = -90; +t_step = 0.1; + +module dancing_formosan(x1, x2, x3, y1, y2, y3, twist, t_step) { + + function cal_sections(shapt_pts, edge_path, twist) = + let( + sects = path_scaling_sections(shapt_pts, edge_path), + leng = len(sects), + twist_step = twist / leng + ) + [ + for(i = [0:leng - 1]) + [ + for(p = sects[i]) + rotate_p(p, twist_step * i) + ] + ]; + + taiwan = shape_taiwan(100, 0.6); + fst_pt = [13, 0, 0]; + + edge_path = bezier_curve(t_step, [ + fst_pt, + fst_pt + [0, 0, 10], + fst_pt + [x1, 0, y1], + fst_pt + [x2, 0, 35], + fst_pt + [x3, 0, y2], + fst_pt + [0, 0, 55], + fst_pt + [0, 0, y3] + ]); + + + offseted = bijection_offset(taiwan, -2); + + edge_path2 = [for(p = edge_path) p + [-2, 0, 0]]; + taiwan2 = trim_shape(offseted, 1, len(offseted) - 4); + + sections = cal_sections(taiwan, edge_path, twist); + sections2 = cal_sections(taiwan2, edge_path2, twist); + + difference() { + polysections(sections); + polysections(sections2); + } + + translate([0, 0, -2]) + linear_extrude(2) + rotate(twist - twist / len(sections)) + polygon(taiwan); + +} + +dancing_formosan(x1, x2, x3, y1, y2, y3, twist, t_step); + diff --git a/examples/klein_bottle.scad b/examples/klein_bottle.scad new file mode 100644 index 00000000..31d2cfaf --- /dev/null +++ b/examples/klein_bottle.scad @@ -0,0 +1,126 @@ +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; + +radius1 = 10; +radius2 = 20; +bottom_height = 60; +thickness = 1.5; +t_step = 0.025; +fn = 24; +cut = false; // [true,false] + +module klein_bottle(radius1, radius2, bottom_height, thickness, t_step, fn) { + $fn = fn; + + module bottom() { + rotate(180) rotate_extrude() { + + + translate([radius1 + radius2, 0, 0]) + polyline2d( + arc_path(radius = radius2, angle = [180, 360]) + ,thickness + ); + + polyline2d( + bezier_curve(t_step, [ + [radius1 + radius2 * 2, 0, 0], + [radius1 + radius2 * 2, bottom_height * 0.25, 0], + [radius1 + radius2 * 0.5, bottom_height * 0.5, 0], + [radius1, bottom_height * 0.75, 0], + [radius1, bottom_height, 0] + ]), + thickness + ); + } + } + + module tube() { + + mid_pts = [ + [0, 0, bottom_height + radius1], + [0, 0, bottom_height + radius1 * 2], + [0, radius1, bottom_height + radius1 * 3], + [0, radius1 * 2, bottom_height + radius1 * 3], + [0, radius1 * 3, bottom_height + radius1 * 3], + [0, radius1 * 4, bottom_height + radius1 * 2], + [0, radius1 * 4, bottom_height + radius1], + [0, radius1 * 4, bottom_height], + [0, radius1 * 3, bottom_height - radius1], + [0, radius1 * 2, bottom_height - radius1 * 2], + [0, radius1, bottom_height + thickness / 2 - radius1 * 3], + [0, 0, bottom_height - radius1 * 4], + [0, 0, bottom_height - radius1 * 5] + ]; + + tube_path = bezier_curve( + t_step, + concat( + concat([[0, 0, bottom_height]], mid_pts), + [[0, 0, 0]] + ) + ); + + tube_path2 = bezier_curve( + t_step, + concat( + concat([[0, 0, bottom_height - thickness]], mid_pts), + [[0, 0, -thickness] ] + ) + ); + + difference() { + union() { + bottom(); + + path_extrude( + circle_path(radius1 + thickness / 2), + tube_path + ); + } + + path_extrude( + circle_path(radius1 - thickness / 2), + tube_path2 + ); + } + + } + + tube(); +} + +module cutted_klein_bottle(radius1, radius2, bottom_height, thickness, t_step, fn) { + difference() { + union() { + translate([radius2 + thickness, 0, 0]) + rotate([0, 90, 0]) klein_bottle(radius1, radius2, bottom_height, thickness, t_step, fn); + translate([-radius2 - thickness, 0, 0]) + rotate([0, -90, 0]) klein_bottle(radius1, radius2, bottom_height, thickness, t_step, fn); + + + } + + h = (radius1 + radius2) * 2; + w = 2 * h; + l = bottom_height * 4; + translate([0, 0, h / 2]) + cube([l, w, h], center = true); + } +} + +if(cut) { + cutted_klein_bottle(radius1, radius2, bottom_height, thickness, t_step, fn); +} else { + klein_bottle(radius1, radius2, bottom_height, thickness, t_step, fn); +} + + + + diff --git a/examples/knot.scad b/examples/knot.scad new file mode 100644 index 00000000..ac0dd9ab --- /dev/null +++ b/examples/knot.scad @@ -0,0 +1,21 @@ +include ; +include ; +include ; +include ; +include ; + +p = 2; +q = 3; +phi_step = 0.05; +star_radius = 0.5; + +pts = torus_knot(p, q, phi_step); + +shape_pentagram_pts = shape_pentagram(star_radius); + +path_extrude( + shape_pentagram_pts, + concat(pts, [pts[0]]), + closed = true, + method = "EULER_ANGLE" +); diff --git a/examples/pixel_vase.scad b/examples/pixel_vase.scad new file mode 100644 index 00000000..5457ff55 --- /dev/null +++ b/examples/pixel_vase.scad @@ -0,0 +1,44 @@ +include ; +include ; +include ; +include ; + +x1 = 5; +x2 = 20; +x3 = 8; +thickness = 1; + +module pixel_vase(x1, x2, x3, thickness) { + p0 = [x1, 0, 0]; + p1 = [10, 0, 4]; + p2 = [x2, 0, 8]; + p3 = [3, 0, 20]; + p4 = [x3, 0, 30]; + + rounded_points = [for(pt = bezier_curve(0.1, + [p0, p1, p2, p3, p4] + )) [round(pt[0]), round(pt[1]), round(pt[2])]]; + + px_path = px_polyline(rounded_points); + leng = len(px_path); + + for(p = px_cylinder(px_path[0][0], 1, true)) { + linear_extrude(1) union() { + translate([p[0], p[1]]) + square(1.1, center = true); + } + } + + for(i = [0:leng - 1]) { + r = px_path[i][0]; + for(p = px_cylinder(r, 1, thickness = thickness)) { + translate([0, 0, i]) + linear_extrude(1) union() { + translate([p[0], p[1]]) + square(1.1, center = true); + } + } + } +} + +pixel_vase(x1, x2, x3, thickness); \ No newline at end of file diff --git a/examples/stereographic_projection.scad b/examples/stereographic_projection.scad new file mode 100644 index 00000000..c10b6e11 --- /dev/null +++ b/examples/stereographic_projection.scad @@ -0,0 +1,25 @@ +include ; + +rows = 8; +line_width = 15; +block_width = 50; + +module grid(rows, block_width, line_width) { + half_side_length = (block_width * rows + line_width) / 2; + + translate([-half_side_length, -half_side_length]) + for(i = [0:rows]) { + translate([0, i * block_width, 0]) + square([block_width * rows, line_width]); + + translate([i * block_width, 0, 0]) + square([line_width, block_width * rows + line_width]); + } +} + +stereographic_extrude(block_width * rows + line_width, $fn = 48) + grid(rows, block_width, line_width); + +if($preview) { + color("black") grid(rows, block_width, line_width); + } \ No newline at end of file diff --git a/examples/superformula_vase.scad b/examples/superformula_vase.scad new file mode 100644 index 00000000..bd97032c --- /dev/null +++ b/examples/superformula_vase.scad @@ -0,0 +1,72 @@ +include ; +include ; +include ; +include ; +include ; +include ; +include ; + +/* [Superformula] */ +phi_step = 0.025; +m = 8; +n = 5; +n3 = 8; + +/* [Offset] */ +d = 0.1; + +/* [Curve] */ +r1 = 1; +r2 = 2; +h1 = 5; +h2 = 8; +t_step = 0.025; +twist = 90; + +module superformula_vase(phi_step, m, n, n3, d, r1, r2, h1, h2, t_step, twist) { + + function cal_sections(shapt_pts, edge_path, twist) = + let( + sects = path_scaling_sections(shapt_pts, edge_path), + leng = len(sects), + twist_step = twist / leng + ) + [ + for(i = [0:leng - 1]) + [ + for(p = sects[i]) + rotate_p(p, twist_step * i) + ] + ]; + + superformula = shape_superformula(phi_step, m, m, n, n, n3); + + edge_path = bezier_curve(t_step, [ + [1, 0, 0], + [4, 0, 3], + [2, 0, 4], + [r1, 0, h1], + [1, 0, 6], + [r2, 0, h2], + ]); + + offseted = bijection_offset(superformula, d); + + edge_path2 = [for(p = edge_path) p + [d, 0, 0]]; + superformula2 = trim_shape(offseted, 3, len(offseted) - 1, epsilon = 0.0001); + + sections = cal_sections(superformula, edge_path, twist); + outer_sections = cal_sections(superformula2, edge_path2, twist); + + difference() { + polysections(outer_sections); + polysections(sections); + } + + linear_extrude(d) + rotate(twist - twist / len(sections)) + polygon(superformula2); +} + +superformula_vase(phi_step, m, n, n3, d, r1, r2, h1, h2, t_step, twist); + \ No newline at end of file diff --git a/examples/text_sphere.scad b/examples/text_sphere.scad new file mode 100644 index 00000000..fb15340c --- /dev/null +++ b/examples/text_sphere.scad @@ -0,0 +1,58 @@ +include ; +include ; +include ; +include ; +include ; + +tx = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989"; +font_name = "Liberation Sans:style=Bold Italic"; +thickness = 2; + +module text_sphere(tx, font_name, thickness) { + $fn = 24; + radius = 40; + za_step = 360 / $fn; + z_circles = 48; + begin_angle = 720; + end_angle = 630; + + half_thickness = thickness / 2; + + points_angles = sphere_spiral( + radius = radius, + za_step = za_step, + z_circles = z_circles, + begin_angle = begin_angle, + end_angle = end_angle + ); + + rotate(-180 / $fn) sphere_spiral_extrude( + [ + [thickness, half_thickness], + [-half_thickness, half_thickness], + [-half_thickness, -half_thickness], + [thickness, -half_thickness] + ], + radius = radius, + za_step = za_step, + z_circles = z_circles, + begin_angle = begin_angle, + end_angle = end_angle + ); + + + for(i = [0:len(points_angles) - 1]) { + pa = points_angles[i]; + translate(pa[0]) rotate(pa[1] + [0, 8, 0]) + rotate([90, 0, 90]) + linear_extrude(half_thickness) + translate([0, -10, 0]) + text(tx[i], font = font_name, halign = "center"); + } + + translate([0, 0, -radius]) + linear_extrude(thickness * 2.5) + circle(radius / 2); +} + + text_sphere(tx, font_name, thickness); \ No newline at end of file diff --git a/examples/text_tower.scad b/examples/text_tower.scad new file mode 100644 index 00000000..5067a068 --- /dev/null +++ b/examples/text_tower.scad @@ -0,0 +1,61 @@ +include ; +include ; +include ; +include ; +include ; + +tx = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989"; +font_name = "Liberation Sans:style=Bold Italic"; +radius = 60; +height = 150; +thickness = 2; + +module text_tower(tx, font_name, radius, height, thickness) { + + font_size = 2 * PI * radius / $fn; + angle_step = 360 / $fn; + half_angle_step = angle_step / 2; + half_thickness = thickness / 2; + + module body() { + points = helix( + radius = radius, + levels = height / font_size, + level_dist = font_size, + vt_dir = "SPI_DOWN" + ); + for(i = [0:len(points) - 1]) { + translate(points[i]) + rotate([90, 0, 90 + angle_step * i]) + linear_extrude(thickness, center = true) + text( + tx[i], + font = font_name, + size = font_size, + halign = "center" + ); + } + + rotate(-half_angle_step) + helix_extrude( + [ + [thickness, half_thickness], + [-thickness, half_thickness], + [-thickness, -half_thickness], + [thickness, -half_thickness] + ], + radius = radius, + levels = height / font_size + 1, + level_dist = font_size, + vt_dir = "SPI_DOWN" + ); + } + + translate([0, 0, -font_size - half_thickness]) + body(); + rotate(-half_angle_step) + translate([0, 0, -font_size - thickness]) + cylinder(h = font_size, r = radius + thickness); +} + +text_tower(tx, font_name, radius, height, thickness, $fn = 24); \ No newline at end of file diff --git a/examples/tree.scad b/examples/tree.scad new file mode 100644 index 00000000..edecb013 --- /dev/null +++ b/examples/tree.scad @@ -0,0 +1,38 @@ +include ; +include ; + +module tree(t, leng, leng_scale1, leng_scale2, leng_limit, + angleZ, angleX, width) { + if(leng > leng_limit) { + t2 = turtle3d("xu_move", t, leng); + + line3d( + turtle3d("pt", t), turtle3d("pt", t2), + width); + + tree( + turtle3d("zu_turn", t2, angleZ), + leng * leng_scale1, leng_scale1, leng_scale2, leng_limit, + angleZ, angleX, + width); + + tree( + turtle3d("xu_turn", t2, angleX), + leng * leng_scale2, leng_scale1, leng_scale2, leng_limit, + angleZ, angleX, + width); + } +} + +leng = 100; +leng_limit = 1; +leng_scale1 = 0.4; +leng_scale2 = 0.9; +angleZ = 60; +angleX = 135; +width = 2; + +t = turtle3d("create"); + +tree(t, leng, leng_scale1, leng_scale2, leng_limit, + angleZ, angleX, width); \ No newline at end of file diff --git a/examples/voronoi_bracelet.scad b/examples/voronoi_bracelet.scad new file mode 100644 index 00000000..9db5647c --- /dev/null +++ b/examples/voronoi_bracelet.scad @@ -0,0 +1,40 @@ +include ; +include ; +include ; + +r = 35; +height = 35; +thickness = 2.5; +n = 25; +frags = 24; +offset_r = 0.5; +region_type = "square"; // [square, circle] + +module voronoi_bracelet(r, height, thickness, n, frags, offset_r, region_type) { + $fn = 12; + + x = 2 * PI * r - thickness; + y = height; + + xs = rands(0, x, n); + ys = rands(0, y, n); + + points = [for(i = [0: len(xs) - 1]) [xs[i], ys[i]]]; + + bend_extrude( + size = [x, y], + thickness = thickness, + angle = 360 * (1 - thickness / (2 * PI * r)), + frags = frags + ) + { + difference() { + square([x, y]); + voronoi2d(points, spacing = thickness, r = offset_r, region_type = region_type); + } + hollow_out(thickness * 1.5) + square([x, y]); + } +} + +voronoi_bracelet(r, height, thickness, n, frags, offset_r, region_type); diff --git a/examples/voronoi_vase.scad b/examples/voronoi_vase.scad new file mode 100644 index 00000000..860486b1 --- /dev/null +++ b/examples/voronoi_vase.scad @@ -0,0 +1,69 @@ +include ; +include ; +include ; +include ; + +r = 13; +h = 60; +thickness = 2; +num_of_pts = 16; +fn = 6; +profile_step = 0.1; + +module voronoi_vase(r, h, thickness, num_of_pts, fn, profile_step) { + + profile = bezier_curve(profile_step, [ + [r, 0, 0], + [r, 0, h / 6], + [r + 10, 0, h / 4], + [r + 18, 0, h * 0.4], + [r + 10, 0, h / 2], + [r, 0, h * 2 / 3], + [r + 2, 0, h] + ]); + + + a_step = 360 / fn; + sections = [ + for(pt = profile) [ + for(i = [0:fn - 1]) + let(r = pt[0], z = pt[2], a = a_step * i) + [r * cos(a), r * sin(a), z] + ] + ]; + + pts = [for(sect = sections) each sect]; + indices = rands(0, len(pts) - 1, num_of_pts - 4); + + last_section_i = len(sections) - 1; + half_fn = fn * 0.5; + + + + sxy = (r * 0.95 - thickness * 0.5) / r; + + difference() { + scale([0.95, 0.95, 1]) + polysections(sections); + scale([0.85, 0.85, 1]) + polysections(sections); + intersection() { + polysections(sections); + render() + voronoi3d(concat([for(i = indices) pts[i]], [sections[0][0], sections[0][half_fn], sections[last_section_i][0], sections[last_section_i][half_fn]])); + } + } + + linear_extrude(thickness) + polygon([for(pt = sections[0]) [pt[0], pt[1]]]); + + translate([0, 0, h]) + linear_extrude(thickness) + hollow_out(thickness) + polygon([for(pt = sections[last_section_i]) [pt[0], pt[1]]]); + + + +} +voronoi_vase(r, h, thickness, num_of_pts, fn, profile_step); + \ No newline at end of file diff --git a/src/__private__/__angy_angz.scad b/src/__comm__/__angy_angz.scad similarity index 75% rename from src/__private__/__angy_angz.scad rename to src/__comm__/__angy_angz.scad index cbc605bf..480b758e 100644 --- a/src/__private__/__angy_angz.scad +++ b/src/__comm__/__angy_angz.scad @@ -3,6 +3,6 @@ function __angy_angz(p1, p2) = dx = p2[0] - p1[0], dy = p2[1] - p1[1], dz = p2[2] - p1[2], - ya = atan2(dz, sqrt(pow(dx, 2) + pow(dy, 2))), + ya = atan2(dz, sqrt(dx * dx + dy * dy)), za = atan2(dy, dx) ) [ya, za]; \ No newline at end of file diff --git a/src/__private__/__edge_r.scad b/src/__comm__/__edge_r.scad similarity index 100% rename from src/__private__/__edge_r.scad rename to src/__comm__/__edge_r.scad diff --git a/src/__private__/__frags.scad b/src/__comm__/__frags.scad similarity index 55% rename from src/__private__/__frags.scad rename to src/__comm__/__frags.scad index 395b8845..9b929dc6 100644 --- a/src/__private__/__frags.scad +++ b/src/__comm__/__frags.scad @@ -1,3 +1,3 @@ function __frags(radius) = $fn > 0 ? ($fn >= 3 ? $fn : 3) : - max(min(360 / $fa, radius * 6.28318 / $fs), 5); \ No newline at end of file + max(min(360 / $fa, radius * PI * 2 / $fs), 5); \ No newline at end of file diff --git a/src/__private__/__half_trapezium.scad b/src/__comm__/__half_trapezium.scad similarity index 98% rename from src/__private__/__half_trapezium.scad rename to src/__comm__/__half_trapezium.scad index e08b9ca8..0a6db4f8 100644 --- a/src/__private__/__half_trapezium.scad +++ b/src/__comm__/__half_trapezium.scad @@ -44,7 +44,7 @@ function __br_corner(frags, b_ang, l1, l2, h, round_r) = function __half_trapezium(length, h, round_r) = let( - is_flt = __is_float(length), + is_flt = is_num(length), l1 = is_flt ? length : length[0], l2 = is_flt ? length : length[1], frags = __frags(round_r), diff --git a/src/__private__/__in_line.scad b/src/__comm__/__in_line.scad similarity index 100% rename from src/__private__/__in_line.scad rename to src/__comm__/__in_line.scad diff --git a/src/__private__/__line_intersection.scad b/src/__comm__/__line_intersection.scad similarity index 100% rename from src/__private__/__line_intersection.scad rename to src/__comm__/__line_intersection.scad diff --git a/src/__comm__/__lines_from.scad b/src/__comm__/__lines_from.scad new file mode 100644 index 00000000..59720652 --- /dev/null +++ b/src/__comm__/__lines_from.scad @@ -0,0 +1,10 @@ +function __lines_from(pts, closed = false) = + let( + leng = len(pts), + endi = leng - 1 + ) + concat( + [for(i = 0; i < endi; i = i + 1) [pts[i], pts[i + 1]]], + closed ? [[pts[len(pts) - 1], pts[0]]] : [] + ); + \ No newline at end of file diff --git a/src/__private__/__nearest_multiple_of_4.scad b/src/__comm__/__nearest_multiple_of_4.scad similarity index 100% rename from src/__private__/__nearest_multiple_of_4.scad rename to src/__comm__/__nearest_multiple_of_4.scad diff --git a/src/__private__/__pie_for_rounding.scad b/src/__comm__/__pie_for_rounding.scad similarity index 87% rename from src/__private__/__pie_for_rounding.scad rename to src/__comm__/__pie_for_rounding.scad index 5ea0f6c8..c67024b6 100644 --- a/src/__private__/__pie_for_rounding.scad +++ b/src/__comm__/__pie_for_rounding.scad @@ -5,7 +5,7 @@ function __pie_for_rounding(r, begin_a, end_a, frags) = is_integer = frags % 1 == 0 ) r < 0.00005 ? [[0, 0]] : concat([ - for(ang = [begin_a:step_a:end_a]) + for(ang = begin_a; ang <= end_a; ang = ang + step_a) [ r * cos(ang), r * sin(ang) diff --git a/src/__private__/__polytransversals.scad b/src/__comm__/__polytransversals.scad similarity index 81% rename from src/__private__/__polytransversals.scad rename to src/__comm__/__polytransversals.scad index 6fcb8647..3239f88a 100644 --- a/src/__private__/__polytransversals.scad +++ b/src/__comm__/__polytransversals.scad @@ -3,12 +3,12 @@ function __polytransversals(transversals) = leng_trs = len(transversals), leng_tr = len(transversals[0]), lefts = [ - for(i = [1:leng_trs - 2]) + for(i = 1; i < leng_trs - 1; i = i + 1) let(tr = transversals[leng_trs - i]) tr[0] ], rights = [ - for(i = [1:leng_trs - 2]) + for(i = 1; i < leng_trs - 1; i = i + 1) let(tr = transversals[i]) tr[leng_tr - 1] ] diff --git a/src/__private__/__ra_to_xy.scad b/src/__comm__/__ra_to_xy.scad similarity index 100% rename from src/__private__/__ra_to_xy.scad rename to src/__comm__/__ra_to_xy.scad diff --git a/src/__private__/__shape_arc.scad b/src/__comm__/__shape_arc.scad similarity index 86% rename from src/__private__/__shape_arc.scad rename to src/__comm__/__shape_arc.scad index 37911574..0eb84476 100644 --- a/src/__private__/__shape_arc.scad +++ b/src/__comm__/__shape_arc.scad @@ -6,7 +6,7 @@ function __shape_arc(radius, angle, width, width_mode = "LINE_CROSS") = frags = __frags(radius), a_step = 360 / frags, half_a_step = a_step / 2, - angles = __is_float(angle) ? [0, angle] : angle, + angles = is_num(angle) ? [0, angle] : angle, m = floor(angles[0] / a_step) + 1, n = floor(angles[1] / a_step), r_outer = radius + w_offset[0], @@ -15,14 +15,13 @@ function __shape_arc(radius, angle, width, width_mode = "LINE_CROSS") = // outer arc path [__ra_to_xy(__edge_r_begin(r_outer, angles[0], a_step, m), angles[0])], m > n ? [] : [ - for(i = [m:n]) - __ra_to_xy(r_outer, a_step * i) + for(i = m; i <= n; i = i + 1) __ra_to_xy(r_outer, a_step * i) ], angles[1] == a_step * n ? [] : [__ra_to_xy(__edge_r_end(r_outer, angles[1], a_step, n), angles[1])], // inner arc path angles[1] == a_step * n ? [] : [__ra_to_xy(__edge_r_end(r_inner, angles[1], a_step, n), angles[1])], m > n ? [] : [ - for(i = [m:n]) + for(i = m; i <= n; i = i + 1) let(idx = (n + (m - i))) __ra_to_xy(r_inner, a_step * idx) diff --git a/src/__private__/__shape_pie.scad b/src/__comm__/__shape_pie.scad similarity index 87% rename from src/__private__/__shape_pie.scad rename to src/__comm__/__shape_pie.scad index db5e5504..967b3168 100644 --- a/src/__private__/__shape_pie.scad +++ b/src/__comm__/__shape_pie.scad @@ -3,7 +3,7 @@ function __shape_pie(radius, angle) = frags = __frags(radius), a_step = 360 / frags, leng = radius * cos(a_step / 2), - angles = __is_float(angle) ? [0:angle] : angle, + angles = is_num(angle) ? [0:angle] : angle, m = floor(angles[0] / a_step) + 1, n = floor(angles[1] / a_step), edge_r_begin = leng / cos((m - 0.5) * a_step - angles[0]), @@ -11,7 +11,7 @@ function __shape_pie(radius, angle) = shape_pts = concat( [[0, 0], __ra_to_xy(edge_r_begin, angles[0])], m > n ? [] : [ - for(i = [m:n]) + for(i = m; i <= n; i = i + 1) let(a = a_step * i) __ra_to_xy(radius, a) ], diff --git a/src/__private__/__to2d.scad b/src/__comm__/__to2d.scad similarity index 100% rename from src/__private__/__to2d.scad rename to src/__comm__/__to2d.scad diff --git a/src/__private__/__to3d.scad b/src/__comm__/__to3d.scad similarity index 100% rename from src/__private__/__to3d.scad rename to src/__comm__/__to3d.scad diff --git a/src/__private__/__to_ang_vect.scad b/src/__comm__/__to_ang_vect.scad similarity index 64% rename from src/__private__/__to_ang_vect.scad rename to src/__comm__/__to_ang_vect.scad index e393ed64..2ce95b6a 100644 --- a/src/__private__/__to_ang_vect.scad +++ b/src/__comm__/__to_ang_vect.scad @@ -4,4 +4,4 @@ function __to_3_elems_ang_vect(a) = leng == 2 ? [a[0], a[1], 0] : [a[0], 0, 0] ); -function __to_ang_vect(a) = __is_float(a) ? [0, 0, a] : __to_3_elems_ang_vect(a); \ No newline at end of file +function __to_ang_vect(a) = is_num(a) ? [0, 0, a] : __to_3_elems_ang_vect(a); \ No newline at end of file diff --git a/src/__comm__/__to_degree.scad b/src/__comm__/__to_degree.scad new file mode 100644 index 00000000..963506f5 --- /dev/null +++ b/src/__comm__/__to_degree.scad @@ -0,0 +1 @@ +function __to_degree(phi) = 180 / PI * phi; \ No newline at end of file diff --git a/src/__private__/__trapezium.scad b/src/__comm__/__trapezium.scad similarity index 89% rename from src/__private__/__trapezium.scad rename to src/__comm__/__trapezium.scad index 3dddac87..5715ff5e 100644 --- a/src/__private__/__trapezium.scad +++ b/src/__comm__/__trapezium.scad @@ -3,7 +3,7 @@ function __trapezium(length, h, round_r) = r_half_trapezium = __half_trapezium(length / 2, h, round_r), to = len(r_half_trapezium) - 1, l_half_trapezium = [ - for(i = [0:to]) + for(i = 0; i <= to; i = i + 1) let(pt = r_half_trapezium[to - i]) [-pt[0], pt[1]] ] diff --git a/src/__private__/__is_float.scad b/src/__private__/__is_float.scad deleted file mode 100644 index f5889769..00000000 --- a/src/__private__/__is_float.scad +++ /dev/null @@ -1 +0,0 @@ -function __is_float(value) = value + 0 != undef; \ No newline at end of file diff --git a/src/__private__/__is_vector.scad b/src/__private__/__is_vector.scad deleted file mode 100644 index a4e9d880..00000000 --- a/src/__private__/__is_vector.scad +++ /dev/null @@ -1 +0,0 @@ -function __is_vector(value) = !(value >= "") && len(value) != undef; \ No newline at end of file diff --git a/src/__private__/__lines_from.scad b/src/__private__/__lines_from.scad deleted file mode 100644 index 47fd8754..00000000 --- a/src/__private__/__lines_from.scad +++ /dev/null @@ -1,7 +0,0 @@ -function __lines_from(pts, closed = false) = - let(leng = len(pts)) - concat( - [for(i = [0:leng - 2]) [pts[i], pts[i + 1]]], - closed ? [[pts[len(pts) - 1], pts[0]]] : [] - ); - \ No newline at end of file diff --git a/src/__private__/__reverse.scad b/src/__private__/__reverse.scad deleted file mode 100644 index 62048e03..00000000 --- a/src/__private__/__reverse.scad +++ /dev/null @@ -1,6 +0,0 @@ -function __reverse(vt) = - let(leng = len(vt)) - [ - for(i = [0:leng - 1]) - vt[leng - 1 - i] - ]; \ No newline at end of file diff --git a/src/__private__/__to_degree.scad b/src/__private__/__to_degree.scad deleted file mode 100644 index 21797396..00000000 --- a/src/__private__/__to_degree.scad +++ /dev/null @@ -1 +0,0 @@ -function __to_degree(phi) = 180 / 3.14159 * phi; \ No newline at end of file diff --git a/src/all/dotSCAD.scad b/src/all/dotSCAD.scad new file mode 100644 index 00000000..efe889ca --- /dev/null +++ b/src/all/dotSCAD.scad @@ -0,0 +1,87 @@ +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; +include ; \ No newline at end of file diff --git a/src/along_with.scad b/src/along_with.scad index bd915359..54b742da 100644 --- a/src/along_with.scad +++ b/src/along_with.scad @@ -8,35 +8,25 @@ * **/ -include <__private__/__angy_angz.scad>; -include <__private__/__is_float.scad>; -include <__private__/__to3d.scad>; - -// Becuase of improving the performance, this module requires m_rotation.scad which doesn't require in dotSCAD 1.0. -// For backward compatibility, I directly include m_rotation here. -include ; +include <__comm__/__angy_angz.scad>; +include <__comm__/__to3d.scad>; +include ; module along_with(points, angles, twist = 0, scale = 1.0, method = "AXIS_ANGLE") { leng_points = len(points); leng_points_minus_one = leng_points - 1; twist_step_a = twist / leng_points; - angles_defined = angles != undef; + angles_defined = !is_undef(angles); - scale_step_vt = __is_float(scale) ? - scale_step() : + scale_step_vt = is_num(scale) ? + let(s = (scale - 1) / leng_points_minus_one) [s, s, s] : [ (scale[0] - 1) / leng_points_minus_one, (scale[1] - 1) / leng_points_minus_one, - scale[2] == undef ? 0 : (scale[2] - 1) / leng_points_minus_one + is_undef(scale[2]) ? 0 : (scale[2] - 1) / leng_points_minus_one ]; - - function scale_step() = - let(s = (scale - 1) / leng_points_minus_one) - [s, s, s]; - - /* Sadly, children(n) cannot be used with inner modules so I have to do things in the first level. Ugly!! @@ -53,16 +43,16 @@ module along_with(points, angles, twist = 0, scale = 1.0, method = "AXIS_ANGLE") ]; function axis_angle_local_ang_vects(j) = - j == 0 ? [] : axis_angle_local_ang_vects_sub(j); - - function axis_angle_local_ang_vects_sub(j) = - let( - vt0 = points[j] - points[j - 1], - vt1 = points[j + 1] - points[j], - a = acos((vt0 * vt1) / (norm(vt0) * norm(vt1))), - v = cross(vt0, vt1) - ) - concat([[a, v]], axis_angle_local_ang_vects(j - 1)); + [ + for(i = j; i > 0; i = i - 1) + let( + vt0 = points[i] - points[i - 1], + vt1 = points[i + 1] - points[i], + a = acos((vt0 * vt1) / (norm(vt0) * norm(vt1))), + v = cross(vt0, vt1) + ) + [a, v] + ]; function axis_angle_cumulated_rot_matrice(i, rot_matrice) = let( @@ -101,7 +91,6 @@ module along_with(points, angles, twist = 0, scale = 1.0, method = "AXIS_ANGLE") module axis_angle_align_with_pts_init(a, s) { angleyz = __angy_angz(__to3d(points[0]), __to3d(points[1])); - rotate([0, -angleyz[0], angleyz[1]]) rotate([90, 0, -90]) rotate(a) @@ -126,13 +115,8 @@ module along_with(points, angles, twist = 0, scale = 1.0, method = "AXIS_ANGLE") // >>> begin: modules and functions for "EULER-ANGLE" - function _euler_angle_path_angles(pts, end_i, i = 0) = - i == end_i ? - [] : - concat( - [__angy_angz(pts[i], pts[i + 1])], - _euler_angle_path_angles(pts, end_i, i + 1) - ); + function _euler_angle_path_angles(pts, end_i) = + [for(i = 0; i < end_i; i = i + 1) __angy_angz(pts[i], pts[i + 1])]; function euler_angle_path_angles(children) = let( @@ -171,7 +155,7 @@ module along_with(points, angles, twist = 0, scale = 1.0, method = "AXIS_ANGLE") else { cumu_rot_matrice = axis_angle_cumulated_rot_matrice(0, [ for(ang_vect = axis_angle_local_ang_vects(leng_points - 2)) - m_rotation(ang_vect[0], ang_vect[1]) + __m_rotation(ang_vect[0], ang_vect[1]) ]); translate(points[0]) @@ -195,16 +179,21 @@ module along_with(points, angles, twist = 0, scale = 1.0, method = "AXIS_ANGLE") } else if(method == "EULER_ANGLE") { angs = angles_defined ? angles : euler_angle_path_angles($children); - + if($children == 1) { for(i = [0:leng_points_minus_one]) { euler_angle_align(i, angs) children(0); } - } else { for(i = [0:min(leng_points, $children) - 1]) { euler_angle_align(i, angs) children(i); } - } + } + + test_along_with_angles(angs); } +} + +module test_along_with_angles(angles) { + } \ No newline at end of file diff --git a/src/arc.scad b/src/arc.scad index 61bc78e0..c4b152e2 100644 --- a/src/arc.scad +++ b/src/arc.scad @@ -8,11 +8,10 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__is_float.scad>; -include <__private__/__ra_to_xy.scad>; -include <__private__/__edge_r.scad>; -include <__private__/__shape_arc.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__ra_to_xy.scad>; +include <__comm__/__edge_r.scad>; +include <__comm__/__shape_arc.scad>; module arc(radius, angle, width, width_mode = "LINE_CROSS") { polygon(__shape_arc(radius, angle, width, width_mode)); diff --git a/src/arc_path.scad b/src/arc_path.scad index ab4fedb5..f8bbc73d 100644 --- a/src/arc_path.scad +++ b/src/arc_path.scad @@ -8,21 +8,20 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__is_float.scad>; -include <__private__/__ra_to_xy.scad>; -include <__private__/__edge_r.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__ra_to_xy.scad>; +include <__comm__/__edge_r.scad>; function arc_path(radius, angle) = let( frags = __frags(radius), a_step = 360 / frags, - angles = __is_float(angle) ? [0, angle] : angle, + angles = is_num(angle) ? [0, angle] : angle, m = floor(angles[0] / a_step) + 1, n = floor(angles[1] / a_step), points = concat([__ra_to_xy(__edge_r_begin(radius, angles[0], a_step, m), angles[0])], m > n ? [] : [ - for(i = [m:n]) + for(i = m; i <= n; i = i + 1) __ra_to_xy(radius, a_step * i) ], angles[1] == a_step * n ? [] : [__ra_to_xy(__edge_r_end(radius, angles[1], a_step, n), angles[1])]) diff --git a/src/archimedean_spiral.scad b/src/archimedean_spiral.scad index cef6dc0b..18ef215b 100644 --- a/src/archimedean_spiral.scad +++ b/src/archimedean_spiral.scad @@ -10,7 +10,7 @@ function _radian_step(b, theta, l) = let(r_square = pow(b * theta, 2)) - acos((2 * r_square - pow(l, 2)) / (2 * r_square)) / 180 * 3.14159; + acos((2 * r_square - pow(l, 2)) / (2 * r_square)) / 180 * PI; function _find_radians(b, point_distance, radians, n, count = 1) = let(pre_radians = radians[count - 1]) @@ -27,7 +27,7 @@ function _find_radians(b, point_distance, radians, n, count = 1) = ); function archimedean_spiral(arm_distance, init_angle, point_distance, num_of_points, rt_dir = "CT_CLK") = - let(b = arm_distance / 6.28318, init_radian = init_angle *3.14159 / 180) + let(b = arm_distance / (2 * PI), init_radian = init_angle * PI / 180) [ for(theta = _find_radians(b, point_distance, [init_radian], num_of_points)) let(r = b * theta, a = (rt_dir == "CT_CLK" ? 1 : -1) * theta * 57.2958) diff --git a/src/bezier_curve.scad b/src/bezier_curve.scad index 6ed7b901..820b54f0 100644 --- a/src/bezier_curve.scad +++ b/src/bezier_curve.scad @@ -8,7 +8,7 @@ * **/ -include <__private__/__to2d.scad>; +include <__comm__/__to2d.scad>; function _combi(n, k) = let( @@ -51,7 +51,7 @@ function _bezier_curve_point(t, points) = function bezier_curve(t_step, points) = let( pts = concat([ - for(t = [0: ceil(1 / t_step) - 1]) + for(t = 0; t < ceil(1 / t_step); t = t + 1) _bezier_curve_point(t * t_step, points) ], [_bezier_curve_point(1, points)]) ) diff --git a/src/bezier_smooth.scad b/src/bezier_smooth.scad index 06ad1c3b..1a95f06b 100644 --- a/src/bezier_smooth.scad +++ b/src/bezier_smooth.scad @@ -8,9 +8,9 @@ * **/ -include <__private__/__to3d.scad>; -include <__private__/__to2d.scad>; -include <__private__/__angy_angz.scad>; +include <__comm__/__to3d.scad>; +include <__comm__/__to2d.scad>; +include <__comm__/__angy_angz.scad>; function _corner_ctrl_pts(round_d, p1, p2, p3) = let( @@ -37,13 +37,13 @@ function _corner_ctrl_pts(round_d, p1, p2, p3) = function _bezier_corner(round_d, t_step, p1, p2, p3) = bezier_curve(t_step, _corner_ctrl_pts(round_d, p1, p2, p3)); -function _recursive_bezier_smooth(pts, round_d, t_step, leng, i = 0) = - i <= leng - 3 ? - concat( - _bezier_corner(round_d, t_step, pts[i], pts[i + 1], pts[i + 2]), - _recursive_bezier_smooth(pts, round_d, t_step, leng, i + 1) - ) - : []; +function _recursive_bezier_smooth(pts, round_d, t_step, leng) = + let(end_i = leng - 2) + [ + for(i = 0; i < end_i; i = i + 1) + each _bezier_corner(round_d, t_step, pts[i], pts[i + 1], pts[i + 2]) + ]; + function bezier_smooth(path_pts, round_d, t_step = 0.1, closed = false) = let( diff --git a/src/bezier_surface.scad b/src/bezier_surface.scad index ccc36177..e1889149 100644 --- a/src/bezier_surface.scad +++ b/src/bezier_surface.scad @@ -10,10 +10,10 @@ function bezier_surface(t_step, ctrl_pts) = let(pts = [ - for(i = [0:len(ctrl_pts) - 1]) + for(i = 0; i < len(ctrl_pts); i = i + 1) bezier_curve(t_step, ctrl_pts[i]) ]) - [for(x = [0:len(pts[0]) - 1]) + [for(x = 0; x < len(pts[0]); x = x + 1) bezier_curve(t_step, [for(y = [0:len(pts) - 1]) pts[y][x]] ) diff --git a/src/bijection_offset.scad b/src/bijection_offset.scad index d02291e7..fdb5cbd5 100644 --- a/src/bijection_offset.scad +++ b/src/bijection_offset.scad @@ -8,8 +8,8 @@ * **/ -include <__private__/__lines_from.scad>; -include <__private__/__line_intersection.scad>; +include <__comm__/__lines_from.scad>; +include <__comm__/__line_intersection.scad>; function _bijection_inward_edge_normal(edge) = let( @@ -51,7 +51,7 @@ function bijection_offset(pts, d, epsilon = 0.0001) = ) concat( [ - for(i = [0:leng - 2]) + for(i = 0; i < leng - 1; i = i + 1) let( this_edge = offset_es[i], next_edge = offset_es[i + 1], diff --git a/src/circle_path.scad b/src/circle_path.scad index b8e5f543..30a69081 100644 --- a/src/circle_path.scad +++ b/src/circle_path.scad @@ -8,15 +8,15 @@ * **/ -include <__private__/__frags.scad>; +include <__comm__/__frags.scad>; function circle_path(radius, n) = let( _frags = __frags(radius), step_a = 360 / _frags, - end_a = 360 - step_a * ((n == undef || n > _frags) ? 1 : _frags - n + 1) + end_a = 360 - step_a * ((is_undef(n) || n > _frags) ? 1 : _frags - n + 1) ) [ - for(a = [0 : step_a : end_a]) + for(a = 0; a <= end_a; a = a + step_a) [radius * cos(a), radius * sin(a)] ]; diff --git a/src/cross_sections.scad b/src/cross_sections.scad index 1eeb1563..063001d8 100644 --- a/src/cross_sections.scad +++ b/src/cross_sections.scad @@ -8,15 +8,14 @@ * **/ -include <__private__/__to3d.scad>; -include <__private__/__is_float.scad>; +include <__comm__/__to3d.scad>; function cross_sections(shape_pts, path_pts, angles, twist = 0, scale = 1.0) = let( len_path_pts_minus_one = len(path_pts) - 1, sh_pts = len(shape_pts[0]) == 3 ? shape_pts : [for(p = shape_pts) __to3d(p)], pth_pts = len(path_pts[0]) == 3 ? path_pts : [for(p = path_pts) __to3d(p)], - scale_step_vt = __is_float(scale) ? + scale_step_vt = is_num(scale) ? [(scale - 1) / len_path_pts_minus_one, (scale - 1) / len_path_pts_minus_one] : [(scale[0] - 1) / len_path_pts_minus_one, (scale[1] - 1) / len_path_pts_minus_one] , @@ -25,7 +24,7 @@ function cross_sections(shape_pts, path_pts, angles, twist = 0, scale = 1.0) = twist_step = twist / len_path_pts_minus_one ) [ - for(i = [0:len_path_pts_minus_one]) + for(i = 0; i <= len_path_pts_minus_one; i = i + 1) [ for(p = sh_pts) let(scaled_p = [p[0] * (1 + scale_step_x * i), p[1] * (1 + scale_step_y * i), p[2]]) diff --git a/src/crystal_ball.scad b/src/crystal_ball.scad index 696cd12e..9758adb5 100644 --- a/src/crystal_ball.scad +++ b/src/crystal_ball.scad @@ -8,11 +8,10 @@ * **/ -include <__private__/__nearest_multiple_of_4.scad>; -include <__private__/__is_float.scad>; +include <__comm__/__nearest_multiple_of_4.scad>; module crystal_ball(radius, theta = 360, phi = 180) { - phis = __is_float(phi) ? [0, phi] : phi; + phis = is_num(phi) ? [0, phi] : phi; frags = __frags(radius); @@ -22,13 +21,10 @@ module crystal_ball(radius, theta = 360, phi = 180) { $fn = __nearest_multiple_of_4(frags) ); - // _hole_r = 0.0005 for avoiding warnings when using 2015.03 - // I downloaded 2017.01.20 and found that the problem is solved. - _hole_r = version_num() >= 20170120 ? 0 : 0.0005; ring_extrude( shape_pts, angle = theta, - radius = _hole_r, + radius = 0, $fn = frags ); diff --git a/src/dotSCAD.scad b/src/dotSCAD.scad index ab148ad1..b17cb718 100644 --- a/src/dotSCAD.scad +++ b/src/dotSCAD.scad @@ -8,115 +8,282 @@ * @see https://github.com/JustinSDK/dotSCAD */ -function __polytransversals(transversals) = - let( - leng_trs = len(transversals), - leng_tr = len(transversals[0]), - lefts = [ - for(i = [1:leng_trs - 2]) - let(tr = transversals[leng_trs - i]) - tr[0] - ], - rights = [ - for(i = [1:leng_trs - 2]) - let(tr = transversals[i]) - tr[leng_tr - 1] - ] - ) concat( - transversals[0], - rights, - __reverse(transversals[leng_trs - 1]), - lefts - ); - /** -* m_translation.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_translation.html -* -**/ - - -function _to_3_elems_translation_vect(v) = - let(leng = len(v)) - leng == 3 ? v : ( - leng == 2 ? [v[0], v[1], 0] : [v[0], 0, 0] - ); - -function _to_translation_vect(v) = __is_float(v) ? [v, 0, 0] : _to_3_elems_translation_vect(v); - -function m_translation(v) = - let(vt = _to_translation_vect(v)) - [ - [1, 0, 0, vt[0]], - [0, 1, 0, vt[1]], - [0, 0, 1, vt[2]], - [0, 0, 0, 1] - ]; - -function __angy_angz(p1, p2) = - let( - dx = p2[0] - p1[0], - dy = p2[1] - p1[1], - dz = p2[2] - p1[2], - ya = atan2(dz, sqrt(pow(dx, 2) + pow(dy, 2))), - za = atan2(dy, dx) - ) [ya, za]; - -/** -* cross_sections.scad +* rounded_cylinder.scad * * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-cross_sections.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_cylinder.html * **/ -function cross_sections(shape_pts, path_pts, angles, twist = 0, scale = 1.0) = - let( - len_path_pts_minus_one = len(path_pts) - 1, - sh_pts = len(shape_pts[0]) == 3 ? shape_pts : [for(p = shape_pts) __to3d(p)], - pth_pts = len(path_pts[0]) == 3 ? path_pts : [for(p = path_pts) __to3d(p)], - scale_step_vt = __is_float(scale) ? - [(scale - 1) / len_path_pts_minus_one, (scale - 1) / len_path_pts_minus_one] : - [(scale[0] - 1) / len_path_pts_minus_one, (scale[1] - 1) / len_path_pts_minus_one] - , - scale_step_x = scale_step_vt[0], - scale_step_y = scale_step_vt[1], - twist_step = twist / len_path_pts_minus_one - ) - [ - for(i = [0:len_path_pts_minus_one]) - [ - for(p = sh_pts) - let(scaled_p = [p[0] * (1 + scale_step_x * i), p[1] * (1 + scale_step_y * i), p[2]]) - rotate_p( - rotate_p(scaled_p, twist_step * i) - , angles[i] - ) + pth_pts[i] - ] - ]; +module rounded_cylinder(radius, h, round_r, convexity = 2, center = false) { + r_corners = __half_trapezium(radius, h, round_r); + + shape_pts = concat( + [[0, -h/2]], + r_corners, + [[0, h/2]] + ); + + center_pt = center ? [0, 0, 0] : [0, 0, h/2]; + + translate(center ? [0, 0, 0] : [0, 0, h/2]) + rotate(180) + rotate_extrude(convexity = convexity) + polygon(shape_pts); + + // hook for testing + test_center_half_trapezium(center_pt, shape_pts); +} + +// override it to test +module test_center_half_trapezium(center_pt, shape_pts) { + +} /** -* shear.scad +* rounded_extrude.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_extrude.html +* +**/ + + +module rounded_extrude(size, round_r, angle = 90, twist = 0, convexity = 10) { + + is_flt = is_num(size); + x = is_flt ? size : size[0]; + y = is_flt ? size : size[1]; + + q_corner_frags = __frags(round_r) / 4; + + step_a = angle / q_corner_frags; + twist_step = twist / q_corner_frags; + + module layers(pre_x, pre_y, pre_h = 0, i = 1) { + module one_layer(current_a) { + wx = pre_x; + wy = pre_y; + + h = (round_r - pre_h) - round_r * cos(current_a); + + d_leng = + round_r * (sin(current_a) - sin(step_a * (i - 1))); + + sx = (d_leng * 2 + wx) / wx; + sy = (d_leng * 2 + wy) / wy; + + translate([0, 0, pre_h]) + rotate(-twist_step * (i - 1)) + linear_extrude( + h, + slices = 1, + scale = [sx, sy], + convexity = convexity, + twist = twist_step + ) scale([wx / x, wy / y]) + children(); + + test_rounded_extrude_data(i, wx, wy, pre_h, sx, sy); + + layers(wx * sx, wy * sy, h + pre_h, i + 1) + children(); + + } + + if(i <= q_corner_frags) { + one_layer(i * step_a) + children(); + } else if(i - q_corner_frags < 1) { + one_layer(q_corner_frags * step_a) + children(); + } + } + + layers(x, y) + children(); +} + +module test_rounded_extrude_data(i, wx, wy, pre_h, sx, sy) { + +} + +/** +* hexagons.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-hexagons.html +* +**/ + +module hexagons(radius, spacing, levels) { + beginning_n = 2 * levels - 1; + offset_x = radius * cos(30); + offset_y = radius + radius * sin(30); + r_hexagon = radius - spacing / 2; + offset_step = 2 * offset_x; + center_offset = 2 * (offset_x - offset_x * levels); + + module hexagon() { + rotate(30) + circle(r_hexagon, $fn = 6); + } + + function hexagons_pts(hex_datum) = + let( + tx = hex_datum[0][0], + ty = hex_datum[0][1], + n = hex_datum[1], + offset_xs = [for(i = 0; i < n; i = i + 1) i * offset_step + center_offset] + ) + [ + for(x = offset_xs) [x + tx, ty] + ]; + + module line_hexagons(hex_datum) { + tx = hex_datum[0][0]; + ty = hex_datum[0][1]; + n = hex_datum[1]; + + offset_xs = [for(i = 0; i < n; i = i + 1) i * offset_step + center_offset]; + for(x = offset_xs) { + p = [x + tx, ty, 0]; + translate(p) + hexagon(); + } + } + + upper_hex_data = levels > 1 ? [ + for(i = [1:beginning_n - levels]) + let( + x = offset_x * i, + y = offset_y * i, + n = beginning_n - i + ) [[x, y], n] + ] : []; + + lower_hex_data = levels > 1 ? [ + for(hex_datum = upper_hex_data) + [[hex_datum[0][0], -hex_datum[0][1]], hex_datum[1]] + ] : []; + + total_hex_data = concat( + [ + [[0, 0], beginning_n] // first line + ], + upper_hex_data, + lower_hex_data + ); + + pts_all_lines = [ + for(hex_datum = total_hex_data) + hexagons_pts(hex_datum) + ]; + + for(pts_one_line = pts_all_lines) { + for(pt = pts_one_line) { + translate(pt) + hexagon(); + } + } + + test_each_hexagon(r_hexagon, pts_all_lines); +} + +// override it to test +module test_each_hexagon(hex_r, pts_all_lines) { + +} + +/** +* px_polyline.scad * * @copyright Justin Lin, 2019 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shear.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_polyline.html +* +**/ + + +function px_polyline(points) = + let( + is_2d = len(points[0]) == 2, + pts = is_2d ? [for(pt = points) __to3d(pt)] : points, + polyline = [for(line = __lines_from(pts)) each px_line(line[0], line[1])] + ) + is_2d ? [for(pt = polyline) __to2d(pt)] : polyline; + +function __to_3_elems_ang_vect(a) = + let(leng = len(a)) + leng == 3 ? a : ( + leng == 2 ? [a[0], a[1], 0] : [a[0], 0, 0] + ); + +function __to_ang_vect(a) = is_num(a) ? [0, 0, a] : __to_3_elems_ang_vect(a); + +/** +* px_polygon.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_polygon.html +* +**/ + +function px_polygon(points, filled = false) = + filled ? + let( + xs = [for(pt = points) pt[0]], + ys = [for(pt = points) pt[1]], + max_x = max(xs), + min_x = min(xs), + max_y = max(ys), + min_y = min(ys) + ) + [ + for(y = min_y; y <= max_y; y = y + 1) + for(x = min_x; x <= max_x; x = x + 1) + let(pt = [x, y]) + if(in_shape(points, pt, true)) pt + ] + : + px_polyline( + concat(points, [points[len(points) - 1], points[0]]) + ); + + +function __reverse(vt) = [for(i = len(vt) - 1; i >= 0; i = i - 1) vt[i]]; + +/** +* m_cumulate.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_cumulate.html * **/ +function _m_cumulate(matrice, i) = + i == len(matrice) - 2 ? + matrice[i] * matrice[i + 1] : + matrice[i] * _m_cumulate(matrice, i + 1); + +function m_cumulate(matrice) = + len(matrice) == 1 ? matrice[0] : _m_cumulate(matrice, 0); + -module shear(sx = [0, 0], sy = [0, 0], sz = [0, 0]) { - multmatrix(__m_shearing(sx, sy, sz)) children(); -} /** * bend.scad @@ -178,1968 +345,6 @@ module test_bend_tri_frag(points, angle) { } -/** -* helix.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-helix.html -* -**/ - - -function helix(radius, levels, level_dist, vt_dir = "SPI_DOWN", rt_dir = "CT_CLK") = - let( - is_flt = __is_float(radius), - r1 = is_flt ? radius : radius[0], - r2 = is_flt ? radius : radius[1], - init_r = vt_dir == "SPI_DOWN" ? r2 : r1, - _frags = __frags(init_r), - h = level_dist * levels, - vt_d = vt_dir == "SPI_DOWN" ? 1 : -1, - rt_d = rt_dir == "CT_CLK" ? 1 : -1, - r_diff = (r1 - r2) * vt_d, - h_step = level_dist / _frags * vt_d, - r_step = r_diff / (levels * _frags), - a_step = 360 / _frags * rt_d, - begin_r = vt_dir == "SPI_DOWN" ? r2 : r1, - begin_h = vt_dir == "SPI_DOWN" ? h : 0 - ) - [ - for(i = [0:_frags * levels]) - let(r = begin_r + r_step * i, a = a_step * i) - [r * cos(a), r * sin(a), begin_h - h_step * i] - ]; - -/** -* m_scaling.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_scaling.html -* -**/ - - -function _to_3_elems_scaling_vect(s) = - let(leng = len(s)) - leng == 3 ? s : ( - leng == 2 ? [s[0], s[1], 1] : [s[0], 1, 1] - ); - -function _to_scaling_vect(s) = __is_float(s) ? [s, s, s] : _to_3_elems_scaling_vect(s); - -function m_scaling(s) = - let(v = _to_scaling_vect(s)) - [ - [v[0], 0, 0, 0], - [0, v[1], 0, 0], - [0, 0, v[2], 0], - [0, 0, 0, 1] - ]; - -/** -* bezier_curve.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-bezier_curve.html -* -**/ - - -function _combi(n, k) = - let( - bi_coef = [ - [1], // n = 0: for padding - [1,1], // n = 1: for Linear curves, how about drawing a line directly? - [1,2,1], // n = 2: for Quadratic curves - [1,3,3,1] // n = 3: for Cubic Bézier curves - ] - ) - n < len(bi_coef) ? bi_coef[n][k] : ( - k == 0 ? 1 : (_combi(n, k - 1) * (n - k + 1) / k) - ); - -function bezier_curve_coordinate(t, pn, n, i = 0) = - i == n + 1 ? 0 : - (_combi(n, i) * pn[i] * pow(1 - t, n - i) * pow(t, i) + - bezier_curve_coordinate(t, pn, n, i + 1)); - -function _bezier_curve_point(t, points) = - let(n = len(points) - 1) - [ - bezier_curve_coordinate( - t, - [for(p = points) p[0]], - n - ), - bezier_curve_coordinate( - t, - [for(p = points) p[1]], - n - ), - bezier_curve_coordinate( - t, - [for(p = points) p[2]], - n - ) - ]; - -function bezier_curve(t_step, points) = - let( - pts = concat([ - for(t = [0: ceil(1 / t_step) - 1]) - _bezier_curve_point(t * t_step, points) - ], [_bezier_curve_point(1, points)]) - ) - len(points[0]) == 3 ? pts : [for(pt = pts) __to2d(pt)]; - - -/** -* m_shearing.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_shearing.html -* -**/ - - -function m_shearing(sx = [0, 0], sy = [0, 0], sz = [0, 0]) = __m_shearing(sx, sy, sz); - -/** -* trim_shape.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-trim_shape.html -* -**/ - - -function _trim_shape_any_intersection_sub(lines, line, lines_leng, i, epsilon) = - let( - p = __line_intersection(lines[i], line, epsilon) - ) - (p != [] && __in_line(line, p, epsilon) && __in_line(lines[i], p, epsilon)) ? [i, p] : _trim_shape_any_intersection(lines, line, lines_leng, i + 1, epsilon); - -// return [idx, [x, y]] or [] -function _trim_shape_any_intersection(lines, line, lines_leng, i, epsilon) = - i == lines_leng ? [] : _trim_shape_any_intersection_sub(lines, line, lines_leng, i, epsilon); - -function _trim_sub(lines, leng, epsilon) = - let( - current_line = lines[0], - next_line = lines[1], - lines_from_next = [for(j = [1 : leng - 1]) lines[j]], - lines_from_next2 = [for(j = [2 : leng - 1]) lines[j]], - current_p = current_line[0], - leng_lines_from_next2 = len(lines_from_next2), - inter_p = _trim_shape_any_intersection(lines_from_next2, current_line, leng_lines_from_next2, 0, epsilon) - ) - // no intersecting pt, collect current_p and trim remain lines - inter_p == [] ? (concat([current_p], _trim_shape_trim_lines(lines_from_next, epsilon))) : ( - // collect current_p, intersecting pt and the last pt - (leng == 3 || (inter_p[0] == (leng_lines_from_next2 - 1))) ? [current_p, inter_p[1], lines[leng - 1]] : ( - // collect current_p, intersecting pt and trim remain lines - concat([current_p, inter_p[1]], - _trim_shape_trim_lines([for(i = [inter_p[0] + 1 : leng_lines_from_next2 - 1]) lines_from_next2[i]], epsilon) - ) - ) - ); - -function _trim_shape_trim_lines(lines, epsilon) = - let(leng = len(lines)) - leng > 2 ? _trim_sub(lines, leng, epsilon) : _trim_shape_collect_pts_from(lines, leng); - -function _trim_shape_collect_pts_from(lines, leng) = - concat([for(line = lines) line[0]], [lines[leng - 1][1]]); - -function trim_shape(shape_pts, from, to, epsilon = 0.0001) = - let( - pts = [for(i = [from:to]) shape_pts[i]], - trimmed = _trim_shape_trim_lines(__lines_from(pts), epsilon) - ) - len(shape_pts) == len(trimmed) ? trimmed : trim_shape(trimmed, 0, len(trimmed) - 1, epsilon); - - -/** -* parse_number.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib2-parse_number.html -* -**/ - -function _str_to_int(t) = - let( - dict = [["0", 0], ["1", 1], ["2", 2], ["3", 3], ["4", 4], ["5", 5], ["6", 6], ["7", 7], ["8", 8], ["9", 9]], - n = dict[search(t, dict)[0]][1] - ) n; - -function _parse_positive_int(t, value = 0, i = 0) = - i == len(t) ? value : _parse_positive_int(t, value * pow(10, i) + _str_to_int(t[i]), i + 1); - -function _parse_positive_decimal(t, value = 0, i = 0) = - i == len(t) ? value : _parse_positive_decimal(t, value + _str_to_int(t[i]) * pow(10, -(i + 1)), i + 1); - -function _parse_positive_number(t) = - len(search(".", t)) == 0 ? _parse_positive_int(t) : - _parse_positive_int(split_str(t, ".")[0]) + _parse_positive_decimal(split_str(t, ".")[1]); - -function parse_number(t) = - t[0] == "-" ? -_parse_positive_number(sub_str(t, 1, len(t))) : _parse_positive_number(t); - - - -/** -* polyline2d.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-polyline2d.html -* -**/ - -module polyline2d(points, width, startingStyle = "CAP_SQUARE", endingStyle = "CAP_SQUARE") { - leng_pts = len(points); - - module line_segment(index) { - styles = index == 1 ? [startingStyle, "CAP_ROUND"] : ( - index == leng_pts - 1 ? ["CAP_BUTT", endingStyle] : [ - "CAP_BUTT", "CAP_ROUND" - ] - ); - - p1 = points[index - 1]; - p2 = points[index]; - p1Style = styles[0]; - p2Style = styles[1]; - - line2d(points[index - 1], points[index], width, - p1Style = p1Style, p2Style = p2Style); - - // hook for testing - test_line_segment(index, p1, p2, width, p1Style, p2Style); - } - - module polyline2d_inner(index) { - if(index < leng_pts) { - line_segment(index); - polyline2d_inner(index + 1); - } - } - - polyline2d_inner(1); -} - -// override it to test -module test_line_segment(index, point1, point2, width, p1Style, p2Style) { - -} - -/** -* midpt_smooth.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-midpt_smooth.html -* -**/ - -function _midpt_smooth_sub(points, iend, i, closed = false) = - i == iend ? ( - closed ? [(points[i] + points[0]) / 2] - : [] - ) : concat([(points[i] + points[i + 1]) / 2], _midpt_smooth_sub(points, iend, i + 1, closed)); - -function midpt_smooth(points, n, closed = false) = - let( - smoothed = _midpt_smooth_sub(points, len(points) - 1, 0, closed) - ) - n == 1 ? smoothed : midpt_smooth(smoothed, n - 1, closed); - -function __frags(radius) = $fn > 0 ? - ($fn >= 3 ? $fn : 3) : - max(min(360 / $fa, radius * 6.28318 / $fs), 5); - -/** -* turtle2d.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-turtle2d.html -* -**/ - -function _turtle2d_turtle(x, y, angle) = [[x, y], angle]; - -function _turtle2d_set_point(turtle, point) = [point, _turtle2d_get_angle(turtle)]; - -function _turtle2d_set_x(turtle, x) = [[x, _turtle2d_get_y(turtle)], _turtle2d_get_angle(turtle)]; -function _turtle2d_set_y(turtle, y) = [[_turtle2d_get_x(turtle), y], _turtle2d_get_angle(turtle)]; -function _turtle2d_set_angle(turtle, angle) = [_turtle2d_get_pt(turtle), angle]; - -function _turtle2d_forward(turtle, leng) = - _turtle2d_turtle( - _turtle2d_get_x(turtle) + leng * cos(_turtle2d_get_angle(turtle)), - _turtle2d_get_y(turtle) + leng * sin(_turtle2d_get_angle(turtle)), - _turtle2d_get_angle(turtle) - ); - -function _turtle2d_turn(turtle, angle) = [_turtle2d_get_pt(turtle), _turtle2d_get_angle(turtle) + angle]; - -function _turtle2d_get_x(turtle) = turtle[0][0]; -function _turtle2d_get_y(turtle) = turtle[0][1]; -function _turtle2d_get_pt(turtle) = turtle[0]; -function _turtle2d_get_angle(turtle) = turtle[1]; - -function _turtle2d_three_args_command(cmd, arg1, arg2, arg3) = - cmd == "create" ? _turtle2d_turtle(arg1, arg2, arg3) : _turtle2d_two_args_command(cmd, arg1, arg2); - -function _turtle2d_two_args_command(cmd, arg1, arg2) = - arg2 == undef ? _turtle2d_one_arg_command(cmd, arg1) : ( - cmd == "pt" ? _turtle2d_set_point(arg1, arg2) : ( - cmd == "x" ? _turtle2d_set_x(arg1, arg2) : ( - cmd == "y" ? _turtle2d_set_y(arg1, arg2) : ( - cmd == "angle" ? _turtle2d_set_angle(arg1, arg2) : ( - cmd == "forward" ? _turtle2d_forward(arg1, arg2) : ( - cmd == "turn" ? _turtle2d_turn(arg1, arg2) : undef - ) - ) - ) - ) - ) - ); - -function _turtle2d_one_arg_command(cmd, arg) = - cmd == "x" ? _turtle2d_get_x(arg) : ( - cmd == "y" ? _turtle2d_get_y(arg) : ( - cmd == "angle" ? _turtle2d_get_angle(arg) : ( - cmd == "pt" ? _turtle2d_get_pt(arg) : undef - ) - ) - ); - -function turtle2d(cmd, arg1, arg2, arg3) = - _turtle2d_three_args_command(cmd, arg1, arg2, arg3); - - -/** -* shape_cyclicpolygon.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_cyclicpolygon.html -* -**/ - - -function shape_cyclicpolygon(sides, circle_r, corner_r) = - let( - frag_a = 360 / sides, - corner_a = (180 - frag_a), - corner_circle_a = 180 - corner_a, - half_corner_circle_a = corner_circle_a / 2, - corner_circle_center = circle_r - corner_r / sin(corner_a / 2), - first_corner = [ - for( - pt = __pie_for_rounding( - corner_r, - -half_corner_circle_a, - half_corner_circle_a, - __frags(corner_r) * corner_circle_a / 360 - ) - ) - [pt[0] + corner_circle_center, pt[1]] - ] - - ) - concat( - first_corner, - [ - for(side = [1:sides - 1]) - for(pt = first_corner) - let( - a = frag_a * side, - x = pt[0], - y = pt[1], - sina = sin(a), - cosa = cos(a) - ) - [ - x * cosa - y * sina, - x * sina + y * cosa - ] - ] - ); - -/** -* path_extrude.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-path_extrude.html -* -**/ - - -// Becuase of improving the performance, this module requires m_rotation.scad which doesn't require in dotSCAD 1.0. -// For backward compatibility, I directly include m_rotation here. - -module path_extrude(shape_pts, path_pts, triangles = "SOLID", twist = 0, scale = 1.0, closed = false, method = "AXIS_ANGLE") { - sh_pts = len(shape_pts[0]) == 3 ? shape_pts : [for(p = shape_pts) __to3d(p)]; - pth_pts = len(path_pts[0]) == 3 ? path_pts : [for(p = path_pts) __to3d(p)]; - - len_path_pts = len(pth_pts); - len_path_pts_minus_one = len_path_pts - 1; - - - module axis_angle_path_extrude() { - twist_step_a = twist / len_path_pts; - - function scale_pts(pts, s) = [ - for(p = pts) [p[0] * s[0], p[1] * s[1], p[2] * s[2]] - ]; - - function translate_pts(pts, t) = [ - for(p = pts) [p[0] + t[0], p[1] + t[1], p[2] + t[2]] - ]; - - function rotate_pts(pts, a, v) = [for(p = pts) rotate_p(p, a, v)]; - - function scale_step() = - let(s = (scale - 1) / len_path_pts_minus_one) - [s, s, s]; - - scale_step_vt = __is_float(scale) ? - scale_step() : - [ - (scale[0] - 1) / len_path_pts_minus_one, - (scale[1] - 1) / len_path_pts_minus_one, - scale[2] == undef ? 0 : (scale[2] - 1) / len_path_pts_minus_one - ]; - - // get rotation matrice for sections - - function local_ang_vects(j) = - j == 0 ? [] : local_ang_vects_sub(j); - - function local_ang_vects_sub(j) = - let( - vt0 = pth_pts[j] - pth_pts[j - 1], - vt1 = pth_pts[j + 1] - pth_pts[j], - a = acos((vt0 * vt1) / (norm(vt0) * norm(vt1))), - v = cross(vt0, vt1) - ) - concat([[a, v]], local_ang_vects(j - 1)); - - rot_matrice = [ - for(ang_vect = local_ang_vects(len_path_pts - 2)) - m_rotation(ang_vect[0], ang_vect[1]) - ]; - - leng_rot_matrice = len(rot_matrice); - leng_rot_matrice_minus_one = leng_rot_matrice - 1; - leng_rot_matrice_minus_two= leng_rot_matrice - 2; - - identity_matrix = [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ]; - - function cumulated_rot_matrice(i) = - leng_rot_matrice == 0 ? [identity_matrix] : ( - leng_rot_matrice == 1 ? [rot_matrice[0], identity_matrix] : - ( - i == leng_rot_matrice_minus_two ? - [ - rot_matrice[leng_rot_matrice_minus_one], - rot_matrice[leng_rot_matrice_minus_two] * rot_matrice[leng_rot_matrice_minus_one] - ] - : cumulated_rot_matrice_sub(i)) - ); - - function cumulated_rot_matrice_sub(i) = - let( - matrice = cumulated_rot_matrice(i + 1), - curr_matrix = rot_matrice[i], - prev_matrix = matrice[len(matrice) - 1] - ) - concat(matrice, [curr_matrix * prev_matrix]); - - cumu_rot_matrice = cumulated_rot_matrice(0); - - // get all sections - - function init_section(a, s) = - let(angleyz = __angy_angz(pth_pts[0], pth_pts[1])) - rotate_pts( - rotate_pts( - rotate_pts( - scale_pts(sh_pts, s), a - ), [90, 0, -90] - ), [0, -angleyz[0], angleyz[1]] - ); - - function local_rotate_section(j, init_a, init_s) = - j == 0 ? - init_section(init_a, init_s) : - local_rotate_section_sub(j, init_a, init_s); - - function local_rotate_section_sub(j, init_a, init_s) = - let( - vt0 = pth_pts[j] - pth_pts[j - 1], - vt1 = pth_pts[j + 1] - pth_pts[j], - ms = cumu_rot_matrice[j - 1] - ) - [ - for(p = init_section(init_a, init_s)) - [ - [ms[0][0], ms[0][1], ms[0][2]] * p, - [ms[1][0], ms[1][1], ms[1][2]] * p, - [ms[2][0], ms[2][1], ms[2][2]] * p - ] - ]; - - function sections() = - let( - fst_section = - translate_pts(local_rotate_section(0, 0, [1, 1, 1]), pth_pts[0]), - remain_sections = [ - for(i = [0:len_path_pts - 2]) - - translate_pts( - local_rotate_section(i, i * twist_step_a, [1, 1, 1] + scale_step_vt * i), - pth_pts[i + 1] - ) - - - ] - ) concat([fst_section], remain_sections); - - sects = sections(); - - function calculated_sections() = - closed && pth_pts[0] == pth_pts[len_path_pts_minus_one] ? - concat(sects, [sects[0]]) : // round-robin - sects; - - polysections( - calculated_sections(), - triangles = triangles - ); - - // hook for testing - test_path_extrude(sects); - } - - module euler_angle_path_extrude() { - scale_step_vt = __is_float(scale) ? - [(scale - 1) / len_path_pts_minus_one, (scale - 1) / len_path_pts_minus_one] : - [(scale[0] - 1) / len_path_pts_minus_one, (scale[1] - 1) / len_path_pts_minus_one]; - - scale_step_x = scale_step_vt[0]; - scale_step_y = scale_step_vt[1]; - twist_step = twist / len_path_pts_minus_one; - - function section(p1, p2, i) = - let( - length = norm(p1 - p2), - angy_angz = __angy_angz(p1, p2), - ay = -angy_angz[0], - az = angy_angz[1] - ) - [ - for(p = sh_pts) - let(scaled_p = [p[0] * (1 + scale_step_x * i), p[1] * (1 + scale_step_y * i), p[2]]) - rotate_p( - rotate_p( - rotate_p(scaled_p, twist_step * i), [90, 0, -90] - ) + [i == 0 ? 0 : length, 0, 0], - [0, ay, az] - ) + p1 - ]; - - function path_extrude_inner(index) = - index == len_path_pts ? [] : - concat( - [section(pth_pts[index - 1], pth_pts[index], index)], - path_extrude_inner(index + 1) - ); - - function calculated_sections() = - let(sections = path_extrude_inner(1)) - closed && pth_pts[0] == pth_pts[len_path_pts_minus_one] ? - concat(sections, [sections[0]]) : // round-robin - concat([section(pth_pts[0], pth_pts[1], 0)], sections); - - sections = calculated_sections(); - - polysections( - sections, - triangles = triangles - ); - - // hook for testing - test_path_extrude(sections); - } - - if(method == "AXIS_ANGLE") { - axis_angle_path_extrude(); - } - else if(method == "EULER_ANGLE") { - euler_angle_path_extrude(); - } -} - - -// override to test -module test_path_extrude(sections) { - -} - -/** -* bezier_surface.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-bezier_surface.html -* -**/ - -function bezier_surface(t_step, ctrl_pts) = - let(pts = [ - for(i = [0:len(ctrl_pts) - 1]) - bezier_curve(t_step, ctrl_pts[i]) - ]) - [for(x = [0:len(pts[0]) - 1]) - bezier_curve(t_step, - [for(y = [0:len(pts) - 1]) pts[y][x]] - ) - ]; - -/** -* torus_knot.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-torus_knot.html -* -**/ - -function torus_knot(p, q, phi_step) = [ - for(phi = [0:phi_step:6.28318]) - let( - degree = phi * 180 / 3.14159, - r = cos(q * degree) + 2, - x = r * cos(p * degree), - y = r * sin(p * degree), - z = -sin(q * degree) - ) - [x, y, z] -]; - -/** -* rounded_square.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_square.html -* -**/ - - -module rounded_square(size, corner_r, center = false) { - is_flt = __is_float(size); - x = is_flt ? size : size[0]; - y = is_flt ? size : size[1]; - - position = center ? [0, 0] : [x / 2, y / 2]; - points = __trapezium( - length = x, - h = y, - round_r = corner_r - ); - - translate(position) - polygon(points); - - // hook for testing - test_rounded_square(position, points); -} - -// override it to test -module test_rounded_square(position, points) { -} - -/** -* m_mirror.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_mirror.html -* -**/ - -function m_mirror(v) = - let( - nv = v / norm(v), - txx = -2* nv[0] * nv[0], - txy = -2* nv[0] * nv[1], - txz = -2* nv[0] * nv[2], - tyy = -2* nv[1] * nv[1], - tyz = -2* nv[1] * nv[2], - tzz = -2* nv[2] * nv[2] - ) - [ - [1 + txx, txy, txz, 0], - [txy, 1 + tyy, tyz, 0], - [txz, tyz, 1 + tzz, 0], - [0, 0, 0, 1] - ]; - -/** -* polyline3d.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-polyline3d.html -* -**/ - -module polyline3d(points, thickness, startingStyle = "CAP_CIRCLE", endingStyle = "CAP_CIRCLE") { - leng_pts = len(points); - - module line_segment(index) { - styles = index == 1 ? [startingStyle, "CAP_BUTT"] : ( - index == leng_pts - 1 ? ["CAP_SPHERE", endingStyle] : [ - "CAP_SPHERE", "CAP_BUTT" - ] - ); - - p1 = points[index - 1]; - p2 = points[index]; - p1Style = styles[0]; - p2Style = styles[1]; - - line3d(p1, p2, thickness, - p1Style = p1Style, p2Style = p2Style); - - // hook for testing - test_line3d_segment(index, p1, p2, thickness, p1Style, p2Style); - } - - module polyline3d_inner(index) { - if(index < leng_pts) { - line_segment(index); - polyline3d_inner(index + 1); - } - } - - polyline3d_inner(1); -} - -// override it to test -module test_line3d_segment(index, point1, point2, thickness, p1Style, p2Style) { - -} - -/** -* polysections.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-polysections.html -* -**/ - - -module polysections(sections, triangles = "SOLID") { - - function side_indexes(sects, begin_idx = 0) = - let( - leng_sects = len(sects), - leng_pts_sect = len(sects[0]) - ) - concat( - [ - for(j = [begin_idx:leng_pts_sect:begin_idx + (leng_sects - 2) * leng_pts_sect]) - for(i = [0:leng_pts_sect - 1]) - [ - j + i, - j + (i + 1) % leng_pts_sect, - j + (i + 1) % leng_pts_sect + leng_pts_sect - ] - ], - [ - for(j = [begin_idx:leng_pts_sect:begin_idx + (leng_sects - 2) * leng_pts_sect]) - for(i = [0:leng_pts_sect - 1]) - [ - j + i, - j + (i + 1) % leng_pts_sect + leng_pts_sect , - j + i + leng_pts_sect - ] - ] - ); - - function search_at(f_sect, p, leng_pts_sect, i = 0) = - i < leng_pts_sect ? - (p == f_sect[i] ? i : search_at(f_sect, p, leng_pts_sect, i + 1)) : -1; - - function the_same_after_twisting(f_sect, l_sect, leng_pts_sect) = - let( - found_at_i = search_at(f_sect, l_sect[0], leng_pts_sect) - ) - found_at_i <= 0 ? false : - l_sect == concat( - [for(i = [found_at_i:leng_pts_sect-1]) f_sect[i]], - [for(i = [0:found_at_i - 1]) f_sect[i]] - ); - - function to_v_pts(sects) = - [ - for(sect = sects) - for(pt = sect) - pt - ]; - - module solid_sections(sects) { - - leng_sects = len(sects); - leng_pts_sect = len(sects[0]); - first_sect = sects[0]; - last_sect = sects[leng_sects - 1]; - - v_pts = [ - for(sect = sects) - for(pt = sect) - pt - ]; - - function begin_end_the_same() = - first_sect == last_sect || - the_same_after_twisting(first_sect, last_sect, leng_pts_sect); - - if(begin_end_the_same()) { - f_idxes = side_indexes(sects); - - polyhedron( - v_pts, - f_idxes - ); - - // hook for testing - test_polysections_solid(v_pts, f_idxes); - } else { - first_idxes = [for(i = [0:leng_pts_sect - 1]) leng_pts_sect - 1 - i]; - last_idxes = [ - for(i = [0:leng_pts_sect - 1]) - i + leng_pts_sect * (leng_sects - 1) - ]; - - f_idxes = concat([first_idxes], side_indexes(sects), [last_idxes]); - - polyhedron( - v_pts, - f_idxes - ); - - // hook for testing - test_polysections_solid(v_pts, f_idxes); - } - } - - module hollow_sections(sects) { - leng_sects = len(sects); - leng_sect = len(sects[0]); - half_leng_sect = leng_sect / 2; - half_leng_v_pts = leng_sects * half_leng_sect; - - function strip_sects(begin_idx, end_idx) = - [ - for(i = [0:leng_sects - 1]) - [ - for(j = [begin_idx:end_idx]) - sects[i][j] - ] - ]; - - function first_idxes() = - [ - for(i = [0:half_leng_sect - 1]) - [ - i, - i + half_leng_v_pts, - (i + 1) % half_leng_sect + half_leng_v_pts, - (i + 1) % half_leng_sect - ] - ]; - - function last_idxes(begin_idx) = - [ - for(i = [0:half_leng_sect - 1]) - [ - begin_idx + i, - begin_idx + (i + 1) % half_leng_sect, - begin_idx + (i + 1) % half_leng_sect + half_leng_v_pts, - begin_idx + i + half_leng_v_pts - ] - ]; - - outer_sects = strip_sects(0, half_leng_sect - 1); - inner_sects = strip_sects(half_leng_sect, leng_sect - 1); - - outer_v_pts = to_v_pts(outer_sects); - inner_v_pts = to_v_pts(inner_sects); - - outer_idxes = side_indexes(outer_sects); - inner_idxes = [ - for(idxes = side_indexes(inner_sects, half_leng_v_pts)) - __reverse(idxes) - ]; - - first_outer_sect = outer_sects[0]; - last_outer_sect = outer_sects[leng_sects - 1]; - first_inner_sect = inner_sects[0]; - last_inner_sect = inner_sects[leng_sects - 1]; - - leng_pts_sect = len(first_outer_sect); - - function begin_end_the_same() = - (first_outer_sect == last_outer_sect && first_inner_sect == last_inner_sect) || - ( - the_same_after_twisting(first_outer_sect, last_outer_sect, leng_pts_sect) && - the_same_after_twisting(first_inner_sect, last_inner_sect, leng_pts_sect) - ); - - v_pts = concat(outer_v_pts, inner_v_pts); - - if(begin_end_the_same()) { - f_idxes = concat(outer_idxes, inner_idxes); - - polyhedron( - v_pts, - f_idxes - ); - - // hook for testing - test_polysections_solid(v_pts, f_idxes); - } else { - first_idxes = first_idxes(); - last_idxes = last_idxes(half_leng_v_pts - half_leng_sect); - - f_idxes = concat(first_idxes, outer_idxes, inner_idxes, last_idxes); - - polyhedron( - v_pts, - f_idxes - ); - - // hook for testing - test_polysections_solid(v_pts, f_idxes); - } - } - - module triangles_defined_sections() { - module tri_sections(tri1, tri2) { - hull() polyhedron( - points = concat(tri1, tri2), - faces = [ - [0, 1, 2], - [3, 5, 4], - [1, 3, 4], [2, 1, 4], [2, 3, 0], - [0, 3, 1], [2, 4, 5], [2, 5, 3] - ] - ); - } - - module two_sections(section1, section2) { - for(idx = triangles) { - tri_sections( - [ - section1[idx[0]], - section1[idx[1]], - section1[idx[2]] - ], - [ - section2[idx[0]], - section2[idx[1]], - section2[idx[2]] - ] - ); - } - } - - for(i = [0:len(sections) - 2]) { - two_sections( - sections[i], - sections[i + 1] - ); - } - } - - if(triangles == "SOLID") { - solid_sections(sections); - } else if(triangles == "HOLLOW") { - hollow_sections(sections); - } - else { - triangles_defined_sections(); - } -} - -// override it to test - -module test_polysections_solid(points, faces) { - -} - -/** -* shape_arc.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_arc.html -* -**/ - - -function shape_arc(radius, angle, width, width_mode = "LINE_CROSS") = - __shape_arc(radius, angle, width, width_mode); - -/** -* starburst.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-starburst.html -* -**/ - -module starburst(r1, r2, n, height) { - a = 180 / n; - - p0 = [0, 0, 0]; - p1 = [r2 * cos(a), r2 * sin(a), 0]; - p2 = [r1, 0, 0]; - p3 = [0, 0, height]; - - module half_burst() { - polyhedron(points = [p0, p1, p2, p3], - faces = [ - [0, 2, 1], - [0, 1, 3], - [0, 3, 2], - [2, 1, 3] - ] - ); - } - - module burst() { - hull() { - half_burst(); - mirror([0, 1,0]) half_burst(); - } - } - - union() { - for(i = [0 : n - 1]) { - rotate(2 * a * i) burst(); - } - } -} - -/** -* archimedean_spiral.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-archimedean_spiral.html -* -**/ - -function _radian_step(b, theta, l) = - let(r_square = pow(b * theta, 2)) - acos((2 * r_square - pow(l, 2)) / (2 * r_square)) / 180 * 3.14159; - -function _find_radians(b, point_distance, radians, n, count = 1) = - let(pre_radians = radians[count - 1]) - count == n ? radians : ( - _find_radians( - b, - point_distance, - concat( - radians, - [pre_radians + _radian_step(b, pre_radians, point_distance)] - ), - n, - count + 1) - ); - -function archimedean_spiral(arm_distance, init_angle, point_distance, num_of_points, rt_dir = "CT_CLK") = - let(b = arm_distance / 6.28318, init_radian = init_angle *3.14159 / 180) - [ - for(theta = _find_radians(b, point_distance, [init_radian], num_of_points)) - let(r = b * theta, a = (rt_dir == "CT_CLK" ? 1 : -1) * theta * 57.2958) - [[r * cos(a), r * sin(a)], a] - ]; - -/** -* helix_extrude.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-helix_extrude.html -* -**/ - - -module helix_extrude(shape_pts, radius, levels, level_dist, - vt_dir = "SPI_DOWN", rt_dir = "CT_CLK", - twist = 0, scale = 1.0, triangles = "SOLID") { - - function reverse(vt) = - let(leng = len(vt)) - [ - for(i = [0:leng - 1]) - vt[leng - 1 - i] - ]; - - is_flt = __is_float(radius); - r1 = is_flt ? radius : radius[0]; - r2 = is_flt ? radius : radius[1]; - - init_r = vt_dir == "SPI_DOWN" ? r2 : r1; - - frags = __frags(init_r); - - v_dir = vt_dir == "SPI_UP" ? 1 : -1; - r_dir = rt_dir == "CT_CLK" ? 1 : -1; - - angle_step = 360 / frags * r_dir; - initial_angle = atan2(level_dist / frags, 6.28318 * init_r / frags) * v_dir * r_dir; - - path_points = helix( - radius = radius, - levels = levels, - level_dist = level_dist, - vt_dir = vt_dir, - rt_dir = rt_dir - ); - - clk_a = r_dir == 1 ? 0 : 180; - angles = [for(i = [0:len(path_points) - 1]) [90 + initial_angle, 0, clk_a + angle_step * i]]; - - sections = cross_sections(shape_pts, path_points, angles, twist, scale); - - polysections( - sections, - triangles = triangles - ); - - // hook for testing - test_helix_extrude(sections); -} - -// override it to test -module test_helix_extrude(sections) { - -} - -/** -* shape_square.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_square.html -* -**/ - - -function shape_square(size, corner_r = 0) = - let( - is_flt = __is_float(size), - x = is_flt ? size : size[0], - y = is_flt ? size : size[1] - ) - __trapezium( - length = x, - h = y, - round_r = corner_r - ); - - -function __shape_arc(radius, angle, width, width_mode = "LINE_CROSS") = - let( - w_offset = width_mode == "LINE_CROSS" ? [width / 2, -width / 2] : ( - width_mode == "LINE_INWARD" ? [0, -width] : [width, 0] - ), - frags = __frags(radius), - a_step = 360 / frags, - half_a_step = a_step / 2, - angles = __is_float(angle) ? [0, angle] : angle, - m = floor(angles[0] / a_step) + 1, - n = floor(angles[1] / a_step), - r_outer = radius + w_offset[0], - r_inner = radius + w_offset[1], - points = concat( - // outer arc path - [__ra_to_xy(__edge_r_begin(r_outer, angles[0], a_step, m), angles[0])], - m > n ? [] : [ - for(i = [m:n]) - __ra_to_xy(r_outer, a_step * i) - ], - angles[1] == a_step * n ? [] : [__ra_to_xy(__edge_r_end(r_outer, angles[1], a_step, n), angles[1])], - // inner arc path - angles[1] == a_step * n ? [] : [__ra_to_xy(__edge_r_end(r_inner, angles[1], a_step, n), angles[1])], - m > n ? [] : [ - for(i = [m:n]) - let(idx = (n + (m - i))) - __ra_to_xy(r_inner, a_step * idx) - - ], - [__ra_to_xy(__edge_r_begin(r_inner, angles[0], a_step, m), angles[0])] - ) - ) points; - -/** -* arc.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-arc.html -* -**/ - - -module arc(radius, angle, width, width_mode = "LINE_CROSS") { - polygon(__shape_arc(radius, angle, width, width_mode)); -} - -/** -* in_shape.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-in_shape.html -* -**/ - - -function _in_shape_in_line_equation(edge, pt) = - let( - x1 = edge[0][0], - y1 = edge[0][1], - x2 = edge[1][0], - y2 = edge[1][1], - a = (y2 - y1) / (x2 - x1), - b = y1 - a * x1 - ) - (pt[1] == a * pt[0] + b); - -function _in_shape_in_any_edges_sub(edges, leng, pt, i, epsilon) = - leng == i ? false : ( - __in_line(edges[i], pt, epsilon) ? true : _in_shape_in_any_edges_sub(edges, leng, pt, i + 1, epsilon) - ); - -function _in_shape_in_any_edges(edges, pt, epsilon) = _in_shape_in_any_edges_sub(edges, len(edges), pt, 0, epsilon); - -function _in_shape_interpolate_x(y, p1, p2) = - p1[1] == p2[1] ? p1[0] : ( - p1[0] + (p2[0] - p1[0]) * (y - p1[1]) / (p2[1] - p1[1]) - ); - -function _in_shape_does_pt_cross(pts, i, j, pt) = - ((pts[i][1] > pt[1]) != (pts[j][1] > pt[1])) && - (pt[0] < _in_shape_interpolate_x(pt[1], pts[i], pts[j])); - - -function _in_shape_sub(shapt_pts, leng, pt, cond, i, j) = - j == leng ? cond : ( - _in_shape_does_pt_cross(shapt_pts, i, j, pt) ? - _in_shape_sub(shapt_pts, leng, pt, !cond, j, j + 1) : - _in_shape_sub(shapt_pts, leng, pt, cond, j, j + 1) - ); - -function in_shape(shapt_pts, pt, include_edge = false, epsilon = 0.0001) = - let( - leng = len(shapt_pts), - edges = __lines_from(shapt_pts, true) - ) - _in_shape_in_any_edges(edges, pt, epsilon) ? include_edge : - _in_shape_sub(shapt_pts, leng, pt, false, leng - 1, 0); - -function __lines_from(pts, closed = false) = - let(leng = len(pts)) - concat( - [for(i = [0:leng - 2]) [pts[i], pts[i + 1]]], - closed ? [[pts[len(pts) - 1], pts[0]]] : [] - ); - - -/** -* arc_shape.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-arc_path.html -* -**/ - - -function arc_path(radius, angle) = - let( - frags = __frags(radius), - a_step = 360 / frags, - angles = __is_float(angle) ? [0, angle] : angle, - m = floor(angles[0] / a_step) + 1, - n = floor(angles[1] / a_step), - points = concat([__ra_to_xy(__edge_r_begin(radius, angles[0], a_step, m), angles[0])], - m > n ? [] : [ - for(i = [m:n]) - __ra_to_xy(radius, a_step * i) - ], - angles[1] == a_step * n ? [] : [__ra_to_xy(__edge_r_end(radius, angles[1], a_step, n), angles[1])]) - ) points; - -/** -* sphere_spiral.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-sphere_spiral.html -* -**/ - -function sphere_spiral(radius, za_step, z_circles = 1, begin_angle = 0, end_angle = 0, vt_dir = "SPI_DOWN", rt_dir = "CT_CLK") = - [ - for(a = [begin_angle:za_step:90 * z_circles - end_angle]) - let( - ya = vt_dir == "SPI_DOWN" ? (-90 + 2 * a / z_circles) : (90 + 2 * a / z_circles), - za = (rt_dir == "CT_CLK" ? 1 : -1) * a, - ra = [0, ya, za] - ) - [rotate_p([radius, 0, 0], ra), ra] - ]; - -/** -* paths2sections.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-paths2sections.html -* -**/ - -function paths2sections(paths) = - let( - leng_path = len(paths[0]), - leng_paths = len(paths) - ) - [ - for(i = [0:leng_path - 1]) - [ - for(j = [0:leng_paths - 1]) - paths[j][i] - ] - ]; - -/** -* shape_trapezium.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_trapezium.html -* -**/ - - -function shape_trapezium(length, h, corner_r = 0) = - __trapezium( - length = length, - h = h, - round_r = corner_r - ); - - -/** -* split_str.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-split_str.html -* -**/ - -function _split_t_by(idxs, t, ts = [], i = -1) = - i == -1 ? _split_t_by(idxs, t, [sub_str(t, 0, idxs[0])], i + 1) : ( - i == len(idxs) - 1 ? concat(ts, sub_str(t, idxs[i] + 1)) : - _split_t_by(idxs, t, concat(ts, sub_str(t, idxs[i] + 1, idxs[i + 1])), i + 1) - ); - -function split_str(t, delimiter) = - len(search(delimiter, t)) == 0 ? - [t] : _split_t_by(search(delimiter, t, 0)[0], t); - -/** -* bijection_offset.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-bijection_offset.html -* -**/ - - -function _bijection_inward_edge_normal(edge) = - let( - pt1 = edge[0], - pt2 = edge[1], - dx = pt2[0] - pt1[0], - dy = pt2[1] - pt1[1], - edge_leng = norm([dx, dy]) - ) - [-dy / edge_leng, dx / edge_leng]; - -function _bijection_outward_edge_normal(edge) = -1 * _bijection_inward_edge_normal(edge); - -function _bijection_offset_edge(edge, dx, dy) = - let( - pt1 = edge[0], - pt2 = edge[1], - dxy = [dx, dy] - ) - [pt1 + dxy, pt2 + dxy]; - -function _bijection__bijection_offset_edges(edges, d) = - [ - for(edge = edges) - let( - ow_normal = _bijection_outward_edge_normal(edge), - dx = ow_normal[0] * d, - dy = ow_normal[1] * d - ) - _bijection_offset_edge(edge, dx, dy) - ]; - -function bijection_offset(pts, d, epsilon = 0.0001) = - let( - es = __lines_from(pts, true), - offset_es = _bijection__bijection_offset_edges(es, d), - leng = len(offset_es), - last_p = __line_intersection(offset_es[leng - 1], offset_es[0], epsilon) - ) - concat( - [ - for(i = [0:leng - 2]) - let( - this_edge = offset_es[i], - next_edge = offset_es[i + 1], - p = __line_intersection(this_edge, next_edge, epsilon) - ) - // p == p to avoid [nan, nan], because [nan, nan] != [nan, nan] - if(p != [] && p == p) p - ], - last_p != [] && last_p == last_p ? [last_p] : [] - ); - - -/** -* polytransversals.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-polytransversals.html -* -**/ - - -module polytransversals(transversals) { - polygon( - __polytransversals(transversals) - ); -} - -/** -* shape_pentagram.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_ellipse.html -* -**/ - -function shape_pentagram(r) = - [ - [0, 1], [-0.224514, 0.309017], - [-0.951057, 0.309017], [-0.363271, -0.118034], - [-0.587785, -0.809017], [0, -0.381966], - [0.587785, -0.809017], [0.363271, -0.118034], - [0.951057, 0.309017], [0.224514, 0.309017] - ] * r; - -/** -* bend_extrude.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-bend_extrude.html -* -**/ - -module bend_extrude(size, thickness, angle, frags = 24) { - x = size[0]; - y = size[1]; - frag_width = x / frags ; - frag_angle = angle / frags; - half_frag_width = 0.5 * frag_width; - half_frag_angle = 0.5 * frag_angle; - r = half_frag_width / sin(half_frag_angle); - s = (r - thickness) / r; - - module get_frag(i) { - offsetX = i * frag_width; - linear_extrude(thickness, scale = [s, 1]) - translate([-offsetX - half_frag_width, 0, 0]) - intersection() { - translate([x, 0, 0]) mirror([1, 0, 0]) children(); - translate([offsetX, 0, 0]) - square([frag_width, y]); - } - } - - offsetY = -r * cos(half_frag_angle) ; - rotate([180, 0, 180]) for(i = [0 : frags - 1]) { - rotate(i * frag_angle + half_frag_angle) - translate([0, offsetY, 0]) - rotate([-90, 0, 0]) - get_frag(i) - children(); - } - -} - - -/** -* hexagons.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-hexagons.html -* -**/ - -module hexagons(radius, spacing, levels) { - beginning_n = 2 * levels - 1; - offset_x = radius * cos(30); - offset_y = radius + radius * sin(30); - r_hexagon = radius - spacing / 2; - offset_step = 2 * offset_x; - center_offset = 2 * (offset_x - offset_x * levels); - - module hexagon() { - rotate(30) - circle(r_hexagon, $fn = 6); - } - - function hexagons_pts(hex_datum) = - let( - tx = hex_datum[0][0], - ty = hex_datum[0][1], - n = hex_datum[1], - offset_xs = [for(i = [0:n - 1]) i * offset_step + center_offset] - ) - [ - for(x = offset_xs) [x + tx, ty] - ]; - - module line_hexagons(hex_datum) { - tx = hex_datum[0][0]; - ty = hex_datum[0][1]; - n = hex_datum[1]; - - offset_xs = [for(i = [0:n - 1]) i * offset_step + center_offset]; - for(x = offset_xs) { - p = [x + tx, ty, 0]; - translate(p) - hexagon(); - } - } - - upper_hex_data = levels > 1 ? [ - for(i = [1:beginning_n - levels]) - let( - x = offset_x * i, - y = offset_y * i, - n = beginning_n - i - ) [[x, y], n] - ] : []; - - lower_hex_data = levels > 1 ? [ - for(hex_datum = upper_hex_data) - [[hex_datum[0][0], -hex_datum[0][1]], hex_datum[1]] - ] : []; - - total_hex_data = concat( - [ - [[0, 0], beginning_n] // first line - ], - upper_hex_data, - lower_hex_data - ); - - pts_all_lines = [ - for(hex_datum = total_hex_data) - hexagons_pts(hex_datum) - ]; - - for(pts_one_line = pts_all_lines) { - for(pt = pts_one_line) { - translate(pt) - hexagon(); - } - } - - test_each_hexagon(r_hexagon, pts_all_lines); -} - -// override it to test -module test_each_hexagon(hex_r, pts_all_lines) { - -} - -/** -* golden_spiral_extrude.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-golden_spiral_extrude.html -* -**/ - -module golden_spiral_extrude(shape_pts, from, to, point_distance, - rt_dir = "CT_CLK", twist = 0, scale = 1.0, triangles = "SOLID") { - - pts_angles = golden_spiral( - from = from, - to = to, - point_distance = point_distance, - rt_dir = rt_dir - ); - - pts = [for(pt_angle = pts_angles) pt_angle[0]]; - angles = [ - for(pt_angle = pts_angles) - [90, 0, pt_angle[1] + (rt_dir == "CT_CLK" ? 0 : -90)] - ]; - - sections = cross_sections( - shape_pts, - pts, angles, - twist = twist, - scale = scale - ); - - polysections( - sections, - triangles = triangles - ); - - // testing hook - test_golden_spiral_extrude(sections); -} - -// override it to test -module test_golden_spiral_extrude(sections) { - -} - -/** -* shape_superformula.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_superformula.html -* -**/ - - -function _superformula_r(angle, m1, m2, n1, n2 = 1, n3 = 1, a = 1, b = 1) = - pow( - pow(abs(cos(m1 * angle / 4) / a), n2) + - pow(abs(sin(m2 * angle / 4) / b), n3), - - 1 / n1 - ); - -function shape_superformula(phi_step, m1, m2, n1, n2 = 1, n3 = 1, a = 1, b = 1) = - [ - for(phi = [0:phi_step:6.28318]) - let( - angle = __to_degree(phi), - r = _superformula_r(angle, m1, m2, n1, n2, n3, a, b) - - ) - __ra_to_xy(r, angle) - ]; - -/** -* archimedean_spiral_extrude.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-archimedean_spiral_extrude.html -* -**/ - -module archimedean_spiral_extrude(shape_pts, arm_distance, init_angle, point_distance, num_of_points, - rt_dir = "CT_CLK", twist = 0, scale = 1.0, triangles = "SOLID") { - points_angles = archimedean_spiral( - arm_distance = arm_distance, - init_angle = init_angle, - point_distance = point_distance, - num_of_points = num_of_points, - rt_dir = rt_dir - ); - - clk_a = rt_dir == "CT_CLK" ? 0 : 180; - - points = [for(pa = points_angles) pa[0]]; - angles = [ - for(pa = points_angles) - [90, 0, pa[1] + clk_a] - ]; - - sections = cross_sections(shape_pts, points, angles, twist, scale); - - polysections( - sections, - triangles = triangles - ); - - // testing hook - test_archimedean_spiral_extrude(sections); -} - -// override it to test -module test_archimedean_spiral_extrude(sections) { - -} - -function __is_float(value) = value + 0 != undef; - -/** -* multi_line_text.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-multi_line_text.html -* -**/ -module multi_line_text(lines, line_spacing = 15, size = 10, font = "Arial", halign = "left", valign = "baseline", direction = "ltr", language = "en", script = "latin"){ - to = len(lines) - 1; - inc = line_spacing; - offset_y = inc * to / 2; - union() { - for (i = [0 : to]) { - translate([0 , -i * inc + offset_y, 0]) - text(lines[i], size, font = font, valign = valign, halign = halign, direction = direction, language = language, script = script); - } - } -} - -function __pie_for_rounding(r, begin_a, end_a, frags) = - let( - sector_angle = end_a - begin_a, - step_a = sector_angle / frags, - is_integer = frags % 1 == 0 - ) - r < 0.00005 ? [[0, 0]] : concat([ - for(ang = [begin_a:step_a:end_a]) - [ - r * cos(ang), - r * sin(ang) - ] - ], - is_integer ? [] : [[ - r * cos(end_a), - r * sin(end_a) - ]] - ); - -function __to_3_elems_ang_vect(a) = - let(leng = len(a)) - leng == 3 ? a : ( - leng == 2 ? [a[0], a[1], 0] : [a[0], 0, 0] - ); - -function __to_ang_vect(a) = __is_float(a) ? [0, 0, a] : __to_3_elems_ang_vect(a); - -function __reverse(vt) = - let(leng = len(vt)) - [ - for(i = [0:leng - 1]) - vt[leng - 1 - i] - ]; - -function __to3d(p) = [p[0], p[1], 0]; - - -/** -* shape_glued2circles.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_glued2circles.html -* -**/ - -function _glued2circles_pie_curve(radius, centre_dist, tangent_angle) = - let( - begin_ang = 90 + tangent_angle, - shape_pts = shape_pie(radius, [-begin_ang, begin_ang]) - ) - [ - for(i = [1:len(shape_pts) - 1]) - shape_pts[i] + [centre_dist / 2, 0] - ]; - -function _glued2circles_bezier(radius, centre_dist, tangent_angle, t_step, ctrl_p1) = - let( - ctrl_p = rotate_p([radius * tan(tangent_angle), -radius], tangent_angle), - ctrl_p2 = [-ctrl_p[0], ctrl_p[1]] + [centre_dist / 2, 0], - ctrl_p3 = [-ctrl_p2[0], ctrl_p2[1]], - ctrl_p4 = [-ctrl_p1[0], ctrl_p1[1]] - ) - bezier_curve( - t_step, - [ - ctrl_p1, - ctrl_p2, - ctrl_p3, - ctrl_p4 - ] - ); - -function _glued2circles_lower_half_curve(curve_pts, leng, i = 0) = - i < leng ? ( - curve_pts[leng - 1 - i][0] >= 0 ? - concat( - [curve_pts[leng - 1 - i]], - _glued2circles_lower_half_curve(curve_pts, leng, i + 1) - ) : - _glued2circles_lower_half_curve(curve_pts, leng, i + 1) - ) : []; - -function _glued2circles_half_glued_circle(radius, centre_dist, tangent_angle, t_step) = - let( - pie_curve_pts = _glued2circles_pie_curve(radius, centre_dist, tangent_angle), - curve_pts = _glued2circles_bezier(radius, centre_dist, tangent_angle, t_step, pie_curve_pts[0]), - lower_curve_pts = _glued2circles_lower_half_curve(curve_pts, len(curve_pts)), - leng_half_curve_pts = len(lower_curve_pts), - upper_curve_pts = [ - for(i = [0:leng_half_curve_pts - 1]) - let(pt = lower_curve_pts[leng_half_curve_pts - 1 - i]) - [pt[0], -pt[1]] - ] - ) concat( - lower_curve_pts, - pie_curve_pts, - upper_curve_pts - ); - -function shape_glued2circles(radius, centre_dist, tangent_angle = 30, t_step = 0.1) = - let( - half_glued_circles = _glued2circles_half_glued_circle(radius, centre_dist, tangent_angle, t_step), - leng_half_glued_circles = len(half_glued_circles), - left_half_glued_circles = [ - for(i = [0:leng_half_glued_circles - 1]) - let(pt = half_glued_circles[leng_half_glued_circles - 1 - i]) - [-pt[0], pt[1]] - ] - ) concat(half_glued_circles, left_half_glued_circles); - -/** -* pie.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-pie.html -* -**/ - - -module pie(radius, angle) { - polygon(__shape_pie(radius, angle)); -} - -/** -* in_polyline.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-in_polyline.html -* -**/ - - -function _in_polyline_sub(pts, pt, epsilon, iend, i = 0) = - i == iend ? false : ( - __in_line([pts[i], pts[i + 1]], pt, epsilon) ? true : - _in_polyline_sub(pts, pt, epsilon, iend, i + 1) - ); - -function in_polyline(line_pts, pt, epsilon = 0.0001) = - _in_polyline_sub(line_pts, pt, epsilon, len(line_pts) - 1); - - -function __ra_to_xy(r, a) = [r * cos(a), r * sin(a)]; - /** * function_grapher.scad * @@ -2156,6 +361,9 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { rows = len(points); columns = len(points[0]); + yi_range = [0:rows - 2]; + xi_range = [0:columns - 2]; + // Increasing $fn will be slow when you use "LINES", "HULL_FACES" or "HULL_LINES". module faces() { @@ -2175,16 +383,16 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { leng_pts = len(top_pts); top_tri_faces1 = slicing == "SLASH" ? [ - for(yi = [0:rows - 2]) - for(xi = [0:columns - 2]) + for(yi = yi_range) + for(xi = xi_range) [ xy_to_index(xi, yi, columns), xy_to_index(xi + 1, yi + 1, columns), xy_to_index(xi + 1, yi, columns) ] ] : [ - for(yi = [0:rows - 2]) - for(xi = [0:columns - 2]) + for(yi = yi_range) + for(xi = xi_range) [ xy_to_index(xi, yi, columns), xy_to_index(xi, yi + 1, columns), @@ -2193,16 +401,16 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; top_tri_faces2 = slicing == "SLASH" ? [ - for(yi = [0:rows - 2]) - for(xi = [0:columns - 2]) + for(yi = yi_range) + for(xi = xi_range) [ xy_to_index(xi, yi, columns), xy_to_index(xi, yi + 1, columns), xy_to_index(xi + 1, yi + 1, columns) ] ] : [ - for(yi = [0:rows - 2]) - for(xi = [0:columns - 2]) + for(yi = yi_range) + for(xi = xi_range) [ xy_to_index(xi, yi + 1, columns), xy_to_index(xi + 1, yi + 1, columns), @@ -2221,7 +429,7 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; side_faces1 = [ - for(xi = [0:columns - 2]) + for(xi = xi_range) let( idx1 = xy_to_index(xi, 0, columns), idx2 = xy_to_index(xi + 1, 0, columns) @@ -2235,7 +443,7 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; side_faces2 = [ - for(yi = [0:rows - 2]) + for(yi = yi_range) let( xi = columns - 1, idx1 = xy_to_index(xi, yi, columns), @@ -2250,7 +458,7 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; side_faces3 = [ - for(xi = [0:columns - 2]) + for(xi = xi_range) let( yi = rows - 1, idx1 = xy_to_index(xi, yi, columns), @@ -2265,7 +473,7 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; side_faces4 = [ - for(yi = [0:rows - 2]) + for(yi = yi_range) let( idx1 = xy_to_index(0, yi, columns), idx2 = xy_to_index(0, yi + 1, columns) @@ -2334,8 +542,8 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { if(style == "FACES") { faces(); } else { - for(yi = [0:rows - 2]) { - for(xi = [0:columns - 2]) { + for(yi = yi_range) { + for(xi = xi_range) { if(slicing == "SLASH") { tri_to_graph([ points[yi][xi], @@ -2367,13 +575,393 @@ module test_function_grapher_faces(points, faces) { } +/** +* bezier_curve.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-bezier_curve.html +* +**/ + + +function _combi(n, k) = + let( + bi_coef = [ + [1], // n = 0: for padding + [1,1], // n = 1: for Linear curves, how about drawing a line directly? + [1,2,1], // n = 2: for Quadratic curves + [1,3,3,1] // n = 3: for Cubic Bézier curves + ] + ) + n < len(bi_coef) ? bi_coef[n][k] : ( + k == 0 ? 1 : (_combi(n, k - 1) * (n - k + 1) / k) + ); + +function bezier_curve_coordinate(t, pn, n, i = 0) = + i == n + 1 ? 0 : + (_combi(n, i) * pn[i] * pow(1 - t, n - i) * pow(t, i) + + bezier_curve_coordinate(t, pn, n, i + 1)); + +function _bezier_curve_point(t, points) = + let(n = len(points) - 1) + [ + bezier_curve_coordinate( + t, + [for(p = points) p[0]], + n + ), + bezier_curve_coordinate( + t, + [for(p = points) p[1]], + n + ), + bezier_curve_coordinate( + t, + [for(p = points) p[2]], + n + ) + ]; + +function bezier_curve(t_step, points) = + let( + pts = concat([ + for(t = 0; t < ceil(1 / t_step); t = t + 1) + _bezier_curve_point(t * t_step, points) + ], [_bezier_curve_point(1, points)]) + ) + len(points[0]) == 3 ? pts : [for(pt = pts) __to2d(pt)]; + + +/** +* split_str.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-split_str.html +* +**/ + +function _split_t_by(idxs, t) = + let(leng = len(idxs)) + concat( + [sub_str(t, 0, idxs[0])], + [ + for(i = 0; i < leng; i = i + 1) + sub_str(t, idxs[i] + 1, idxs[i + 1]) + ] + ); + +function split_str(t, delimiter) = + len(search(delimiter, t)) == 0 ? + [t] : _split_t_by(search(delimiter, t, 0)[0], t); + +/** +* in_polyline.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-in_polyline.html +* +**/ + + +function in_polyline(line_pts, pt, epsilon = 0.0001) = + let( + leng = len(line_pts), + iend = leng - 1, + maybe_last = [for(i = 0; i < iend && !__in_line([line_pts[i], line_pts[i + 1]], pt, epsilon); i = i + 1) i][leng - 2] + ) + is_undef(maybe_last); + + +function __trapezium(length, h, round_r) = + let( + r_half_trapezium = __half_trapezium(length / 2, h, round_r), + to = len(r_half_trapezium) - 1, + l_half_trapezium = [ + for(i = 0; i <= to; i = i + 1) + let(pt = r_half_trapezium[to - i]) + [-pt[0], pt[1]] + ] + ) + concat( + r_half_trapezium, + l_half_trapezium + ); + +/** +* hull_polyline3d.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/hull_polyline3d.html +* +**/ + +module hull_polyline3d(points, thickness) { + half_thickness = thickness / 2; + leng = len(points); + + module hull_line3d(index) { + point1 = points[index - 1]; + point2 = points[index]; + + hull() { + translate(point1) + sphere(half_thickness); + translate(point2) + sphere(half_thickness); + } + + // hook for testing + test_line_segment(index, point1, point2, half_thickness); + } + + module polyline3d_inner(index) { + if(index < leng) { + hull_line3d(index); + polyline3d_inner(index + 1); + } + } + + polyline3d_inner(1); +} + +// override it to test +module test_line_segment(index, point1, point2, radius) { + +} + +function __ra_to_xy(r, a) = [r * cos(a), r * sin(a)]; + +/** +* golden_spiral_extrude.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-golden_spiral_extrude.html +* +**/ + +module golden_spiral_extrude(shape_pts, from, to, point_distance, + rt_dir = "CT_CLK", twist = 0, scale = 1.0, triangles = "SOLID") { + + pts_angles = golden_spiral( + from = from, + to = to, + point_distance = point_distance, + rt_dir = rt_dir + ); + + pts = [for(pt_angle = pts_angles) pt_angle[0]]; + angles = [ + for(pt_angle = pts_angles) + [90, 0, pt_angle[1] + (rt_dir == "CT_CLK" ? 0 : -90)] + ]; + + sections = cross_sections( + shape_pts, + pts, angles, + twist = twist, + scale = scale + ); + + polysections( + sections, + triangles = triangles + ); + + // testing hook + test_golden_spiral_extrude(sections); +} + +// override it to test +module test_golden_spiral_extrude(sections) { + +} + +/** +* px_circle.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_circle.html +* +**/ + +function _px_circle_y(f, y) = f >= 0 ? y - 1 : y; +function _px_circle_ddf_y(f, ddf_y) = f >= 0 ? ddf_y + 2 : ddf_y; +function _px_circle_f(f, ddf_y) = f >= 0 ? f + ddf_y : f; + +function _px_circle(f, ddf_x, ddf_y, x, y, filled) = + x >= y ? [] : + let( + ny = _px_circle_y(f, y), + nddf_y = _px_circle_ddf_y(f, ddf_y), + nx = x + 1, + nddf_x = ddf_x + 2, + nf = _px_circle_f(f, ddf_y) + nddf_x + ) + concat( + filled ? + concat( + [for(xi = -nx; xi <= nx; xi = xi + 1) [xi, -ny]], + [for(xi = -ny; xi <= ny; xi = xi + 1) [xi, -nx]], + [for(xi = -ny; xi <= ny; xi = xi + 1) [xi, nx]], + [for(xi = -nx; xi <= nx; xi = xi + 1) [xi, ny]] + ) + : + [ + [-nx, -ny], [nx, -ny], + [-ny, -nx], [ny, -nx], + [-ny, nx], [ny, nx], + [-nx, ny], [nx, ny] + ], + _px_circle(nf, nddf_x, nddf_y, nx, ny, filled) + ); + +function px_circle(radius, filled = false) = + let( + f = 1 - radius, + ddf_x = 1, + ddf_y = -2 * radius, + x = 0, + y = radius + ) + concat( + filled ? + concat( + [[0, radius], [0, -radius]], + [for(xi = -radius; xi <= radius; xi = xi + 1) [xi, 0]] + ) + : + [ + [0, -radius], + [-radius, 0], + [radius, 0], + [0, radius] + ], + _px_circle(f, ddf_x, ddf_y, x, y, filled) + ); + +function __m_shearing(sx, sy, sz) = + let( + sx_along_y = sx[0], + sx_along_z = sx[1], + sy_along_x = sy[0], + sy_along_z = sy[1], + sz_along_x = sz[0], + sz_along_y = sz[1] + ) + [ + [1, sx_along_y, sx_along_z, 0], + [sy_along_x, 1, sy_along_z, 0], + [sz_along_x, sz_along_y, 1, 0], + [0, 0, 0, 1] + ]; + +/** +* shape_ellipse.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_ellipse.html +* +**/ + + +function shape_ellipse(axes) = + let( + frags = __frags(axes[0]), + step_a = 360 / frags, + a_end = 360 - step_a, + shape_pts = [ + for(a = 0; a <= a_end; a = a + step_a) + [axes[0] * cos(a), axes[1] * sin(a)] + ] + ) shape_pts; + +/** +* sort.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-sort.html +* +**/ + +function _sort(lt, i) = + let(leng = len(lt)) + leng <= 1 ? lt : + let( + pivot = lt[0], + before = [for(j = 1; j < leng; j = j + 1) if(lt[j][i] < pivot[i]) lt[j]], + after = [for(j = 1; j < leng; j = j + 1) if(lt[j][i] >= pivot[i]) lt[j]] + ) + concat(_sort(before, i), [pivot], _sort(after, i)); + +function sort(lt, by = "idx", idx = 0) = + let( + dict = [["x", 0], ["y", 1], ["z", 0], ["idx", idx]], + i = dict[search(by, dict)[0]][1] + ) + _sort(lt, i); + +/** +* stereographic_extrude.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-stereographic_extrude.html +* +**/ + +module stereographic_extrude(shadow_side_leng) { + half_side_length = shadow_side_leng / 2; + outer_sphere_r = half_side_length / 3; + a = atan(sqrt(2) * half_side_length / (2 * outer_sphere_r)); + inner_sphere_r = outer_sphere_r * sin(a); + + intersection() { + translate([0, 0, outer_sphere_r]) difference() { + sphere(outer_sphere_r); + sphere(outer_sphere_r / 2 + inner_sphere_r / 2); + + translate([0, 0, outer_sphere_r / 2]) + linear_extrude(outer_sphere_r) + circle(inner_sphere_r * cos(a)); + } + + linear_extrude(outer_sphere_r * 2, scale = 0.01) + children(); + } + + // hook for testing + test_stereographic_extrude_rs(outer_sphere_r, inner_sphere_r); +} + +// override for testing +module test_stereographic_extrude_rs(outer_sphere_r, inner_sphere_r) { + +} + /** * turtle3d.scad * * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-turtle3d.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-turtle3d.html * **/ @@ -2491,8 +1079,8 @@ function _turtle3d_zu_turn(turtle, a) = ); function _turtle3d_create_cmd(arg1, arg2) = - (arg1 == undef && arg2 == undef) ? _turtle3d_create_default() : ( - (arg1 != undef && arg2 != undef) ? _turtle3d_create(arg1, arg2) : undef + (is_undef(arg1) && is_undef(arg2)) ? _turtle3d_create_default() : ( + (!is_undef(arg1) && !is_undef(arg2)) ? _turtle3d_create(arg1, arg2) : undef ); function _turtle3d_chain_move(cmd, arg1, arg2) = @@ -2519,6 +1107,563 @@ function turtle3d(cmd, arg1, arg2) = _turtle3d_create_cmd(arg1, arg2) : _turtle3d_chain_move(cmd, arg1, arg2); +/** +* crystal_ball.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-crystal_ball.html +* +**/ + + +module crystal_ball(radius, theta = 360, phi = 180) { + phis = is_num(phi) ? [0, phi] : phi; + + frags = __frags(radius); + + shape_pts = shape_pie( + radius, + [90 - phis[1], 90 - phis[0]], + $fn = __nearest_multiple_of_4(frags) + ); + + ring_extrude( + shape_pts, + angle = theta, + radius = 0, + $fn = frags + ); + + // hook for testing + test_crystal_ball_pie(shape_pts); +} + +// override it to test +module test_crystal_ball_pie(shape_pts) { + +} + +/** +* rounded_square.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_square.html +* +**/ + + +module rounded_square(size, corner_r, center = false) { + is_flt = is_num(size); + x = is_flt ? size : size[0]; + y = is_flt ? size : size[1]; + + position = center ? [0, 0] : [x / 2, y / 2]; + points = __trapezium( + length = x, + h = y, + round_r = corner_r + ); + + translate(position) + polygon(points); + + // hook for testing + test_rounded_square(position, points); +} + +// override it to test +module test_rounded_square(position, points) { +} + +/** +* midpt_smooth.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-midpt_smooth.html +* +**/ + +function _midpt_smooth_sub(points, iend, closed = false) = + concat( + [ + for(i = 0; i < iend; i = i + 1) + (points[i] + points[i + 1]) / 2 + ], + closed ? [(points[iend] + points[0]) / 2] : [] + ); + +function midpt_smooth(points, n, closed = false) = + let( + smoothed = _midpt_smooth_sub(points, len(points) - 1, closed) + ) + n == 1 ? smoothed : midpt_smooth(smoothed, n - 1, closed); + +/** +* ring_extrude.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-ring_extrude.html +* +**/ + + +module ring_extrude(shape_pts, radius, angle = 360, twist = 0, scale = 1.0, triangles = "SOLID") { + if(twist == 0 && scale == 1.0) { + rotate_extrude(angle = angle) + translate([radius, 0, 0]) + polygon(shape_pts); + } else { + a_step = 360 / __frags(radius); + + angles = is_num(angle) ? [0, angle] : angle; + + m = floor(angles[0] / a_step) + 1; + n = floor(angles[1] / a_step); + + leng = radius * cos(a_step / 2); + + begin_r = + leng / cos((m - 0.5) * a_step - angles[0]); + + end_r = + leng / cos((n + 0.5) * a_step - angles[1]); + + angs = concat( + [[90, 0, angles[0]]], + m > n ? [] : [for(i = [m:n]) [90, 0, a_step * i]] + ); + pts = concat( + [__ra_to_xy(begin_r, angles[0])], + m > n ? [] : [for(i = [m:n]) __ra_to_xy(radius, a_step * i)] + ); + + is_angle_frag_end = angs[len(angs) - 1][2] == angles[1]; + + all_angles = is_angle_frag_end ? + angs : + concat(angs, [[90, 0, angles[1]]]); + + all_points = is_angle_frag_end ? + pts : + concat(pts, [__ra_to_xy(end_r, angles[1])]); + + sections = cross_sections(shape_pts, all_points, all_angles, twist, scale); + + polysections( + sections, + triangles = triangles + ); + + // hook for testing + test_ring_extrude(sections); + } +} + +// Override it to test +module test_ring_extrude(sections) { + +} + +/** +* shear.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shear.html +* +**/ + + +module shear(sx = [0, 0], sy = [0, 0], sz = [0, 0]) { + multmatrix(__m_shearing(sx, sy, sz)) children(); +} + +/** +* shape_trapezium.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_trapezium.html +* +**/ + + +function shape_trapezium(length, h, corner_r = 0) = + __trapezium( + length = length, + h = h, + round_r = corner_r + ); + + +/** +* polysections.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-polysections.html +* +**/ + + +module polysections(sections, triangles = "SOLID") { + + function side_indexes(sects, begin_idx = 0) = + let( + leng_sects = len(sects), + leng_pts_sect = len(sects[0]), + range_j = [begin_idx:leng_pts_sect:begin_idx + (leng_sects - 2) * leng_pts_sect], + range_i = [0:leng_pts_sect - 1] + ) + concat( + [ + for(j = range_j) + for(i = range_i) + [ + j + i, + j + (i + 1) % leng_pts_sect, + j + (i + 1) % leng_pts_sect + leng_pts_sect + ] + ], + [ + for(j = range_j) + for(i = range_i) + [ + j + i, + j + (i + 1) % leng_pts_sect + leng_pts_sect , + j + i + leng_pts_sect + ] + ] + ); + + function search_at(f_sect, p, leng_pts_sect, i = 0) = + i < leng_pts_sect ? + (p == f_sect[i] ? i : search_at(f_sect, p, leng_pts_sect, i + 1)) : -1; + + function the_same_after_twisting(f_sect, l_sect, leng_pts_sect) = + let( + found_at_i = search_at(f_sect, l_sect[0], leng_pts_sect) + ) + found_at_i <= 0 ? false : + l_sect == concat( + [for(i = found_at_i; i < leng_pts_sect; i = i + 1) f_sect[i]], + [for(i = 0; i < found_at_i; i = i + 1) f_sect[i]] + ); + + function to_v_pts(sects) = + [ + for(sect = sects) + for(pt = sect) + pt + ]; + + module solid_sections(sects) { + + leng_sects = len(sects); + leng_pts_sect = len(sects[0]); + first_sect = sects[0]; + last_sect = sects[leng_sects - 1]; + + v_pts = [ + for(sect = sects) + for(pt = sect) + pt + ]; + + begin_end_the_same = + first_sect == last_sect || + the_same_after_twisting(first_sect, last_sect, leng_pts_sect); + + if(begin_end_the_same) { + f_idxes = side_indexes(sects); + + polyhedron( + v_pts, + f_idxes + ); + + // hook for testing + test_polysections_solid(v_pts, f_idxes); + } else { + range_i = [0:leng_pts_sect - 1]; + first_idxes = [for(i = range_i) leng_pts_sect - 1 - i]; + last_idxes = [ + for(i = range_i) + i + leng_pts_sect * (leng_sects - 1) + ]; + + f_idxes = concat([first_idxes], side_indexes(sects), [last_idxes]); + + polyhedron( + v_pts, + f_idxes + ); + + // hook for testing + test_polysections_solid(v_pts, f_idxes); + } + } + + module hollow_sections(sects) { + leng_sects = len(sects); + leng_sect = len(sects[0]); + half_leng_sect = leng_sect / 2; + half_leng_v_pts = leng_sects * half_leng_sect; + + function strip_sects(begin_idx, end_idx) = + [ + for(i = 0; i < leng_sects; i = i + 1) + [ + for(j = begin_idx; j <= end_idx; j = j + 1) + sects[i][j] + ] + ]; + + function first_idxes() = + [ + for(i = 0; i < half_leng_sect; i = i + 1) + [ + i, + i + half_leng_v_pts, + (i + 1) % half_leng_sect + half_leng_v_pts, + (i + 1) % half_leng_sect + ] + ]; + + function last_idxes(begin_idx) = + [ + for(i = 0; i < half_leng_sect; i = i + 1) + [ + begin_idx + i, + begin_idx + (i + 1) % half_leng_sect, + begin_idx + (i + 1) % half_leng_sect + half_leng_v_pts, + begin_idx + i + half_leng_v_pts + ] + ]; + + outer_sects = strip_sects(0, half_leng_sect - 1); + inner_sects = strip_sects(half_leng_sect, leng_sect - 1); + + outer_v_pts = to_v_pts(outer_sects); + inner_v_pts = to_v_pts(inner_sects); + + outer_idxes = side_indexes(outer_sects); + inner_idxes = [ + for(idxes = side_indexes(inner_sects, half_leng_v_pts)) + __reverse(idxes) + ]; + + first_outer_sect = outer_sects[0]; + last_outer_sect = outer_sects[leng_sects - 1]; + first_inner_sect = inner_sects[0]; + last_inner_sect = inner_sects[leng_sects - 1]; + + leng_pts_sect = len(first_outer_sect); + + begin_end_the_same = + (first_outer_sect == last_outer_sect && first_inner_sect == last_inner_sect) || + ( + the_same_after_twisting(first_outer_sect, last_outer_sect, leng_pts_sect) && + the_same_after_twisting(first_inner_sect, last_inner_sect, leng_pts_sect) + ); + + v_pts = concat(outer_v_pts, inner_v_pts); + + if(begin_end_the_same) { + f_idxes = concat(outer_idxes, inner_idxes); + + polyhedron( + v_pts, + f_idxes + ); + + // hook for testing + test_polysections_solid(v_pts, f_idxes); + } else { + first_idxes = first_idxes(); + last_idxes = last_idxes(half_leng_v_pts - half_leng_sect); + + f_idxes = concat(first_idxes, outer_idxes, inner_idxes, last_idxes); + + polyhedron( + v_pts, + f_idxes + ); + + // hook for testing + test_polysections_solid(v_pts, f_idxes); + } + } + + module triangles_defined_sections() { + module tri_sections(tri1, tri2) { + hull() polyhedron( + points = concat(tri1, tri2), + faces = [ + [0, 1, 2], + [3, 5, 4], + [1, 3, 4], [2, 1, 4], [2, 3, 0], + [0, 3, 1], [2, 4, 5], [2, 5, 3] + ] + ); + } + + module two_sections(section1, section2) { + for(idx = triangles) { + tri_sections( + [ + section1[idx[0]], + section1[idx[1]], + section1[idx[2]] + ], + [ + section2[idx[0]], + section2[idx[1]], + section2[idx[2]] + ] + ); + } + } + + for(i = [0:len(sections) - 2]) { + two_sections( + sections[i], + sections[i + 1] + ); + } + } + + if(triangles == "SOLID") { + solid_sections(sections); + } else if(triangles == "HOLLOW") { + hollow_sections(sections); + } + else { + triangles_defined_sections(); + } +} + +// override it to test + +module test_polysections_solid(points, faces) { + +} + +/** +* archimedean_spiral.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-archimedean_spiral.html +* +**/ + +function _radian_step(b, theta, l) = + let(r_square = pow(b * theta, 2)) + acos((2 * r_square - pow(l, 2)) / (2 * r_square)) / 180 * PI; + +function _find_radians(b, point_distance, radians, n, count = 1) = + let(pre_radians = radians[count - 1]) + count == n ? radians : ( + _find_radians( + b, + point_distance, + concat( + radians, + [pre_radians + _radian_step(b, pre_radians, point_distance)] + ), + n, + count + 1) + ); + +function archimedean_spiral(arm_distance, init_angle, point_distance, num_of_points, rt_dir = "CT_CLK") = + let(b = arm_distance / (2 * PI), init_radian = init_angle * PI / 180) + [ + for(theta = _find_radians(b, point_distance, [init_radian], num_of_points)) + let(r = b * theta, a = (rt_dir == "CT_CLK" ? 1 : -1) * theta * 57.2958) + [[r * cos(a), r * sin(a)], a] + ]; + +/** +* golden_spiral.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-golden_spiral.html +* +**/ + +function _fast_fibonacci_sub(nth) = + let( + _f = _fast_fibonacci_2_elems(floor(nth / 2)), + a = _f[0], + b = _f[1], + c = a * (b * 2 - a), + d = a * a + b * b + ) + nth % 2 == 0 ? [c, d] : [d, c + d]; + +function _fast_fibonacci_2_elems(nth) = + nth == 0 ? [0, 1] : _fast_fibonacci_sub(nth); + +function _fast_fibonacci(nth) = + _fast_fibonacci_2_elems(nth)[0]; + +function _remove_same_pts(pts1, pts2) = + pts1[len(pts1) - 1] == pts2[0] ? + concat(pts1, [for(i = 1; i < len(pts2); i = i + 1) pts2[i]]) : + concat(pts1, pts2); + +function _golden_spiral_from_ls_or_eql_to(from, to, point_distance, rt_dir) = + let( + f1 = _fast_fibonacci(from), + f2 = _fast_fibonacci(from + 1), + fn = floor(f1 * 6.28312 / point_distance), + $fn = fn + 4 - (fn % 4), + circle_pts = circle_path(radius = f1, n = $fn / 4 + 1), + len_pts = len(circle_pts), + a_step = 360 / $fn * rt_dir, + range_i = [0:len_pts - 1], + arc_points_angles = (rt_dir == 1 ? [ + for(i = range_i) + [circle_pts[i], a_step * i] + ] : [ + for(i = range_i) let(idx = len_pts - i - 1) + [circle_pts[idx], a_step * i] + ]), + offset = f2 - f1 + ) _remove_same_pts( + arc_points_angles, + [ + for(pt_a = _golden_spiral(from + 1, to, point_distance, rt_dir)) + [ + rotate_p(pt_a[0], [0, 0, 90 * rt_dir]) + + (rt_dir == 1 ? [0, -offset, 0] : [-offset, 0, 0]), + pt_a[1] + 90 * rt_dir + ] + ] + ); + +function _golden_spiral(from, to, point_distance, rt_dir) = + from <= to ? + _golden_spiral_from_ls_or_eql_to(from, to, point_distance, rt_dir) : []; + +function golden_spiral(from, to, point_distance, rt_dir = "CT_CLK") = + _golden_spiral(from, to, point_distance, (rt_dir == "CT_CLK" ? 1 : -1)); + /** * shape_taiwan.scad * @@ -2530,22 +1675,1952 @@ function turtle3d(cmd, arg1, arg2) = **/ function shape_taiwan(h, distance = 0) = - let(tw = [[3.85724, 6.24078], [3.7902, 6.25779], [3.73596, 6.26288], [3.62807, 6.24587], [3.59581, 6.2602], [3.55429, 6.32386], [3.51698, 6.4571], [3.50768, 6.5361], [3.51188, 6.58284], [3.53917, 6.63708], [3.48981, 6.66934], [2.78286, 6.83905], [2.7218, 6.86112], [2.68441, 6.90272], [2.61063, 6.96209], [2.64288, 7.05549], [2.61062, 7.06568], [2.56396, 7.06058], [2.50281, 7.04109], [2.44849, 7.15647], [2.29319, 7.37123], [2.22438, 7.42555], [2.05644, 7.44248], [1.88674, 7.40509], [1.73901, 7.32879], [1.63795, 7.238], [1.58868, 7.14974], [1.54463, 7.0555], [1.5149, 7.0411], [1.48526, 7.01895], [1.53658, 6.9725], [1.58825, 6.92909], [1.63096, 6.86281], [1.61348, 6.80387], [1.57757, 6.83721], [1.53949, 6.89116], [1.48525, 6.87393], [1.43851, 6.87393], [1.40381, 6.86623], [1.37408, 6.85174], [1.28068, 6.77282], [1.20682, 6.7457], [0.723984, 6.65659], [0.586451, 6.60741], [0.5152, 6.57094], [0.458435, 6.52167], [0.393838, 6.47922], [0.108666, 6.38843], [-0.002506, 6.2925], [-0.110307, 6.16693], [-0.278327, 5.89785], [-0.312266, 5.80452], [-0.319942, 5.74076], [-0.35978, 5.72804], [-0.398773, 5.69411], [-0.431113, 5.64921], [-0.443073, 5.60508], [-0.45317, 5.54563], [-0.477762, 5.51429], [-0.504966, 5.48196], [-0.527025, 5.4379], [-0.511683, 5.32413], [-0.544022, 5.28008], [-0.630518, 5.10523], [-0.652506, 5.02118], [-0.721317, 4.96517], [-0.751047, 4.87851], [-0.807895, 4.81922], [-0.849502, 4.76313], [-0.835106, 4.67916], [-0.94535, 4.70123], [-1.03193, 4.67664], [-1.10318, 4.62476], [-1.16685, 4.55856], [-1.18724, 4.52125], [-1.20679, 4.47981], [-1.23643, 4.44755], [-1.33927, 4.41782], [-1.36462, 4.37621], [-1.38844, 4.28037], [-1.47747, 4.11993], [-1.51477, 4.03419], [-1.52674, 3.93321], [-1.55638, 3.87122], [-1.87389, 3.52162], [-1.92308, 3.43757], [-1.96721, 3.28479], [-2.11055, 3.03862], [-2.15224, 2.84946], [-2.18703, 2.75092], [-2.23874, 2.70864], [-2.2481, 2.65676], [-2.43313, 2.44284], [-2.47482, 2.40393], [-2.48998, 2.36148], [-2.49681, 2.20617], [-2.51727, 2.15951], [-2.59526, 2.09828], [-2.61312, 2.05583], [-2.62237, 2.00926], [-2.64705, 1.98728], [-2.68183, 1.97279], [-2.71915, 1.94559], [-2.76589, 1.90137], [-2.80741, 1.82768], [-2.89576, 1.58074], [-2.9601, 1.46267], [-3.00171, 1.34223], [-3.03396, 1.29978], [-3.14261, 1.19451], [-3.16223, 1.14945], [-3.18683, 1.04173], [-3.21142, 0.994987], [-3.30988, 0.906048], [-3.32504, 0.864443], [-3.42105, 0.738702], [-3.43797, 0.692212], [-3.47452, 0.558807], [-3.54409, 0.411083], [-3.62553, 0.283068], [-3.69434, 0.142925], [-3.72407, -0.047077], [-3.71634, -0.135425], [-3.67474, -0.317847], [-3.65948, -0.475761], [-3.62302, -0.539348], [-3.61029, -0.588533], [-3.62554, -0.628538], [-3.65703, -0.687068], [-3.61029, -0.73878], [-3.64002, -0.795629], [-3.57542, -0.918676], [-3.67902, -1.14784], [-3.62553, -1.18944], [-3.59589, -1.2046], [-3.60515, -1.24376], [-3.6476, -1.28781], [-3.68162, -1.37186], [-3.72138, -1.38205], [-3.74597, -1.40925], [-3.79785, -1.54426], [-3.80458, -1.58157], [-3.81731, -1.61121], [-3.84956, -1.65526], [-3.87677, -1.70958], [-3.8665, -1.75893], [-3.84714, -1.80812], [-3.83434, -1.86665], [-3.85397, -1.90666], [-3.89633, -1.91845], [-3.93532, -1.94052], [-3.94552, -2.0025], [-3.90315, -2.05169], [-3.83687, -2.10846], [-3.91452, -2.12525], [-3.92486, -2.16746], [-3.8021, -2.21718], [-3.78004, -2.24169], [-3.79537, -2.28599], [-3.84194, -2.30292], [-3.9014, -2.31052], [-3.94553, -2.3325], [-3.90902, -2.38984], [-3.81228, -2.42599], [-3.7487, -2.45311], [-3.7359, -2.49042], [-3.61032, -2.51249], [-3.51439, -2.52698], [-3.49737, -2.60598], [-3.53645, -2.69921], [-3.61031, -2.75101], [-3.55085, -2.813], [-3.52197, -2.86732], [-3.47455, -3.17194], [-3.46268, -3.20175], [-3.42108, -3.27805], [-3.36173, -3.36723], [-3.3667, -3.40353], [-3.39137, -3.45802], [-3.39137, -3.50468], [-3.37605, -3.57332], [-3.3048, -3.72879], [-3.22849, -3.84755], [-3.18689, -3.9332], [-3.16473, -4.02239], [-3.18175, -4.08606], [-3.21401, -4.15723], [-3.18942, -4.22848], [-3.1377, -4.29316], [-2.99756, -4.4237], [-2.91612, -4.51458], [-2.85675, -4.62575], [-2.84478, -4.76572], [-2.64282, -4.92119], [-2.55624, -4.90831], [-2.51219, -4.92877], [-2.47733, -4.95075], [-2.40355, -5.01441], [-2.33222, -5.06116], [-2.17691, -5.13485], [-2.10053, -5.19944], [-2.05126, -5.27328], [-2.00199, -5.30293], [-1.87641, -5.40147], [-1.84416, -5.44552], [-1.77804, -5.59577], [-1.69399, -5.70181], [-1.66687, -5.74611], [-1.35963, -6.53694], [-1.36899, -6.58351], [-1.4063, -6.638], [-1.41556, -6.68466], [-1.41556, -6.84915], [-1.42322, -6.93076], [-1.41556, -6.96992], [-1.33, -7.11073], [-1.34945, -7.21845], [-1.34692, -7.25315], [-1.28999, -7.29989], [-1.23921, -7.31522], [-1.20181, -7.27783], [-1.19675, -7.17685], [-1.07362, -7.20658], [-0.953101, -7.2609], [-0.849593, -7.33982], [-0.778259, -7.44248], [-0.775729, -7.35413], [-0.795186, -7.21416], [-0.797786, -7.08606], [-0.736641, -7.02913], [-0.685014, -6.99014], [-0.645009, -6.89851], [-0.620417, -6.78565], [-0.637343, -5.77062], [-0.612751, -5.52192], [-0.590692, -5.43534], [-0.443136, -5.1799], [-0.371802, -4.92362], [-0.341989, -4.73344], [-0.29036, -4.64283], [-0.16723, -4.48735], [-0.128151, -4.41105], [-0.046711, -4.20395], [-0.014539, -4.16235], [0.027066, -4.14297], [0.191803, -3.96039], [0.441265, -3.79565], [0.515127, -3.72608], [0.588904, -3.63285], [0.62032, -3.58105], [0.640788, -3.5317], [0.643228, -3.48757], [0.633124, -3.39173], [0.640794, -3.35189], [0.689979, -3.29336], [0.9039, -3.11338], [0.923353, -3.07093], [1.08363, -2.84522], [1.11605, -2.75342], [1.16262, -2.55407], [1.23396, -2.42344], [1.26116, -2.33518], [1.27809, -2.30031], [1.31035, -2.26637], [1.38421, -2.21213], [1.41638, -2.17987], [1.49024, -2.02701], [1.50464, -1.87935], [1.50212, -1.72405], [1.52671, -1.54937], [1.55897, -1.45589], [1.59897, -1.37942], [1.70669, -1.23616], [1.74147, -1.16044], [1.98243, 0.226167], [2.05637, 0.376416], [2.18195, 0.989965], [2.27788, 1.25316], [2.32959, 1.50186], [2.33469, 1.60107], [2.34741, 1.65447], [2.40173, 1.74366], [2.42118, 1.79798], [2.38391, 1.88363], [2.36176, 1.9185], [2.33473, 1.99994], [2.33213, 2.07136], [2.3542, 2.13747], [2.46798, 2.30473], [2.51203, 2.49221], [2.55625, 2.58553], [2.59356, 2.62284], [2.71147, 2.72138], [2.69968, 2.75364], [2.72175, 2.78497], [2.793, 2.8419], [2.89145, 2.97513], [2.98064, 3.06078], [2.97805, 3.26778], [2.98485, 3.3638], [2.99757, 3.41297], [3.01702, 3.44775], [3.03412, 3.48936], [3.02732, 3.59547], [3.03152, 3.64474], [3.14008, 3.76771], [3.23348, 3.82464], [3.27332, 3.8611], [3.26572, 3.90356], [3.23852, 3.94517], [3.22673, 3.98929], [3.23343, 4.02904], [3.32515, 4.08085], [3.33955, 4.16659], [3.31748, 4.26758], [3.2784, 4.34405], [3.3056, 4.3635], [3.37526, 4.38649], [3.39869, 4.42513], [3.32514, 4.42541], [3.22669, 4.4874], [3.17237, 4.58324], [3.16977, 4.70636], [3.19192, 4.7675], [3.19432, 4.8294], [3.14261, 5.06624], [3.14001, 5.17909], [3.14781, 5.29709], [3.1724, 5.41583], [3.20634, 5.51943], [3.25384, 5.59329], [3.54153, 5.94036], [3.62558, 6.01431], [3.94553, 6.17215], [3.91327, 6.21106]] / 15 * h) - distance == 0 ? tw : [for(i = [0 : len(tw) - 1]) if(norm(tw[i] - tw[i + 1]) > distance) tw[i]]; - - -function __line_intersection(line_pts1, line_pts2, epsilon = 0.0001) = let( - a1 = line_pts1[0], - a2 = line_pts1[1], - b1 = line_pts2[0], - b2 = line_pts2[1], - a = a2 - a1, - b = b2 - b1, - s = b1 - a1 + tw = [[3.85724, 6.24078], [3.7902, 6.25779], [3.73596, 6.26288], [3.62807, 6.24587], [3.59581, 6.2602], [3.55429, 6.32386], [3.51698, 6.4571], [3.50768, 6.5361], [3.51188, 6.58284], [3.53917, 6.63708], [3.48981, 6.66934], [2.78286, 6.83905], [2.7218, 6.86112], [2.68441, 6.90272], [2.61063, 6.96209], [2.64288, 7.05549], [2.61062, 7.06568], [2.56396, 7.06058], [2.50281, 7.04109], [2.44849, 7.15647], [2.29319, 7.37123], [2.22438, 7.42555], [2.05644, 7.44248], [1.88674, 7.40509], [1.73901, 7.32879], [1.63795, 7.238], [1.58868, 7.14974], [1.54463, 7.0555], [1.5149, 7.0411], [1.48526, 7.01895], [1.53658, 6.9725], [1.58825, 6.92909], [1.63096, 6.86281], [1.61348, 6.80387], [1.57757, 6.83721], [1.53949, 6.89116], [1.48525, 6.87393], [1.43851, 6.87393], [1.40381, 6.86623], [1.37408, 6.85174], [1.28068, 6.77282], [1.20682, 6.7457], [0.723984, 6.65659], [0.586451, 6.60741], [0.5152, 6.57094], [0.458435, 6.52167], [0.393838, 6.47922], [0.108666, 6.38843], [-0.002506, 6.2925], [-0.110307, 6.16693], [-0.278327, 5.89785], [-0.312266, 5.80452], [-0.319942, 5.74076], [-0.35978, 5.72804], [-0.398773, 5.69411], [-0.431113, 5.64921], [-0.443073, 5.60508], [-0.45317, 5.54563], [-0.477762, 5.51429], [-0.504966, 5.48196], [-0.527025, 5.4379], [-0.511683, 5.32413], [-0.544022, 5.28008], [-0.630518, 5.10523], [-0.652506, 5.02118], [-0.721317, 4.96517], [-0.751047, 4.87851], [-0.807895, 4.81922], [-0.849502, 4.76313], [-0.835106, 4.67916], [-0.94535, 4.70123], [-1.03193, 4.67664], [-1.10318, 4.62476], [-1.16685, 4.55856], [-1.18724, 4.52125], [-1.20679, 4.47981], [-1.23643, 4.44755], [-1.33927, 4.41782], [-1.36462, 4.37621], [-1.38844, 4.28037], [-1.47747, 4.11993], [-1.51477, 4.03419], [-1.52674, 3.93321], [-1.55638, 3.87122], [-1.87389, 3.52162], [-1.92308, 3.43757], [-1.96721, 3.28479], [-2.11055, 3.03862], [-2.15224, 2.84946], [-2.18703, 2.75092], [-2.23874, 2.70864], [-2.2481, 2.65676], [-2.43313, 2.44284], [-2.47482, 2.40393], [-2.48998, 2.36148], [-2.49681, 2.20617], [-2.51727, 2.15951], [-2.59526, 2.09828], [-2.61312, 2.05583], [-2.62237, 2.00926], [-2.64705, 1.98728], [-2.68183, 1.97279], [-2.71915, 1.94559], [-2.76589, 1.90137], [-2.80741, 1.82768], [-2.89576, 1.58074], [-2.9601, 1.46267], [-3.00171, 1.34223], [-3.03396, 1.29978], [-3.14261, 1.19451], [-3.16223, 1.14945], [-3.18683, 1.04173], [-3.21142, 0.994987], [-3.30988, 0.906048], [-3.32504, 0.864443], [-3.42105, 0.738702], [-3.43797, 0.692212], [-3.47452, 0.558807], [-3.54409, 0.411083], [-3.62553, 0.283068], [-3.69434, 0.142925], [-3.72407, -0.047077], [-3.71634, -0.135425], [-3.67474, -0.317847], [-3.65948, -0.475761], [-3.62302, -0.539348], [-3.61029, -0.588533], [-3.62554, -0.628538], [-3.65703, -0.687068], [-3.61029, -0.73878], [-3.64002, -0.795629], [-3.57542, -0.918676], [-3.67902, -1.14784], [-3.62553, -1.18944], [-3.59589, -1.2046], [-3.60515, -1.24376], [-3.6476, -1.28781], [-3.68162, -1.37186], [-3.72138, -1.38205], [-3.74597, -1.40925], [-3.79785, -1.54426], [-3.80458, -1.58157], [-3.81731, -1.61121], [-3.84956, -1.65526], [-3.87677, -1.70958], [-3.8665, -1.75893], [-3.84714, -1.80812], [-3.83434, -1.86665], [-3.85397, -1.90666], [-3.89633, -1.91845], [-3.93532, -1.94052], [-3.94552, -2.0025], [-3.90315, -2.05169], [-3.83687, -2.10846], [-3.91452, -2.12525], [-3.92486, -2.16746], [-3.8021, -2.21718], [-3.78004, -2.24169], [-3.79537, -2.28599], [-3.84194, -2.30292], [-3.9014, -2.31052], [-3.94553, -2.3325], [-3.90902, -2.38984], [-3.81228, -2.42599], [-3.7487, -2.45311], [-3.7359, -2.49042], [-3.61032, -2.51249], [-3.51439, -2.52698], [-3.49737, -2.60598], [-3.53645, -2.69921], [-3.61031, -2.75101], [-3.55085, -2.813], [-3.52197, -2.86732], [-3.47455, -3.17194], [-3.46268, -3.20175], [-3.42108, -3.27805], [-3.36173, -3.36723], [-3.3667, -3.40353], [-3.39137, -3.45802], [-3.39137, -3.50468], [-3.37605, -3.57332], [-3.3048, -3.72879], [-3.22849, -3.84755], [-3.18689, -3.9332], [-3.16473, -4.02239], [-3.18175, -4.08606], [-3.21401, -4.15723], [-3.18942, -4.22848], [-3.1377, -4.29316], [-2.99756, -4.4237], [-2.91612, -4.51458], [-2.85675, -4.62575], [-2.84478, -4.76572], [-2.64282, -4.92119], [-2.55624, -4.90831], [-2.51219, -4.92877], [-2.47733, -4.95075], [-2.40355, -5.01441], [-2.33222, -5.06116], [-2.17691, -5.13485], [-2.10053, -5.19944], [-2.05126, -5.27328], [-2.00199, -5.30293], [-1.87641, -5.40147], [-1.84416, -5.44552], [-1.77804, -5.59577], [-1.69399, -5.70181], [-1.66687, -5.74611], [-1.35963, -6.53694], [-1.36899, -6.58351], [-1.4063, -6.638], [-1.41556, -6.68466], [-1.41556, -6.84915], [-1.42322, -6.93076], [-1.41556, -6.96992], [-1.33, -7.11073], [-1.34945, -7.21845], [-1.34692, -7.25315], [-1.28999, -7.29989], [-1.23921, -7.31522], [-1.20181, -7.27783], [-1.19675, -7.17685], [-1.07362, -7.20658], [-0.953101, -7.2609], [-0.849593, -7.33982], [-0.778259, -7.44248], [-0.775729, -7.35413], [-0.795186, -7.21416], [-0.797786, -7.08606], [-0.736641, -7.02913], [-0.685014, -6.99014], [-0.645009, -6.89851], [-0.620417, -6.78565], [-0.637343, -5.77062], [-0.612751, -5.52192], [-0.590692, -5.43534], [-0.443136, -5.1799], [-0.371802, -4.92362], [-0.341989, -4.73344], [-0.29036, -4.64283], [-0.16723, -4.48735], [-0.128151, -4.41105], [-0.046711, -4.20395], [-0.014539, -4.16235], [0.027066, -4.14297], [0.191803, -3.96039], [0.441265, -3.79565], [0.515127, -3.72608], [0.588904, -3.63285], [0.62032, -3.58105], [0.640788, -3.5317], [0.643228, -3.48757], [0.633124, -3.39173], [0.640794, -3.35189], [0.689979, -3.29336], [0.9039, -3.11338], [0.923353, -3.07093], [1.08363, -2.84522], [1.11605, -2.75342], [1.16262, -2.55407], [1.23396, -2.42344], [1.26116, -2.33518], [1.27809, -2.30031], [1.31035, -2.26637], [1.38421, -2.21213], [1.41638, -2.17987], [1.49024, -2.02701], [1.50464, -1.87935], [1.50212, -1.72405], [1.52671, -1.54937], [1.55897, -1.45589], [1.59897, -1.37942], [1.70669, -1.23616], [1.74147, -1.16044], [1.98243, 0.226167], [2.05637, 0.376416], [2.18195, 0.989965], [2.27788, 1.25316], [2.32959, 1.50186], [2.33469, 1.60107], [2.34741, 1.65447], [2.40173, 1.74366], [2.42118, 1.79798], [2.38391, 1.88363], [2.36176, 1.9185], [2.33473, 1.99994], [2.33213, 2.07136], [2.3542, 2.13747], [2.46798, 2.30473], [2.51203, 2.49221], [2.55625, 2.58553], [2.59356, 2.62284], [2.71147, 2.72138], [2.69968, 2.75364], [2.72175, 2.78497], [2.793, 2.8419], [2.89145, 2.97513], [2.98064, 3.06078], [2.97805, 3.26778], [2.98485, 3.3638], [2.99757, 3.41297], [3.01702, 3.44775], [3.03412, 3.48936], [3.02732, 3.59547], [3.03152, 3.64474], [3.14008, 3.76771], [3.23348, 3.82464], [3.27332, 3.8611], [3.26572, 3.90356], [3.23852, 3.94517], [3.22673, 3.98929], [3.23343, 4.02904], [3.32515, 4.08085], [3.33955, 4.16659], [3.31748, 4.26758], [3.2784, 4.34405], [3.3056, 4.3635], [3.37526, 4.38649], [3.39869, 4.42513], [3.32514, 4.42541], [3.22669, 4.4874], [3.17237, 4.58324], [3.16977, 4.70636], [3.19192, 4.7675], [3.19432, 4.8294], [3.14261, 5.06624], [3.14001, 5.17909], [3.14781, 5.29709], [3.1724, 5.41583], [3.20634, 5.51943], [3.25384, 5.59329], [3.54153, 5.94036], [3.62558, 6.01431], [3.94553, 6.17215], [3.91327, 6.21106]] / 15 * h, + leng = len(tw) ) - abs(cross(a, b)) < epsilon ? [] : // they are parallel or conincident edges - a1 + a * cross(s, b) / cross(a, b); + distance == 0 ? tw : [for(i = 0; i < leng; i = i + 1) if(norm(tw[i] - tw[i + 1]) > distance) tw[i]]; + + +/** +* multi_line_text.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-multi_line_text.html +* +**/ +module multi_line_text(lines, line_spacing = 15, size = 10, font = "Arial", halign = "left", valign = "baseline", direction = "ltr", language = "en", script = "latin"){ + to = len(lines) - 1; + inc = line_spacing; + offset_y = inc * to / 2; + union() { + for (i = [0 : to]) { + translate([0 , -i * inc + offset_y, 0]) + text(lines[i], size, font = font, valign = valign, halign = halign, direction = direction, language = language, script = script); + } + } +} + +/** +* px_line.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_line.html +* +**/ + + +function _px_line_zsgn(a) = a == 0 ? a : a / abs(a); + +// x-dominant +function _px_line_xdominant_y(y, yd, sy) = yd >= 0 ? y + sy : y; +function _px_line_xdominant_yd(yd, ax, ay) = (yd >= 0 ? yd - ax : yd) + ay; +function _px_line_xdominant_z(z, zd, sz) = zd >= 0 ? z + sz : z; +function _px_line_xdominant_zd(zd, ax, az) = (zd >= 0 ? zd - ax : zd) + az; + +function _px_line_xdominant(start, end, a, s) = + let( + x = start[0], + y = start[1], + z = start[2], + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2], + shrx = floor(ax / 2), + yd = ay - shrx, + zd = az - shrx, + endx = end[0] + ) + concat( + [start], + _px_line_xdominant_sub( + x + sx, + _px_line_xdominant_y(y, yd, sy), + _px_line_xdominant_z(z, zd, sz), + endx, + a, + s, + _px_line_xdominant_yd(yd, ax, ay), + _px_line_xdominant_zd(zd, ax, az) + ) + ); + +function _px_line_xdominant_sub(x, y, z, endx, a, s, yd, zd) = + let( + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2] + ) + x == endx ? [] : + concat([[x, y, z]], + _px_line_xdominant_sub( + x + sx, + _px_line_xdominant_y(y, yd, sy), + _px_line_xdominant_z(z, zd, sz), + endx, + a, + s, + _px_line_xdominant_yd(yd, ax, ay), + _px_line_xdominant_zd(zd, ax, az) + ) + ); + +// y-dominant +function _px_line_ydominant_x(x, xd, sx) = xd >= 0 ? x + sx : x; +function _px_line_ydominant_xd(xd, ax, ay) = (xd >= 0 ? xd - ay : xd) + ax; +function _px_line_ydominant_z(z, zd, sz) = zd >= 0 ? z + sz : z; +function _px_line_ydominant_zd(zd, ay, az) = (zd >= 0 ? zd - ay : zd) + az; + +function _px_line_ydominant(start, end, a, s) = + let( + x = start[0], + y = start[1], + z = start[2], + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2], + shry = floor(ay / 2), + xd = ax - shry, + zd = az - shry, + endy = end[1] + ) + concat( + [start], + _px_line_ydominant_sub( + _px_line_ydominant_x(x, xd, sx), + y + sy, + _px_line_ydominant_z(z, zd, sz), + endy, + a, + s, + _px_line_ydominant_xd(xd, ax, ay), + _px_line_ydominant_zd(zd, ay, az) + ) + ); + +function _px_line_ydominant_sub(x, y, z, endy, a, s, xd, zd) = + let( + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2] + ) + y == endy ? [] : + concat([[x, y, z]], + _px_line_ydominant_sub( + _px_line_ydominant_x(x, xd, sx), + y + sy, + _px_line_ydominant_z(z, zd, sz), + endy, + a, + s, + _px_line_ydominant_xd(xd, ax, ay), + _px_line_ydominant_zd(zd, ay, az) + ) + ); + +// z-dominant +function _px_line_zdominant_x(x, xd, sx) = xd >= 0 ? x + sx : x; +function _px_line_zdominant_xd(xd, ax, az) = (xd >= 0 ? xd - az : xd) + ax; + +function _px_line_zdominant_y(y, yd, sy) = yd >= 0 ? y + sy : y; +function _px_line_zdominant_yd(yd, ay, az) = (yd >= 0 ? yd - az : yd) + ay; + +function _px_line_zdominant(start, end, a, s) = + let( + x = start[0], + y = start[1], + z = start[2], + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2], + shrz = floor(az / 2), + xd = ax - shrz, + yd = ay - shrz, + endz = end[2] + ) + concat( + [start], + _px_line_zdominant_sub( + _px_line_zdominant_x(x, xd, sx), + _px_line_zdominant_y(y, yd, sy), + z + sz, + endz, + a, + s, + _px_line_zdominant_xd(xd, ax, az), + _px_line_zdominant_yd(yd, ay, az) + ) + ); + +function _px_line_zdominant_sub(x, y, z, endz, a, s, xd, yd) = + let( + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2] + ) + z == endz ? [] : + concat([[x, y, z]], + _px_line_zdominant_sub( + _px_line_zdominant_x(x, xd, sx), + _px_line_zdominant_y(y, yd, sy), + z + sz, + endz, + a, + s, + _px_line_zdominant_xd(xd, ax, az), + _px_line_zdominant_yd(yd, ay, az) + ) + ); + +function px_line(p1, p2) = + let( + is_2d = len(p1) == 2, + start_pt = is_2d ? __to3d(p1) : p1, + end_pt = is_2d ? __to3d(p2) : p2, + dt = end_pt - start_pt, + ax = floor(abs(dt[0]) * 2), + ay = floor(abs(dt[1]) * 2), + az = floor(abs(dt[2]) * 2), + sx = _px_line_zsgn(dt[0]), + sy = _px_line_zsgn(dt[1]), + sz = _px_line_zsgn(dt[2]), + points = ax >= max(ay, az) ? _px_line_xdominant(start_pt, end_pt, [ax, ay, az], [sx, sy, sz]) : ( + ay >= max(ax, az) ? _px_line_ydominant(start_pt, end_pt, [ax, ay, az], [sx, sy, sz]) : + _px_line_zdominant(start_pt, end_pt, [ax, ay, az], [sx, sy, sz]) + ) + ) + is_2d ? [for(pt = points) __to2d(pt)] : points; + +/** +* hull_polyline2d.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/hull_polyline2d.html +* +**/ + +module hull_polyline2d(points, width) { + half_width = width / 2; + leng = len(points); + + module hull_line2d(index) { + point1 = points[index - 1]; + point2 = points[index]; + + hull() { + translate(point1) + circle(half_width); + translate(point2) + circle(half_width); + } + + // hook for testing + test_line_segment(index, point1, point2, half_width); + } + + module polyline2d_inner(index) { + if(index < leng) { + hull_line2d(index); + polyline2d_inner(index + 1); + } + } + + polyline2d_inner(1); +} + +// override it to test +module test_line_segment(index, point1, point2, radius) { + +} + +/** +* bezier_smooth.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-bezier_curve.html +* +**/ + + +function _corner_ctrl_pts(round_d, p1, p2, p3) = + let( + _ya_za_1 = __angy_angz(p1, p2), + _ya_za_2 = __angy_angz(p3, p2), + + dz1 = sin(_ya_za_1[0]) * round_d, + dxy1 = cos(_ya_za_1[0]) * round_d, + dy1 = sin(_ya_za_1[1]) * dxy1, + dx1 = cos(_ya_za_1[1]) * dxy1, + + dz2 = sin(_ya_za_2[0]) * round_d, + dxy2 = cos(_ya_za_2[0]) * round_d, + dy2 = sin(_ya_za_2[1]) * dxy2, + dx2 = cos(_ya_za_2[1]) * dxy2 + ) + [ + p2 - [dx1, dy1, dz1], + p2, + p2 - [dx2, dy2, dz2] + ]; + + +function _bezier_corner(round_d, t_step, p1, p2, p3) = + bezier_curve(t_step, _corner_ctrl_pts(round_d, p1, p2, p3)); + +function _recursive_bezier_smooth(pts, round_d, t_step, leng) = + let(end_i = leng - 2) + [ + for(i = 0; i < end_i; i = i + 1) + each _bezier_corner(round_d, t_step, pts[i], pts[i + 1], pts[i + 2]) + ]; + + +function bezier_smooth(path_pts, round_d, t_step = 0.1, closed = false) = + let( + pts = len(path_pts[0]) == 3 ? path_pts : [for(p = path_pts) __to3d(p)], + leng = len(pts), + middle_pts = _recursive_bezier_smooth(pts, round_d, t_step, leng), + pth_pts = closed ? + concat( + _recursive_bezier_smooth( + [pts[leng - 1], pts[0], pts[1]], + round_d, t_step, 3 + ), + middle_pts, + _recursive_bezier_smooth( + [pts[leng - 2], pts[leng - 1], pts[0]], + round_d, t_step, 3 + ) + ) : + concat( + [pts[0]], + middle_pts, + [pts[leng - 1]] + ) + ) + len(path_pts[0]) == 2 ? [for(p = pth_pts) __to2d(p)] : pth_pts; + +/** +* starburst.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-starburst.html +* +**/ + +module starburst(r1, r2, n, height) { + a = 180 / n; + + p0 = [0, 0, 0]; + p1 = [r2 * cos(a), r2 * sin(a), 0]; + p2 = [r1, 0, 0]; + p3 = [0, 0, height]; + + module half_burst() { + polyhedron(points = [p0, p1, p2, p3], + faces = [ + [0, 2, 1], + [0, 1, 3], + [0, 3, 2], + [2, 1, 3] + ] + ); + } + + module burst() { + hull() { + half_burst(); + mirror([0, 1,0]) half_burst(); + } + } + + union() { + for(i = [0 : n - 1]) { + rotate(2 * a * i) burst(); + } + } +} + +/** +* turtle2d.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-turtle2d.html +* +**/ + +function _turtle2d_turtle(x, y, angle) = [[x, y], angle]; + +function _turtle2d_set_point(turtle, point) = [point, _turtle2d_get_angle(turtle)]; + +function _turtle2d_set_x(turtle, x) = [[x, _turtle2d_get_y(turtle)], _turtle2d_get_angle(turtle)]; +function _turtle2d_set_y(turtle, y) = [[_turtle2d_get_x(turtle), y], _turtle2d_get_angle(turtle)]; +function _turtle2d_set_angle(turtle, angle) = [_turtle2d_get_pt(turtle), angle]; + +function _turtle2d_forward(turtle, leng) = + _turtle2d_turtle( + _turtle2d_get_x(turtle) + leng * cos(_turtle2d_get_angle(turtle)), + _turtle2d_get_y(turtle) + leng * sin(_turtle2d_get_angle(turtle)), + _turtle2d_get_angle(turtle) + ); + +function _turtle2d_turn(turtle, angle) = [_turtle2d_get_pt(turtle), _turtle2d_get_angle(turtle) + angle]; + +function _turtle2d_get_x(turtle) = turtle[0][0]; +function _turtle2d_get_y(turtle) = turtle[0][1]; +function _turtle2d_get_pt(turtle) = turtle[0]; +function _turtle2d_get_angle(turtle) = turtle[1]; + +function _turtle2d_three_args_command(cmd, arg1, arg2, arg3) = + cmd == "create" ? _turtle2d_turtle(arg1, arg2, arg3) : _turtle2d_two_args_command(cmd, arg1, arg2); + +function _turtle2d_two_args_command(cmd, arg1, arg2) = + is_undef(arg2) ? _turtle2d_one_arg_command(cmd, arg1) : ( + cmd == "pt" ? _turtle2d_set_point(arg1, arg2) : ( + cmd == "x" ? _turtle2d_set_x(arg1, arg2) : ( + cmd == "y" ? _turtle2d_set_y(arg1, arg2) : ( + cmd == "angle" ? _turtle2d_set_angle(arg1, arg2) : ( + cmd == "forward" ? _turtle2d_forward(arg1, arg2) : ( + cmd == "turn" ? _turtle2d_turn(arg1, arg2) : undef + ) + ) + ) + ) + ) + ); + +function _turtle2d_one_arg_command(cmd, arg) = + cmd == "x" ? _turtle2d_get_x(arg) : ( + cmd == "y" ? _turtle2d_get_y(arg) : ( + cmd == "angle" ? _turtle2d_get_angle(arg) : ( + cmd == "pt" ? _turtle2d_get_pt(arg) : undef + ) + ) + ); + +function turtle2d(cmd, arg1, arg2, arg3) = + _turtle2d_three_args_command(cmd, arg1, arg2, arg3); + + + +/** +* shape_glued2circles.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_glued2circles.html +* +**/ + +function _glued2circles_pie_curve(radius, centre_dist, tangent_angle) = + let( + begin_ang = 90 + tangent_angle, + shape_pts = shape_pie(radius, [-begin_ang, begin_ang]), + leng = len(shape_pts) + ) + [ + for(i = 1; i < leng; i = i + 1) + shape_pts[i] + [centre_dist / 2, 0] + ]; + +function _glued2circles_bezier(radius, centre_dist, tangent_angle, t_step, ctrl_p1) = + let( + ctrl_p = rotate_p([radius * tan(tangent_angle), -radius], tangent_angle), + ctrl_p2 = [-ctrl_p[0], ctrl_p[1]] + [centre_dist / 2, 0], + ctrl_p3 = [-ctrl_p2[0], ctrl_p2[1]], + ctrl_p4 = [-ctrl_p1[0], ctrl_p1[1]] + ) + bezier_curve( + t_step, + [ + ctrl_p1, + ctrl_p2, + ctrl_p3, + ctrl_p4 + ] + ); + +function _glued2circles_lower_half_curve(curve_pts, leng) = + [ + for(i = 0; i < leng; i = i + 1) + let(p = curve_pts[leng - 1 - i]) + if(p[0] >= 0) p + ]; + +function _glued2circles_half_glued_circle(radius, centre_dist, tangent_angle, t_step) = + let( + pie_curve_pts = _glued2circles_pie_curve(radius, centre_dist, tangent_angle), + curve_pts = _glued2circles_bezier(radius, centre_dist, tangent_angle, t_step, pie_curve_pts[0]), + lower_curve_pts = _glued2circles_lower_half_curve(curve_pts, len(curve_pts)), + leng_half_curve_pts = len(lower_curve_pts), + upper_curve_pts = [ + for(i = 0; i < leng_half_curve_pts; i = i + 1) + let(pt = lower_curve_pts[leng_half_curve_pts - 1 - i]) + [pt[0], -pt[1]] + ] + ) concat( + lower_curve_pts, + pie_curve_pts, + upper_curve_pts + ); + +function shape_glued2circles(radius, centre_dist, tangent_angle = 30, t_step = 0.1) = + let( + half_glued_circles = _glued2circles_half_glued_circle(radius, centre_dist, tangent_angle, t_step), + leng_half_glued_circles = len(half_glued_circles), + left_half_glued_circles = [ + for(i = 0; i < leng_half_glued_circles; i = i + 1) + let(pt = half_glued_circles[leng_half_glued_circles - 1 - i]) + [-pt[0], pt[1]] + ] + ) concat(half_glued_circles, left_half_glued_circles); + +function __m_scaling_to_3_elems_scaling_vect(s) = + let(leng = len(s)) + leng == 3 ? s : ( + leng == 2 ? [s[0], s[1], 1] : [s[0], 1, 1] + ); + +function __m_scaling_to_scaling_vect(s) = is_num(s) ? [s, s, s] : __m_scaling_to_3_elems_scaling_vect(s); + +function __m_scaling(s) = + let(v = __m_scaling_to_scaling_vect(s)) + [ + [v[0], 0, 0, 0], + [0, v[1], 0, 0], + [0, 0, v[2], 0], + [0, 0, 0, 1] + ]; + +/** +* hollow_out.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-hollow_out.html +* +**/ + +module hollow_out(shell_thickness) { + difference() { + children(); + offset(delta = -shell_thickness) children(); + } +} + +/** +* shape_square.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_square.html +* +**/ + + +function shape_square(size, corner_r = 0) = + let( + is_flt = is_num(size), + x = is_flt ? size : size[0], + y = is_flt ? size : size[1] + ) + __trapezium( + length = x, + h = y, + round_r = corner_r + ); + + +/** +* triangulate.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-triangulate.html +* +**/ + +function _triangulate_in_triangle(p0, p1, p2, p) = + let( + v0 = p0 - p, + v1 = p1 - p, + v2 = p2 - p, + c0 = cross(v0, v1), + c1 = cross(v1, v2), + c2 = cross(v2, v0) + ) + (c0 > 0 && c1 > 0 && c2 > 0) || (c0 < 0 && c1 < 0 && c2 < 0); + +function _triangulate_snipable(shape_pts, u, v, w, n, indices, epsilon = 0.0001) = + let( + a = shape_pts[indices[u]], + b = shape_pts[indices[v]], + c = shape_pts[indices[w]], + ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + cx = c[0], + cy = c[1] + ) + epsilon > (((bx - ax) * (cy - ay)) - ((by - ay) * (cx - ax))) ? + false : _triangulate_snipable_sub(shape_pts, n, u, v, w, a, b, c, indices); + +function _triangulate_snipable_sub(shape_pts, n, u, v, w, a, b, c, indices, p = 0) = + p == n ? true : ( + ((p == u) || (p == v) || (p == w)) ? _triangulate_snipable_sub(shape_pts, n, u, v, w, a, b, c, indices, p + 1) : ( + _triangulate_in_triangle(a, b, c, shape_pts[indices[p]]) ? + false : _triangulate_snipable_sub(shape_pts, n, u, v, w, a, b, c, indices, p + 1) + ) + ); + +// remove the elem at idx v from indices +function _triangulate_remove_v(indices, v, num_of_vertices) = + let( + nv_minuns_one = num_of_vertices - 1 + ) + v == 0 ? [for(i = 1; i <= nv_minuns_one; i = i + 1) indices[i]] : ( + v == nv_minuns_one ? [for(i = 0; i < v; i = i + 1) indices[i]] : concat( + [for(i = 0; i < v; i = i + 1) indices[i]], + [for(i = v + 1; i <= nv_minuns_one; i = i + 1) indices[i]] + ) + ); + +function _triangulate_zero_or_value(num_of_vertices, value) = + num_of_vertices <= value ? 0 : value; + +function _triangulate_real_triangulate_sub(shape_pts, collector, indices, v, num_of_vertices, count, epsilon) = + let( + // idxes of three consecutive vertices + u = _triangulate_zero_or_value(num_of_vertices, v), + vi = _triangulate_zero_or_value(num_of_vertices, u + 1), + w = _triangulate_zero_or_value(num_of_vertices, vi + 1) + ) + _triangulate_snipable(shape_pts, u, vi, w, num_of_vertices, indices, epsilon) ? + _triangulate_snip(shape_pts, collector, indices, u, vi, w, num_of_vertices, count, epsilon) : + _triangulate_real_triangulate(shape_pts, collector, indices, vi, num_of_vertices, count, epsilon); + +function _triangulate_snip(shape_pts, collector, indices, u, v, w, num_of_vertices, count, epsilon) = + let( + a = indices[u], + b = indices[v], + c = indices[w], + new_nv = num_of_vertices - 1 + ) + _triangulate_real_triangulate( + shape_pts, + concat(collector, [[a, b, c]]), + _triangulate_remove_v(indices, v, num_of_vertices), + v, + new_nv, + 2 * new_nv, + epsilon + ); + +function _triangulate_real_triangulate(shape_pts, collector, indices, v, num_of_vertices, count, epsilon) = + count <= 0 ? [] : ( + num_of_vertices == 2 ? + collector : _triangulate_real_triangulate_sub(shape_pts, collector, indices, v, num_of_vertices, count - 1, epsilon) + ); + +function triangulate(shape_pts, epsilon = 0.0001) = + let( + num_of_vertices = len(shape_pts), + v = num_of_vertices - 1, + indices = [for(vi = 0; vi <= v; vi = vi + 1) vi], + count = 2 * num_of_vertices + ) + num_of_vertices < 3 ? [] : _triangulate_real_triangulate(shape_pts, [], indices, v, num_of_vertices, count, epsilon); + + +/** +* shape_superformula.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_superformula.html +* +**/ + + +function _superformula_r(angle, m1, m2, n1, n2 = 1, n3 = 1, a = 1, b = 1) = + pow( + pow(abs(cos(m1 * angle / 4) / a), n2) + + pow(abs(sin(m2 * angle / 4) / b), n3), + - 1 / n1 + ); + +function shape_superformula(phi_step, m1, m2, n1, n2 = 1, n3 = 1, a = 1, b = 1) = + let(tau = PI * 2) + [ + for(phi = 0; phi <= tau; phi = phi + phi_step) + let( + angle = __to_degree(phi), + r = _superformula_r(angle, m1, m2, n1, n2, n3, a, b) + ) + __ra_to_xy(r, angle) + ]; + +/** +* path_extrude.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-path_extrude.html +* +**/ + + +module path_extrude(shape_pts, path_pts, triangles = "SOLID", twist = 0, scale = 1.0, closed = false, method = "AXIS_ANGLE") { + sh_pts = len(shape_pts[0]) == 3 ? shape_pts : [for(p = shape_pts) __to3d(p)]; + pth_pts = len(path_pts[0]) == 3 ? path_pts : [for(p = path_pts) __to3d(p)]; + + len_path_pts = len(pth_pts); + len_path_pts_minus_one = len_path_pts - 1; + + module axis_angle_path_extrude() { + twist_step_a = twist / len_path_pts; + + function scale_pts(pts, s) = [ + for(p = pts) [p[0] * s[0], p[1] * s[1], p[2] * s[2]] + ]; + + function translate_pts(pts, t) = [ + for(p = pts) [p[0] + t[0], p[1] + t[1], p[2] + t[2]] + ]; + + function rotate_pts(pts, a, v) = [for(p = pts) rotate_p(p, a, v)]; + + scale_step_vt = is_num(scale) ? + let(s = (scale - 1) / len_path_pts_minus_one) [s, s, s] : + [ + (scale[0] - 1) / len_path_pts_minus_one, + (scale[1] - 1) / len_path_pts_minus_one, + is_undef(scale[2]) ? 0 : (scale[2] - 1) / len_path_pts_minus_one + ]; + + // get rotation matrice for sections + + function local_ang_vects(j) = + [ + for(i = j; i > 0; i = i - 1) + let( + vt0 = pth_pts[i] - pth_pts[i - 1], + vt1 = pth_pts[i + 1] - pth_pts[i], + a = acos((vt0 * vt1) / (norm(vt0) * norm(vt1))), + v = cross(vt0, vt1) + ) + [a, v] + ]; + + rot_matrice = [ + for(ang_vect = local_ang_vects(len_path_pts - 2)) + __m_rotation(ang_vect[0], ang_vect[1]) + ]; + + leng_rot_matrice = len(rot_matrice); + leng_rot_matrice_minus_one = leng_rot_matrice - 1; + leng_rot_matrice_minus_two= leng_rot_matrice - 2; + + identity_matrix = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ]; + + function cumulated_rot_matrice(i) = + leng_rot_matrice == 0 ? [identity_matrix] : ( + leng_rot_matrice == 1 ? [rot_matrice[0], identity_matrix] : + ( + i == leng_rot_matrice_minus_two ? + [ + rot_matrice[leng_rot_matrice_minus_one], + rot_matrice[leng_rot_matrice_minus_two] * rot_matrice[leng_rot_matrice_minus_one] + ] + : cumulated_rot_matrice_sub(i)) + ); + + function cumulated_rot_matrice_sub(i) = + let( + matrice = cumulated_rot_matrice(i + 1), + curr_matrix = rot_matrice[i], + prev_matrix = matrice[len(matrice) - 1] + ) + concat(matrice, [curr_matrix * prev_matrix]); + + cumu_rot_matrice = cumulated_rot_matrice(0); + + // get all sections + + function init_section(a, s) = + let(angleyz = __angy_angz(pth_pts[0], pth_pts[1])) + rotate_pts( + rotate_pts( + rotate_pts( + scale_pts(sh_pts, s), a + ), [90, 0, -90] + ), [0, -angleyz[0], angleyz[1]] + ); + + function local_rotate_section(j, init_a, init_s) = + j == 0 ? + init_section(init_a, init_s) : + local_rotate_section_sub(j, init_a, init_s); + + function local_rotate_section_sub(j, init_a, init_s) = + let( + vt0 = pth_pts[j] - pth_pts[j - 1], + vt1 = pth_pts[j + 1] - pth_pts[j], + ms = cumu_rot_matrice[j - 1] + ) + [ + for(p = init_section(init_a, init_s)) + [ + [ms[0][0], ms[0][1], ms[0][2]] * p, + [ms[1][0], ms[1][1], ms[1][2]] * p, + [ms[2][0], ms[2][1], ms[2][2]] * p + ] + ]; + + sections = + let( + fst_section = + translate_pts(local_rotate_section(0, 0, [1, 1, 1]), pth_pts[0]), + end_i = len_path_pts - 1, + remain_sections = [ + for(i = 0; i < end_i; i = i + 1) + translate_pts( + local_rotate_section(i, i * twist_step_a, [1, 1, 1] + scale_step_vt * i), + pth_pts[i + 1] + ) + ] + ) concat([fst_section], remain_sections); + + calculated_sections = + closed && pth_pts[0] == pth_pts[len_path_pts_minus_one] ? + concat(sections, [sections[0]]) : // round-robin + sections; + + polysections( + calculated_sections, + triangles = triangles + ); + + // hook for testing + test_path_extrude(sections); + } + + module euler_angle_path_extrude() { + scale_step_vt = is_num(scale) ? + [(scale - 1) / len_path_pts_minus_one, (scale - 1) / len_path_pts_minus_one] : + [(scale[0] - 1) / len_path_pts_minus_one, (scale[1] - 1) / len_path_pts_minus_one]; + + scale_step_x = scale_step_vt[0]; + scale_step_y = scale_step_vt[1]; + twist_step = twist / len_path_pts_minus_one; + + function section(p1, p2, i) = + let( + length = norm(p1 - p2), + angy_angz = __angy_angz(p1, p2), + ay = -angy_angz[0], + az = angy_angz[1] + ) + [ + for(p = sh_pts) + let(scaled_p = [p[0] * (1 + scale_step_x * i), p[1] * (1 + scale_step_y * i), p[2]]) + rotate_p( + rotate_p( + rotate_p(scaled_p, twist_step * i), [90, 0, -90] + ) + [i == 0 ? 0 : length, 0, 0], + [0, ay, az] + ) + p1 + ]; + + path_extrude_inner = + [ + for(i = 1; i < len_path_pts; i = i + 1) + section(pth_pts[i - 1], pth_pts[i], i) + ]; + + calculated_sections = + closed && pth_pts[0] == pth_pts[len_path_pts_minus_one] ? + concat(path_extrude_inner, [path_extrude_inner[0]]) : // round-robin + concat([section(pth_pts[0], pth_pts[1], 0)], path_extrude_inner); + + polysections( + calculated_sections, + triangles = triangles + ); + + // hook for testing + test_path_extrude(calculated_sections); + } + + if(method == "AXIS_ANGLE") { + axis_angle_path_extrude(); + } + else if(method == "EULER_ANGLE") { + euler_angle_path_extrude(); + } +} + +// override to test +module test_path_extrude(sections) { + +} + +function __polytransversals(transversals) = + let( + leng_trs = len(transversals), + leng_tr = len(transversals[0]), + lefts = [ + for(i = 1; i < leng_trs - 1; i = i + 1) + let(tr = transversals[leng_trs - i]) + tr[0] + ], + rights = [ + for(i = 1; i < leng_trs - 1; i = i + 1) + let(tr = transversals[i]) + tr[leng_tr - 1] + ] + ) concat( + transversals[0], + rights, + __reverse(transversals[leng_trs - 1]), + lefts + ); + +/** +* box_extrude.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-box_extrude.html +* +**/ + +module box_extrude(height, shell_thickness, offset_mode = "delta", chamfer = false) { + linear_extrude(shell_thickness) + children(); + + linear_extrude(height) + difference() { + children(); + if(offset_mode == "delta") { + offset(delta = -shell_thickness, chamfer = chamfer) + children(); + } else { + offset(r = -shell_thickness) + children(); + } + } +} + + + +/** +* polytransversals.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-polytransversals.html +* +**/ + + +module polytransversals(transversals) { + polygon( + __polytransversals(transversals) + ); +} + +function __m_rotation_q_rotation(a, v) = + let( + half_a = a / 2, + axis = v / norm(v), + s = sin(half_a), + x = s * axis[0], + y = s * axis[1], + z = s * axis[2], + w = cos(half_a), + + x2 = x + x, + y2 = y + y, + z2 = z + z, + + xx = x * x2, + yx = y * x2, + yy = y * y2, + zx = z * x2, + zy = z * y2, + zz = z * z2, + wx = w * x2, + wy = w * y2, + wz = w * z2 + ) + [ + [1 - yy - zz, yx - wz, zx + wy, 0], + [yx + wz, 1 - xx - zz, zy - wx, 0], + [zx - wy, zy + wx, 1 - xx - yy, 0], + [0, 0, 0, 1] + ]; + +function __m_rotation_xRotation(a) = + let(c = cos(a), s = sin(a)) + [ + [1, 0, 0, 0], + [0, c, -s, 0], + [0, s, c, 0], + [0, 0, 0, 1] + ]; + +function __m_rotation_yRotation(a) = + let(c = cos(a), s = sin(a)) + [ + [c, 0, s, 0], + [0, 1, 0, 0], + [-s, 0, c, 0], + [0, 0, 0, 1] + ]; + +function __m_rotation_zRotation(a) = + let(c = cos(a), s = sin(a)) + [ + [c, -s, 0, 0], + [s, c, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ]; + +function __m_rotation_xyz_rotation(a) = + let(ang = __to_ang_vect(a)) + __m_rotation_zRotation(ang[2]) * __m_rotation_yRotation(ang[1]) * __m_rotation_xRotation(ang[0]); + +function __m_rotation(a, v) = + (a == 0 || a == [0, 0, 0] || a == [0] || a == [0, 0]) ? [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] : (is_undef(v) ? __m_rotation_xyz_rotation(a) : __m_rotation_q_rotation(a, v)); + +/** +* shape_arc.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_arc.html +* +**/ + + +function shape_arc(radius, angle, width, width_mode = "LINE_CROSS") = + __shape_arc(radius, angle, width, width_mode); + +/** +* slice.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-slice.html +* +**/ + +function slice(lt, begin, end) = + let(ed = is_undef(end) ? len(lt) : end) + [for(i = begin; i < ed; i = i + 1) lt[i]]; + + +/** +* shape_path_extend.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-path_extend.html +* +**/ + + +function _shape_path_extend_az(p1, p2) = + let( + x1 = p1[0], + y1 = p1[1], + x2 = p2[0], + y2 = p2[1] + ) -90 + atan2((y2 - y1), (x2 - x1)); + +function _shape_path_first_stroke(stroke_pts, path_pts) = + let( + p1 = path_pts[0], + p2 = path_pts[1], + a = _shape_path_extend_az(p1, p2) + ) + [ + for(p = stroke_pts) + rotate_p(p, a) + p1 + ]; + +function _shape_path_extend_stroke(stroke_pts, p1, p2, scale_step, i) = + let( + leng = norm(__to3d(p2) - __to3d(p1)), + a = _shape_path_extend_az(p1, p2) + ) + [ + for(p = stroke_pts) + rotate_p(p * (1 + scale_step * i) + [0, leng], a) + p1 + ]; + +function _shape_path_extend_inner(stroke_pts, path_pts, leng_path_pts, scale_step) = + [ + for(i = 1; i < leng_path_pts; i = i + 1) + _shape_path_extend_stroke( + stroke_pts, + path_pts[i - 1], + path_pts[i ], + scale_step, + i + ) + ]; + +function shape_path_extend(stroke_pts, path_pts, scale = 1.0, closed = false) = + let( + leng_path_pts = len(path_pts), + scale_step = (scale - 1) / (leng_path_pts - 1), + strokes = _shape_path_extend_inner(stroke_pts, path_pts, leng_path_pts, scale_step) + ) + closed && path_pts[0] == path_pts[leng_path_pts - 1] ? + __polytransversals(concat(strokes, [strokes[0]])) : + __polytransversals( + concat([_shape_path_first_stroke(stroke_pts, path_pts)], strokes) + ); + + + +function __frags(radius) = $fn > 0 ? + ($fn >= 3 ? $fn : 3) : + max(min(360 / $fa, radius * PI * 2 / $fs), 5); + +/** +* circle_path.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-circle_path.html +* +**/ + + +function circle_path(radius, n) = + let( + _frags = __frags(radius), + step_a = 360 / _frags, + end_a = 360 - step_a * ((is_undef(n) || n > _frags) ? 1 : _frags - n + 1) + ) + [ + for(a = 0; a <= end_a; a = a + step_a) + [radius * cos(a), radius * sin(a)] + ]; + + +/** +* archimedean_spiral_extrude.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-archimedean_spiral_extrude.html +* +**/ + +module archimedean_spiral_extrude(shape_pts, arm_distance, init_angle, point_distance, num_of_points, + rt_dir = "CT_CLK", twist = 0, scale = 1.0, triangles = "SOLID") { + points_angles = archimedean_spiral( + arm_distance = arm_distance, + init_angle = init_angle, + point_distance = point_distance, + num_of_points = num_of_points, + rt_dir = rt_dir + ); + + clk_a = rt_dir == "CT_CLK" ? 0 : 180; + + points = [for(pa = points_angles) pa[0]]; + angles = [ + for(pa = points_angles) + [90, 0, pa[1] + clk_a] + ]; + + sections = cross_sections(shape_pts, points, angles, twist, scale); + + polysections( + sections, + triangles = triangles + ); + + // testing hook + test_archimedean_spiral_extrude(sections); +} + +// override it to test +module test_archimedean_spiral_extrude(sections) { + +} + +/** +* voronoi2d.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-voronoi2d.html +* +**/ + +module voronoi2d(points, spacing = 1, r = 0, delta = 0, chamfer = false, region_type = "square") { + xs = [for(p = points) p[0]]; + ys = [for(p = points) abs(p[1])]; + + region_size = max([(max(xs) - min(xs) / 2), (max(ys) - min(ys)) / 2]); + half_region_size = 0.5 * region_size; + offset_leng = spacing * 0.5 + half_region_size; + + function normalize(v) = v / norm(v); + + module region(pt) { + intersection_for(p = points) { + if(pt != p) { + v = p - pt; + translate((pt + p) / 2 - normalize(v) * offset_leng) + rotate(atan2(v[1], v[0])) + if(region_type == "square") { + square(region_size, center = true); + } + else if(region_type == "circle") { + circle(region_size / 2); + } + + } + } + } + + for(p = points) { + if(r != 0) { + offset(r) region(p); + } + else { + offset(delta = delta, chamfer = chamfer) region(p); + } + } +} + +/** +* bend_extrude.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-bend_extrude.html +* +**/ + +module bend_extrude(size, thickness, angle, frags = 24) { + x = size[0]; + y = size[1]; + frag_width = x / frags ; + frag_angle = angle / frags; + half_frag_width = 0.5 * frag_width; + half_frag_angle = 0.5 * frag_angle; + r = half_frag_width / sin(half_frag_angle); + s = (r - thickness) / r; + + module get_frag(i) { + offsetX = i * frag_width; + linear_extrude(thickness, scale = [s, 1]) + translate([-offsetX - half_frag_width, 0, 0]) + intersection() { + translate([x, 0, 0]) mirror([1, 0, 0]) children(); + translate([offsetX, 0, 0]) + square([frag_width, y]); + } + } + + offsetY = -r * cos(half_frag_angle) ; + rotate([180, 0, 180]) for(i = [0 : frags - 1]) { + rotate(i * frag_angle + half_frag_angle) + translate([0, offsetY, 0]) + rotate([-90, 0, 0]) + get_frag(i) + children(); + } + +} + + +/** +* line2d.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-line2d.html +* +**/ + + +module line2d(p1, p2, width, p1Style = "CAP_SQUARE", p2Style = "CAP_SQUARE") { + half_width = 0.5 * width; + + atan_angle = atan2(p2[1] - p1[1], p2[0] - p1[0]); + leng = sqrt(pow(p2[0] - p1[0], 2) + pow(p2[1] - p1[1], 2)); + + frags = __nearest_multiple_of_4(__frags(half_width)); + + module square_end(point) { + translate(point) + rotate(atan_angle) + square(width, center = true); + + // hook for testing + test_line2d_cap(point, "CAP_SQUARE"); + } + + module round_end(point) { + translate(point) + rotate(atan_angle) + circle(half_width, $fn = frags); + + // hook for testing + test_line2d_cap(point, "CAP_ROUND"); + } + + if(p1Style == "CAP_SQUARE") { + square_end(p1); + } else if(p1Style == "CAP_ROUND") { + round_end(p1); + } + + translate(p1) + rotate(atan_angle) + translate([0, -width / 2]) + square([leng, width]); + + if(p2Style == "CAP_SQUARE") { + square_end(p2); + } else if(p2Style == "CAP_ROUND") { + round_end(p2); + } + + // hook for testing + test_line2d_line(atan_angle, leng, width, frags); +} + +// override them to test +module test_line2d_cap(point, style) { +} + +module test_line2d_line(angle, length, width, frags) { +} + + + +/** +* bezier_surface.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-bezier_surface.html +* +**/ + +function bezier_surface(t_step, ctrl_pts) = + let(pts = [ + for(i = 0; i < len(ctrl_pts); i = i + 1) + bezier_curve(t_step, ctrl_pts[i]) + ]) + [for(x = 0; x < len(pts[0]); x = x + 1) + bezier_curve(t_step, + [for(y = [0:len(pts) - 1]) pts[y][x]] + ) + ]; + +/** +* m_translation.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_translation.html +* +**/ + +function _to_3_elems_translation_vect(v) = + let(leng = len(v)) + leng == 3 ? v : ( + leng == 2 ? [v[0], v[1], 0] : [v[0], 0, 0] + ); + +function _to_translation_vect(v) = is_num(v) ? [v, 0, 0] : _to_3_elems_translation_vect(v); + +function m_translation(v) = + let(vt = _to_translation_vect(v)) + [ + [1, 0, 0, vt[0]], + [0, 1, 0, vt[1]], + [0, 0, 1, vt[2]], + [0, 0, 0, 1] + ]; + +/** +* helix.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-helix.html +* +**/ + + +function helix(radius, levels, level_dist, vt_dir = "SPI_DOWN", rt_dir = "CT_CLK") = + let( + is_flt = is_num(radius), + r1 = is_flt ? radius : radius[0], + r2 = is_flt ? radius : radius[1], + init_r = vt_dir == "SPI_DOWN" ? r2 : r1, + _frags = __frags(init_r), + h = level_dist * levels, + vt_d = vt_dir == "SPI_DOWN" ? 1 : -1, + rt_d = rt_dir == "CT_CLK" ? 1 : -1, + r_diff = (r1 - r2) * vt_d, + h_step = level_dist / _frags * vt_d, + r_step = r_diff / (levels * _frags), + a_step = 360 / _frags * rt_d, + begin_r = vt_dir == "SPI_DOWN" ? r2 : r1, + begin_h = vt_dir == "SPI_DOWN" ? h : 0, + end_i = _frags * levels + ) + [ + for(i = 0; i <= end_i; i = i + 1) + let(r = begin_r + r_step * i, a = a_step * i) + [r * cos(a), r * sin(a), begin_h - h_step * i] + ]; + +/** +* polyline2d.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-polyline2d.html +* +**/ + +module polyline2d(points, width, startingStyle = "CAP_SQUARE", endingStyle = "CAP_SQUARE") { + leng_pts = len(points); + + module line_segment(index) { + styles = index == 1 ? [startingStyle, "CAP_ROUND"] : ( + index == leng_pts - 1 ? ["CAP_BUTT", endingStyle] : [ + "CAP_BUTT", "CAP_ROUND" + ] + ); + + p1 = points[index - 1]; + p2 = points[index]; + p1Style = styles[0]; + p2Style = styles[1]; + + line2d(points[index - 1], points[index], width, + p1Style = p1Style, p2Style = p2Style); + + // hook for testing + test_line_segment(index, p1, p2, width, p1Style, p2Style); + } + + module polyline2d_inner(index) { + if(index < leng_pts) { + line_segment(index); + polyline2d_inner(index + 1); + } + } + + polyline2d_inner(1); +} + +// override it to test +module test_line_segment(index, point1, point2, width, p1Style, p2Style) { + +} + +/** +* reverse.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-reverse.html +* +**/ + + +function reverse(lt) = __reverse(lt); + +function __to_degree(phi) = 180 / PI * phi; + +/** +* px_cylinder.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_cylinder.html +* +**/ + +function _px_cylinder_px_circle(radius, filled, thickness) = + let(range = [-radius: radius - 1]) + filled ? [ + for(y = range) + for(x = range) + let(v = [x, y]) + if(norm(v) < radius) v + ] : + let(ishell = radius * radius - 2 * thickness * radius) + [ + for(y = range) + for(x = range) + let( + v = [x, y], + leng = norm(v) + ) + if(leng < radius && (leng * leng) > ishell) v + ]; + +function _px_cylinder_diff_r(r, h, filled, thickness) = + let( + r1 = r[0], + r2 = r[1] + ) + r1 == r2 ? _px_cylinder_same_r(r1, h, filled, thickness) : + let(dr = (r2 - r1) / (h - 1)) + [ + for(i = 0; i < h; i = i + 1) + let(r = round(r1 + dr * i)) + each [ + for(pt = _px_cylinder_px_circle(r, filled, thickness)) + [pt[0], pt[1], i] + ] + ]; + +function _px_cylinder_same_r(r, h, filled, thickness) = + let(c = _px_cylinder_px_circle(r, filled, thickness)) + [ + for(i = 0; i < h; i = i + 1) + each [ + for(pt = c) + [pt[0], pt[1], i] + ] + ]; + +function px_cylinder(r, h, filled = false, thickness = 1) = + is_num(r) ? + _px_cylinder_same_r(r, h, filled, thickness) : + _px_cylinder_diff_r(r, h, filled, thickness); + +/** +* ellipse_extrude.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-ellipse_extrude.html +* +**/ + +module ellipse_extrude(semi_minor_axis, height, center = false, convexity = 10, twist = 0, slices = 20) { + h = is_undef(height) ? semi_minor_axis : ( + // `semi_minor_axis` is always equal to or greater than `height`. + height > semi_minor_axis ? semi_minor_axis : height + ); + angle = asin(h / semi_minor_axis) / slices; + + f_extrude = [ + for(i = 1; i <= slices; i = i + 1) + [ + cos(angle * i) / cos(angle * (i - 1)), + semi_minor_axis * sin(angle * i) + ] + ]; + len_f_extrude = len(f_extrude); + + accm_fs = + [ + for(i = 0, pre_f = 1; i < len_f_extrude; pre_f = pre_f * f_extrude[i][0], i = i + 1) + pre_f * f_extrude[i][0] + ]; + + child_fs = concat([1], accm_fs); + pre_zs = concat( + [0], + [ + for(i = 0; i < len_f_extrude; i = i + 1) + f_extrude[i][1] + ] + ); + + module extrude() { + for(i = [0:len_f_extrude - 1]) { + f = f_extrude[i][0]; + z = f_extrude[i][1]; + + translate([0, 0, pre_zs[i]]) + rotate(-twist / slices * i) + linear_extrude( + z - pre_zs[i], + convexity = convexity, + twist = twist / slices, + slices = 1, + scale = f + ) scale(child_fs[i]) children(); + } + } + + center_offset = [0, 0, center == true ? -h / 2 : 0]; + translate(center_offset) + extrude() + children(); + + // hook for testing + test_ellipse_extrude_fzc(child_fs, pre_zs, center_offset); +} + +// override for testing +module test_ellipse_extrude_fzc(child_fs, pre_zs, center_offset) { + +} + +/** +* parse_number.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-parse_number.html +* +**/ + +function _str_to_int(t) = + let( + dict = [["0", 0], ["1", 1], ["2", 2], ["3", 3], ["4", 4], ["5", 5], ["6", 6], ["7", 7], ["8", 8], ["9", 9]], + n = dict[search(t, dict)[0]][1] + ) n; + +function _parse_positive_int(t, value = 0, i = 0) = + i == len(t) ? value : _parse_positive_int(t, value * pow(10, i) + _str_to_int(t[i]), i + 1); + +function _parse_positive_decimal(t, value = 0, i = 0) = + i == len(t) ? value : _parse_positive_decimal(t, value + _str_to_int(t[i]) * pow(10, -(i + 1)), i + 1); + +function _parse_positive_number(t) = + len(search(".", t)) == 0 ? _parse_positive_int(t) : + _parse_positive_int(split_str(t, ".")[0]) + _parse_positive_decimal(split_str(t, ".")[1]); + +function parse_number(t) = + t[0] == "-" ? -_parse_positive_number(sub_str(t, 1, len(t))) : _parse_positive_number(t); + + + +/** +* cross_sections.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-cross_sections.html +* +**/ + + +function cross_sections(shape_pts, path_pts, angles, twist = 0, scale = 1.0) = + let( + len_path_pts_minus_one = len(path_pts) - 1, + sh_pts = len(shape_pts[0]) == 3 ? shape_pts : [for(p = shape_pts) __to3d(p)], + pth_pts = len(path_pts[0]) == 3 ? path_pts : [for(p = path_pts) __to3d(p)], + scale_step_vt = is_num(scale) ? + [(scale - 1) / len_path_pts_minus_one, (scale - 1) / len_path_pts_minus_one] : + [(scale[0] - 1) / len_path_pts_minus_one, (scale[1] - 1) / len_path_pts_minus_one] + , + scale_step_x = scale_step_vt[0], + scale_step_y = scale_step_vt[1], + twist_step = twist / len_path_pts_minus_one + ) + [ + for(i = 0; i <= len_path_pts_minus_one; i = i + 1) + [ + for(p = sh_pts) + let(scaled_p = [p[0] * (1 + scale_step_x * i), p[1] * (1 + scale_step_y * i), p[2]]) + rotate_p( + rotate_p(scaled_p, twist_step * i) + , angles[i] + ) + pth_pts[i] + ] + ]; + + +/** +* rounded_cube.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_cube.html +* +**/ + + +module rounded_cube(size, corner_r, center = false) { + is_flt = is_num(size); + x = is_flt ? size : size[0]; + y = is_flt ? size : size[1]; + z = is_flt ? size : size[2]; + + corner_frags = __nearest_multiple_of_4(__frags(corner_r)); + edge_d = corner_r * cos(180 / corner_frags); + + half_x = x / 2; + half_y = y / 2; + half_z = z / 2; + + half_l = half_x - edge_d; + half_w = half_y - edge_d; + half_h = half_z - edge_d; + + half_cube_leng = size / 2; + half_leng = half_cube_leng - edge_d; + + corners = [ + for(z = [1, -1]) + for(y = [1, -1]) + for(x = [1, -1]) + [half_l * x, half_w * y, half_h * z] + ]; + + module corner(i) { + translate(corners[i]) + sphere(corner_r, $fn = corner_frags); + } + + center_pts = center ? [0, 0, 0] : [half_x, half_y, half_z]; + + // Don't use `hull() for(...) {...}` because it's slow. + translate(center_pts) hull() { + corner(0); + corner(1); + corner(2); + corner(3); + corner(4); + corner(5); + corner(6); + corner(7); + } + + // hook for testing + test_rounded_edge_corner_center(corner_frags, corners, center_pts); +} + +// override it to test +module test_rounded_edge_corner_center(corner_frags, corners, center_pts) { + +} + +function __edge_r_begin(orig_r, a, a_step, m) = + let(leng = orig_r * cos(a_step / 2)) + leng / cos((m - 0.5) * a_step - a); + +function __edge_r_end(orig_r, a, a_step, n) = + let(leng = orig_r * cos(a_step / 2)) + leng / cos((n + 0.5) * a_step - a); + +/** +* voronoi3d.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-voronoi3d.html +* +**/ + + +// slow but workable + +module voronoi3d(points, space_size = "auto", spacing = 1) { + xs = [for(p = points) p[0]]; + ys = [for(p = points) abs(p[1])]; + zs = [for(p = points) abs(p[2])]; + + space_size = max([max(xs) - min(xs), max(ys) - min(ys), max(zs) - min(zs)]); + half_space_size = 0.5 * space_size; + offset_leng = spacing * 0.5 + half_space_size; + + function normalize(v) = v / norm(v); + + module space(pt) { + intersection_for(p = points) { + if(pt != p) { + v = p - pt; + ryz = __angy_angz(p, pt); + + translate((pt + p) / 2 - normalize(v) * offset_leng) + rotate([0, -ryz[0], ryz[1]]) + cube([space_size, space_size * 2, space_size * 2], center = true); + } + } + } + + for(p = points) { + space(p); + } +} + +/** +* torus_knot.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-torus_knot.html +* +**/ + +function torus_knot(p, q, phi_step) = + let(tau = PI * 2) + [ + for(phi = 0; phi < tau; phi = phi + phi_step) + let( + degree = phi * 180 / PI, + r = cos(q * degree) + 2, + x = r * cos(p * degree), + y = r * sin(p * degree), + z = -sin(q * degree) + ) + [x, y, z] + ]; + +/** +* m_rotation.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_rotation.html +* +**/ + + +function m_rotation(a, v) = __m_rotation(a, v); + +function __nearest_multiple_of_4(n) = + let( + remain = n % 4 + ) + (remain / 4) > 0.5 ? n - remain + 4 : n - remain; + + +/** +* shape_cyclicpolygon.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_cyclicpolygon.html +* +**/ + + +function shape_cyclicpolygon(sides, circle_r, corner_r) = + let( + frag_a = 360 / sides, + corner_a = (180 - frag_a), + corner_circle_a = 180 - corner_a, + half_corner_circle_a = corner_circle_a / 2, + corner_circle_center = circle_r - corner_r / sin(corner_a / 2), + first_corner = [ + for( + pt = __pie_for_rounding( + corner_r, + -half_corner_circle_a, + half_corner_circle_a, + __frags(corner_r) * corner_circle_a / 360 + ) + ) + [pt[0] + corner_circle_center, pt[1]] + ] + + ) + concat( + first_corner, + [ + for(side = 1; side < sides; side = side + 1) + for(pt = first_corner) + let( + a = frag_a * side, + x = pt[0], + y = pt[1], + sina = sin(a), + cosa = cos(a) + ) + [ + x * cosa - y * sina, + x * sina + y * cosa + ] + ] + ); /** * shape_star.scad @@ -2561,21 +3636,51 @@ function __outer_points_shape_starburst(r1, r2, n) = let( a = 360 / n ) - [for(i = [0:n-1]) [r1 * cos(a * i), r1 * sin(a * i)]]; + [for(i = 0; i < n; i = i + 1) [r1 * cos(a * i), r1 * sin(a * i)]]; + function __inner_points_shape_starburst(r1, r2, n) = let ( a = 360 / n, half_a = a / 2 ) - [for(i = [0:n-1]) [r2 * cos(a * i + half_a), r2 * sin(a * i + half_a)]]; + [for(i = 0; i < n; i = i + 1) [r2 * cos(a * i + half_a), r2 * sin(a * i + half_a)]]; -function __one_by_one_shape_starburst(outer_points, inner_points, i = 0) = - len(outer_points) == i ? [] : - concat([outer_points[i], inner_points[i]], __one_by_one_shape_starburst(outer_points, inner_points, i + 1)); +function shape_starburst(r1, r2, n) = + let( + outer_points = __outer_points_shape_starburst(r1, r2, n), + inner_points = __inner_points_shape_starburst(r1, r2, n), + leng = len(outer_points) + ) + [for(i = 0; i < leng; i = i + 1) each [outer_points[i], inner_points[i]]]; -function shape_starburst(r1, r2, n) = __one_by_one_shape_starburst( - __outer_points_shape_starburst(r1, r2, n), __inner_points_shape_starburst(r1, r2, n) -); +function __to2d(p) = [p[0], p[1]]; + +/** +* m_mirror.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_mirror.html +* +**/ + +function m_mirror(v) = + let( + nv = v / norm(v), + txx = -2* nv[0] * nv[0], + txy = -2* nv[0] * nv[1], + txz = -2* nv[0] * nv[2], + tyy = -2* nv[1] * nv[1], + tyz = -2* nv[1] * nv[2], + tzz = -2* nv[2] * nv[2] + ) + [ + [1 + txx, txy, txz, 0], + [txy, 1 + tyy, tyz, 0], + [txz, tyz, 1 + tzz, 0], + [0, 0, 0, 1] + ]; /** * line3d.scad @@ -2653,572 +3758,92 @@ module test_line3d_cap(p, r, frags, cap_leng, angles) { } -/** -* golden_spiral.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-golden_spiral.html -* -**/ - -function _fast_fibonacci_sub(nth) = +function __pie_for_rounding(r, begin_a, end_a, frags) = let( - _f = _fast_fibonacci_2_elems(floor(nth / 2)), - a = _f[0], - b = _f[1], - c = a * (b * 2 - a), - d = a * a + b * b - ) - nth % 2 == 0 ? [c, d] : [d, c + d]; - -function _fast_fibonacci_2_elems(nth) = - nth == 0 ? [0, 1] : _fast_fibonacci_sub(nth); - -function _fast_fibonacci(nth) = - _fast_fibonacci_2_elems(nth)[0]; - -function _remove_same_pts(pts1, pts2) = - pts1[len(pts1) - 1] == pts2[0] ? - concat(pts1, [for(i = [1:len(pts2) - 1]) pts2[i]]) : - concat(pts1, pts2); - -function _golden_spiral_from_ls_or_eql_to(from, to, point_distance, rt_dir) = - let( - f1 = _fast_fibonacci(from), - f2 = _fast_fibonacci(from + 1), - fn = floor(f1 * 6.28312 / point_distance), - $fn = fn + 4 - (fn % 4), - circle_pts = circle_path(radius = f1, n = $fn / 4 + 1), - len_pts = len(circle_pts), - a_step = 360 / $fn * rt_dir, - arc_points_angles = (rt_dir == 1 ? [ - for(i = [0:len_pts - 1]) - [circle_pts[i], a_step * i] - ] : [ - for(i = [0:len_pts - 1]) let(idx = len_pts - i - 1) - [circle_pts[idx], a_step * i] - ]), - offset = f2 - f1 - ) _remove_same_pts( - arc_points_angles, - [ - for(pt_a = _golden_spiral(from + 1, to, point_distance, rt_dir)) - [ - rotate_p(pt_a[0], [0, 0, 90 * rt_dir]) + - (rt_dir == 1 ? [0, -offset, 0] : [-offset, 0, 0]), - pt_a[1] + 90 * rt_dir - ] - ] - ); - -function _golden_spiral(from, to, point_distance, rt_dir) = - from <= to ? - _golden_spiral_from_ls_or_eql_to(from, to, point_distance, rt_dir) : []; - -function golden_spiral(from, to, point_distance, rt_dir = "CT_CLK") = - _golden_spiral(from, to, point_distance, (rt_dir == "CT_CLK" ? 1 : -1)); - -/** -* m_cumulate.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_cumulate.html -* -**/ - -function _m_cumulate(matrice, i) = - i == len(matrice) - 2 ? - matrice[i] * matrice[i + 1] : - matrice[i] * _m_cumulate(matrice, i + 1); - -function m_cumulate(matrice) = - len(matrice) == 1 ? matrice[0] : _m_cumulate(matrice, 0); - - - -/** -* voronoi3d.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-voronoi3d.html -* -**/ - - -// slow but workable - -module voronoi3d(points, space_size = "auto", spacing = 1) { - xs = [for(p = points) p[0]]; - ys = [for(p = points) abs(p[1])]; - zs = [for(p = points) abs(p[2])]; - - space_size = max([max(xs) - min(xs), max(ys) - min(ys), max(zs) - min(zs)]); - half_space_size = 0.5 * space_size; - offset_leng = spacing * 0.5 + half_space_size; - - function normalize(v) = v / norm(v); - - module space(pt) { - intersection_for(p = points) { - if(pt != p) { - v = p - pt; - ryz = __angy_angz(p, pt); - - translate((pt + p) / 2 - normalize(v) * offset_leng) - rotate([0, -ryz[0], ryz[1]]) - cube([space_size, space_size * 2, space_size * 2], center = true); - } - } - } - - for(p = points) { - space(p); - } -} - -/** -* crystal_ball.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-crystal_ball.html -* -**/ - - -module crystal_ball(radius, theta = 360, phi = 180) { - phis = __is_float(phi) ? [0, phi] : phi; - - frags = __frags(radius); - - shape_pts = shape_pie( - radius, - [90 - phis[1], 90 - phis[0]], - $fn = __nearest_multiple_of_4(frags) + sector_angle = end_a - begin_a, + step_a = sector_angle / frags, + is_integer = frags % 1 == 0 + ) + r < 0.00005 ? [[0, 0]] : concat([ + for(ang = begin_a; ang <= end_a; ang = ang + step_a) + [ + r * cos(ang), + r * sin(ang) + ] + ], + is_integer ? [] : [[ + r * cos(end_a), + r * sin(end_a) + ]] ); - // _hole_r = 0.0005 for avoiding warnings when using 2015.03 - // I downloaded 2017.01.20 and found that the problem is solved. - _hole_r = version_num() >= 20170120 ? 0 : 0.0005; - ring_extrude( - shape_pts, - angle = theta, - radius = _hole_r, - $fn = frags - ); +function __angy_angz(p1, p2) = + let( + dx = p2[0] - p1[0], + dy = p2[1] - p1[1], + dz = p2[2] - p1[2], + ya = atan2(dz, sqrt(dx * dx + dy * dy)), + za = atan2(dy, dx) + ) [ya, za]; - // hook for testing - test_crystal_ball_pie(shape_pts); -} +function __tr__corner_t_leng_lt_zero(frags, t_sector_angle, l1, l2, h, round_r) = + let(t_height = tan(t_sector_angle) * l1 - round_r / sin(90 - t_sector_angle) - h / 2) + [ + for(pt = __pie_for_rounding(round_r, 90 - t_sector_angle, 90, frags * t_sector_angle / 180)) + [pt[0], pt[1] + t_height] + ]; -// override it to test -module test_crystal_ball_pie(shape_pts) { - -} - -/** -* rounded_extrude.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_extrude.html -* -**/ - - -module rounded_extrude(size, round_r, angle = 90, twist = 0, convexity = 10) { - - is_flt = __is_float(size); - x = is_flt ? size : size[0]; - y = is_flt ? size : size[1]; - - q_corner_frags = __frags(round_r) / 4; - - step_a = angle / q_corner_frags; - twist_step = twist / q_corner_frags; - - module layers(pre_x, pre_y, pre_h = 0, i = 1) { - module one_layer(current_a) { - wx = pre_x; - wy = pre_y; - - h = (round_r - pre_h) - round_r * cos(current_a); - - d_leng = - round_r * (sin(current_a) - sin(step_a * (i - 1))); - - sx = (d_leng * 2 + wx) / wx; - sy = (d_leng * 2 + wy) / wy; - - translate([0, 0, pre_h]) - rotate(-twist_step * (i - 1)) - linear_extrude( - h, - slices = 1, - scale = [sx, sy], - convexity = convexity, - twist = twist_step - ) scale([wx / x, wy / y]) - children(); - - test_rounded_extrude_data(i, wx, wy, pre_h, sx, sy); - - layers(wx * sx, wy * sy, h + pre_h, i + 1) - children(); - - } - - if(i <= q_corner_frags) { - one_layer(i * step_a) - children(); - } else if(i - q_corner_frags < 1) { - one_layer(q_corner_frags * step_a) - children(); - } - } - - layers(x, y) - children(); -} - -module test_rounded_extrude_data(i, wx, wy, pre_h, sx, sy) { - -} - -/** -* along_with.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-along_with.html -* -**/ - - -// Becuase of improving the performance, this module requires m_rotation.scad which doesn't require in dotSCAD 1.0. -// For backward compatibility, I directly include m_rotation here. - -module along_with(points, angles, twist = 0, scale = 1.0, method = "AXIS_ANGLE") { - leng_points = len(points); - leng_points_minus_one = leng_points - 1; - twist_step_a = twist / leng_points; - - angles_defined = angles != undef; - - scale_step_vt = __is_float(scale) ? - scale_step() : - [ - (scale[0] - 1) / leng_points_minus_one, - (scale[1] - 1) / leng_points_minus_one, - scale[2] == undef ? 0 : (scale[2] - 1) / leng_points_minus_one - ]; - - - function scale_step() = - let(s = (scale - 1) / leng_points_minus_one) - [s, s, s]; - - - /* - Sadly, children(n) cannot be used with inner modules - so I have to do things in the first level. Ugly!! - */ - - // >>> begin: modules and functions for "AXIS-ANGLE" - - // get rotation matrice for sections - identity_matrix = [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] +function __tr_corner_t_leng_gt_or_eq_zero(frags, t_sector_angle, t_leng, h, round_r) = + let(offset_y = h / 2 - round_r) + [ + for(pt = __pie_for_rounding(round_r, 90 - t_sector_angle, 90, frags * t_sector_angle / 360)) + [pt[0] + t_leng, pt[1] + offset_y] ]; - function axis_angle_local_ang_vects(j) = - j == 0 ? [] : axis_angle_local_ang_vects_sub(j); - - function axis_angle_local_ang_vects_sub(j) = - let( - vt0 = points[j] - points[j - 1], - vt1 = points[j + 1] - points[j], - a = acos((vt0 * vt1) / (norm(vt0) * norm(vt1))), - v = cross(vt0, vt1) - ) - concat([[a, v]], axis_angle_local_ang_vects(j - 1)); +function __tr_corner(frags, b_ang, l1, l2, h, round_r) = + let(t_leng = l2 - round_r * tan(b_ang / 2)) + t_leng >= 0 ? + __tr_corner_t_leng_gt_or_eq_zero(frags, b_ang, t_leng, h, round_r) : + __tr__corner_t_leng_lt_zero(frags, b_ang, l1, l2, h, round_r); - function axis_angle_cumulated_rot_matrice(i, rot_matrice) = - let( - leng_rot_matrice = len(rot_matrice), - leng_rot_matrice_minus_one = leng_rot_matrice - 1, - leng_rot_matrice_minus_two = leng_rot_matrice - 2 - ) - leng_rot_matrice == 0 ? [identity_matrix] : ( - leng_rot_matrice == 1 ? [rot_matrice[0], identity_matrix] : ( - i == leng_rot_matrice_minus_two ? - [ - rot_matrice[leng_rot_matrice_minus_one], - rot_matrice[leng_rot_matrice_minus_two] * rot_matrice[leng_rot_matrice_minus_one] - ] - : axis_angle_cumulated_rot_matrice_sub(i, rot_matrice) - ) - ); +function __tr__corner_b_leng_lt_zero(frags, b_sector_angle, l1, l2, h, round_r) = + let( + reversed = __tr__corner_t_leng_lt_zero(frags, b_sector_angle, l2, l1, h, round_r), + leng = len(reversed) + ) + [ + for(i = [0:leng - 1]) + let(pt = reversed[leng - 1 - i]) + [pt[0], -pt[1]] + ]; - function axis_angle_cumulated_rot_matrice_sub(i, rot_matrice) = - let( - matrice = axis_angle_cumulated_rot_matrice(i + 1, rot_matrice), - curr_matrix = rot_matrice[i], - prev_matrix = matrice[len(matrice) - 1] - ) - concat(matrice, [curr_matrix * prev_matrix]); +function __br_corner_b_leng_gt_or_eq_zero(frags, b_sector_angle, l1, l2, b_leng, h, round_r) = + let(half_h = h / 2) + [ + for(pt = __pie_for_rounding(round_r, -90, -90 + b_sector_angle, frags * b_sector_angle / 360)) + [pt[0] + b_leng, pt[1] + round_r - half_h] + ]; - // align modules +function __br_corner(frags, b_ang, l1, l2, h, round_r) = + let(b_leng = l1 - round_r / tan(b_ang / 2)) + b_leng >= 0 ? + __br_corner_b_leng_gt_or_eq_zero(frags, 180 - b_ang, l1, l2, b_leng, h, round_r) : + __tr__corner_b_leng_lt_zero(frags, 180 - b_ang, l1, l2, h, round_r); - module axis_angle_align_with_pts_angles(i) { - translate(points[i]) - rotate(angles[i]) - rotate(twist_step_a * i) - scale([1, 1, 1] + scale_step_vt * i) - children(0); - } - - module axis_angle_align_with_pts_init(a, s) { - angleyz = __angy_angz(__to3d(points[0]), __to3d(points[1])); - - rotate([0, -angleyz[0], angleyz[1]]) - rotate([90, 0, -90]) - rotate(a) - scale(s) - children(0); - } - - module axis_angle_align_with_pts_local_rotate(j, init_a, init_s, cumu_rot_matrice) { - if(j == 0) { // first child - axis_angle_align_with_pts_init(init_a, init_s) - children(0); - } - else { - multmatrix(cumu_rot_matrice[j - 1]) - axis_angle_align_with_pts_init(init_a, init_s) - children(0); - } - } - - // <<< end: modules and functions for "AXIS-ANGLE" - - - // >>> begin: modules and functions for "EULER-ANGLE" - - function _euler_angle_path_angles(pts, end_i, i = 0) = - i == end_i ? - [] : - concat( - [__angy_angz(pts[i], pts[i + 1])], - _euler_angle_path_angles(pts, end_i, i + 1) - ); - - function euler_angle_path_angles(children) = - let( - pts = len(points[0]) == 3 ? points : [for(pt = points) __to3d(pt)], - end_i = children == 1 ? leng_points_minus_one : children - 1, - angs = _euler_angle_path_angles(pts, end_i) - ) - concat( - [[0, -angs[0][0], angs[0][1]]], - [for(a = angs) [0, -a[0], a[1]]] - ); - - module euler_angle_align(i, angs) { - translate(points[i]) - rotate(angs[i]) - rotate(angles_defined ? [0, 0, 0] : [90, 0, -90]) - rotate(twist_step_a * i) - scale([1, 1, 1] + scale_step_vt * i) - children(0); - } - - // <<< end: modules and functions for "EULER-ANGLE" - - if(method == "AXIS_ANGLE") { - if(angles_defined) { - if($children == 1) { - for(i = [0:leng_points_minus_one]) { - axis_angle_align_with_pts_angles(i) children(0); - } - } else { - for(i = [0:min(leng_points, $children) - 1]) { - axis_angle_align_with_pts_angles(i) children(i); - } - } - } - else { - cumu_rot_matrice = axis_angle_cumulated_rot_matrice(0, [ - for(ang_vect = axis_angle_local_ang_vects(leng_points - 2)) - m_rotation(ang_vect[0], ang_vect[1]) - ]); - - translate(points[0]) - axis_angle_align_with_pts_local_rotate(0, 0, [1, 1, 1], cumu_rot_matrice) - children(0); - - if($children == 1) { - for(i = [0:leng_points - 2]) { - translate(points[i + 1]) - axis_angle_align_with_pts_local_rotate(i, i * twist_step_a, [1, 1, 1] + scale_step_vt * i, cumu_rot_matrice) - children(0); - } - } else { - for(i = [0:min(leng_points, $children) - 2]) { - translate(points[i + 1]) - axis_angle_align_with_pts_local_rotate(i, i * twist_step_a, [1, 1, 1] + scale_step_vt * i, cumu_rot_matrice) - children(i + 1); - } - } - } - } - else if(method == "EULER_ANGLE") { - angs = angles_defined ? angles : euler_angle_path_angles($children); - - if($children == 1) { - for(i = [0:leng_points_minus_one]) { - euler_angle_align(i, angs) children(0); - } - - } else { - for(i = [0:min(leng_points, $children) - 1]) { - euler_angle_align(i, angs) children(i); - } - } - } -} - -/** -* stereographic_extrude.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-stereographic_extrude.html -* -**/ - -module stereographic_extrude(shadow_side_leng) { - half_side_length = shadow_side_leng / 2; - outer_sphere_r = half_side_length / 3; - a = atan(sqrt(2) * half_side_length / (2 * outer_sphere_r)); - inner_sphere_r = outer_sphere_r * sin(a); - - intersection() { - translate([0, 0, outer_sphere_r]) difference() { - sphere(outer_sphere_r); - sphere(outer_sphere_r / 2 + inner_sphere_r / 2); - - translate([0, 0, outer_sphere_r / 2]) - linear_extrude(outer_sphere_r) - circle(inner_sphere_r * cos(a)); - } - - linear_extrude(outer_sphere_r * 2, scale = 0.01) - children(); - } - - // hook for testing - test_stereographic_extrude_rs(outer_sphere_r, inner_sphere_r); -} - -// override for testing -module test_stereographic_extrude_rs(outer_sphere_r, inner_sphere_r) { - -} - -/** -* sub_str.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-sub_str.html -* -**/ - -function _sub_str(t, begin, end) = - begin == end ? "" : str(t[begin], sub_str(t, begin + 1, end)); - -function sub_str(t, begin, end) = - end == undef ? _sub_str(t, begin, len(t)) : _sub_str(t, begin, end); - - -/** -* hollow_out.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-hollow_out.html -* -**/ - -module hollow_out(shell_thickness) { - difference() { - children(); - offset(delta = -shell_thickness) children(); - } -} - -/** -* voronoi2d.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-voronoi2d.html -* -**/ - -module voronoi2d(points, spacing = 1, r = 0, delta = 0, chamfer = false, region_type = "square") { - xs = [for(p = points) p[0]]; - ys = [for(p = points) abs(p[1])]; - - region_size = max([(max(xs) - min(xs) / 2), (max(ys) - min(ys)) / 2]); - half_region_size = 0.5 * region_size; - offset_leng = spacing * 0.5 + half_region_size; - - function normalize(v) = v / norm(v); - - module region(pt) { - intersection_for(p = points) { - if(pt != p) { - v = p - pt; - translate((pt + p) / 2 - normalize(v) * offset_leng) - rotate(atan2(v[1], v[0])) - if(region_type == "square") { - square(region_size, center = true); - } - else if(region_type == "circle") { - circle(region_size / 2); - } - - } - } - } - - for(p = points) { - if(r != 0) { - offset(r) region(p); - } - else { - offset(delta = delta, chamfer = chamfer) region(p); - } - } -} +function __half_trapezium(length, h, round_r) = + let( + is_flt = is_num(length), + l1 = is_flt ? length : length[0], + l2 = is_flt ? length : length[1], + frags = __frags(round_r), + b_ang = atan2(h, l1 - l2), + br_corner = __br_corner(frags, b_ang, l1, l2, h, round_r), + tr_corner = __tr_corner(frags, b_ang, l1, l2, h, round_r) + ) + concat( + br_corner, + tr_corner + ); /** * sphere_spiral_extrude.scad @@ -3269,56 +3894,68 @@ module test_sphere_spiral_extrude(sections) { } /** -* rounded_cylinder.scad +* m_scaling.scad * -* @copyright Justin Lin, 2017 +* @copyright Justin Lin, 2019 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_cylinder.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_scaling.html * **/ -module rounded_cylinder(radius, h, round_r, convexity = 2, center = false) { - r_corners = __half_trapezium(radius, h, round_r); - - shape_pts = concat( - [[0, -h/2]], - r_corners, - [[0, h/2]] - ); +function m_scaling(s) = __m_scaling(s); - center_pt = center ? [0, 0, 0] : [0, 0, h/2]; +/** +* shape_pentagram.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_ellipse.html +* +**/ - translate(center ? [0, 0, 0] : [0, 0, h/2]) - rotate(180) - rotate_extrude(convexity = convexity) - polygon(shape_pts); +function shape_pentagram(r) = + [ + [0, 1], [-0.224514, 0.309017], + [-0.951057, 0.309017], [-0.363271, -0.118034], + [-0.587785, -0.809017], [0, -0.381966], + [0.587785, -0.809017], [0.363271, -0.118034], + [0.951057, 0.309017], [0.224514, 0.309017] + ] * r; - // hook for testing - test_center_half_trapezium(center_pt, shape_pts); -} - -// override it to test -module test_center_half_trapezium(center_pt, shape_pts) { - -} - - -function __trapezium(length, h, round_r) = +function __shape_arc(radius, angle, width, width_mode = "LINE_CROSS") = let( - r_half_trapezium = __half_trapezium(length / 2, h, round_r), - to = len(r_half_trapezium) - 1, - l_half_trapezium = [ - for(i = [0:to]) - let(pt = r_half_trapezium[to - i]) - [-pt[0], pt[1]] - ] - ) - concat( - r_half_trapezium, - l_half_trapezium - ); + w_offset = width_mode == "LINE_CROSS" ? [width / 2, -width / 2] : ( + width_mode == "LINE_INWARD" ? [0, -width] : [width, 0] + ), + frags = __frags(radius), + a_step = 360 / frags, + half_a_step = a_step / 2, + angles = is_num(angle) ? [0, angle] : angle, + m = floor(angles[0] / a_step) + 1, + n = floor(angles[1] / a_step), + r_outer = radius + w_offset[0], + r_inner = radius + w_offset[1], + points = concat( + // outer arc path + [__ra_to_xy(__edge_r_begin(r_outer, angles[0], a_step, m), angles[0])], + m > n ? [] : [ + for(i = m; i <= n; i = i + 1) __ra_to_xy(r_outer, a_step * i) + ], + angles[1] == a_step * n ? [] : [__ra_to_xy(__edge_r_end(r_outer, angles[1], a_step, n), angles[1])], + // inner arc path + angles[1] == a_step * n ? [] : [__ra_to_xy(__edge_r_end(r_inner, angles[1], a_step, n), angles[1])], + m > n ? [] : [ + for(i = m; i <= n; i = i + 1) + let(idx = (n + (m - i))) + __ra_to_xy(r_inner, a_step * idx) + + ], + [__ra_to_xy(__edge_r_begin(r_inner, angles[0], a_step, m), angles[0])] + ) + ) points; /** * path_scaling_sections.scad @@ -3338,11 +3975,12 @@ function path_scaling_sections(shape_pts, edge_path) = scaling_matrice = [ for(p = edge_path) let(s = norm([p[0], p[1], 0]) / base_leng) - m_scaling([s, s, 1]) - ] + __m_scaling([s, s, 1]) + ], + leng_edge_path = len(edge_path) ) __reverse([ - for(i = [0:len(edge_path) - 1]) + for(i = 0; i < leng_edge_path; i = i + 1) [ for(p = shape_pts) let(scaled_p = scaling_matrice[i] * [p[0], p[1], edge_path[i][2], 1]) @@ -3350,76 +3988,352 @@ function path_scaling_sections(shape_pts, edge_path) = ] ]); -function __to_degree(phi) = 180 / 3.14159 * phi; +/** +* m_shearing.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_shearing.html +* +**/ + + +function m_shearing(sx = [0, 0], sy = [0, 0], sz = [0, 0]) = __m_shearing(sx, sy, sz); + +function __line_intersection(line_pts1, line_pts2, epsilon = 0.0001) = + let( + a1 = line_pts1[0], + a2 = line_pts1[1], + b1 = line_pts2[0], + b2 = line_pts2[1], + a = a2 - a1, + b = b2 - b1, + s = b1 - a1 + ) + abs(cross(a, b)) < epsilon ? [] : // they are parallel or conincident edges + a1 + a * cross(s, b) / cross(a, b); /** -* bezier_smooth.scad +* px_sphere.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_sphere.html +* +**/ + +function px_sphere(radius, filled = false, thickness = 1) = + let(range = [-radius: radius - 1]) + filled ? [ + for(z = range) + for(y = range) + for(x = range) + let(v = [x, y, z]) + if(norm(v) < radius) v + ] : + let(ishell = radius * radius - 2 * thickness * radius) + [ + for(z = range) + for(y = range) + for(x = range) + let( + v = [x, y, z], + leng = norm(v) + ) + if(leng < radius && (leng * leng) > ishell) v + ]; + + +/** +* in_shape.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-in_shape.html +* +**/ + + +function _in_shape_in_line_equation(edge, pt) = + let( + x1 = edge[0][0], + y1 = edge[0][1], + x2 = edge[1][0], + y2 = edge[1][1], + a = (y2 - y1) / (x2 - x1), + b = y1 - a * x1 + ) + (pt[1] == a * pt[0] + b); + +function _in_shape_in_any_edges(edges, pt, epsilon) = + let( + leng = len(edges), + maybe_last = [for(i = 0; i < leng && !__in_line(edges[i], pt, epsilon); i = i + 1) i][leng - 1] + ) + is_undef(maybe_last); + +function _in_shape_interpolate_x(y, p1, p2) = + p1[1] == p2[1] ? p1[0] : ( + p1[0] + (p2[0] - p1[0]) * (y - p1[1]) / (p2[1] - p1[1]) + ); + +function _in_shape_does_pt_cross(pts, i, j, pt) = + ((pts[i][1] > pt[1]) != (pts[j][1] > pt[1])) && + (pt[0] < _in_shape_interpolate_x(pt[1], pts[i], pts[j])); + + +function _in_shape_sub(shapt_pts, leng, pt, cond, i, j) = + j == leng ? cond : ( + _in_shape_does_pt_cross(shapt_pts, i, j, pt) ? + _in_shape_sub(shapt_pts, leng, pt, !cond, j, j + 1) : + _in_shape_sub(shapt_pts, leng, pt, cond, j, j + 1) + ); + +function in_shape(shapt_pts, pt, include_edge = false, epsilon = 0.0001) = + let( + leng = len(shapt_pts), + edges = __lines_from(shapt_pts, true) + ) + _in_shape_in_any_edges(edges, pt, epsilon) ? include_edge : + _in_shape_sub(shapt_pts, leng, pt, false, leng - 1, 0); + +/** +* sphere_spiral.scad * * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-bezier_curve.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib-sphere_spiral.html +* +**/ + +function sphere_spiral(radius, za_step, z_circles = 1, begin_angle = 0, end_angle = 0, vt_dir = "SPI_DOWN", rt_dir = "CT_CLK") = + let( + a_end = 90 * z_circles - end_angle + ) + [ + for(a = begin_angle; a <= a_end; a = a + za_step) + let( + ya = vt_dir == "SPI_DOWN" ? (-90 + 2 * a / z_circles) : (90 + 2 * a / z_circles), + za = (rt_dir == "CT_CLK" ? 1 : -1) * a, + ra = [0, ya, za] + ) + [rotate_p([radius, 0, 0], ra), ra] + ]; + +function __shape_pie(radius, angle) = + let( + frags = __frags(radius), + a_step = 360 / frags, + leng = radius * cos(a_step / 2), + angles = is_num(angle) ? [0:angle] : angle, + m = floor(angles[0] / a_step) + 1, + n = floor(angles[1] / a_step), + edge_r_begin = leng / cos((m - 0.5) * a_step - angles[0]), + edge_r_end = leng / cos((n + 0.5) * a_step - angles[1]), + shape_pts = concat( + [[0, 0], __ra_to_xy(edge_r_begin, angles[0])], + m > n ? [] : [ + for(i = m; i <= n; i = i + 1) + let(a = a_step * i) + __ra_to_xy(radius, a) + ], + angles[1] == a_step * n ? [] : [__ra_to_xy(edge_r_end, angles[1])] + ) + ) shape_pts; + +/** +* bijection_offset.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-bijection_offset.html +* +**/ + + +function _bijection_inward_edge_normal(edge) = + let( + pt1 = edge[0], + pt2 = edge[1], + dx = pt2[0] - pt1[0], + dy = pt2[1] - pt1[1], + edge_leng = norm([dx, dy]) + ) + [-dy / edge_leng, dx / edge_leng]; + +function _bijection_outward_edge_normal(edge) = -1 * _bijection_inward_edge_normal(edge); + +function _bijection_offset_edge(edge, dx, dy) = + let( + pt1 = edge[0], + pt2 = edge[1], + dxy = [dx, dy] + ) + [pt1 + dxy, pt2 + dxy]; + +function _bijection__bijection_offset_edges(edges, d) = + [ + for(edge = edges) + let( + ow_normal = _bijection_outward_edge_normal(edge), + dx = ow_normal[0] * d, + dy = ow_normal[1] * d + ) + _bijection_offset_edge(edge, dx, dy) + ]; + +function bijection_offset(pts, d, epsilon = 0.0001) = + let( + es = __lines_from(pts, true), + offset_es = _bijection__bijection_offset_edges(es, d), + leng = len(offset_es), + last_p = __line_intersection(offset_es[leng - 1], offset_es[0], epsilon) + ) + concat( + [ + for(i = 0; i < leng - 1; i = i + 1) + let( + this_edge = offset_es[i], + next_edge = offset_es[i + 1], + p = __line_intersection(this_edge, next_edge, epsilon) + ) + // p == p to avoid [nan, nan], because [nan, nan] != [nan, nan] + if(p != [] && p == p) p + ], + last_p != [] && last_p == last_p ? [last_p] : [] + ); + + +/** +* arc_shape.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-arc_path.html * **/ -function _corner_ctrl_pts(round_d, p1, p2, p3) = +function arc_path(radius, angle) = let( - _ya_za_1 = __angy_angz(p1, p2), - _ya_za_2 = __angy_angz(p3, p2), - - dz1 = sin(_ya_za_1[0]) * round_d, - dxy1 = cos(_ya_za_1[0]) * round_d, - dy1 = sin(_ya_za_1[1]) * dxy1, - dx1 = cos(_ya_za_1[1]) * dxy1, - - dz2 = sin(_ya_za_2[0]) * round_d, - dxy2 = cos(_ya_za_2[0]) * round_d, - dy2 = sin(_ya_za_2[1]) * dxy2, - dx2 = cos(_ya_za_2[1]) * dxy2 + frags = __frags(radius), + a_step = 360 / frags, + angles = is_num(angle) ? [0, angle] : angle, + m = floor(angles[0] / a_step) + 1, + n = floor(angles[1] / a_step), + points = concat([__ra_to_xy(__edge_r_begin(radius, angles[0], a_step, m), angles[0])], + m > n ? [] : [ + for(i = m; i <= n; i = i + 1) + __ra_to_xy(radius, a_step * i) + ], + angles[1] == a_step * n ? [] : [__ra_to_xy(__edge_r_end(radius, angles[1], a_step, n), angles[1])]) + ) points; + +/** +* helix_extrude.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-helix_extrude.html +* +**/ + + +module helix_extrude(shape_pts, radius, levels, level_dist, + vt_dir = "SPI_DOWN", rt_dir = "CT_CLK", + twist = 0, scale = 1.0, triangles = "SOLID") { + + function reverse(vt) = + let(leng = len(vt)) + [ + for(i = 0; i < leng; i = i + 1) + vt[leng - 1 - i] + ]; + + is_flt = is_num(radius); + r1 = is_flt ? radius : radius[0]; + r2 = is_flt ? radius : radius[1]; + + init_r = vt_dir == "SPI_DOWN" ? r2 : r1; + + frags = __frags(init_r); + + v_dir = vt_dir == "SPI_UP" ? 1 : -1; + r_dir = rt_dir == "CT_CLK" ? 1 : -1; + + angle_step = 360 / frags * r_dir; + initial_angle = atan2(level_dist / frags, PI * 2 * init_r / frags) * v_dir * r_dir; + + path_points = helix( + radius = radius, + levels = levels, + level_dist = level_dist, + vt_dir = vt_dir, + rt_dir = rt_dir + ); + + clk_a = r_dir == 1 ? 0 : 180; + angles = [for(i = 0; i < len(path_points); i = i + 1) [90 + initial_angle, 0, clk_a + angle_step * i]]; + + sections = cross_sections(shape_pts, path_points, angles, twist, scale); + + polysections( + sections, + triangles = triangles + ); + + // hook for testing + test_helix_extrude(sections); +} + +// override it to test +module test_helix_extrude(sections) { + +} + +/** +* paths2sections.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-paths2sections.html +* +**/ + +function paths2sections(paths) = + let( + leng_path = len(paths[0]), + leng_paths = len(paths) ) [ - p2 - [dx1, dy1, dz1], - p2, - p2 - [dx2, dy2, dz2] + for(i = 0; i < leng_path; i = i + 1) + [ + for(j = 0; j < leng_paths; j = j + 1) + paths[j][i] + ] ]; - - -function _bezier_corner(round_d, t_step, p1, p2, p3) = - bezier_curve(t_step, _corner_ctrl_pts(round_d, p1, p2, p3)); -function _recursive_bezier_smooth(pts, round_d, t_step, leng, i = 0) = - i <= leng - 3 ? - concat( - _bezier_corner(round_d, t_step, pts[i], pts[i + 1], pts[i + 2]), - _recursive_bezier_smooth(pts, round_d, t_step, leng, i + 1) - ) - : []; - -function bezier_smooth(path_pts, round_d, t_step = 0.1, closed = false) = - let( - pts = len(path_pts[0]) == 3 ? path_pts : [for(p = path_pts) __to3d(p)], - leng = len(pts), - middle_pts = _recursive_bezier_smooth(pts, round_d, t_step, leng), - pth_pts = closed ? - concat( - _recursive_bezier_smooth( - [pts[leng - 1], pts[0], pts[1]], - round_d, t_step, 3 - ), - middle_pts, - _recursive_bezier_smooth( - [pts[leng - 2], pts[leng - 1], pts[0]], - round_d, t_step, 3 - ) - ) : - concat( - [pts[0]], - middle_pts, - [pts[leng - 1]] - ) - ) - len(path_pts[0]) == 2 ? [for(p = pth_pts) __to2d(p)] : pth_pts; +/** +* shape_pie.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_pie.html +* +**/ + + +function shape_pie(radius, angle) = + __shape_pie(radius, angle); function __in_line(line_pts, pt, epsilon = 0.0001) = let( @@ -3430,45 +4344,56 @@ function __in_line(line_pts, pt, epsilon = 0.0001) = ) (norm(cross(v1, v2)) < epsilon) && ((v1 * v2) <= epsilon); -function __nearest_multiple_of_4(n) = - let( - remain = n % 4 - ) - (remain / 4) > 0.5 ? n - remain + 4 : n - remain; - - /** -* hull_polyline3d.scad +* pie.scad * * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/hull_polyline3d.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib-pie.html * **/ -module hull_polyline3d(points, thickness) { - half_thickness = thickness / 2; - leng = len(points); - - module hull_line3d(index) { - point1 = points[index - 1]; - point2 = points[index]; + +module pie(radius, angle) { + polygon(__shape_pie(radius, angle)); +} - hull() { - translate(point1) - sphere(half_thickness); - translate(point2) - sphere(half_thickness); - } +/** +* polyline3d.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-polyline3d.html +* +**/ + +module polyline3d(points, thickness, startingStyle = "CAP_CIRCLE", endingStyle = "CAP_CIRCLE") { + leng_pts = len(points); + + module line_segment(index) { + styles = index == 1 ? [startingStyle, "CAP_BUTT"] : ( + index == leng_pts - 1 ? ["CAP_SPHERE", endingStyle] : [ + "CAP_SPHERE", "CAP_BUTT" + ] + ); + + p1 = points[index - 1]; + p2 = points[index]; + p1Style = styles[0]; + p2Style = styles[1]; + + line3d(p1, p2, thickness, + p1Style = p1Style, p2Style = p2Style); // hook for testing - test_line_segment(index, point1, point2, half_thickness); + test_line3d_segment(index, p1, p2, thickness, p1Style, p2Style); } module polyline3d_inner(index) { - if(index < leng) { - hull_line3d(index); + if(index < leng_pts) { + line_segment(index); polyline3d_inner(index + 1); } } @@ -3477,295 +4402,280 @@ module hull_polyline3d(points, thickness) { } // override it to test -module test_line_segment(index, point1, point2, radius) { +module test_line3d_segment(index, point1, point2, thickness, p1Style, p2Style) { } /** -* ellipse_extrude.scad +* trim_shape.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-trim_shape.html +* +**/ + + +function _trim_shape_any_intersection_sub(lines, line, lines_leng, i, epsilon) = + let( + p = __line_intersection(lines[i], line, epsilon) + ) + (p != [] && __in_line(line, p, epsilon) && __in_line(lines[i], p, epsilon)) ? [i, p] : _trim_shape_any_intersection(lines, line, lines_leng, i + 1, epsilon); + +// return [idx, [x, y]] or [] +function _trim_shape_any_intersection(lines, line, lines_leng, i, epsilon) = + i == lines_leng ? [] : _trim_shape_any_intersection_sub(lines, line, lines_leng, i, epsilon); + +function _trim_sub(lines, leng, epsilon) = + let( + current_line = lines[0], + next_line = lines[1], + lines_from_next = [for(j = 1; j < leng; j = j + 1) lines[j]], + lines_from_next2 = [for(j = 2; j < leng; j = j + 1) lines[j]], + current_p = current_line[0], + leng_lines_from_next2 = len(lines_from_next2), + inter_p = _trim_shape_any_intersection(lines_from_next2, current_line, leng_lines_from_next2, 0, epsilon) + ) + // no intersecting pt, collect current_p and trim remain lines + inter_p == [] ? (concat([current_p], _trim_shape_trim_lines(lines_from_next, epsilon))) : ( + // collect current_p, intersecting pt and the last pt + (leng == 3 || (inter_p[0] == (leng_lines_from_next2 - 1))) ? [current_p, inter_p[1], lines[leng - 1]] : ( + // collect current_p, intersecting pt and trim remain lines + concat([current_p, inter_p[1]], + _trim_shape_trim_lines([for(i = inter_p[0] + 1; i < leng_lines_from_next2; i = i + 1) lines_from_next2[i]], epsilon) + ) + ) + ); + +function _trim_shape_trim_lines(lines, epsilon) = + let(leng = len(lines)) + leng > 2 ? _trim_sub(lines, leng, epsilon) : _trim_shape_collect_pts_from(lines, leng); + +function _trim_shape_collect_pts_from(lines, leng) = + concat([for(line = lines) line[0]], [lines[leng - 1][1]]); + +function trim_shape(shape_pts, from, to, epsilon = 0.0001) = + let( + pts = [for(i = from; i <= to; i = i + 1) shape_pts[i]], + trimmed = _trim_shape_trim_lines(__lines_from(pts), epsilon) + ) + len(shape_pts) == len(trimmed) ? trimmed : trim_shape(trimmed, 0, len(trimmed) - 1, epsilon); + + +function __to3d(p) = [p[0], p[1], 0]; + +/** +* along_with.scad * * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-ellipse_extrude.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib-along_with.html * -**/ +**/ + -module ellipse_extrude(semi_minor_axis, height, center = false, convexity = 10, twist = 0, slices = 20) { - h = height == undef ? semi_minor_axis : ( - // `semi_minor_axis` is always equal to or greater than `height`. - height > semi_minor_axis ? semi_minor_axis : height - ); - angle = asin(h / semi_minor_axis) / slices; +module along_with(points, angles, twist = 0, scale = 1.0, method = "AXIS_ANGLE") { + leng_points = len(points); + leng_points_minus_one = leng_points - 1; + twist_step_a = twist / leng_points; - function f_extrude(i = 1) = - i <= slices ? - concat( - [ - [ - cos(angle * i) / cos(angle * (i - 1)), - semi_minor_axis * sin(angle * i) - ] - ], - f_extrude(i + 1) - ) : []; + angles_defined = !is_undef(angles); - fzs = f_extrude(); - len_fzs = len(fzs); - - function accm_fs(pre_f = 1, i = 0) = - i < len_fzs ? - concat( - [pre_f * fzs[i][0]], - accm_fs(pre_f * fzs[i][0], i + 1) - ) : []; - - child_fs = concat([1], accm_fs()); - pre_zs = concat( - [0], + scale_step_vt = is_num(scale) ? + let(s = (scale - 1) / leng_points_minus_one) [s, s, s] : [ - for(i = [0:len_fzs - 1]) - fzs[i][1] - ] - ); + (scale[0] - 1) / leng_points_minus_one, + (scale[1] - 1) / leng_points_minus_one, + is_undef(scale[2]) ? 0 : (scale[2] - 1) / leng_points_minus_one + ]; - module extrude() { - for(i = [0:len_fzs - 1]) { - f = fzs[i][0]; - z = fzs[i][1]; + /* + Sadly, children(n) cannot be used with inner modules + so I have to do things in the first level. Ugly!! + */ - translate([0, 0, pre_zs[i]]) - rotate(-twist / slices * i) - linear_extrude( - z - pre_zs[i], - convexity = convexity, - twist = twist / slices, - slices = 1, - scale = f - ) scale(child_fs[i]) children(); - } - } - - center_offset = [0, 0, center == true ? -h / 2 : 0]; - translate(center_offset) - extrude() - children(); + // >>> begin: modules and functions for "AXIS-ANGLE" - // hook for testing - test_ellipse_extrude_fzc(child_fs, pre_zs, center_offset); -} - -// override for testing -module test_ellipse_extrude_fzc(child_fs, pre_zs, center_offset) { - -} - -/** -* log.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-log.html -* -**/ - -/* - The accepted values are "OFF" (-1), "INFO" (20), - "WARNING" (30), "ERROR" (40) or positive integers. -*/ -$log_level = "INFO"; - -module log(level = "INFO", level_color) { - default_level_ints = [ - ["OFF", -1], - ["INFO", 20], - ["WARNING", 30], - ["ERROR", 40] - ]; - - default_level_colors = [ - ["INFO", "green"], - ["WARNING", "orange"], - ["ERROR", "red"] + // get rotation matrice for sections + identity_matrix = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] ]; - /* - The built-in lookup function require integer keys. - I overwrite it so that using string keys is ok. - */ - function lookup(key, mappings, i = 0) = - i == len(mappings) ? key : ( - key == mappings[i][0] ? - mappings[i][1] : - lookup(key, mappings, i + 1) + function axis_angle_local_ang_vects(j) = + [ + for(i = j; i > 0; i = i - 1) + let( + vt0 = points[i] - points[i - 1], + vt1 = points[i + 1] - points[i], + a = acos((vt0 * vt1) / (norm(vt0) * norm(vt1))), + v = cross(vt0, vt1) + ) + [a, v] + ]; + + function axis_angle_cumulated_rot_matrice(i, rot_matrice) = + let( + leng_rot_matrice = len(rot_matrice), + leng_rot_matrice_minus_one = leng_rot_matrice - 1, + leng_rot_matrice_minus_two = leng_rot_matrice - 2 + ) + leng_rot_matrice == 0 ? [identity_matrix] : ( + leng_rot_matrice == 1 ? [rot_matrice[0], identity_matrix] : ( + i == leng_rot_matrice_minus_two ? + [ + rot_matrice[leng_rot_matrice_minus_one], + rot_matrice[leng_rot_matrice_minus_two] * rot_matrice[leng_rot_matrice_minus_one] + ] + : axis_angle_cumulated_rot_matrice_sub(i, rot_matrice) + ) ); - if($log_level != "OFF") { - argu_level = lookup(level, default_level_ints); - golbal_level = lookup( - $log_level == undef ? "INFO" : $log_level, - default_level_ints - ); + function axis_angle_cumulated_rot_matrice_sub(i, rot_matrice) = + let( + matrice = axis_angle_cumulated_rot_matrice(i + 1, rot_matrice), + curr_matrix = rot_matrice[i], + prev_matrix = matrice[len(matrice) - 1] + ) + concat(matrice, [curr_matrix * prev_matrix]); - if(argu_level >= golbal_level) { - c = level_color == undef ? lookup(level, default_level_colors) : level_color; - lv = str(len(level) == undef ? "LEVEL " : "", level); + // align modules + + module axis_angle_align_with_pts_angles(i) { + translate(points[i]) + rotate(angles[i]) + rotate(twist_step_a * i) + scale([1, 1, 1] + scale_step_vt * i) + children(0); + } + + module axis_angle_align_with_pts_init(a, s) { + angleyz = __angy_angz(__to3d(points[0]), __to3d(points[1])); + rotate([0, -angleyz[0], angleyz[1]]) + rotate([90, 0, -90]) + rotate(a) + scale(s) + children(0); + } + + module axis_angle_align_with_pts_local_rotate(j, init_a, init_s, cumu_rot_matrice) { + if(j == 0) { // first child + axis_angle_align_with_pts_init(init_a, init_s) + children(0); + } + else { + multmatrix(cumu_rot_matrice[j - 1]) + axis_angle_align_with_pts_init(init_a, init_s) + children(0); + } + } + + // <<< end: modules and functions for "AXIS-ANGLE" + + + // >>> begin: modules and functions for "EULER-ANGLE" + + function _euler_angle_path_angles(pts, end_i) = + [for(i = 0; i < end_i; i = i + 1) __angy_angz(pts[i], pts[i + 1])]; - // level text - echo( - str( - "", - "", - lv, - "", - "" - ) - ); - - // echo - for(i = [0:$children - 1]) { - children(i); + function euler_angle_path_angles(children) = + let( + pts = len(points[0]) == 3 ? points : [for(pt = points) __to3d(pt)], + end_i = children == 1 ? leng_points_minus_one : children - 1, + angs = _euler_angle_path_angles(pts, end_i) + ) + concat( + [[0, -angs[0][0], angs[0][1]]], + [for(a = angs) [0, -a[0], a[1]]] + ); + + module euler_angle_align(i, angs) { + translate(points[i]) + rotate(angs[i]) + rotate(angles_defined ? [0, 0, 0] : [90, 0, -90]) + rotate(twist_step_a * i) + scale([1, 1, 1] + scale_step_vt * i) + children(0); + } + + // <<< end: modules and functions for "EULER-ANGLE" + + if(method == "AXIS_ANGLE") { + if(angles_defined) { + if($children == 1) { + for(i = [0:leng_points_minus_one]) { + axis_angle_align_with_pts_angles(i) children(0); + } + } else { + for(i = [0:min(leng_points, $children) - 1]) { + axis_angle_align_with_pts_angles(i) children(i); + } + } + } + else { + cumu_rot_matrice = axis_angle_cumulated_rot_matrice(0, [ + for(ang_vect = axis_angle_local_ang_vects(leng_points - 2)) + __m_rotation(ang_vect[0], ang_vect[1]) + ]); + + translate(points[0]) + axis_angle_align_with_pts_local_rotate(0, 0, [1, 1, 1], cumu_rot_matrice) + children(0); + + if($children == 1) { + for(i = [0:leng_points - 2]) { + translate(points[i + 1]) + axis_angle_align_with_pts_local_rotate(i, i * twist_step_a, [1, 1, 1] + scale_step_vt * i, cumu_rot_matrice) + children(0); + } + } else { + for(i = [0:min(leng_points, $children) - 2]) { + translate(points[i + 1]) + axis_angle_align_with_pts_local_rotate(i, i * twist_step_a, [1, 1, 1] + scale_step_vt * i, cumu_rot_matrice) + children(i + 1); + } + } + } + } + else if(method == "EULER_ANGLE") { + angs = angles_defined ? angles : euler_angle_path_angles($children); + + if($children == 1) { + for(i = [0:leng_points_minus_one]) { + euler_angle_align(i, angs) children(0); + } + } else { + for(i = [0:min(leng_points, $children) - 1]) { + euler_angle_align(i, angs) children(i); } } - } -} -function __m_shearing(sx, sy, sz) = - let( - sx_along_y = sx[0], - sx_along_z = sx[1], - sy_along_x = sy[0], - sy_along_z = sy[1], - sz_along_x = sz[0], - sz_along_y = sz[1] - ) - [ - [1, sx_along_y, sx_along_z, 0], - [sy_along_x, 1, sy_along_z, 0], - [sz_along_x, sz_along_y, 1, 0], - [0, 0, 0, 1] - ]; - -function __edge_r_begin(orig_r, a, a_step, m) = - let(leng = orig_r * cos(a_step / 2)) - leng / cos((m - 0.5) * a_step - a); - -function __edge_r_end(orig_r, a, a_step, n) = - let(leng = orig_r * cos(a_step / 2)) - leng / cos((n + 0.5) * a_step - a); - -/** -* ring_extrude.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-ring_extrude.html -* -**/ - - -module ring_extrude(shape_pts, radius, angle = 360, twist = 0, scale = 1.0, triangles = "SOLID") { - if(angle == 360 && twist == 0 && scale == 1.0) { - rotate_extrude() - translate([radius, 0, 0]) - polygon(shape_pts); - } else { - a_step = 360 / __frags(radius); - - angles = __is_float(angle) ? [0, angle] : angle; - - m = floor(angles[0] / a_step) + 1; - n = floor(angles[1] / a_step); - - leng = radius * cos(a_step / 2); - - begin_r = - leng / cos((m - 0.5) * a_step - angles[0]); - - end_r = - leng / cos((n + 0.5) * a_step - angles[1]); - - angs = concat( - [[90, 0, angles[0]]], - m > n ? [] : [for(i = [m:n]) [90, 0, a_step * i]] - ); - pts = concat( - [__ra_to_xy(begin_r, angles[0])], - m > n ? [] : [for(i = [m:n]) __ra_to_xy(radius, a_step * i)] - ); - - is_angle_frag_end = angs[len(angs) - 1][2] == angles[1]; - - all_angles = is_angle_frag_end ? - angs : - concat(angs, [[90, 0, angles[1]]]); - - all_points = is_angle_frag_end ? - pts : - concat(pts, [__ra_to_xy(end_r, angles[1])]); - - sections = cross_sections(shape_pts, all_points, all_angles, twist, scale); - - polysections( - sections, - triangles = triangles - ); - - // hook for testing - test_ring_extrude(sections); + test_along_with_angles(angs); } } -// Override it to test -module test_ring_extrude(sections) { +module test_along_with_angles(angles) { } /** -* shape_ellipse.scad +* arc.scad * * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_ellipse.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib-arc.html * -**/ +**/ -function shape_ellipse(axes) = - let( - frags = __frags(axes[0]), - step_a = 360 / frags, - shape_pts = [ - for(a = [0:step_a:360 - step_a]) - [axes[0] * cos(a), axes[1] * sin(a)] - ] - ) shape_pts; - -function __shape_pie(radius, angle) = - let( - frags = __frags(radius), - a_step = 360 / frags, - leng = radius * cos(a_step / 2), - angles = __is_float(angle) ? [0:angle] : angle, - m = floor(angles[0] / a_step) + 1, - n = floor(angles[1] / a_step), - edge_r_begin = leng / cos((m - 0.5) * a_step - angles[0]), - edge_r_end = leng / cos((n + 0.5) * a_step - angles[1]), - shape_pts = concat( - [[0, 0], __ra_to_xy(edge_r_begin, angles[0])], - m > n ? [] : [ - for(i = [m:n]) - let(a = a_step * i) - __ra_to_xy(radius, a) - ], - angles[1] == a_step * n ? [] : [__ra_to_xy(edge_r_end, angles[1])] - ) - ) shape_pts; - -function __to2d(p) = [p[0], p[1]]; +module arc(radius, angle, width, width_mode = "LINE_CROSS") { + polygon(__shape_arc(radius, angle, width, width_mode)); +} /** * rotate_p.scad @@ -3852,568 +4762,34 @@ function _q_rotate_p(p, a, v) = ); function rotate_p(point, a, v) = - v == undef ? _rotate_p(point, a) : _q_rotate_p(point, a, v); + is_undef(v) ? _rotate_p(point, a) : _q_rotate_p(point, a, v); /** -* shape_path_extend.scad +* sub_str.scad * * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-path_extend.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-sub_str.html * -**/ +**/ - -function _shape_path_extend_az(p1, p2) = - let( - x1 = p1[0], - y1 = p1[1], - x2 = p2[0], - y2 = p2[1] - ) -90 + atan2((y2 - y1), (x2 - x1)); - -function _shape_path_first_stroke(stroke_pts, path_pts) = - let( - p1 = path_pts[0], - p2 = path_pts[1], - a = _shape_path_extend_az(p1, p2) - ) - [ - for(p = stroke_pts) - rotate_p(p, a) + p1 - ]; - -function _shape_path_extend_stroke(stroke_pts, p1, p2, scale_step, i) = - let( - leng = norm(__to3d(p2) - __to3d(p1)), - a = _shape_path_extend_az(p1, p2) - ) - [ - for(p = stroke_pts) - rotate_p(p * (1 + scale_step * i) + [0, leng], a) + p1 - ]; +function _sub_str(t, begin, end) = + begin == end ? "" : str(t[begin], sub_str(t, begin + 1, end)); -function _shape_path_extend_inner(stroke_pts, path_pts, leng_path_pts, scale_step, index) = - index == leng_path_pts ? [] : - concat( - [ - _shape_path_extend_stroke( - stroke_pts, - path_pts[index - 1], - path_pts[index], - scale_step, - index - ) - ], - _shape_path_extend_inner( - stroke_pts, - path_pts, - leng_path_pts, - scale_step, - index + 1 - ) - ); +function sub_str(t, begin, end) = + is_undef(end) ? _sub_str(t, begin, len(t)) : _sub_str(t, begin, end); -function shape_path_extend(stroke_pts, path_pts, scale = 1.0, closed = false) = + +function __lines_from(pts, closed = false) = let( - leng_path_pts = len(path_pts), - scale_step = (scale - 1) / (leng_path_pts - 1), - strokes = _shape_path_extend_inner(stroke_pts, path_pts, leng_path_pts, scale_step, 1) + leng = len(pts), + endi = leng - 1 ) - closed && path_pts[0] == path_pts[leng_path_pts - 1] ? - __polytransversals(concat(strokes, [strokes[0]])) : - __polytransversals( - concat([_shape_path_first_stroke(stroke_pts, path_pts)], strokes) - ); - - - -/** -* box_extrude.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-box_extrude.html -* -**/ - -module box_extrude(height, shell_thickness, offset_mode = "delta", chamfer = false) { - linear_extrude(shell_thickness) - children(); - - linear_extrude(height) - difference() { - children(); - if(offset_mode == "delta") { - offset(delta = -shell_thickness, chamfer = chamfer) - children(); - } else { - offset(r = -shell_thickness) - children(); - } - } -} - - - -/** -* triangulate.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-triangulate.html -* -**/ - -function _triangulate_in_triangle(p0, p1, p2, p) = - let( - v0 = p0 - p, - v1 = p1 - p, - v2 = p2 - p, - c0 = cross(v0, v1), - c1 = cross(v1, v2), - c2 = cross(v2, v0) - ) - (c0 > 0 && c1 > 0 && c2 > 0) || (c0 < 0 && c1 < 0 && c2 < 0); - -function _triangulate_snipable(shape_pts, u, v, w, n, indices, epsilon = 0.0001) = - let( - a = shape_pts[indices[u]], - b = shape_pts[indices[v]], - c = shape_pts[indices[w]], - ax = a[0], - ay = a[1], - bx = b[0], - by = b[1], - cx = c[0], - cy = c[1] - ) - epsilon > (((bx - ax) * (cy - ay)) - ((by - ay) * (cx - ax))) ? - false : _triangulate_snipable_sub(shape_pts, n, u, v, w, a, b, c, indices); - -function _triangulate_snipable_sub(shape_pts, n, u, v, w, a, b, c, indices, p = 0) = - p == n ? true : ( - ((p == u) || (p == v) || (p == w)) ? _triangulate_snipable_sub(shape_pts, n, u, v, w, a, b, c, indices, p + 1) : ( - _triangulate_in_triangle(a, b, c, shape_pts[indices[p]]) ? - false : _triangulate_snipable_sub(shape_pts, n, u, v, w, a, b, c, indices, p + 1) - ) - ); - -// remove the elem at idx v from indices -function _triangulate_remove_v(indices, v, num_of_vertices) = - let( - nv_minuns_one = num_of_vertices - 1 - ) - v == 0 ? [for(i = [1:nv_minuns_one]) indices[i]] : ( - v == nv_minuns_one ? [for(i = [0:v - 1]) indices[i]] : concat( - [for(i = [0:v - 1]) indices[i]], - [for(i = [v + 1:nv_minuns_one]) indices[i]] - ) - ); - -function _triangulate_zero_or_value(num_of_vertices, value) = - num_of_vertices <= value ? 0 : value; - - -function _triangulate_real_triangulate_sub(shape_pts, collector, indices, v, num_of_vertices, count, epsilon) = - let( - // idxes of three consecutive vertices - u = _triangulate_zero_or_value(num_of_vertices, v), - vi = _triangulate_zero_or_value(num_of_vertices, u + 1), - w = _triangulate_zero_or_value(num_of_vertices, vi + 1) - ) - _triangulate_snipable(shape_pts, u, vi, w, num_of_vertices, indices, epsilon) ? - _triangulate_snip(shape_pts, collector, indices, u, vi, w, num_of_vertices, count, epsilon) : - _triangulate_real_triangulate(shape_pts, collector, indices, vi, num_of_vertices, count, epsilon); - -function _triangulate_snip(shape_pts, collector, indices, u, v, w, num_of_vertices, count, epsilon) = - let( - a = indices[u], - b = indices[v], - c = indices[w], - new_nv = num_of_vertices - 1 - ) - _triangulate_real_triangulate( - shape_pts, - concat(collector, [[a, b, c]]), - _triangulate_remove_v(indices, v, num_of_vertices), - v, - new_nv, - 2 * new_nv, - epsilon - ); - -function _triangulate_real_triangulate(shape_pts, collector, indices, v, num_of_vertices, count, epsilon) = - count <= 0 ? [] : ( - num_of_vertices == 2 ? - collector : _triangulate_real_triangulate_sub(shape_pts, collector, indices, v, num_of_vertices, count - 1, epsilon) - ); - -function triangulate(shape_pts, epsilon = 0.0001) = - let( - num_of_vertices = len(shape_pts), - v = num_of_vertices - 1, - indices = [for(vi = [0:v]) vi], - count = 2 * num_of_vertices - ) - num_of_vertices < 3 ? [] : _triangulate_real_triangulate(shape_pts, [], indices, v, num_of_vertices, count, epsilon); - - -/** -* line2d.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-line2d.html -* -**/ - - -module line2d(p1, p2, width, p1Style = "CAP_SQUARE", p2Style = "CAP_SQUARE") { - half_width = 0.5 * width; - - atan_angle = atan2(p2[1] - p1[1], p2[0] - p1[0]); - leng = sqrt(pow(p2[0] - p1[0], 2) + pow(p2[1] - p1[1], 2)); - - frags = __nearest_multiple_of_4(__frags(half_width)); - - module square_end(point) { - translate(point) - rotate(atan_angle) - square(width, center = true); - - // hook for testing - test_line2d_cap(point, "CAP_SQUARE"); - } - - module round_end(point) { - translate(point) - rotate(atan_angle) - circle(half_width, $fn = frags); - - // hook for testing - test_line2d_cap(point, "CAP_ROUND"); - } - - if(p1Style == "CAP_SQUARE") { - square_end(p1); - } else if(p1Style == "CAP_ROUND") { - round_end(p1); - } - - translate(p1) - rotate(atan_angle) - translate([0, -width / 2]) - square([leng, width]); - - if(p2Style == "CAP_SQUARE") { - square_end(p2); - } else if(p2Style == "CAP_ROUND") { - round_end(p2); - } - - // hook for testing - test_line2d_line(atan_angle, leng, width, frags); -} - -// override them to test -module test_line2d_cap(point, style) { -} - -module test_line2d_line(angle, length, width, frags) { -} - - - -/** -* hull_polyline2d.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/hull_polyline2d.html -* -**/ - -module hull_polyline2d(points, width) { - half_width = width / 2; - leng = len(points); - - module hull_line2d(index) { - point1 = points[index - 1]; - point2 = points[index]; - - hull() { - translate(point1) - circle(half_width); - translate(point2) - circle(half_width); - } - - // hook for testing - test_line_segment(index, point1, point2, half_width); - } - - module polyline2d_inner(index) { - if(index < leng) { - hull_line2d(index); - polyline2d_inner(index + 1); - } - } - - polyline2d_inner(1); -} - -// override it to test -module test_line_segment(index, point1, point2, radius) { - -} - -/** -* circle_path.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-circle_path.html -* -**/ - - -function circle_path(radius, n) = - let( - _frags = __frags(radius), - step_a = 360 / _frags, - end_a = 360 - step_a * ((n == undef || n > _frags) ? 1 : _frags - n + 1) - ) - [ - for(a = [0 : step_a : end_a]) - [radius * cos(a), radius * sin(a)] - ]; - - -/** -* m_rotation.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_rotation.html -* -**/ - - -function _q_rotation(a, v) = - let( - half_a = a / 2, - axis = v / norm(v), - s = sin(half_a), - x = s * axis[0], - y = s * axis[1], - z = s * axis[2], - w = cos(half_a), - - x2 = x + x, - y2 = y + y, - z2 = z + z, - - xx = x * x2, - yx = y * x2, - yy = y * y2, - zx = z * x2, - zy = z * y2, - zz = z * z2, - wx = w * x2, - wy = w * y2, - wz = w * z2 - ) - [ - [1 - yy - zz, yx - wz, zx + wy, 0], - [yx + wz, 1 - xx - zz, zy - wx, 0], - [zx - wy, zy + wx, 1 - xx - yy, 0], - [0, 0, 0, 1] - ]; - -function _m_xRotation(a) = - let(c = cos(a), s = sin(a)) - [ - [1, 0, 0, 0], - [0, c, -s, 0], - [0, s, c, 0], - [0, 0, 0, 1] - ]; - -function _m_yRotation(a) = - let(c = cos(a), s = sin(a)) - [ - [c, 0, s, 0], - [0, 1, 0, 0], - [-s, 0, c, 0], - [0, 0, 0, 1] - ]; - -function _m_zRotation(a) = - let(c = cos(a), s = sin(a)) - [ - [c, -s, 0, 0], - [s, c, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ]; - -function _xyz_rotation(a) = - let(ang = __to_ang_vect(a)) - _m_zRotation(ang[2]) * _m_yRotation(ang[1]) * _m_xRotation(ang[0]); - -function m_rotation(a, v) = - (a == 0 || a == [0, 0, 0] || a == [0] || a == [0, 0]) ? [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ] : (v == undef ? _xyz_rotation(a) : _q_rotation(a, v)); - -function __tr__corner_t_leng_lt_zero(frags, t_sector_angle, l1, l2, h, round_r) = - let(t_height = tan(t_sector_angle) * l1 - round_r / sin(90 - t_sector_angle) - h / 2) - [ - for(pt = __pie_for_rounding(round_r, 90 - t_sector_angle, 90, frags * t_sector_angle / 180)) - [pt[0], pt[1] + t_height] - ]; - -function __tr_corner_t_leng_gt_or_eq_zero(frags, t_sector_angle, t_leng, h, round_r) = - let(offset_y = h / 2 - round_r) - [ - for(pt = __pie_for_rounding(round_r, 90 - t_sector_angle, 90, frags * t_sector_angle / 360)) - [pt[0] + t_leng, pt[1] + offset_y] - ]; - -function __tr_corner(frags, b_ang, l1, l2, h, round_r) = - let(t_leng = l2 - round_r * tan(b_ang / 2)) - t_leng >= 0 ? - __tr_corner_t_leng_gt_or_eq_zero(frags, b_ang, t_leng, h, round_r) : - __tr__corner_t_leng_lt_zero(frags, b_ang, l1, l2, h, round_r); - -function __tr__corner_b_leng_lt_zero(frags, b_sector_angle, l1, l2, h, round_r) = - let( - reversed = __tr__corner_t_leng_lt_zero(frags, b_sector_angle, l2, l1, h, round_r), - leng = len(reversed) - ) - [ - for(i = [0:leng - 1]) - let(pt = reversed[leng - 1 - i]) - [pt[0], -pt[1]] - ]; - -function __br_corner_b_leng_gt_or_eq_zero(frags, b_sector_angle, l1, l2, b_leng, h, round_r) = - let(half_h = h / 2) - [ - for(pt = __pie_for_rounding(round_r, -90, -90 + b_sector_angle, frags * b_sector_angle / 360)) - [pt[0] + b_leng, pt[1] + round_r - half_h] - ]; - -function __br_corner(frags, b_ang, l1, l2, h, round_r) = - let(b_leng = l1 - round_r / tan(b_ang / 2)) - b_leng >= 0 ? - __br_corner_b_leng_gt_or_eq_zero(frags, 180 - b_ang, l1, l2, b_leng, h, round_r) : - __tr__corner_b_leng_lt_zero(frags, 180 - b_ang, l1, l2, h, round_r); - -function __half_trapezium(length, h, round_r) = - let( - is_flt = __is_float(length), - l1 = is_flt ? length : length[0], - l2 = is_flt ? length : length[1], - frags = __frags(round_r), - b_ang = atan2(h, l1 - l2), - br_corner = __br_corner(frags, b_ang, l1, l2, h, round_r), - tr_corner = __tr_corner(frags, b_ang, l1, l2, h, round_r) - ) concat( - br_corner, - tr_corner + [for(i = 0; i < endi; i = i + 1) [pts[i], pts[i + 1]]], + closed ? [[pts[len(pts) - 1], pts[0]]] : [] ); - -/** -* rounded_cube.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_cube.html -* -**/ - - -module rounded_cube(size, corner_r, center = false) { - is_flt = __is_float(size); - x = is_flt ? size : size[0]; - y = is_flt ? size : size[1]; - z = is_flt ? size : size[2]; - - corner_frags = __nearest_multiple_of_4(__frags(corner_r)); - edge_d = corner_r * cos(180 / corner_frags); - - half_x = x / 2; - half_y = y / 2; - half_z = z / 2; - half_l = half_x - edge_d; - half_w = half_y - edge_d; - half_h = half_z - edge_d; - - half_cube_leng = size / 2; - half_leng = half_cube_leng - edge_d; - - corners = [ - for(z = [1, -1]) - for(y = [1, -1]) - for(x = [1, -1]) - [half_l * x, half_w * y, half_h * z] - ]; - - module corner(i) { - translate(corners[i]) - sphere(corner_r, $fn = corner_frags); - } - - center_pts = center ? [0, 0, 0] : [half_x, half_y, half_z]; - - // Don't use `hull() for(...) {...}` because it's slow. - translate(center_pts) hull() { - corner(0); - corner(1); - corner(2); - corner(3); - corner(4); - corner(5); - corner(6); - corner(7); - } - - // hook for testing - test_rounded_edge_corner_center(corner_frags, corners, center_pts); -} - -// override it to test -module test_rounded_edge_corner_center(corner_frags, corners, center_pts) { - -} - -/** -* shape_pie.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_pie.html -* -**/ - - -function shape_pie(radius, angle) = - __shape_pie(radius, angle); diff --git a/src/ellipse_extrude.scad b/src/ellipse_extrude.scad index 8d81b297..e449038e 100644 --- a/src/ellipse_extrude.scad +++ b/src/ellipse_extrude.scad @@ -9,47 +9,40 @@ **/ module ellipse_extrude(semi_minor_axis, height, center = false, convexity = 10, twist = 0, slices = 20) { - h = height == undef ? semi_minor_axis : ( + h = is_undef(height) ? semi_minor_axis : ( // `semi_minor_axis` is always equal to or greater than `height`. height > semi_minor_axis ? semi_minor_axis : height ); angle = asin(h / semi_minor_axis) / slices; - function f_extrude(i = 1) = - i <= slices ? - concat( - [ - [ - cos(angle * i) / cos(angle * (i - 1)), - semi_minor_axis * sin(angle * i) - ] - ], - f_extrude(i + 1) - ) : []; + f_extrude = [ + for(i = 1; i <= slices; i = i + 1) + [ + cos(angle * i) / cos(angle * (i - 1)), + semi_minor_axis * sin(angle * i) + ] + ]; + len_f_extrude = len(f_extrude); - fzs = f_extrude(); - len_fzs = len(fzs); + accm_fs = + [ + for(i = 0, pre_f = 1; i < len_f_extrude; pre_f = pre_f * f_extrude[i][0], i = i + 1) + pre_f * f_extrude[i][0] + ]; - function accm_fs(pre_f = 1, i = 0) = - i < len_fzs ? - concat( - [pre_f * fzs[i][0]], - accm_fs(pre_f * fzs[i][0], i + 1) - ) : []; - - child_fs = concat([1], accm_fs()); + child_fs = concat([1], accm_fs); pre_zs = concat( [0], [ - for(i = [0:len_fzs - 1]) - fzs[i][1] + for(i = 0; i < len_f_extrude; i = i + 1) + f_extrude[i][1] ] ); module extrude() { - for(i = [0:len_fzs - 1]) { - f = fzs[i][0]; - z = fzs[i][1]; + for(i = [0:len_f_extrude - 1]) { + f = f_extrude[i][0]; + z = f_extrude[i][1]; translate([0, 0, pre_zs[i]]) rotate(-twist / slices * i) diff --git a/src/function_grapher.scad b/src/function_grapher.scad index 46c58870..8cbd5c00 100644 --- a/src/function_grapher.scad +++ b/src/function_grapher.scad @@ -8,13 +8,16 @@ * **/ -include <__private__/__reverse.scad>; +include ; module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { rows = len(points); columns = len(points[0]); + yi_range = [0:rows - 2]; + xi_range = [0:columns - 2]; + // Increasing $fn will be slow when you use "LINES", "HULL_FACES" or "HULL_LINES". module faces() { @@ -34,16 +37,16 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { leng_pts = len(top_pts); top_tri_faces1 = slicing == "SLASH" ? [ - for(yi = [0:rows - 2]) - for(xi = [0:columns - 2]) + for(yi = yi_range) + for(xi = xi_range) [ xy_to_index(xi, yi, columns), xy_to_index(xi + 1, yi + 1, columns), xy_to_index(xi + 1, yi, columns) ] ] : [ - for(yi = [0:rows - 2]) - for(xi = [0:columns - 2]) + for(yi = yi_range) + for(xi = xi_range) [ xy_to_index(xi, yi, columns), xy_to_index(xi, yi + 1, columns), @@ -52,16 +55,16 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; top_tri_faces2 = slicing == "SLASH" ? [ - for(yi = [0:rows - 2]) - for(xi = [0:columns - 2]) + for(yi = yi_range) + for(xi = xi_range) [ xy_to_index(xi, yi, columns), xy_to_index(xi, yi + 1, columns), xy_to_index(xi + 1, yi + 1, columns) ] ] : [ - for(yi = [0:rows - 2]) - for(xi = [0:columns - 2]) + for(yi = yi_range) + for(xi = xi_range) [ xy_to_index(xi, yi + 1, columns), xy_to_index(xi + 1, yi + 1, columns), @@ -80,7 +83,7 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; side_faces1 = [ - for(xi = [0:columns - 2]) + for(xi = xi_range) let( idx1 = xy_to_index(xi, 0, columns), idx2 = xy_to_index(xi + 1, 0, columns) @@ -94,7 +97,7 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; side_faces2 = [ - for(yi = [0:rows - 2]) + for(yi = yi_range) let( xi = columns - 1, idx1 = xy_to_index(xi, yi, columns), @@ -109,7 +112,7 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; side_faces3 = [ - for(xi = [0:columns - 2]) + for(xi = xi_range) let( yi = rows - 1, idx1 = xy_to_index(xi, yi, columns), @@ -124,7 +127,7 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { ]; side_faces4 = [ - for(yi = [0:rows - 2]) + for(yi = yi_range) let( idx1 = xy_to_index(0, yi, columns), idx2 = xy_to_index(0, yi + 1, columns) @@ -193,8 +196,8 @@ module function_grapher(points, thickness, style = "FACES", slicing = "SLASH") { if(style == "FACES") { faces(); } else { - for(yi = [0:rows - 2]) { - for(xi = [0:columns - 2]) { + for(yi = yi_range) { + for(xi = xi_range) { if(slicing == "SLASH") { tri_to_graph([ points[yi][xi], diff --git a/src/golden_spiral.scad b/src/golden_spiral.scad index 5277c3b8..28aa20cc 100644 --- a/src/golden_spiral.scad +++ b/src/golden_spiral.scad @@ -26,7 +26,7 @@ function _fast_fibonacci(nth) = function _remove_same_pts(pts1, pts2) = pts1[len(pts1) - 1] == pts2[0] ? - concat(pts1, [for(i = [1:len(pts2) - 1]) pts2[i]]) : + concat(pts1, [for(i = 1; i < len(pts2); i = i + 1) pts2[i]]) : concat(pts1, pts2); function _golden_spiral_from_ls_or_eql_to(from, to, point_distance, rt_dir) = @@ -38,11 +38,12 @@ function _golden_spiral_from_ls_or_eql_to(from, to, point_distance, rt_dir) = circle_pts = circle_path(radius = f1, n = $fn / 4 + 1), len_pts = len(circle_pts), a_step = 360 / $fn * rt_dir, + range_i = [0:len_pts - 1], arc_points_angles = (rt_dir == 1 ? [ - for(i = [0:len_pts - 1]) + for(i = range_i) [circle_pts[i], a_step * i] ] : [ - for(i = [0:len_pts - 1]) let(idx = len_pts - i - 1) + for(i = range_i) let(idx = len_pts - i - 1) [circle_pts[idx], a_step * i] ]), offset = f2 - f1 diff --git a/src/helix.scad b/src/helix.scad index a51a3319..b54650e7 100644 --- a/src/helix.scad +++ b/src/helix.scad @@ -8,12 +8,11 @@ * **/ -include <__private__/__is_float.scad>; -include <__private__/__frags.scad>; +include <__comm__/__frags.scad>; function helix(radius, levels, level_dist, vt_dir = "SPI_DOWN", rt_dir = "CT_CLK") = let( - is_flt = __is_float(radius), + is_flt = is_num(radius), r1 = is_flt ? radius : radius[0], r2 = is_flt ? radius : radius[1], init_r = vt_dir == "SPI_DOWN" ? r2 : r1, @@ -26,10 +25,11 @@ function helix(radius, levels, level_dist, vt_dir = "SPI_DOWN", rt_dir = "CT_CLK r_step = r_diff / (levels * _frags), a_step = 360 / _frags * rt_d, begin_r = vt_dir == "SPI_DOWN" ? r2 : r1, - begin_h = vt_dir == "SPI_DOWN" ? h : 0 + begin_h = vt_dir == "SPI_DOWN" ? h : 0, + end_i = _frags * levels ) [ - for(i = [0:_frags * levels]) + for(i = 0; i <= end_i; i = i + 1) let(r = begin_r + r_step * i, a = a_step * i) [r * cos(a), r * sin(a), begin_h - h_step * i] ]; \ No newline at end of file diff --git a/src/helix_extrude.scad b/src/helix_extrude.scad index 1417e135..e8a1efcc 100644 --- a/src/helix_extrude.scad +++ b/src/helix_extrude.scad @@ -8,8 +8,7 @@ * **/ -include <__private__/__is_float.scad>; -include <__private__/__frags.scad>; +include <__comm__/__frags.scad>; module helix_extrude(shape_pts, radius, levels, level_dist, vt_dir = "SPI_DOWN", rt_dir = "CT_CLK", @@ -18,11 +17,11 @@ module helix_extrude(shape_pts, radius, levels, level_dist, function reverse(vt) = let(leng = len(vt)) [ - for(i = [0:leng - 1]) + for(i = 0; i < leng; i = i + 1) vt[leng - 1 - i] ]; - is_flt = __is_float(radius); + is_flt = is_num(radius); r1 = is_flt ? radius : radius[0]; r2 = is_flt ? radius : radius[1]; @@ -34,7 +33,7 @@ module helix_extrude(shape_pts, radius, levels, level_dist, r_dir = rt_dir == "CT_CLK" ? 1 : -1; angle_step = 360 / frags * r_dir; - initial_angle = atan2(level_dist / frags, 6.28318 * init_r / frags) * v_dir * r_dir; + initial_angle = atan2(level_dist / frags, PI * 2 * init_r / frags) * v_dir * r_dir; path_points = helix( radius = radius, @@ -45,7 +44,7 @@ module helix_extrude(shape_pts, radius, levels, level_dist, ); clk_a = r_dir == 1 ? 0 : 180; - angles = [for(i = [0:len(path_points) - 1]) [90 + initial_angle, 0, clk_a + angle_step * i]]; + angles = [for(i = 0; i < len(path_points); i = i + 1) [90 + initial_angle, 0, clk_a + angle_step * i]]; sections = cross_sections(shape_pts, path_points, angles, twist, scale); diff --git a/src/hexagons.scad b/src/hexagons.scad index c51c8888..a2ab1c51 100644 --- a/src/hexagons.scad +++ b/src/hexagons.scad @@ -26,7 +26,7 @@ module hexagons(radius, spacing, levels) { tx = hex_datum[0][0], ty = hex_datum[0][1], n = hex_datum[1], - offset_xs = [for(i = [0:n - 1]) i * offset_step + center_offset] + offset_xs = [for(i = 0; i < n; i = i + 1) i * offset_step + center_offset] ) [ for(x = offset_xs) [x + tx, ty] @@ -37,7 +37,7 @@ module hexagons(radius, spacing, levels) { ty = hex_datum[0][1]; n = hex_datum[1]; - offset_xs = [for(i = [0:n - 1]) i * offset_step + center_offset]; + offset_xs = [for(i = 0; i < n; i = i + 1) i * offset_step + center_offset]; for(x = offset_xs) { p = [x + tx, ty, 0]; translate(p) diff --git a/src/in_polyline.scad b/src/in_polyline.scad index f0b093a2..41ce4eba 100644 --- a/src/in_polyline.scad +++ b/src/in_polyline.scad @@ -8,15 +8,14 @@ * **/ -include <__private__/__to3d.scad>; -include <__private__/__in_line.scad>; - -function _in_polyline_sub(pts, pt, epsilon, iend, i = 0) = - i == iend ? false : ( - __in_line([pts[i], pts[i + 1]], pt, epsilon) ? true : - _in_polyline_sub(pts, pt, epsilon, iend, i + 1) - ); +include <__comm__/__to3d.scad>; +include <__comm__/__in_line.scad>; function in_polyline(line_pts, pt, epsilon = 0.0001) = - _in_polyline_sub(line_pts, pt, epsilon, len(line_pts) - 1); + let( + leng = len(line_pts), + iend = leng - 1, + maybe_last = [for(i = 0; i < iend && !__in_line([line_pts[i], line_pts[i + 1]], pt, epsilon); i = i + 1) i][leng - 2] + ) + is_undef(maybe_last); \ No newline at end of file diff --git a/src/in_shape.scad b/src/in_shape.scad index e104e883..307e423c 100644 --- a/src/in_shape.scad +++ b/src/in_shape.scad @@ -8,9 +8,9 @@ * **/ -include <__private__/__to3d.scad>; -include <__private__/__lines_from.scad>; -include <__private__/__in_line.scad>; +include <__comm__/__to3d.scad>; +include <__comm__/__lines_from.scad>; +include <__comm__/__in_line.scad>; function _in_shape_in_line_equation(edge, pt) = let( @@ -23,13 +23,13 @@ function _in_shape_in_line_equation(edge, pt) = ) (pt[1] == a * pt[0] + b); -function _in_shape_in_any_edges_sub(edges, leng, pt, i, epsilon) = - leng == i ? false : ( - __in_line(edges[i], pt, epsilon) ? true : _in_shape_in_any_edges_sub(edges, leng, pt, i + 1, epsilon) - ); +function _in_shape_in_any_edges(edges, pt, epsilon) = + let( + leng = len(edges), + maybe_last = [for(i = 0; i < leng && !__in_line(edges[i], pt, epsilon); i = i + 1) i][leng - 1] + ) + is_undef(maybe_last); -function _in_shape_in_any_edges(edges, pt, epsilon) = _in_shape_in_any_edges_sub(edges, len(edges), pt, 0, epsilon); - function _in_shape_interpolate_x(y, p1, p2) = p1[1] == p2[1] ? p1[0] : ( p1[0] + (p2[0] - p1[0]) * (y - p1[1]) / (p2[1] - p1[1]) diff --git a/src/line2d.scad b/src/line2d.scad index f8035459..654d09c1 100644 --- a/src/line2d.scad +++ b/src/line2d.scad @@ -8,8 +8,8 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__nearest_multiple_of_4.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__nearest_multiple_of_4.scad>; module line2d(p1, p2, width, p1Style = "CAP_SQUARE", p2Style = "CAP_SQUARE") { half_width = 0.5 * width; diff --git a/src/line3d.scad b/src/line3d.scad index dc295ca5..ae5f9cbf 100644 --- a/src/line3d.scad +++ b/src/line3d.scad @@ -8,8 +8,8 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__nearest_multiple_of_4.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__nearest_multiple_of_4.scad>; module line3d(p1, p2, thickness, p1Style = "CAP_CIRCLE", p2Style = "CAP_CIRCLE") { r = thickness / 2; diff --git a/src/log.scad b/src/log.scad deleted file mode 100644 index 84a6067c..00000000 --- a/src/log.scad +++ /dev/null @@ -1,70 +0,0 @@ -/** -* log.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-log.html -* -**/ - -/* - The accepted values are "OFF" (-1), "INFO" (20), - "WARNING" (30), "ERROR" (40) or positive integers. -*/ -$log_level = "INFO"; - -module log(level = "INFO", level_color) { - default_level_ints = [ - ["OFF", -1], - ["INFO", 20], - ["WARNING", 30], - ["ERROR", 40] - ]; - - default_level_colors = [ - ["INFO", "green"], - ["WARNING", "orange"], - ["ERROR", "red"] - ]; - - /* - The built-in lookup function require integer keys. - I overwrite it so that using string keys is ok. - */ - function lookup(key, mappings, i = 0) = - i == len(mappings) ? key : ( - key == mappings[i][0] ? - mappings[i][1] : - lookup(key, mappings, i + 1) - ); - - if($log_level != "OFF") { - argu_level = lookup(level, default_level_ints); - golbal_level = lookup( - $log_level == undef ? "INFO" : $log_level, - default_level_ints - ); - - if(argu_level >= golbal_level) { - c = level_color == undef ? lookup(level, default_level_colors) : level_color; - lv = str(len(level) == undef ? "LEVEL " : "", level); - - // level text - echo( - str( - "", - "", - lv, - "", - "" - ) - ); - - // echo - for(i = [0:$children - 1]) { - children(i); - } - } - } -} \ No newline at end of file diff --git a/src/m_scaling.scad b/src/m_scaling.scad deleted file mode 100644 index 0c4dfd74..00000000 --- a/src/m_scaling.scad +++ /dev/null @@ -1,28 +0,0 @@ -/** -* m_scaling.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_scaling.html -* -**/ - -include <__private__/__is_float.scad>; - -function _to_3_elems_scaling_vect(s) = - let(leng = len(s)) - leng == 3 ? s : ( - leng == 2 ? [s[0], s[1], 1] : [s[0], 1, 1] - ); - -function _to_scaling_vect(s) = __is_float(s) ? [s, s, s] : _to_3_elems_scaling_vect(s); - -function m_scaling(s) = - let(v = _to_scaling_vect(s)) - [ - [v[0], 0, 0, 0], - [0, v[1], 0, 0], - [0, 0, v[2], 0], - [0, 0, 0, 1] - ]; \ No newline at end of file diff --git a/src/m_rotation.scad b/src/matrix/__comm__/__m_rotation.scad similarity index 68% rename from src/m_rotation.scad rename to src/matrix/__comm__/__m_rotation.scad index c532bcc5..4ce85d6a 100644 --- a/src/m_rotation.scad +++ b/src/matrix/__comm__/__m_rotation.scad @@ -1,17 +1,4 @@ -/** -* m_rotation.scad -* -* @copyright Justin Lin, 2019 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_rotation.html -* -**/ - -include <__private__/__is_float.scad>; -include <__private__/__to_ang_vect.scad>; - -function _q_rotation(a, v) = +function __m_rotation_q_rotation(a, v) = let( half_a = a / 2, axis = v / norm(v), @@ -42,7 +29,7 @@ function _q_rotation(a, v) = [0, 0, 0, 1] ]; -function _m_xRotation(a) = +function __m_rotation_xRotation(a) = let(c = cos(a), s = sin(a)) [ [1, 0, 0, 0], @@ -51,7 +38,7 @@ function _m_xRotation(a) = [0, 0, 0, 1] ]; -function _m_yRotation(a) = +function __m_rotation_yRotation(a) = let(c = cos(a), s = sin(a)) [ [c, 0, s, 0], @@ -60,7 +47,7 @@ function _m_yRotation(a) = [0, 0, 0, 1] ]; -function _m_zRotation(a) = +function __m_rotation_zRotation(a) = let(c = cos(a), s = sin(a)) [ [c, -s, 0, 0], @@ -69,14 +56,14 @@ function _m_zRotation(a) = [0, 0, 0, 1] ]; -function _xyz_rotation(a) = +function __m_rotation_xyz_rotation(a) = let(ang = __to_ang_vect(a)) - _m_zRotation(ang[2]) * _m_yRotation(ang[1]) * _m_xRotation(ang[0]); + __m_rotation_zRotation(ang[2]) * __m_rotation_yRotation(ang[1]) * __m_rotation_xRotation(ang[0]); -function m_rotation(a, v) = +function __m_rotation(a, v) = (a == 0 || a == [0, 0, 0] || a == [0] || a == [0, 0]) ? [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1] - ] : (v == undef ? _xyz_rotation(a) : _q_rotation(a, v)); \ No newline at end of file + ] : (is_undef(v) ? __m_rotation_xyz_rotation(a) : __m_rotation_q_rotation(a, v)); \ No newline at end of file diff --git a/src/matrix/__comm__/__m_scaling.scad b/src/matrix/__comm__/__m_scaling.scad new file mode 100644 index 00000000..cd07fcce --- /dev/null +++ b/src/matrix/__comm__/__m_scaling.scad @@ -0,0 +1,16 @@ +function __m_scaling_to_3_elems_scaling_vect(s) = + let(leng = len(s)) + leng == 3 ? s : ( + leng == 2 ? [s[0], s[1], 1] : [s[0], 1, 1] + ); + +function __m_scaling_to_scaling_vect(s) = is_num(s) ? [s, s, s] : __m_scaling_to_3_elems_scaling_vect(s); + +function __m_scaling(s) = + let(v = __m_scaling_to_scaling_vect(s)) + [ + [v[0], 0, 0, 0], + [0, v[1], 0, 0], + [0, 0, v[2], 0], + [0, 0, 0, 1] + ]; \ No newline at end of file diff --git a/src/__private__/__m_shearing.scad b/src/matrix/__comm__/__m_shearing.scad similarity index 100% rename from src/__private__/__m_shearing.scad rename to src/matrix/__comm__/__m_shearing.scad diff --git a/src/m_cumulate.scad b/src/matrix/m_cumulate.scad similarity index 85% rename from src/m_cumulate.scad rename to src/matrix/m_cumulate.scad index ae511501..57f6c87f 100644 --- a/src/m_cumulate.scad +++ b/src/matrix/m_cumulate.scad @@ -4,7 +4,7 @@ * @copyright Justin Lin, 2019 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_cumulate.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_cumulate.html * **/ diff --git a/src/m_mirror.scad b/src/matrix/m_mirror.scad similarity index 88% rename from src/m_mirror.scad rename to src/matrix/m_mirror.scad index 11ec7fed..b9502e2d 100644 --- a/src/m_mirror.scad +++ b/src/matrix/m_mirror.scad @@ -4,7 +4,7 @@ * @copyright Justin Lin, 2019 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_mirror.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_mirror.html * **/ diff --git a/src/matrix/m_rotation.scad b/src/matrix/m_rotation.scad new file mode 100644 index 00000000..c40a554b --- /dev/null +++ b/src/matrix/m_rotation.scad @@ -0,0 +1,14 @@ +/** +* m_rotation.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_rotation.html +* +**/ + +include <__comm__/__to_ang_vect.scad>; +include ; + +function m_rotation(a, v) = __m_rotation(a, v); \ No newline at end of file diff --git a/src/matrix/m_scaling.scad b/src/matrix/m_scaling.scad new file mode 100644 index 00000000..f4d1f292 --- /dev/null +++ b/src/matrix/m_scaling.scad @@ -0,0 +1,13 @@ +/** +* m_scaling.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_scaling.html +* +**/ + +include ; + +function m_scaling(s) = __m_scaling(s); \ No newline at end of file diff --git a/src/m_shearing.scad b/src/matrix/m_shearing.scad similarity index 65% rename from src/m_shearing.scad rename to src/matrix/m_shearing.scad index 84b20db2..3602715d 100644 --- a/src/m_shearing.scad +++ b/src/matrix/m_shearing.scad @@ -4,10 +4,10 @@ * @copyright Justin Lin, 2019 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_shearing.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_shearing.html * **/ -include <__private__/__m_shearing.scad>; +include ; function m_shearing(sx = [0, 0], sy = [0, 0], sz = [0, 0]) = __m_shearing(sx, sy, sz); \ No newline at end of file diff --git a/src/m_translation.scad b/src/matrix/m_translation.scad similarity index 69% rename from src/m_translation.scad rename to src/matrix/m_translation.scad index 04f19335..9ca23a83 100644 --- a/src/m_translation.scad +++ b/src/matrix/m_translation.scad @@ -4,19 +4,17 @@ * @copyright Justin Lin, 2019 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-m_translation.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-m_translation.html * **/ -include <__private__/__is_float.scad>; - function _to_3_elems_translation_vect(v) = let(leng = len(v)) leng == 3 ? v : ( leng == 2 ? [v[0], v[1], 0] : [v[0], 0, 0] ); -function _to_translation_vect(v) = __is_float(v) ? [v, 0, 0] : _to_3_elems_translation_vect(v); +function _to_translation_vect(v) = is_num(v) ? [v, 0, 0] : _to_3_elems_translation_vect(v); function m_translation(v) = let(vt = _to_translation_vect(v)) diff --git a/src/midpt_smooth.scad b/src/midpt_smooth.scad index ac816c12..ffefd922 100644 --- a/src/midpt_smooth.scad +++ b/src/midpt_smooth.scad @@ -8,14 +8,17 @@ * **/ -function _midpt_smooth_sub(points, iend, i, closed = false) = - i == iend ? ( - closed ? [(points[i] + points[0]) / 2] - : [] - ) : concat([(points[i] + points[i + 1]) / 2], _midpt_smooth_sub(points, iend, i + 1, closed)); +function _midpt_smooth_sub(points, iend, closed = false) = + concat( + [ + for(i = 0; i < iend; i = i + 1) + (points[i] + points[i + 1]) / 2 + ], + closed ? [(points[iend] + points[0]) / 2] : [] + ); function midpt_smooth(points, n, closed = false) = let( - smoothed = _midpt_smooth_sub(points, len(points) - 1, 0, closed) + smoothed = _midpt_smooth_sub(points, len(points) - 1, closed) ) n == 1 ? smoothed : midpt_smooth(smoothed, n - 1, closed); \ No newline at end of file diff --git a/src/path_extrude.scad b/src/path_extrude.scad index 61303d33..90fefdbe 100644 --- a/src/path_extrude.scad +++ b/src/path_extrude.scad @@ -8,13 +8,9 @@ * **/ -include <__private__/__is_float.scad>; -include <__private__/__to3d.scad>; -include <__private__/__angy_angz.scad>; - -// Becuase of improving the performance, this module requires m_rotation.scad which doesn't require in dotSCAD 1.0. -// For backward compatibility, I directly include m_rotation here. -include ; +include <__comm__/__to3d.scad>; +include <__comm__/__angy_angz.scad>; +include ; module path_extrude(shape_pts, path_pts, triangles = "SOLID", twist = 0, scale = 1.0, closed = false, method = "AXIS_ANGLE") { sh_pts = len(shape_pts[0]) == 3 ? shape_pts : [for(p = shape_pts) __to3d(p)]; @@ -23,7 +19,6 @@ module path_extrude(shape_pts, path_pts, triangles = "SOLID", twist = 0, scale = len_path_pts = len(pth_pts); len_path_pts_minus_one = len_path_pts - 1; - module axis_angle_path_extrude() { twist_step_a = twist / len_path_pts; @@ -36,36 +31,32 @@ module path_extrude(shape_pts, path_pts, triangles = "SOLID", twist = 0, scale = ]; function rotate_pts(pts, a, v) = [for(p = pts) rotate_p(p, a, v)]; - - function scale_step() = - let(s = (scale - 1) / len_path_pts_minus_one) - [s, s, s]; - scale_step_vt = __is_float(scale) ? - scale_step() : + scale_step_vt = is_num(scale) ? + let(s = (scale - 1) / len_path_pts_minus_one) [s, s, s] : [ (scale[0] - 1) / len_path_pts_minus_one, (scale[1] - 1) / len_path_pts_minus_one, - scale[2] == undef ? 0 : (scale[2] - 1) / len_path_pts_minus_one + is_undef(scale[2]) ? 0 : (scale[2] - 1) / len_path_pts_minus_one ]; // get rotation matrice for sections function local_ang_vects(j) = - j == 0 ? [] : local_ang_vects_sub(j); - - function local_ang_vects_sub(j) = - let( - vt0 = pth_pts[j] - pth_pts[j - 1], - vt1 = pth_pts[j + 1] - pth_pts[j], - a = acos((vt0 * vt1) / (norm(vt0) * norm(vt1))), - v = cross(vt0, vt1) - ) - concat([[a, v]], local_ang_vects(j - 1)); + [ + for(i = j; i > 0; i = i - 1) + let( + vt0 = pth_pts[i] - pth_pts[i - 1], + vt1 = pth_pts[i + 1] - pth_pts[i], + a = acos((vt0 * vt1) / (norm(vt0) * norm(vt1))), + v = cross(vt0, vt1) + ) + [a, v] + ]; rot_matrice = [ for(ang_vect = local_ang_vects(len_path_pts - 2)) - m_rotation(ang_vect[0], ang_vect[1]) + __m_rotation(ang_vect[0], ang_vect[1]) ]; leng_rot_matrice = len(rot_matrice); @@ -133,40 +124,36 @@ module path_extrude(shape_pts, path_pts, triangles = "SOLID", twist = 0, scale = ] ]; - function sections() = + sections = let( fst_section = translate_pts(local_rotate_section(0, 0, [1, 1, 1]), pth_pts[0]), + end_i = len_path_pts - 1, remain_sections = [ - for(i = [0:len_path_pts - 2]) - + for(i = 0; i < end_i; i = i + 1) translate_pts( local_rotate_section(i, i * twist_step_a, [1, 1, 1] + scale_step_vt * i), pth_pts[i + 1] ) - - ] ) concat([fst_section], remain_sections); - - sects = sections(); - function calculated_sections() = + calculated_sections = closed && pth_pts[0] == pth_pts[len_path_pts_minus_one] ? - concat(sects, [sects[0]]) : // round-robin - sects; + concat(sections, [sections[0]]) : // round-robin + sections; polysections( - calculated_sections(), + calculated_sections, triangles = triangles ); // hook for testing - test_path_extrude(sects); + test_path_extrude(sections); } module euler_angle_path_extrude() { - scale_step_vt = __is_float(scale) ? + scale_step_vt = is_num(scale) ? [(scale - 1) / len_path_pts_minus_one, (scale - 1) / len_path_pts_minus_one] : [(scale[0] - 1) / len_path_pts_minus_one, (scale[1] - 1) / len_path_pts_minus_one]; @@ -192,28 +179,24 @@ module path_extrude(shape_pts, path_pts, triangles = "SOLID", twist = 0, scale = ) + p1 ]; - function path_extrude_inner(index) = - index == len_path_pts ? [] : - concat( - [section(pth_pts[index - 1], pth_pts[index], index)], - path_extrude_inner(index + 1) - ); + path_extrude_inner = + [ + for(i = 1; i < len_path_pts; i = i + 1) + section(pth_pts[i - 1], pth_pts[i], i) + ]; - function calculated_sections() = - let(sections = path_extrude_inner(1)) + calculated_sections = closed && pth_pts[0] == pth_pts[len_path_pts_minus_one] ? - concat(sections, [sections[0]]) : // round-robin - concat([section(pth_pts[0], pth_pts[1], 0)], sections); - - sections = calculated_sections(); + concat(path_extrude_inner, [path_extrude_inner[0]]) : // round-robin + concat([section(pth_pts[0], pth_pts[1], 0)], path_extrude_inner); polysections( - sections, + calculated_sections, triangles = triangles ); // hook for testing - test_path_extrude(sections); + test_path_extrude(calculated_sections); } if(method == "AXIS_ANGLE") { @@ -224,7 +207,6 @@ module path_extrude(shape_pts, path_pts, triangles = "SOLID", twist = 0, scale = } } - // override to test module test_path_extrude(sections) { diff --git a/src/path_scaling_sections.scad b/src/path_scaling_sections.scad index 7a903367..a3cdabde 100644 --- a/src/path_scaling_sections.scad +++ b/src/path_scaling_sections.scad @@ -8,7 +8,8 @@ * **/ -include <__private__/__reverse.scad>; +include ; +include ; function path_scaling_sections(shape_pts, edge_path) = let( @@ -17,11 +18,12 @@ function path_scaling_sections(shape_pts, edge_path) = scaling_matrice = [ for(p = edge_path) let(s = norm([p[0], p[1], 0]) / base_leng) - m_scaling([s, s, 1]) - ] + __m_scaling([s, s, 1]) + ], + leng_edge_path = len(edge_path) ) __reverse([ - for(i = [0:len(edge_path) - 1]) + for(i = 0; i < leng_edge_path; i = i + 1) [ for(p = shape_pts) let(scaled_p = scaling_matrice[i] * [p[0], p[1], edge_path[i][2], 1]) diff --git a/src/paths2sections.scad b/src/paths2sections.scad index c7eb55b2..56b3b562 100644 --- a/src/paths2sections.scad +++ b/src/paths2sections.scad @@ -14,9 +14,9 @@ function paths2sections(paths) = leng_paths = len(paths) ) [ - for(i = [0:leng_path - 1]) + for(i = 0; i < leng_path; i = i + 1) [ - for(j = [0:leng_paths - 1]) + for(j = 0; j < leng_paths; j = j + 1) paths[j][i] ] ]; \ No newline at end of file diff --git a/src/pie.scad b/src/pie.scad index c8f735ae..37364c08 100644 --- a/src/pie.scad +++ b/src/pie.scad @@ -8,10 +8,9 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__is_float.scad>; -include <__private__/__ra_to_xy.scad>; -include <__private__/__shape_pie.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__ra_to_xy.scad>; +include <__comm__/__shape_pie.scad>; module pie(radius, angle) { polygon(__shape_pie(radius, angle)); diff --git a/src/pixel/px_circle.scad b/src/pixel/px_circle.scad new file mode 100644 index 00000000..45982054 --- /dev/null +++ b/src/pixel/px_circle.scad @@ -0,0 +1,64 @@ +/** +* px_circle.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_circle.html +* +**/ + +function _px_circle_y(f, y) = f >= 0 ? y - 1 : y; +function _px_circle_ddf_y(f, ddf_y) = f >= 0 ? ddf_y + 2 : ddf_y; +function _px_circle_f(f, ddf_y) = f >= 0 ? f + ddf_y : f; + +function _px_circle(f, ddf_x, ddf_y, x, y, filled) = + x >= y ? [] : + let( + ny = _px_circle_y(f, y), + nddf_y = _px_circle_ddf_y(f, ddf_y), + nx = x + 1, + nddf_x = ddf_x + 2, + nf = _px_circle_f(f, ddf_y) + nddf_x + ) + concat( + filled ? + concat( + [for(xi = -nx; xi <= nx; xi = xi + 1) [xi, -ny]], + [for(xi = -ny; xi <= ny; xi = xi + 1) [xi, -nx]], + [for(xi = -ny; xi <= ny; xi = xi + 1) [xi, nx]], + [for(xi = -nx; xi <= nx; xi = xi + 1) [xi, ny]] + ) + : + [ + [-nx, -ny], [nx, -ny], + [-ny, -nx], [ny, -nx], + [-ny, nx], [ny, nx], + [-nx, ny], [nx, ny] + ], + _px_circle(nf, nddf_x, nddf_y, nx, ny, filled) + ); + +function px_circle(radius, filled = false) = + let( + f = 1 - radius, + ddf_x = 1, + ddf_y = -2 * radius, + x = 0, + y = radius + ) + concat( + filled ? + concat( + [[0, radius], [0, -radius]], + [for(xi = -radius; xi <= radius; xi = xi + 1) [xi, 0]] + ) + : + [ + [0, -radius], + [-radius, 0], + [radius, 0], + [0, radius] + ], + _px_circle(f, ddf_x, ddf_y, x, y, filled) + ); \ No newline at end of file diff --git a/src/pixel/px_cylinder.scad b/src/pixel/px_cylinder.scad new file mode 100644 index 00000000..7f7309fd --- /dev/null +++ b/src/pixel/px_cylinder.scad @@ -0,0 +1,59 @@ +/** +* px_cylinder.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_cylinder.html +* +**/ + +function _px_cylinder_px_circle(radius, filled, thickness) = + let(range = [-radius: radius - 1]) + filled ? [ + for(y = range) + for(x = range) + let(v = [x, y]) + if(norm(v) < radius) v + ] : + let(ishell = radius * radius - 2 * thickness * radius) + [ + for(y = range) + for(x = range) + let( + v = [x, y], + leng = norm(v) + ) + if(leng < radius && (leng * leng) > ishell) v + ]; + +function _px_cylinder_diff_r(r, h, filled, thickness) = + let( + r1 = r[0], + r2 = r[1] + ) + r1 == r2 ? _px_cylinder_same_r(r1, h, filled, thickness) : + let(dr = (r2 - r1) / (h - 1)) + [ + for(i = 0; i < h; i = i + 1) + let(r = round(r1 + dr * i)) + each [ + for(pt = _px_cylinder_px_circle(r, filled, thickness)) + [pt[0], pt[1], i] + ] + ]; + +function _px_cylinder_same_r(r, h, filled, thickness) = + let(c = _px_cylinder_px_circle(r, filled, thickness)) + [ + for(i = 0; i < h; i = i + 1) + each [ + for(pt = c) + [pt[0], pt[1], i] + ] + ]; + +function px_cylinder(r, h, filled = false, thickness = 1) = + is_num(r) ? + _px_cylinder_same_r(r, h, filled, thickness) : + _px_cylinder_diff_r(r, h, filled, thickness); \ No newline at end of file diff --git a/src/pixel/px_line.scad b/src/pixel/px_line.scad new file mode 100644 index 00000000..ccb5cb36 --- /dev/null +++ b/src/pixel/px_line.scad @@ -0,0 +1,211 @@ +/** +* px_line.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_line.html +* +**/ + +include <__comm__/__to3d.scad>; +include <__comm__/__to2d.scad>; + +function _px_line_zsgn(a) = a == 0 ? a : a / abs(a); + +// x-dominant +function _px_line_xdominant_y(y, yd, sy) = yd >= 0 ? y + sy : y; +function _px_line_xdominant_yd(yd, ax, ay) = (yd >= 0 ? yd - ax : yd) + ay; +function _px_line_xdominant_z(z, zd, sz) = zd >= 0 ? z + sz : z; +function _px_line_xdominant_zd(zd, ax, az) = (zd >= 0 ? zd - ax : zd) + az; + +function _px_line_xdominant(start, end, a, s) = + let( + x = start[0], + y = start[1], + z = start[2], + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2], + shrx = floor(ax / 2), + yd = ay - shrx, + zd = az - shrx, + endx = end[0] + ) + concat( + [start], + _px_line_xdominant_sub( + x + sx, + _px_line_xdominant_y(y, yd, sy), + _px_line_xdominant_z(z, zd, sz), + endx, + a, + s, + _px_line_xdominant_yd(yd, ax, ay), + _px_line_xdominant_zd(zd, ax, az) + ) + ); + +function _px_line_xdominant_sub(x, y, z, endx, a, s, yd, zd) = + let( + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2] + ) + x == endx ? [] : + concat([[x, y, z]], + _px_line_xdominant_sub( + x + sx, + _px_line_xdominant_y(y, yd, sy), + _px_line_xdominant_z(z, zd, sz), + endx, + a, + s, + _px_line_xdominant_yd(yd, ax, ay), + _px_line_xdominant_zd(zd, ax, az) + ) + ); + +// y-dominant +function _px_line_ydominant_x(x, xd, sx) = xd >= 0 ? x + sx : x; +function _px_line_ydominant_xd(xd, ax, ay) = (xd >= 0 ? xd - ay : xd) + ax; +function _px_line_ydominant_z(z, zd, sz) = zd >= 0 ? z + sz : z; +function _px_line_ydominant_zd(zd, ay, az) = (zd >= 0 ? zd - ay : zd) + az; + +function _px_line_ydominant(start, end, a, s) = + let( + x = start[0], + y = start[1], + z = start[2], + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2], + shry = floor(ay / 2), + xd = ax - shry, + zd = az - shry, + endy = end[1] + ) + concat( + [start], + _px_line_ydominant_sub( + _px_line_ydominant_x(x, xd, sx), + y + sy, + _px_line_ydominant_z(z, zd, sz), + endy, + a, + s, + _px_line_ydominant_xd(xd, ax, ay), + _px_line_ydominant_zd(zd, ay, az) + ) + ); + +function _px_line_ydominant_sub(x, y, z, endy, a, s, xd, zd) = + let( + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2] + ) + y == endy ? [] : + concat([[x, y, z]], + _px_line_ydominant_sub( + _px_line_ydominant_x(x, xd, sx), + y + sy, + _px_line_ydominant_z(z, zd, sz), + endy, + a, + s, + _px_line_ydominant_xd(xd, ax, ay), + _px_line_ydominant_zd(zd, ay, az) + ) + ); + +// z-dominant +function _px_line_zdominant_x(x, xd, sx) = xd >= 0 ? x + sx : x; +function _px_line_zdominant_xd(xd, ax, az) = (xd >= 0 ? xd - az : xd) + ax; + +function _px_line_zdominant_y(y, yd, sy) = yd >= 0 ? y + sy : y; +function _px_line_zdominant_yd(yd, ay, az) = (yd >= 0 ? yd - az : yd) + ay; + +function _px_line_zdominant(start, end, a, s) = + let( + x = start[0], + y = start[1], + z = start[2], + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2], + shrz = floor(az / 2), + xd = ax - shrz, + yd = ay - shrz, + endz = end[2] + ) + concat( + [start], + _px_line_zdominant_sub( + _px_line_zdominant_x(x, xd, sx), + _px_line_zdominant_y(y, yd, sy), + z + sz, + endz, + a, + s, + _px_line_zdominant_xd(xd, ax, az), + _px_line_zdominant_yd(yd, ay, az) + ) + ); + +function _px_line_zdominant_sub(x, y, z, endz, a, s, xd, yd) = + let( + ax = a[0], + ay = a[1], + az = a[2], + sx = s[0], + sy = s[1], + sz = s[2] + ) + z == endz ? [] : + concat([[x, y, z]], + _px_line_zdominant_sub( + _px_line_zdominant_x(x, xd, sx), + _px_line_zdominant_y(y, yd, sy), + z + sz, + endz, + a, + s, + _px_line_zdominant_xd(xd, ax, az), + _px_line_zdominant_yd(yd, ay, az) + ) + ); + +function px_line(p1, p2) = + let( + is_2d = len(p1) == 2, + start_pt = is_2d ? __to3d(p1) : p1, + end_pt = is_2d ? __to3d(p2) : p2, + dt = end_pt - start_pt, + ax = floor(abs(dt[0]) * 2), + ay = floor(abs(dt[1]) * 2), + az = floor(abs(dt[2]) * 2), + sx = _px_line_zsgn(dt[0]), + sy = _px_line_zsgn(dt[1]), + sz = _px_line_zsgn(dt[2]), + points = ax >= max(ay, az) ? _px_line_xdominant(start_pt, end_pt, [ax, ay, az], [sx, sy, sz]) : ( + ay >= max(ax, az) ? _px_line_ydominant(start_pt, end_pt, [ax, ay, az], [sx, sy, sz]) : + _px_line_zdominant(start_pt, end_pt, [ax, ay, az], [sx, sy, sz]) + ) + ) + is_2d ? [for(pt = points) __to2d(pt)] : points; \ No newline at end of file diff --git a/src/pixel/px_polygon.scad b/src/pixel/px_polygon.scad new file mode 100644 index 00000000..60b04452 --- /dev/null +++ b/src/pixel/px_polygon.scad @@ -0,0 +1,31 @@ +/** +* px_polygon.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_polygon.html +* +**/ + +function px_polygon(points, filled = false) = + filled ? + let( + xs = [for(pt = points) pt[0]], + ys = [for(pt = points) pt[1]], + max_x = max(xs), + min_x = min(xs), + max_y = max(ys), + min_y = min(ys) + ) + [ + for(y = min_y; y <= max_y; y = y + 1) + for(x = min_x; x <= max_x; x = x + 1) + let(pt = [x, y]) + if(in_shape(points, pt, true)) pt + ] + : + px_polyline( + concat(points, [points[len(points) - 1], points[0]]) + ); + \ No newline at end of file diff --git a/src/pixel/px_polyline.scad b/src/pixel/px_polyline.scad new file mode 100644 index 00000000..4ce16efb --- /dev/null +++ b/src/pixel/px_polyline.scad @@ -0,0 +1,21 @@ +/** +* px_polyline.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_polyline.html +* +**/ + +include <__comm__/__to3d.scad>; +include <__comm__/__to2d.scad>; +include <__comm__/__lines_from.scad>; + +function px_polyline(points) = + let( + is_2d = len(points[0]) == 2, + pts = is_2d ? [for(pt = points) __to3d(pt)] : points, + polyline = [for(line = __lines_from(pts)) each px_line(line[0], line[1])] + ) + is_2d ? [for(pt = polyline) __to2d(pt)] : polyline; \ No newline at end of file diff --git a/src/pixel/px_sphere.scad b/src/pixel/px_sphere.scad new file mode 100644 index 00000000..de62b2e6 --- /dev/null +++ b/src/pixel/px_sphere.scad @@ -0,0 +1,31 @@ +/** +* px_sphere.scad +* +* @copyright Justin Lin, 2019 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-px_sphere.html +* +**/ + +function px_sphere(radius, filled = false, thickness = 1) = + let(range = [-radius: radius - 1]) + filled ? [ + for(z = range) + for(y = range) + for(x = range) + let(v = [x, y, z]) + if(norm(v) < radius) v + ] : + let(ishell = radius * radius - 2 * thickness * radius) + [ + for(z = range) + for(y = range) + for(x = range) + let( + v = [x, y, z], + leng = norm(v) + ) + if(leng < radius && (leng * leng) > ishell) v + ]; + \ No newline at end of file diff --git a/src/polysections.scad b/src/polysections.scad index 6625959f..23ed3cbb 100644 --- a/src/polysections.scad +++ b/src/polysections.scad @@ -8,19 +8,21 @@ * **/ -include <__private__/__reverse.scad>; +include ; module polysections(sections, triangles = "SOLID") { function side_indexes(sects, begin_idx = 0) = let( leng_sects = len(sects), - leng_pts_sect = len(sects[0]) + leng_pts_sect = len(sects[0]), + range_j = [begin_idx:leng_pts_sect:begin_idx + (leng_sects - 2) * leng_pts_sect], + range_i = [0:leng_pts_sect - 1] ) concat( [ - for(j = [begin_idx:leng_pts_sect:begin_idx + (leng_sects - 2) * leng_pts_sect]) - for(i = [0:leng_pts_sect - 1]) + for(j = range_j) + for(i = range_i) [ j + i, j + (i + 1) % leng_pts_sect, @@ -28,8 +30,8 @@ module polysections(sections, triangles = "SOLID") { ] ], [ - for(j = [begin_idx:leng_pts_sect:begin_idx + (leng_sects - 2) * leng_pts_sect]) - for(i = [0:leng_pts_sect - 1]) + for(j = range_j) + for(i = range_i) [ j + i, j + (i + 1) % leng_pts_sect + leng_pts_sect , @@ -38,7 +40,7 @@ module polysections(sections, triangles = "SOLID") { ] ); - function search_at(f_sect, p, leng_pts_sect, i = 0) = + function search_at(f_sect, p, leng_pts_sect, i = 0) = i < leng_pts_sect ? (p == f_sect[i] ? i : search_at(f_sect, p, leng_pts_sect, i + 1)) : -1; @@ -48,8 +50,8 @@ module polysections(sections, triangles = "SOLID") { ) found_at_i <= 0 ? false : l_sect == concat( - [for(i = [found_at_i:leng_pts_sect-1]) f_sect[i]], - [for(i = [0:found_at_i - 1]) f_sect[i]] + [for(i = found_at_i; i < leng_pts_sect; i = i + 1) f_sect[i]], + [for(i = 0; i < found_at_i; i = i + 1) f_sect[i]] ); function to_v_pts(sects) = @@ -72,11 +74,11 @@ module polysections(sections, triangles = "SOLID") { pt ]; - function begin_end_the_same() = + begin_end_the_same = first_sect == last_sect || the_same_after_twisting(first_sect, last_sect, leng_pts_sect); - if(begin_end_the_same()) { + if(begin_end_the_same) { f_idxes = side_indexes(sects); polyhedron( @@ -87,9 +89,10 @@ module polysections(sections, triangles = "SOLID") { // hook for testing test_polysections_solid(v_pts, f_idxes); } else { - first_idxes = [for(i = [0:leng_pts_sect - 1]) leng_pts_sect - 1 - i]; + range_i = [0:leng_pts_sect - 1]; + first_idxes = [for(i = range_i) leng_pts_sect - 1 - i]; last_idxes = [ - for(i = [0:leng_pts_sect - 1]) + for(i = range_i) i + leng_pts_sect * (leng_sects - 1) ]; @@ -113,16 +116,16 @@ module polysections(sections, triangles = "SOLID") { function strip_sects(begin_idx, end_idx) = [ - for(i = [0:leng_sects - 1]) + for(i = 0; i < leng_sects; i = i + 1) [ - for(j = [begin_idx:end_idx]) + for(j = begin_idx; j <= end_idx; j = j + 1) sects[i][j] ] ]; function first_idxes() = [ - for(i = [0:half_leng_sect - 1]) + for(i = 0; i < half_leng_sect; i = i + 1) [ i, i + half_leng_v_pts, @@ -133,7 +136,7 @@ module polysections(sections, triangles = "SOLID") { function last_idxes(begin_idx) = [ - for(i = [0:half_leng_sect - 1]) + for(i = 0; i < half_leng_sect; i = i + 1) [ begin_idx + i, begin_idx + (i + 1) % half_leng_sect, @@ -161,7 +164,7 @@ module polysections(sections, triangles = "SOLID") { leng_pts_sect = len(first_outer_sect); - function begin_end_the_same() = + begin_end_the_same = (first_outer_sect == last_outer_sect && first_inner_sect == last_inner_sect) || ( the_same_after_twisting(first_outer_sect, last_outer_sect, leng_pts_sect) && @@ -170,7 +173,7 @@ module polysections(sections, triangles = "SOLID") { v_pts = concat(outer_v_pts, inner_v_pts); - if(begin_end_the_same()) { + if(begin_end_the_same) { f_idxes = concat(outer_idxes, inner_idxes); polyhedron( diff --git a/src/polytransversals.scad b/src/polytransversals.scad index 6022d2e8..68dd00d1 100644 --- a/src/polytransversals.scad +++ b/src/polytransversals.scad @@ -8,8 +8,8 @@ * **/ -include <__private__/__reverse.scad>; -include <__private__/__polytransversals.scad>; +include ; +include <__comm__/__polytransversals.scad>; module polytransversals(transversals) { polygon( diff --git a/src/ring_extrude.scad b/src/ring_extrude.scad index 9d92ab66..5af1e557 100644 --- a/src/ring_extrude.scad +++ b/src/ring_extrude.scad @@ -8,18 +8,18 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__ra_to_xy.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__ra_to_xy.scad>; module ring_extrude(shape_pts, radius, angle = 360, twist = 0, scale = 1.0, triangles = "SOLID") { - if(angle == 360 && twist == 0 && scale == 1.0) { - rotate_extrude() + if(twist == 0 && scale == 1.0) { + rotate_extrude(angle = angle) translate([radius, 0, 0]) polygon(shape_pts); } else { a_step = 360 / __frags(radius); - angles = __is_float(angle) ? [0, angle] : angle; + angles = is_num(angle) ? [0, angle] : angle; m = floor(angles[0] / a_step) + 1; n = floor(angles[1] / a_step); diff --git a/src/rotate_p.scad b/src/rotate_p.scad index fb3b9cf8..b49f965f 100644 --- a/src/rotate_p.scad +++ b/src/rotate_p.scad @@ -8,10 +8,9 @@ * **/ -include <__private__/__to2d.scad>; -include <__private__/__to3d.scad>; -include <__private__/__is_float.scad>; -include <__private__/__to_ang_vect.scad>; +include <__comm__/__to2d.scad>; +include <__comm__/__to3d.scad>; +include <__comm__/__to_ang_vect.scad>; function _q_rotate_p_3d(p, a, v) = let( @@ -87,4 +86,4 @@ function _q_rotate_p(p, a, v) = ); function rotate_p(point, a, v) = - v == undef ? _rotate_p(point, a) : _q_rotate_p(point, a, v); + is_undef(v) ? _rotate_p(point, a) : _q_rotate_p(point, a, v); diff --git a/src/rounded_cube.scad b/src/rounded_cube.scad index 2c80bb74..f3be8d2d 100644 --- a/src/rounded_cube.scad +++ b/src/rounded_cube.scad @@ -8,12 +8,11 @@ * **/ -include <__private__/__is_float.scad>; -include <__private__/__frags.scad>; -include <__private__/__nearest_multiple_of_4.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__nearest_multiple_of_4.scad>; module rounded_cube(size, corner_r, center = false) { - is_flt = __is_float(size); + is_flt = is_num(size); x = is_flt ? size : size[0]; y = is_flt ? size : size[1]; z = is_flt ? size : size[2]; diff --git a/src/rounded_cylinder.scad b/src/rounded_cylinder.scad index 124d0dd7..6d062f5c 100644 --- a/src/rounded_cylinder.scad +++ b/src/rounded_cylinder.scad @@ -8,10 +8,9 @@ * **/ -include <__private__/__is_float.scad>; -include <__private__/__frags.scad>; -include <__private__/__pie_for_rounding.scad>; -include <__private__/__half_trapezium.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__pie_for_rounding.scad>; +include <__comm__/__half_trapezium.scad>; module rounded_cylinder(radius, h, round_r, convexity = 2, center = false) { r_corners = __half_trapezium(radius, h, round_r); diff --git a/src/rounded_extrude.scad b/src/rounded_extrude.scad index badf6af9..a2aff45d 100644 --- a/src/rounded_extrude.scad +++ b/src/rounded_extrude.scad @@ -8,12 +8,11 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__is_float.scad>; +include <__comm__/__frags.scad>; module rounded_extrude(size, round_r, angle = 90, twist = 0, convexity = 10) { - is_flt = __is_float(size); + is_flt = is_num(size); x = is_flt ? size : size[0]; y = is_flt ? size : size[1]; diff --git a/src/rounded_square.scad b/src/rounded_square.scad index 3c8a1399..22bfce1e 100644 --- a/src/rounded_square.scad +++ b/src/rounded_square.scad @@ -8,14 +8,13 @@ * **/ -include <__private__/__is_float.scad>; -include <__private__/__frags.scad>; -include <__private__/__pie_for_rounding.scad>; -include <__private__/__half_trapezium.scad>; -include <__private__/__trapezium.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__pie_for_rounding.scad>; +include <__comm__/__half_trapezium.scad>; +include <__comm__/__trapezium.scad>; module rounded_square(size, corner_r, center = false) { - is_flt = __is_float(size); + is_flt = is_num(size); x = is_flt ? size : size[0]; y = is_flt ? size : size[1]; diff --git a/src/shape_arc.scad b/src/shape_arc.scad index bcf0ceb1..4730620e 100644 --- a/src/shape_arc.scad +++ b/src/shape_arc.scad @@ -8,11 +8,10 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__is_float.scad>; -include <__private__/__ra_to_xy.scad>; -include <__private__/__shape_arc.scad>; -include <__private__/__edge_r.scad> +include <__comm__/__frags.scad>; +include <__comm__/__ra_to_xy.scad>; +include <__comm__/__shape_arc.scad>; +include <__comm__/__edge_r.scad> function shape_arc(radius, angle, width, width_mode = "LINE_CROSS") = __shape_arc(radius, angle, width, width_mode); \ No newline at end of file diff --git a/src/shape_cyclicpolygon.scad b/src/shape_cyclicpolygon.scad index d4a3be54..9798b5ec 100644 --- a/src/shape_cyclicpolygon.scad +++ b/src/shape_cyclicpolygon.scad @@ -8,8 +8,8 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__pie_for_rounding.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__pie_for_rounding.scad>; function shape_cyclicpolygon(sides, circle_r, corner_r) = let( @@ -34,7 +34,7 @@ function shape_cyclicpolygon(sides, circle_r, corner_r) = concat( first_corner, [ - for(side = [1:sides - 1]) + for(side = 1; side < sides; side = side + 1) for(pt = first_corner) let( a = frag_a * side, diff --git a/src/shape_ellipse.scad b/src/shape_ellipse.scad index e7ed4548..1951ca4d 100644 --- a/src/shape_ellipse.scad +++ b/src/shape_ellipse.scad @@ -8,14 +8,15 @@ * **/ -include <__private__/__frags.scad>; +include <__comm__/__frags.scad>; function shape_ellipse(axes) = let( frags = __frags(axes[0]), step_a = 360 / frags, + a_end = 360 - step_a, shape_pts = [ - for(a = [0:step_a:360 - step_a]) + for(a = 0; a <= a_end; a = a + step_a) [axes[0] * cos(a), axes[1] * sin(a)] ] ) shape_pts; \ No newline at end of file diff --git a/src/shape_glued2circles.scad b/src/shape_glued2circles.scad index 73318d19..28446aa0 100644 --- a/src/shape_glued2circles.scad +++ b/src/shape_glued2circles.scad @@ -12,10 +12,11 @@ function _glued2circles_pie_curve(radius, centre_dist, tangent_angle) = let( begin_ang = 90 + tangent_angle, - shape_pts = shape_pie(radius, [-begin_ang, begin_ang]) + shape_pts = shape_pie(radius, [-begin_ang, begin_ang]), + leng = len(shape_pts) ) [ - for(i = [1:len(shape_pts) - 1]) + for(i = 1; i < leng; i = i + 1) shape_pts[i] + [centre_dist / 2, 0] ]; @@ -36,15 +37,12 @@ function _glued2circles_bezier(radius, centre_dist, tangent_angle, t_step, ctrl_ ] ); -function _glued2circles_lower_half_curve(curve_pts, leng, i = 0) = - i < leng ? ( - curve_pts[leng - 1 - i][0] >= 0 ? - concat( - [curve_pts[leng - 1 - i]], - _glued2circles_lower_half_curve(curve_pts, leng, i + 1) - ) : - _glued2circles_lower_half_curve(curve_pts, leng, i + 1) - ) : []; +function _glued2circles_lower_half_curve(curve_pts, leng) = + [ + for(i = 0; i < leng; i = i + 1) + let(p = curve_pts[leng - 1 - i]) + if(p[0] >= 0) p + ]; function _glued2circles_half_glued_circle(radius, centre_dist, tangent_angle, t_step) = let( @@ -53,7 +51,7 @@ function _glued2circles_half_glued_circle(radius, centre_dist, tangent_angle, t_ lower_curve_pts = _glued2circles_lower_half_curve(curve_pts, len(curve_pts)), leng_half_curve_pts = len(lower_curve_pts), upper_curve_pts = [ - for(i = [0:leng_half_curve_pts - 1]) + for(i = 0; i < leng_half_curve_pts; i = i + 1) let(pt = lower_curve_pts[leng_half_curve_pts - 1 - i]) [pt[0], -pt[1]] ] @@ -68,7 +66,7 @@ function shape_glued2circles(radius, centre_dist, tangent_angle = 30, t_step = 0 half_glued_circles = _glued2circles_half_glued_circle(radius, centre_dist, tangent_angle, t_step), leng_half_glued_circles = len(half_glued_circles), left_half_glued_circles = [ - for(i = [0:leng_half_glued_circles - 1]) + for(i = 0; i < leng_half_glued_circles; i = i + 1) let(pt = half_glued_circles[leng_half_glued_circles - 1 - i]) [-pt[0], pt[1]] ] diff --git a/src/shape_path_extend.scad b/src/shape_path_extend.scad index b21a2548..0eac7f2e 100644 --- a/src/shape_path_extend.scad +++ b/src/shape_path_extend.scad @@ -8,9 +8,9 @@ * **/ -include <__private__/__to3d.scad>; -include <__private__/__polytransversals.scad>; -include <__private__/__reverse.scad>; +include <__comm__/__to3d.scad>; +include <__comm__/__polytransversals.scad>; +include ; function _shape_path_extend_az(p1, p2) = let( @@ -41,32 +41,23 @@ function _shape_path_extend_stroke(stroke_pts, p1, p2, scale_step, i) = rotate_p(p * (1 + scale_step * i) + [0, leng], a) + p1 ]; -function _shape_path_extend_inner(stroke_pts, path_pts, leng_path_pts, scale_step, index) = - index == leng_path_pts ? [] : - concat( - [ - _shape_path_extend_stroke( - stroke_pts, - path_pts[index - 1], - path_pts[index], - scale_step, - index - ) - ], - _shape_path_extend_inner( +function _shape_path_extend_inner(stroke_pts, path_pts, leng_path_pts, scale_step) = + [ + for(i = 1; i < leng_path_pts; i = i + 1) + _shape_path_extend_stroke( stroke_pts, - path_pts, - leng_path_pts, + path_pts[i - 1], + path_pts[i ], scale_step, - index + 1 + i ) - ); + ]; function shape_path_extend(stroke_pts, path_pts, scale = 1.0, closed = false) = let( leng_path_pts = len(path_pts), scale_step = (scale - 1) / (leng_path_pts - 1), - strokes = _shape_path_extend_inner(stroke_pts, path_pts, leng_path_pts, scale_step, 1) + strokes = _shape_path_extend_inner(stroke_pts, path_pts, leng_path_pts, scale_step) ) closed && path_pts[0] == path_pts[leng_path_pts - 1] ? __polytransversals(concat(strokes, [strokes[0]])) : diff --git a/src/shape_pie.scad b/src/shape_pie.scad index 3285573f..5c91858b 100644 --- a/src/shape_pie.scad +++ b/src/shape_pie.scad @@ -8,10 +8,9 @@ * **/ -include <__private__/__frags.scad>; -include <__private__/__is_float.scad>; -include <__private__/__ra_to_xy.scad>; -include <__private__/__shape_pie.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__ra_to_xy.scad>; +include <__comm__/__shape_pie.scad>; function shape_pie(radius, angle) = __shape_pie(radius, angle); \ No newline at end of file diff --git a/src/shape_square.scad b/src/shape_square.scad index edea534b..f5364c36 100644 --- a/src/shape_square.scad +++ b/src/shape_square.scad @@ -8,15 +8,14 @@ * **/ -include <__private__/__is_float.scad>; -include <__private__/__frags.scad>; -include <__private__/__pie_for_rounding.scad>; -include <__private__/__half_trapezium.scad>; -include <__private__/__trapezium.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__pie_for_rounding.scad>; +include <__comm__/__half_trapezium.scad>; +include <__comm__/__trapezium.scad>; function shape_square(size, corner_r = 0) = let( - is_flt = __is_float(size), + is_flt = is_num(size), x = is_flt ? size : size[0], y = is_flt ? size : size[1] ) diff --git a/src/shape_starburst.scad b/src/shape_starburst.scad index 6cc15710..ae3ee319 100644 --- a/src/shape_starburst.scad +++ b/src/shape_starburst.scad @@ -12,18 +12,19 @@ function __outer_points_shape_starburst(r1, r2, n) = let( a = 360 / n ) - [for(i = [0:n-1]) [r1 * cos(a * i), r1 * sin(a * i)]]; + [for(i = 0; i < n; i = i + 1) [r1 * cos(a * i), r1 * sin(a * i)]]; + function __inner_points_shape_starburst(r1, r2, n) = let ( a = 360 / n, half_a = a / 2 ) - [for(i = [0:n-1]) [r2 * cos(a * i + half_a), r2 * sin(a * i + half_a)]]; + [for(i = 0; i < n; i = i + 1) [r2 * cos(a * i + half_a), r2 * sin(a * i + half_a)]]; -function __one_by_one_shape_starburst(outer_points, inner_points, i = 0) = - len(outer_points) == i ? [] : - concat([outer_points[i], inner_points[i]], __one_by_one_shape_starburst(outer_points, inner_points, i + 1)); - -function shape_starburst(r1, r2, n) = __one_by_one_shape_starburst( - __outer_points_shape_starburst(r1, r2, n), __inner_points_shape_starburst(r1, r2, n) -); \ No newline at end of file +function shape_starburst(r1, r2, n) = + let( + outer_points = __outer_points_shape_starburst(r1, r2, n), + inner_points = __inner_points_shape_starburst(r1, r2, n), + leng = len(outer_points) + ) + [for(i = 0; i < leng; i = i + 1) each [outer_points[i], inner_points[i]]]; \ No newline at end of file diff --git a/src/shape_superformula.scad b/src/shape_superformula.scad index 169d0129..1211416c 100644 --- a/src/shape_superformula.scad +++ b/src/shape_superformula.scad @@ -8,8 +8,8 @@ * **/ -include <__private__/__ra_to_xy.scad>; -include <__private__/__to_degree.scad>; +include <__comm__/__ra_to_xy.scad>; +include <__comm__/__to_degree.scad>; function _superformula_r(angle, m1, m2, n1, n2 = 1, n3 = 1, a = 1, b = 1) = pow( @@ -19,12 +19,12 @@ function _superformula_r(angle, m1, m2, n1, n2 = 1, n3 = 1, a = 1, b = 1) = ); function shape_superformula(phi_step, m1, m2, n1, n2 = 1, n3 = 1, a = 1, b = 1) = + let(tau = PI * 2) [ - for(phi = [0:phi_step:6.28318]) + for(phi = 0; phi <= tau; phi = phi + phi_step) let( angle = __to_degree(phi), r = _superformula_r(angle, m1, m2, n1, n2, n3, a, b) - ) __ra_to_xy(r, angle) ]; \ No newline at end of file diff --git a/src/shape_taiwan.scad b/src/shape_taiwan.scad index 1686c8cf..c38ce660 100644 --- a/src/shape_taiwan.scad +++ b/src/shape_taiwan.scad @@ -9,5 +9,8 @@ **/ function shape_taiwan(h, distance = 0) = - let(tw = [[3.85724, 6.24078], [3.7902, 6.25779], [3.73596, 6.26288], [3.62807, 6.24587], [3.59581, 6.2602], [3.55429, 6.32386], [3.51698, 6.4571], [3.50768, 6.5361], [3.51188, 6.58284], [3.53917, 6.63708], [3.48981, 6.66934], [2.78286, 6.83905], [2.7218, 6.86112], [2.68441, 6.90272], [2.61063, 6.96209], [2.64288, 7.05549], [2.61062, 7.06568], [2.56396, 7.06058], [2.50281, 7.04109], [2.44849, 7.15647], [2.29319, 7.37123], [2.22438, 7.42555], [2.05644, 7.44248], [1.88674, 7.40509], [1.73901, 7.32879], [1.63795, 7.238], [1.58868, 7.14974], [1.54463, 7.0555], [1.5149, 7.0411], [1.48526, 7.01895], [1.53658, 6.9725], [1.58825, 6.92909], [1.63096, 6.86281], [1.61348, 6.80387], [1.57757, 6.83721], [1.53949, 6.89116], [1.48525, 6.87393], [1.43851, 6.87393], [1.40381, 6.86623], [1.37408, 6.85174], [1.28068, 6.77282], [1.20682, 6.7457], [0.723984, 6.65659], [0.586451, 6.60741], [0.5152, 6.57094], [0.458435, 6.52167], [0.393838, 6.47922], [0.108666, 6.38843], [-0.002506, 6.2925], [-0.110307, 6.16693], [-0.278327, 5.89785], [-0.312266, 5.80452], [-0.319942, 5.74076], [-0.35978, 5.72804], [-0.398773, 5.69411], [-0.431113, 5.64921], [-0.443073, 5.60508], [-0.45317, 5.54563], [-0.477762, 5.51429], [-0.504966, 5.48196], [-0.527025, 5.4379], [-0.511683, 5.32413], [-0.544022, 5.28008], [-0.630518, 5.10523], [-0.652506, 5.02118], [-0.721317, 4.96517], [-0.751047, 4.87851], [-0.807895, 4.81922], [-0.849502, 4.76313], [-0.835106, 4.67916], [-0.94535, 4.70123], [-1.03193, 4.67664], [-1.10318, 4.62476], [-1.16685, 4.55856], [-1.18724, 4.52125], [-1.20679, 4.47981], [-1.23643, 4.44755], [-1.33927, 4.41782], [-1.36462, 4.37621], [-1.38844, 4.28037], [-1.47747, 4.11993], [-1.51477, 4.03419], [-1.52674, 3.93321], [-1.55638, 3.87122], [-1.87389, 3.52162], [-1.92308, 3.43757], [-1.96721, 3.28479], [-2.11055, 3.03862], [-2.15224, 2.84946], [-2.18703, 2.75092], [-2.23874, 2.70864], [-2.2481, 2.65676], [-2.43313, 2.44284], [-2.47482, 2.40393], [-2.48998, 2.36148], [-2.49681, 2.20617], [-2.51727, 2.15951], [-2.59526, 2.09828], [-2.61312, 2.05583], [-2.62237, 2.00926], [-2.64705, 1.98728], [-2.68183, 1.97279], [-2.71915, 1.94559], [-2.76589, 1.90137], [-2.80741, 1.82768], [-2.89576, 1.58074], [-2.9601, 1.46267], [-3.00171, 1.34223], [-3.03396, 1.29978], [-3.14261, 1.19451], [-3.16223, 1.14945], [-3.18683, 1.04173], [-3.21142, 0.994987], [-3.30988, 0.906048], [-3.32504, 0.864443], [-3.42105, 0.738702], [-3.43797, 0.692212], [-3.47452, 0.558807], [-3.54409, 0.411083], [-3.62553, 0.283068], [-3.69434, 0.142925], [-3.72407, -0.047077], [-3.71634, -0.135425], [-3.67474, -0.317847], [-3.65948, -0.475761], [-3.62302, -0.539348], [-3.61029, -0.588533], [-3.62554, -0.628538], [-3.65703, -0.687068], [-3.61029, -0.73878], [-3.64002, -0.795629], [-3.57542, -0.918676], [-3.67902, -1.14784], [-3.62553, -1.18944], [-3.59589, -1.2046], [-3.60515, -1.24376], [-3.6476, -1.28781], [-3.68162, -1.37186], [-3.72138, -1.38205], [-3.74597, -1.40925], [-3.79785, -1.54426], [-3.80458, -1.58157], [-3.81731, -1.61121], [-3.84956, -1.65526], [-3.87677, -1.70958], [-3.8665, -1.75893], [-3.84714, -1.80812], [-3.83434, -1.86665], [-3.85397, -1.90666], [-3.89633, -1.91845], [-3.93532, -1.94052], [-3.94552, -2.0025], [-3.90315, -2.05169], [-3.83687, -2.10846], [-3.91452, -2.12525], [-3.92486, -2.16746], [-3.8021, -2.21718], [-3.78004, -2.24169], [-3.79537, -2.28599], [-3.84194, -2.30292], [-3.9014, -2.31052], [-3.94553, -2.3325], [-3.90902, -2.38984], [-3.81228, -2.42599], [-3.7487, -2.45311], [-3.7359, -2.49042], [-3.61032, -2.51249], [-3.51439, -2.52698], [-3.49737, -2.60598], [-3.53645, -2.69921], [-3.61031, -2.75101], [-3.55085, -2.813], [-3.52197, -2.86732], [-3.47455, -3.17194], [-3.46268, -3.20175], [-3.42108, -3.27805], [-3.36173, -3.36723], [-3.3667, -3.40353], [-3.39137, -3.45802], [-3.39137, -3.50468], [-3.37605, -3.57332], [-3.3048, -3.72879], [-3.22849, -3.84755], [-3.18689, -3.9332], [-3.16473, -4.02239], [-3.18175, -4.08606], [-3.21401, -4.15723], [-3.18942, -4.22848], [-3.1377, -4.29316], [-2.99756, -4.4237], [-2.91612, -4.51458], [-2.85675, -4.62575], [-2.84478, -4.76572], [-2.64282, -4.92119], [-2.55624, -4.90831], [-2.51219, -4.92877], [-2.47733, -4.95075], [-2.40355, -5.01441], [-2.33222, -5.06116], [-2.17691, -5.13485], [-2.10053, -5.19944], [-2.05126, -5.27328], [-2.00199, -5.30293], [-1.87641, -5.40147], [-1.84416, -5.44552], [-1.77804, -5.59577], [-1.69399, -5.70181], [-1.66687, -5.74611], [-1.35963, -6.53694], [-1.36899, -6.58351], [-1.4063, -6.638], [-1.41556, -6.68466], [-1.41556, -6.84915], [-1.42322, -6.93076], [-1.41556, -6.96992], [-1.33, -7.11073], [-1.34945, -7.21845], [-1.34692, -7.25315], [-1.28999, -7.29989], [-1.23921, -7.31522], [-1.20181, -7.27783], [-1.19675, -7.17685], [-1.07362, -7.20658], [-0.953101, -7.2609], [-0.849593, -7.33982], [-0.778259, -7.44248], [-0.775729, -7.35413], [-0.795186, -7.21416], [-0.797786, -7.08606], [-0.736641, -7.02913], [-0.685014, -6.99014], [-0.645009, -6.89851], [-0.620417, -6.78565], [-0.637343, -5.77062], [-0.612751, -5.52192], [-0.590692, -5.43534], [-0.443136, -5.1799], [-0.371802, -4.92362], [-0.341989, -4.73344], [-0.29036, -4.64283], [-0.16723, -4.48735], [-0.128151, -4.41105], [-0.046711, -4.20395], [-0.014539, -4.16235], [0.027066, -4.14297], [0.191803, -3.96039], [0.441265, -3.79565], [0.515127, -3.72608], [0.588904, -3.63285], [0.62032, -3.58105], [0.640788, -3.5317], [0.643228, -3.48757], [0.633124, -3.39173], [0.640794, -3.35189], [0.689979, -3.29336], [0.9039, -3.11338], [0.923353, -3.07093], [1.08363, -2.84522], [1.11605, -2.75342], [1.16262, -2.55407], [1.23396, -2.42344], [1.26116, -2.33518], [1.27809, -2.30031], [1.31035, -2.26637], [1.38421, -2.21213], [1.41638, -2.17987], [1.49024, -2.02701], [1.50464, -1.87935], [1.50212, -1.72405], [1.52671, -1.54937], [1.55897, -1.45589], [1.59897, -1.37942], [1.70669, -1.23616], [1.74147, -1.16044], [1.98243, 0.226167], [2.05637, 0.376416], [2.18195, 0.989965], [2.27788, 1.25316], [2.32959, 1.50186], [2.33469, 1.60107], [2.34741, 1.65447], [2.40173, 1.74366], [2.42118, 1.79798], [2.38391, 1.88363], [2.36176, 1.9185], [2.33473, 1.99994], [2.33213, 2.07136], [2.3542, 2.13747], [2.46798, 2.30473], [2.51203, 2.49221], [2.55625, 2.58553], [2.59356, 2.62284], [2.71147, 2.72138], [2.69968, 2.75364], [2.72175, 2.78497], [2.793, 2.8419], [2.89145, 2.97513], [2.98064, 3.06078], [2.97805, 3.26778], [2.98485, 3.3638], [2.99757, 3.41297], [3.01702, 3.44775], [3.03412, 3.48936], [3.02732, 3.59547], [3.03152, 3.64474], [3.14008, 3.76771], [3.23348, 3.82464], [3.27332, 3.8611], [3.26572, 3.90356], [3.23852, 3.94517], [3.22673, 3.98929], [3.23343, 4.02904], [3.32515, 4.08085], [3.33955, 4.16659], [3.31748, 4.26758], [3.2784, 4.34405], [3.3056, 4.3635], [3.37526, 4.38649], [3.39869, 4.42513], [3.32514, 4.42541], [3.22669, 4.4874], [3.17237, 4.58324], [3.16977, 4.70636], [3.19192, 4.7675], [3.19432, 4.8294], [3.14261, 5.06624], [3.14001, 5.17909], [3.14781, 5.29709], [3.1724, 5.41583], [3.20634, 5.51943], [3.25384, 5.59329], [3.54153, 5.94036], [3.62558, 6.01431], [3.94553, 6.17215], [3.91327, 6.21106]] / 15 * h) - distance == 0 ? tw : [for(i = [0 : len(tw) - 1]) if(norm(tw[i] - tw[i + 1]) > distance) tw[i]]; + let( + tw = [[3.85724, 6.24078], [3.7902, 6.25779], [3.73596, 6.26288], [3.62807, 6.24587], [3.59581, 6.2602], [3.55429, 6.32386], [3.51698, 6.4571], [3.50768, 6.5361], [3.51188, 6.58284], [3.53917, 6.63708], [3.48981, 6.66934], [2.78286, 6.83905], [2.7218, 6.86112], [2.68441, 6.90272], [2.61063, 6.96209], [2.64288, 7.05549], [2.61062, 7.06568], [2.56396, 7.06058], [2.50281, 7.04109], [2.44849, 7.15647], [2.29319, 7.37123], [2.22438, 7.42555], [2.05644, 7.44248], [1.88674, 7.40509], [1.73901, 7.32879], [1.63795, 7.238], [1.58868, 7.14974], [1.54463, 7.0555], [1.5149, 7.0411], [1.48526, 7.01895], [1.53658, 6.9725], [1.58825, 6.92909], [1.63096, 6.86281], [1.61348, 6.80387], [1.57757, 6.83721], [1.53949, 6.89116], [1.48525, 6.87393], [1.43851, 6.87393], [1.40381, 6.86623], [1.37408, 6.85174], [1.28068, 6.77282], [1.20682, 6.7457], [0.723984, 6.65659], [0.586451, 6.60741], [0.5152, 6.57094], [0.458435, 6.52167], [0.393838, 6.47922], [0.108666, 6.38843], [-0.002506, 6.2925], [-0.110307, 6.16693], [-0.278327, 5.89785], [-0.312266, 5.80452], [-0.319942, 5.74076], [-0.35978, 5.72804], [-0.398773, 5.69411], [-0.431113, 5.64921], [-0.443073, 5.60508], [-0.45317, 5.54563], [-0.477762, 5.51429], [-0.504966, 5.48196], [-0.527025, 5.4379], [-0.511683, 5.32413], [-0.544022, 5.28008], [-0.630518, 5.10523], [-0.652506, 5.02118], [-0.721317, 4.96517], [-0.751047, 4.87851], [-0.807895, 4.81922], [-0.849502, 4.76313], [-0.835106, 4.67916], [-0.94535, 4.70123], [-1.03193, 4.67664], [-1.10318, 4.62476], [-1.16685, 4.55856], [-1.18724, 4.52125], [-1.20679, 4.47981], [-1.23643, 4.44755], [-1.33927, 4.41782], [-1.36462, 4.37621], [-1.38844, 4.28037], [-1.47747, 4.11993], [-1.51477, 4.03419], [-1.52674, 3.93321], [-1.55638, 3.87122], [-1.87389, 3.52162], [-1.92308, 3.43757], [-1.96721, 3.28479], [-2.11055, 3.03862], [-2.15224, 2.84946], [-2.18703, 2.75092], [-2.23874, 2.70864], [-2.2481, 2.65676], [-2.43313, 2.44284], [-2.47482, 2.40393], [-2.48998, 2.36148], [-2.49681, 2.20617], [-2.51727, 2.15951], [-2.59526, 2.09828], [-2.61312, 2.05583], [-2.62237, 2.00926], [-2.64705, 1.98728], [-2.68183, 1.97279], [-2.71915, 1.94559], [-2.76589, 1.90137], [-2.80741, 1.82768], [-2.89576, 1.58074], [-2.9601, 1.46267], [-3.00171, 1.34223], [-3.03396, 1.29978], [-3.14261, 1.19451], [-3.16223, 1.14945], [-3.18683, 1.04173], [-3.21142, 0.994987], [-3.30988, 0.906048], [-3.32504, 0.864443], [-3.42105, 0.738702], [-3.43797, 0.692212], [-3.47452, 0.558807], [-3.54409, 0.411083], [-3.62553, 0.283068], [-3.69434, 0.142925], [-3.72407, -0.047077], [-3.71634, -0.135425], [-3.67474, -0.317847], [-3.65948, -0.475761], [-3.62302, -0.539348], [-3.61029, -0.588533], [-3.62554, -0.628538], [-3.65703, -0.687068], [-3.61029, -0.73878], [-3.64002, -0.795629], [-3.57542, -0.918676], [-3.67902, -1.14784], [-3.62553, -1.18944], [-3.59589, -1.2046], [-3.60515, -1.24376], [-3.6476, -1.28781], [-3.68162, -1.37186], [-3.72138, -1.38205], [-3.74597, -1.40925], [-3.79785, -1.54426], [-3.80458, -1.58157], [-3.81731, -1.61121], [-3.84956, -1.65526], [-3.87677, -1.70958], [-3.8665, -1.75893], [-3.84714, -1.80812], [-3.83434, -1.86665], [-3.85397, -1.90666], [-3.89633, -1.91845], [-3.93532, -1.94052], [-3.94552, -2.0025], [-3.90315, -2.05169], [-3.83687, -2.10846], [-3.91452, -2.12525], [-3.92486, -2.16746], [-3.8021, -2.21718], [-3.78004, -2.24169], [-3.79537, -2.28599], [-3.84194, -2.30292], [-3.9014, -2.31052], [-3.94553, -2.3325], [-3.90902, -2.38984], [-3.81228, -2.42599], [-3.7487, -2.45311], [-3.7359, -2.49042], [-3.61032, -2.51249], [-3.51439, -2.52698], [-3.49737, -2.60598], [-3.53645, -2.69921], [-3.61031, -2.75101], [-3.55085, -2.813], [-3.52197, -2.86732], [-3.47455, -3.17194], [-3.46268, -3.20175], [-3.42108, -3.27805], [-3.36173, -3.36723], [-3.3667, -3.40353], [-3.39137, -3.45802], [-3.39137, -3.50468], [-3.37605, -3.57332], [-3.3048, -3.72879], [-3.22849, -3.84755], [-3.18689, -3.9332], [-3.16473, -4.02239], [-3.18175, -4.08606], [-3.21401, -4.15723], [-3.18942, -4.22848], [-3.1377, -4.29316], [-2.99756, -4.4237], [-2.91612, -4.51458], [-2.85675, -4.62575], [-2.84478, -4.76572], [-2.64282, -4.92119], [-2.55624, -4.90831], [-2.51219, -4.92877], [-2.47733, -4.95075], [-2.40355, -5.01441], [-2.33222, -5.06116], [-2.17691, -5.13485], [-2.10053, -5.19944], [-2.05126, -5.27328], [-2.00199, -5.30293], [-1.87641, -5.40147], [-1.84416, -5.44552], [-1.77804, -5.59577], [-1.69399, -5.70181], [-1.66687, -5.74611], [-1.35963, -6.53694], [-1.36899, -6.58351], [-1.4063, -6.638], [-1.41556, -6.68466], [-1.41556, -6.84915], [-1.42322, -6.93076], [-1.41556, -6.96992], [-1.33, -7.11073], [-1.34945, -7.21845], [-1.34692, -7.25315], [-1.28999, -7.29989], [-1.23921, -7.31522], [-1.20181, -7.27783], [-1.19675, -7.17685], [-1.07362, -7.20658], [-0.953101, -7.2609], [-0.849593, -7.33982], [-0.778259, -7.44248], [-0.775729, -7.35413], [-0.795186, -7.21416], [-0.797786, -7.08606], [-0.736641, -7.02913], [-0.685014, -6.99014], [-0.645009, -6.89851], [-0.620417, -6.78565], [-0.637343, -5.77062], [-0.612751, -5.52192], [-0.590692, -5.43534], [-0.443136, -5.1799], [-0.371802, -4.92362], [-0.341989, -4.73344], [-0.29036, -4.64283], [-0.16723, -4.48735], [-0.128151, -4.41105], [-0.046711, -4.20395], [-0.014539, -4.16235], [0.027066, -4.14297], [0.191803, -3.96039], [0.441265, -3.79565], [0.515127, -3.72608], [0.588904, -3.63285], [0.62032, -3.58105], [0.640788, -3.5317], [0.643228, -3.48757], [0.633124, -3.39173], [0.640794, -3.35189], [0.689979, -3.29336], [0.9039, -3.11338], [0.923353, -3.07093], [1.08363, -2.84522], [1.11605, -2.75342], [1.16262, -2.55407], [1.23396, -2.42344], [1.26116, -2.33518], [1.27809, -2.30031], [1.31035, -2.26637], [1.38421, -2.21213], [1.41638, -2.17987], [1.49024, -2.02701], [1.50464, -1.87935], [1.50212, -1.72405], [1.52671, -1.54937], [1.55897, -1.45589], [1.59897, -1.37942], [1.70669, -1.23616], [1.74147, -1.16044], [1.98243, 0.226167], [2.05637, 0.376416], [2.18195, 0.989965], [2.27788, 1.25316], [2.32959, 1.50186], [2.33469, 1.60107], [2.34741, 1.65447], [2.40173, 1.74366], [2.42118, 1.79798], [2.38391, 1.88363], [2.36176, 1.9185], [2.33473, 1.99994], [2.33213, 2.07136], [2.3542, 2.13747], [2.46798, 2.30473], [2.51203, 2.49221], [2.55625, 2.58553], [2.59356, 2.62284], [2.71147, 2.72138], [2.69968, 2.75364], [2.72175, 2.78497], [2.793, 2.8419], [2.89145, 2.97513], [2.98064, 3.06078], [2.97805, 3.26778], [2.98485, 3.3638], [2.99757, 3.41297], [3.01702, 3.44775], [3.03412, 3.48936], [3.02732, 3.59547], [3.03152, 3.64474], [3.14008, 3.76771], [3.23348, 3.82464], [3.27332, 3.8611], [3.26572, 3.90356], [3.23852, 3.94517], [3.22673, 3.98929], [3.23343, 4.02904], [3.32515, 4.08085], [3.33955, 4.16659], [3.31748, 4.26758], [3.2784, 4.34405], [3.3056, 4.3635], [3.37526, 4.38649], [3.39869, 4.42513], [3.32514, 4.42541], [3.22669, 4.4874], [3.17237, 4.58324], [3.16977, 4.70636], [3.19192, 4.7675], [3.19432, 4.8294], [3.14261, 5.06624], [3.14001, 5.17909], [3.14781, 5.29709], [3.1724, 5.41583], [3.20634, 5.51943], [3.25384, 5.59329], [3.54153, 5.94036], [3.62558, 6.01431], [3.94553, 6.17215], [3.91327, 6.21106]] / 15 * h, + leng = len(tw) + ) + distance == 0 ? tw : [for(i = 0; i < leng; i = i + 1) if(norm(tw[i] - tw[i + 1]) > distance) tw[i]]; diff --git a/src/shape_trapezium.scad b/src/shape_trapezium.scad index 867c5b3e..e9f1c0ec 100644 --- a/src/shape_trapezium.scad +++ b/src/shape_trapezium.scad @@ -8,11 +8,10 @@ * **/ -include <__private__/__is_float.scad>; -include <__private__/__frags.scad>; -include <__private__/__pie_for_rounding.scad>; -include <__private__/__half_trapezium.scad>; -include <__private__/__trapezium.scad>; +include <__comm__/__frags.scad>; +include <__comm__/__pie_for_rounding.scad>; +include <__comm__/__half_trapezium.scad>; +include <__comm__/__trapezium.scad>; function shape_trapezium(length, h, corner_r = 0) = __trapezium( diff --git a/src/shear.scad b/src/shear.scad index 41c2f089..19618257 100644 --- a/src/shear.scad +++ b/src/shear.scad @@ -8,7 +8,7 @@ * **/ -include <__private__/__m_shearing.scad>; +include ; module shear(sx = [0, 0], sy = [0, 0], sz = [0, 0]) { multmatrix(__m_shearing(sx, sy, sz)) children(); diff --git a/src/sphere_spiral.scad b/src/sphere_spiral.scad index 25858319..9fb211ba 100644 --- a/src/sphere_spiral.scad +++ b/src/sphere_spiral.scad @@ -9,8 +9,11 @@ **/ function sphere_spiral(radius, za_step, z_circles = 1, begin_angle = 0, end_angle = 0, vt_dir = "SPI_DOWN", rt_dir = "CT_CLK") = + let( + a_end = 90 * z_circles - end_angle + ) [ - for(a = [begin_angle:za_step:90 * z_circles - end_angle]) + for(a = begin_angle; a <= a_end; a = a + za_step) let( ya = vt_dir == "SPI_DOWN" ? (-90 + 2 * a / z_circles) : (90 + 2 * a / z_circles), za = (rt_dir == "CT_CLK" ? 1 : -1) * a, diff --git a/src/split_str.scad b/src/split_str.scad deleted file mode 100644 index c8f311da..00000000 --- a/src/split_str.scad +++ /dev/null @@ -1,19 +0,0 @@ -/** -* split_str.scad -* -* @copyright Justin Lin, 2017 -* @license https://opensource.org/licenses/lgpl-3.0.html -* -* @see https://openhome.cc/eGossip/OpenSCAD/lib-split_str.html -* -**/ - -function _split_t_by(idxs, t, ts = [], i = -1) = - i == -1 ? _split_t_by(idxs, t, [sub_str(t, 0, idxs[0])], i + 1) : ( - i == len(idxs) - 1 ? concat(ts, sub_str(t, idxs[i] + 1)) : - _split_t_by(idxs, t, concat(ts, sub_str(t, idxs[i] + 1, idxs[i + 1])), i + 1) - ); - -function split_str(t, delimiter) = - len(search(delimiter, t)) == 0 ? - [t] : _split_t_by(search(delimiter, t, 0)[0], t); \ No newline at end of file diff --git a/src/torus_knot.scad b/src/torus_knot.scad index 84803b84..607f22c0 100644 --- a/src/torus_knot.scad +++ b/src/torus_knot.scad @@ -8,14 +8,16 @@ * **/ -function torus_knot(p, q, phi_step) = [ - for(phi = [0:phi_step:6.28318]) - let( - degree = phi * 180 / 3.14159, - r = cos(q * degree) + 2, - x = r * cos(p * degree), - y = r * sin(p * degree), - z = -sin(q * degree) - ) - [x, y, z] -]; \ No newline at end of file +function torus_knot(p, q, phi_step) = + let(tau = PI * 2) + [ + for(phi = 0; phi < tau; phi = phi + phi_step) + let( + degree = phi * 180 / PI, + r = cos(q * degree) + 2, + x = r * cos(p * degree), + y = r * sin(p * degree), + z = -sin(q * degree) + ) + [x, y, z] + ]; \ No newline at end of file diff --git a/src/triangulate.scad b/src/triangulate.scad index 6aeec0c1..6af65524 100644 --- a/src/triangulate.scad +++ b/src/triangulate.scad @@ -47,17 +47,16 @@ function _triangulate_remove_v(indices, v, num_of_vertices) = let( nv_minuns_one = num_of_vertices - 1 ) - v == 0 ? [for(i = [1:nv_minuns_one]) indices[i]] : ( - v == nv_minuns_one ? [for(i = [0:v - 1]) indices[i]] : concat( - [for(i = [0:v - 1]) indices[i]], - [for(i = [v + 1:nv_minuns_one]) indices[i]] + v == 0 ? [for(i = 1; i <= nv_minuns_one; i = i + 1) indices[i]] : ( + v == nv_minuns_one ? [for(i = 0; i < v; i = i + 1) indices[i]] : concat( + [for(i = 0; i < v; i = i + 1) indices[i]], + [for(i = v + 1; i <= nv_minuns_one; i = i + 1) indices[i]] ) ); function _triangulate_zero_or_value(num_of_vertices, value) = num_of_vertices <= value ? 0 : value; - function _triangulate_real_triangulate_sub(shape_pts, collector, indices, v, num_of_vertices, count, epsilon) = let( // idxes of three consecutive vertices @@ -96,7 +95,7 @@ function triangulate(shape_pts, epsilon = 0.0001) = let( num_of_vertices = len(shape_pts), v = num_of_vertices - 1, - indices = [for(vi = [0:v]) vi], + indices = [for(vi = 0; vi <= v; vi = vi + 1) vi], count = 2 * num_of_vertices ) num_of_vertices < 3 ? [] : _triangulate_real_triangulate(shape_pts, [], indices, v, num_of_vertices, count, epsilon); diff --git a/src/trim_shape.scad b/src/trim_shape.scad index d1e175e6..c436abc0 100644 --- a/src/trim_shape.scad +++ b/src/trim_shape.scad @@ -8,10 +8,10 @@ * **/ -include <__private__/__to3d.scad>; -include <__private__/__line_intersection.scad>; -include <__private__/__in_line.scad>; -include <__private__/__lines_from.scad>; +include <__comm__/__to3d.scad>; +include <__comm__/__line_intersection.scad>; +include <__comm__/__in_line.scad>; +include <__comm__/__lines_from.scad>; function _trim_shape_any_intersection_sub(lines, line, lines_leng, i, epsilon) = let( @@ -27,8 +27,8 @@ function _trim_sub(lines, leng, epsilon) = let( current_line = lines[0], next_line = lines[1], - lines_from_next = [for(j = [1 : leng - 1]) lines[j]], - lines_from_next2 = [for(j = [2 : leng - 1]) lines[j]], + lines_from_next = [for(j = 1; j < leng; j = j + 1) lines[j]], + lines_from_next2 = [for(j = 2; j < leng; j = j + 1) lines[j]], current_p = current_line[0], leng_lines_from_next2 = len(lines_from_next2), inter_p = _trim_shape_any_intersection(lines_from_next2, current_line, leng_lines_from_next2, 0, epsilon) @@ -39,7 +39,7 @@ function _trim_sub(lines, leng, epsilon) = (leng == 3 || (inter_p[0] == (leng_lines_from_next2 - 1))) ? [current_p, inter_p[1], lines[leng - 1]] : ( // collect current_p, intersecting pt and trim remain lines concat([current_p, inter_p[1]], - _trim_shape_trim_lines([for(i = [inter_p[0] + 1 : leng_lines_from_next2 - 1]) lines_from_next2[i]], epsilon) + _trim_shape_trim_lines([for(i = inter_p[0] + 1; i < leng_lines_from_next2; i = i + 1) lines_from_next2[i]], epsilon) ) ) ); @@ -53,7 +53,7 @@ function _trim_shape_collect_pts_from(lines, leng) = function trim_shape(shape_pts, from, to, epsilon = 0.0001) = let( - pts = [for(i = [from:to]) shape_pts[i]], + pts = [for(i = from; i <= to; i = i + 1) shape_pts[i]], trimmed = _trim_shape_trim_lines(__lines_from(pts), epsilon) ) len(shape_pts) == len(trimmed) ? trimmed : trim_shape(trimmed, 0, len(trimmed) - 1, epsilon); diff --git a/src/turtle2d.scad b/src/turtle/turtle2d.scad similarity index 94% rename from src/turtle2d.scad rename to src/turtle/turtle2d.scad index 5ab77606..8c2716ab 100644 --- a/src/turtle2d.scad +++ b/src/turtle/turtle2d.scad @@ -4,7 +4,7 @@ * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-turtle2d.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-turtle2d.html * **/ @@ -34,7 +34,7 @@ function _turtle2d_three_args_command(cmd, arg1, arg2, arg3) = cmd == "create" ? _turtle2d_turtle(arg1, arg2, arg3) : _turtle2d_two_args_command(cmd, arg1, arg2); function _turtle2d_two_args_command(cmd, arg1, arg2) = - arg2 == undef ? _turtle2d_one_arg_command(cmd, arg1) : ( + is_undef(arg2) ? _turtle2d_one_arg_command(cmd, arg1) : ( cmd == "pt" ? _turtle2d_set_point(arg1, arg2) : ( cmd == "x" ? _turtle2d_set_x(arg1, arg2) : ( cmd == "y" ? _turtle2d_set_y(arg1, arg2) : ( diff --git a/src/turtle3d.scad b/src/turtle/turtle3d.scad similarity index 95% rename from src/turtle3d.scad rename to src/turtle/turtle3d.scad index c93448ed..10210683 100644 --- a/src/turtle3d.scad +++ b/src/turtle/turtle3d.scad @@ -4,7 +4,7 @@ * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-turtle3d.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-turtle3d.html * **/ @@ -122,8 +122,8 @@ function _turtle3d_zu_turn(turtle, a) = ); function _turtle3d_create_cmd(arg1, arg2) = - (arg1 == undef && arg2 == undef) ? _turtle3d_create_default() : ( - (arg1 != undef && arg2 != undef) ? _turtle3d_create(arg1, arg2) : undef + (is_undef(arg1) && is_undef(arg2)) ? _turtle3d_create_default() : ( + (!is_undef(arg1) && !is_undef(arg2)) ? _turtle3d_create(arg1, arg2) : undef ); function _turtle3d_chain_move(cmd, arg1, arg2) = diff --git a/src/unittest.scad b/src/unittest.scad index 4102a497..c6bea457 100644 --- a/src/unittest.scad +++ b/src/unittest.scad @@ -1,128 +1,38 @@ -include <__private__/__is_float.scad>; +module assertEqualPoint(expected, actual, epsilon = 0.0001) { + leng_expected = len(expected); + leng_actual = len(actual); -module fail(title, message) { - echo( - str( - "", - "", - "FAIL: ", title, - "", - "" - ) + assert( + leng_expected == leng_actual, + str("expected length: ", leng_expected, ", but: ", leng_actual) + ); + + v_diff = expected - actual; + v3d = len(v_diff) == 2 ? [v_diff[0], v_diff[1], 0] : v_diff; + + assert( + abs(v3d[0]) <= epsilon && abs(v3d[1]) <= epsilon && abs(v3d[2]) <= epsilon, + str("expected: ", expected, ", but: ", actual) ); - if(message != undef) { - echo( - str( - "", - " ", - message, - "", - "" - ) - ); - } } -function round_n(number, float_digits = 4) = - let(n = pow(10, float_digits)) - round(number * n) / n; - -function mul_round_pt(point, n) = - let(pt = point * n) - len(pt) == 2 ? - [round(pt[0]), round(pt[1])] : - [round(pt[0]), round(pt[1]), round(pt[2])]; - -function round_pts(points, float_digits = 4) = - let(n = pow(10, float_digits)) - [for(pt = points) mul_round_pt(pt, n) / n]; - -module assertEqualPoint(expected, actual, float_digits = 4) { +module assertEqualPoints(expected, actual, epsilon = 0.0001) { leng_expected = len(expected); leng_actual = len(actual); - if(leng_expected != leng_actual) { - fail( - "Point", - str("expected length: ", leng_expected, - ", but: ", leng_actual) - ); - } else { - n = pow(10, float_digits); + assert( + leng_expected == leng_actual, + str("expected length: ", leng_expected, ", but: ", leng_actual) + ); - shifted_expected = mul_round_pt( - expected, n - ); - - shifted_actual = mul_round_pt( - actual, n - ); - - if(shifted_expected != shifted_actual) { - fail( - "Point", - str("expected: ", shifted_expected / n, - ", but: ", shifted_actual / n) - ); - } + for(i = [0:len(actual) - 1]) { + assertEqualPoint(expected[i], actual[i], epsilon); } } -module assertEqualPoints(expected, actual, float_digits = 4) { - leng_expected = len(expected); - leng_actual = len(actual); - - if(leng_expected != leng_actual) { - fail( - "Points", - str("expected length: ", leng_expected, - ", but: ", leng_actual) - ); - } else { - for(i = [0:len(actual) - 1]) { - assertEqualPoint(expected[i], actual[i], float_digits); - } - } +module assertEqualNum(expected, actual, epsilon = 0.0001) { + assert( + abs(expected - actual) <= epsilon, + str("expected: ", expected, ", but: ", actual) + ); } - -module assertEqual(expected, actual, float_digits = 4) { - r_expected = __is_float(expected) ? round_n(expected, float_digits) : expected; - r_actual = __is_float(actual) ? round_n(actual, float_digits) : actual; - - if(r_expected != r_actual) { - fail( - "Equality", - str("expected: ", r_expected, - ", but: ", r_actual) - ); - } -} - -module assertTrue(truth) { - if(!truth) { - fail( - "Truth", - "expected: true, but: false" - ); - } -} - -module round_echo_pts(points, float_digits = 4) { - echo(round_pts(points, float_digits)); -} - -module round_echo_n(number, float_digits = 4) { - echo(round_n(number, float_digits)); -} - -function mul_round_vector(vector, n) = - let(vt = vector * n) - [for(v = vt) round(v)]; - -function round_vectors(vectors, float_digits = 4) = - let(n = pow(10, float_digits)) - [for(vt = vectors) mul_round_vector(vt, n) / n]; - -module round_echo_vectors(vectors, float_digits = 4) { - echo(round_vectors(vectors, float_digits = 4)); -} \ No newline at end of file diff --git a/src/util/__comm__/__reverse.scad b/src/util/__comm__/__reverse.scad new file mode 100644 index 00000000..a09b6b1b --- /dev/null +++ b/src/util/__comm__/__reverse.scad @@ -0,0 +1 @@ +function __reverse(vt) = [for(i = len(vt) - 1; i >= 0; i = i - 1) vt[i]]; \ No newline at end of file diff --git a/src/parse_number.scad b/src/util/parse_number.scad similarity index 100% rename from src/parse_number.scad rename to src/util/parse_number.scad diff --git a/src/util/reverse.scad b/src/util/reverse.scad new file mode 100644 index 00000000..d2696b02 --- /dev/null +++ b/src/util/reverse.scad @@ -0,0 +1,13 @@ +/** +* reverse.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-reverse.html +* +**/ + +include ; + +function reverse(lt) = __reverse(lt); \ No newline at end of file diff --git a/src/util/slice.scad b/src/util/slice.scad new file mode 100644 index 00000000..0eb9c0c5 --- /dev/null +++ b/src/util/slice.scad @@ -0,0 +1,14 @@ +/** +* slice.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-slice.html +* +**/ + +function slice(lt, begin, end) = + let(ed = is_undef(end) ? len(lt) : end) + [for(i = begin; i < ed; i = i + 1) lt[i]]; + \ No newline at end of file diff --git a/src/util/sort.scad b/src/util/sort.scad new file mode 100644 index 00000000..0c51290a --- /dev/null +++ b/src/util/sort.scad @@ -0,0 +1,26 @@ +/** +* sort.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-sort.html +* +**/ + +function _sort(lt, i) = + let(leng = len(lt)) + leng <= 1 ? lt : + let( + pivot = lt[0], + before = [for(j = 1; j < leng; j = j + 1) if(lt[j][i] < pivot[i]) lt[j]], + after = [for(j = 1; j < leng; j = j + 1) if(lt[j][i] >= pivot[i]) lt[j]] + ) + concat(_sort(before, i), [pivot], _sort(after, i)); + +function sort(lt, by = "idx", idx = 0) = + let( + dict = [["x", 0], ["y", 1], ["z", 0], ["idx", idx]], + i = dict[search(by, dict)[0]][1] + ) + _sort(lt, i); \ No newline at end of file diff --git a/src/util/split_str.scad b/src/util/split_str.scad new file mode 100644 index 00000000..9cf4196f --- /dev/null +++ b/src/util/split_str.scad @@ -0,0 +1,23 @@ +/** +* split_str.scad +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-split_str.html +* +**/ + +function _split_t_by(idxs, t) = + let(leng = len(idxs)) + concat( + [sub_str(t, 0, idxs[0])], + [ + for(i = 0; i < leng; i = i + 1) + sub_str(t, idxs[i] + 1, idxs[i + 1]) + ] + ); + +function split_str(t, delimiter) = + len(search(delimiter, t)) == 0 ? + [t] : _split_t_by(search(delimiter, t, 0)[0], t); \ No newline at end of file diff --git a/src/sub_str.scad b/src/util/sub_str.scad similarity index 65% rename from src/sub_str.scad rename to src/util/sub_str.scad index 61cf2413..e692c62c 100644 --- a/src/sub_str.scad +++ b/src/util/sub_str.scad @@ -4,7 +4,7 @@ * @copyright Justin Lin, 2017 * @license https://opensource.org/licenses/lgpl-3.0.html * -* @see https://openhome.cc/eGossip/OpenSCAD/lib-sub_str.html +* @see https://openhome.cc/eGossip/OpenSCAD/lib2-sub_str.html * **/ @@ -12,5 +12,4 @@ function _sub_str(t, begin, end) = begin == end ? "" : str(t[begin], sub_str(t, begin + 1, end)); function sub_str(t, begin, end) = - end == undef ? _sub_str(t, begin, len(t)) : _sub_str(t, begin, end); - \ No newline at end of file + is_undef(end) ? _sub_str(t, begin, len(t)) : _sub_str(t, begin, end); diff --git a/src/voronoi3d.scad b/src/voronoi3d.scad index 072c34d7..214c2a87 100644 --- a/src/voronoi3d.scad +++ b/src/voronoi3d.scad @@ -8,7 +8,7 @@ * **/ -include <__private__/__angy_angz.scad>; +include <__comm__/__angy_angz.scad>; // slow but workable diff --git a/test/matrix/test_m_cumulate.scad b/test/matrix/test_m_cumulate.scad new file mode 100644 index 00000000..52ffbd3d --- /dev/null +++ b/test/matrix/test_m_cumulate.scad @@ -0,0 +1,19 @@ + +module test_m_cumulate() { + echo("==== test_m_cumulate ===="); + + include ; + include ; + include ; + include ; + include ; + + expected = [[1, -1.73205, 0, 10], [1.73205, 1, 0, 20], [0, 0, 2, 10], [0, 0, 0, 1]]; + actual = m_cumulate([ + m_translation([10, 20, 10]), m_scaling(2), m_rotation(60)] + ); + + assertEqualPoints(expected, actual); +} + +test_m_cumulate(); \ No newline at end of file diff --git a/test/pixel/test_px_circle.scad b/test/pixel/test_px_circle.scad new file mode 100644 index 00000000..a800318d --- /dev/null +++ b/test/pixel/test_px_circle.scad @@ -0,0 +1,13 @@ + +module test_px_circle() { + echo("==== test_px_circle ===="); + + include ; + include ; + expected = [[0, 10], [0, -10], [-10, 0], [-9, 0], [-8, 0], [-7, 0], [-6, 0], [-5, 0], [-4, 0], [-3, 0], [-2, 0], [-1, 0], [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [-1, -10], [0, -10], [1, -10], [-10, -1], [-9, -1], [-8, -1], [-7, -1], [-6, -1], [-5, -1], [-4, -1], [-3, -1], [-2, -1], [-1, -1], [0, -1], [1, -1], [2, -1], [3, -1], [4, -1], [5, -1], [6, -1], [7, -1], [8, -1], [9, -1], [10, -1], [-10, 1], [-9, 1], [-8, 1], [-7, 1], [-6, 1], [-5, 1], [-4, 1], [-3, 1], [-2, 1], [-1, 1], [0, 1], [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [8, 1], [9, 1], [10, 1], [-1, 10], [0, 10], [1, 10], [-2, -10], [-1, -10], [0, -10], [1, -10], [2, -10], [-10, -2], [-9, -2], [-8, -2], [-7, -2], [-6, -2], [-5, -2], [-4, -2], [-3, -2], [-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2], [5, -2], [6, -2], [7, -2], [8, -2], [9, -2], [10, -2], [-10, 2], [-9, 2], [-8, 2], [-7, 2], [-6, 2], [-5, 2], [-4, 2], [-3, 2], [-2, 2], [-1, 2], [0, 2], [1, 2], [2, 2], [3, 2], [4, 2], [5, 2], [6, 2], [7, 2], [8, 2], [9, 2], [10, 2], [-2, 10], [-1, 10], [0, 10], [1, 10], [2, 10], [-3, -10], [-2, -10], [-1, -10], [0, -10], [1, -10], [2, -10], [3, -10], [-10, -3], [-9, -3], [-8, -3], [-7, -3], [-6, -3], [-5, -3], [-4, -3], [-3, -3], [-2, -3], [-1, -3], [0, -3], [1, -3], [2, -3], [3, -3], [4, -3], [5, -3], [6, -3], [7, -3], [8, -3], [9, -3], [10, -3], [-10, 3], [-9, 3], [-8, 3], [-7, 3], [-6, 3], [-5, 3], [-4, 3], [-3, 3], [-2, 3], [-1, 3], [0, 3], [1, 3], [2, 3], [3, 3], [4, 3], [5, 3], [6, 3], [7, 3], [8, 3], [9, 3], [10, 3], [-3, 10], [-2, 10], [-1, 10], [0, 10], [1, 10], [2, 10], [3, 10], [-4, -9], [-3, -9], [-2, -9], [-1, -9], [0, -9], [1, -9], [2, -9], [3, -9], [4, -9], [-9, -4], [-8, -4], [-7, -4], [-6, -4], [-5, -4], [-4, -4], [-3, -4], [-2, -4], [-1, -4], [0, -4], [1, -4], [2, -4], [3, -4], [4, -4], [5, -4], [6, -4], [7, -4], [8, -4], [9, -4], [-9, 4], [-8, 4], [-7, 4], [-6, 4], [-5, 4], [-4, 4], [-3, 4], [-2, 4], [-1, 4], [0, 4], [1, 4], [2, 4], [3, 4], [4, 4], [5, 4], [6, 4], [7, 4], [8, 4], [9, 4], [-4, 9], [-3, 9], [-2, 9], [-1, 9], [0, 9], [1, 9], [2, 9], [3, 9], [4, 9], [-5, -9], [-4, -9], [-3, -9], [-2, -9], [-1, -9], [0, -9], [1, -9], [2, -9], [3, -9], [4, -9], [5, -9], [-9, -5], [-8, -5], [-7, -5], [-6, -5], [-5, -5], [-4, -5], [-3, -5], [-2, -5], [-1, -5], [0, -5], [1, -5], [2, -5], [3, -5], [4, -5], [5, -5], [6, -5], [7, -5], [8, -5], [9, -5], [-9, 5], [-8, 5], [-7, 5], [-6, 5], [-5, 5], [-4, 5], [-3, 5], [-2, 5], [-1, 5], [0, 5], [1, 5], [2, 5], [3, 5], [4, 5], [5, 5], [6, 5], [7, 5], [8, 5], [9, 5], [-5, 9], [-4, 9], [-3, 9], [-2, 9], [-1, 9], [0, 9], [1, 9], [2, 9], [3, 9], [4, 9], [5, 9], [-6, -8], [-5, -8], [-4, -8], [-3, -8], [-2, -8], [-1, -8], [0, -8], [1, -8], [2, -8], [3, -8], [4, -8], [5, -8], [6, -8], [-8, -6], [-7, -6], [-6, -6], [-5, -6], [-4, -6], [-3, -6], [-2, -6], [-1, -6], [0, -6], [1, -6], [2, -6], [3, -6], [4, -6], [5, -6], [6, -6], [7, -6], [8, -6], [-8, 6], [-7, 6], [-6, 6], [-5, 6], [-4, 6], [-3, 6], [-2, 6], [-1, 6], [0, 6], [1, 6], [2, 6], [3, 6], [4, 6], [5, 6], [6, 6], [7, 6], [8, 6], [-6, 8], [-5, 8], [-4, 8], [-3, 8], [-2, 8], [-1, 8], [0, 8], [1, 8], [2, 8], [3, 8], [4, 8], [5, 8], [6, 8], [-7, -7], [-6, -7], [-5, -7], [-4, -7], [-3, -7], [-2, -7], [-1, -7], [0, -7], [1, -7], [2, -7], [3, -7], [4, -7], [5, -7], [6, -7], [7, -7], [-7, -7], [-6, -7], [-5, -7], [-4, -7], [-3, -7], [-2, -7], [-1, -7], [0, -7], [1, -7], [2, -7], [3, -7], [4, -7], [5, -7], [6, -7], [7, -7], [-7, 7], [-6, 7], [-5, 7], [-4, 7], [-3, 7], [-2, 7], [-1, 7], [0, 7], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [7, 7], [-7, 7], [-6, 7], [-5, 7], [-4, 7], [-3, 7], [-2, 7], [-1, 7], [0, 7], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [7, 7]]; + actual = px_circle(10, true); + + assertEqualPoints(expected, actual); +} + +test_px_circle(); \ No newline at end of file diff --git a/test/pixel/test_px_cylinder.scad b/test/pixel/test_px_cylinder.scad new file mode 100644 index 00000000..a359db4c --- /dev/null +++ b/test/pixel/test_px_cylinder.scad @@ -0,0 +1,23 @@ + +module test_px_cylinder() { + echo("==== test_px_cylinder ===="); + + include ; + include ; + + r1 = 10; + r2 = 5; + h = 3; + + expected = [[-4, -9, 0], [-3, -9, 0], [-2, -9, 0], [-1, -9, 0], [0, -9, 0], [1, -9, 0], [2, -9, 0], [3, -9, 0], [4, -9, 0], [-5, -8, 0], [-4, -8, 0], [-3, -8, 0], [-2, -8, 0], [-1, -8, 0], [0, -8, 0], [1, -8, 0], [2, -8, 0], [3, -8, 0], [4, -8, 0], [5, -8, 0], [-7, -7, 0], [-6, -7, 0], [-5, -7, 0], [-4, -7, 0], [-3, -7, 0], [-2, -7, 0], [-1, -7, 0], [0, -7, 0], [1, -7, 0], [2, -7, 0], [3, -7, 0], [4, -7, 0], [5, -7, 0], [6, -7, 0], [7, -7, 0], [-7, -6, 0], [-6, -6, 0], [-5, -6, 0], [-4, -6, 0], [-3, -6, 0], [-2, -6, 0], [-1, -6, 0], [0, -6, 0], [1, -6, 0], [2, -6, 0], [3, -6, 0], [4, -6, 0], [5, -6, 0], [6, -6, 0], [7, -6, 0], [-8, -5, 0], [-7, -5, 0], [-6, -5, 0], [-5, -5, 0], [-4, -5, 0], [-3, -5, 0], [-2, -5, 0], [-1, -5, 0], [0, -5, 0], [1, -5, 0], [2, -5, 0], [3, -5, 0], [4, -5, 0], [5, -5, 0], [6, -5, 0], [7, -5, 0], [8, -5, 0], [-9, -4, 0], [-8, -4, 0], [-7, -4, 0], [-6, -4, 0], [-5, -4, 0], [-4, -4, 0], [-3, -4, 0], [-2, -4, 0], [-1, -4, 0], [0, -4, 0], [1, -4, 0], [2, -4, 0], [3, -4, 0], [4, -4, 0], [5, -4, 0], [6, -4, 0], [7, -4, 0], [8, -4, 0], [9, -4, 0], [-9, -3, 0], [-8, -3, 0], [-7, -3, 0], [-6, -3, 0], [-5, -3, 0], [-4, -3, 0], [-3, -3, 0], [-2, -3, 0], [-1, -3, 0], [0, -3, 0], [1, -3, 0], [2, -3, 0], [3, -3, 0], [4, -3, 0], [5, -3, 0], [6, -3, 0], [7, -3, 0], [8, -3, 0], [9, -3, 0], [-9, -2, 0], [-8, -2, 0], [-7, -2, 0], [-6, -2, 0], [-5, -2, 0], [-4, -2, 0], [-3, -2, 0], [-2, -2, 0], [-1, -2, 0], [0, -2, 0], [1, -2, 0], [2, -2, 0], [3, -2, 0], [4, -2, 0], [5, -2, 0], [6, -2, 0], [7, -2, 0], [8, -2, 0], [9, -2, 0], [-9, -1, 0], [-8, -1, 0], [-7, -1, 0], [-6, -1, 0], [-5, -1, 0], [-4, -1, 0], [-3, -1, 0], [-2, -1, 0], [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [3, -1, 0], [4, -1, 0], [5, -1, 0], [6, -1, 0], [7, -1, 0], [8, -1, 0], [9, -1, 0], [-9, 0, 0], [-8, 0, 0], [-7, 0, 0], [-6, 0, 0], [-5, 0, 0], [-4, 0, 0], [-3, 0, 0], [-2, 0, 0], [-1, 0, 0], [0, 0, 0], [1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [-9, 1, 0], [-8, 1, 0], [-7, 1, 0], [-6, 1, 0], [-5, 1, 0], [-4, 1, 0], [-3, 1, 0], [-2, 1, 0], [-1, 1, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0], [3, 1, 0], [4, 1, 0], [5, 1, 0], [6, 1, 0], [7, 1, 0], [8, 1, 0], [9, 1, 0], [-9, 2, 0], [-8, 2, 0], [-7, 2, 0], [-6, 2, 0], [-5, 2, 0], [-4, 2, 0], [-3, 2, 0], [-2, 2, 0], [-1, 2, 0], [0, 2, 0], [1, 2, 0], [2, 2, 0], [3, 2, 0], [4, 2, 0], [5, 2, 0], [6, 2, 0], [7, 2, 0], [8, 2, 0], [9, 2, 0], [-9, 3, 0], [-8, 3, 0], [-7, 3, 0], [-6, 3, 0], [-5, 3, 0], [-4, 3, 0], [-3, 3, 0], [-2, 3, 0], [-1, 3, 0], [0, 3, 0], [1, 3, 0], [2, 3, 0], [3, 3, 0], [4, 3, 0], [5, 3, 0], [6, 3, 0], [7, 3, 0], [8, 3, 0], [9, 3, 0], [-9, 4, 0], [-8, 4, 0], [-7, 4, 0], [-6, 4, 0], [-5, 4, 0], [-4, 4, 0], [-3, 4, 0], [-2, 4, 0], [-1, 4, 0], [0, 4, 0], [1, 4, 0], [2, 4, 0], [3, 4, 0], [4, 4, 0], [5, 4, 0], [6, 4, 0], [7, 4, 0], [8, 4, 0], [9, 4, 0], [-8, 5, 0], [-7, 5, 0], [-6, 5, 0], [-5, 5, 0], [-4, 5, 0], [-3, 5, 0], [-2, 5, 0], [-1, 5, 0], [0, 5, 0], [1, 5, 0], [2, 5, 0], [3, 5, 0], [4, 5, 0], [5, 5, 0], [6, 5, 0], [7, 5, 0], [8, 5, 0], [-7, 6, 0], [-6, 6, 0], [-5, 6, 0], [-4, 6, 0], [-3, 6, 0], [-2, 6, 0], [-1, 6, 0], [0, 6, 0], [1, 6, 0], [2, 6, 0], [3, 6, 0], [4, 6, 0], [5, 6, 0], [6, 6, 0], [7, 6, 0], [-7, 7, 0], [-6, 7, 0], [-5, 7, 0], [-4, 7, 0], [-3, 7, 0], [-2, 7, 0], [-1, 7, 0], [0, 7, 0], [1, 7, 0], [2, 7, 0], [3, 7, 0], [4, 7, 0], [5, 7, 0], [6, 7, 0], [7, 7, 0], [-5, 8, 0], [-4, 8, 0], [-3, 8, 0], [-2, 8, 0], [-1, 8, 0], [0, 8, 0], [1, 8, 0], [2, 8, 0], [3, 8, 0], [4, 8, 0], [5, 8, 0], [-4, 9, 0], [-3, 9, 0], [-2, 9, 0], [-1, 9, 0], [0, 9, 0], [1, 9, 0], [2, 9, 0], [3, 9, 0], [4, 9, 0], [-3, -7, 1], [-2, -7, 1], [-1, -7, 1], [0, -7, 1], [1, -7, 1], [2, -7, 1], [3, -7, 1], [-5, -6, 1], [-4, -6, 1], [-3, -6, 1], [-2, -6, 1], [-1, -6, 1], [0, -6, 1], [1, -6, 1], [2, -6, 1], [3, -6, 1], [4, -6, 1], [5, -6, 1], [-6, -5, 1], [-5, -5, 1], [-4, -5, 1], [-3, -5, 1], [-2, -5, 1], [-1, -5, 1], [0, -5, 1], [1, -5, 1], [2, -5, 1], [3, -5, 1], [4, -5, 1], [5, -5, 1], [6, -5, 1], [-6, -4, 1], [-5, -4, 1], [-4, -4, 1], [-3, -4, 1], [-2, -4, 1], [-1, -4, 1], [0, -4, 1], [1, -4, 1], [2, -4, 1], [3, -4, 1], [4, -4, 1], [5, -4, 1], [6, -4, 1], [-7, -3, 1], [-6, -3, 1], [-5, -3, 1], [-4, -3, 1], [-3, -3, 1], [-2, -3, 1], [-1, -3, 1], [0, -3, 1], [1, -3, 1], [2, -3, 1], [3, -3, 1], [4, -3, 1], [5, -3, 1], [6, -3, 1], [7, -3, 1], [-7, -2, 1], [-6, -2, 1], [-5, -2, 1], [-4, -2, 1], [-3, -2, 1], [-2, -2, 1], [-1, -2, 1], [0, -2, 1], [1, -2, 1], [2, -2, 1], [3, -2, 1], [4, -2, 1], [5, -2, 1], [6, -2, 1], [7, -2, 1], [-7, -1, 1], [-6, -1, 1], [-5, -1, 1], [-4, -1, 1], [-3, -1, 1], [-2, -1, 1], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [2, -1, 1], [3, -1, 1], [4, -1, 1], [5, -1, 1], [6, -1, 1], [7, -1, 1], [-7, 0, 1], [-6, 0, 1], [-5, 0, 1], [-4, 0, 1], [-3, 0, 1], [-2, 0, 1], [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1], [3, 0, 1], [4, 0, 1], [5, 0, 1], [6, 0, 1], [7, 0, 1], [-7, 1, 1], [-6, 1, 1], [-5, 1, 1], [-4, 1, 1], [-3, 1, 1], [-2, 1, 1], [-1, 1, 1], [0, 1, 1], [1, 1, 1], [2, 1, 1], [3, 1, 1], [4, 1, 1], [5, 1, 1], [6, 1, 1], [7, 1, 1], [-7, 2, 1], [-6, 2, 1], [-5, 2, 1], [-4, 2, 1], [-3, 2, 1], [-2, 2, 1], [-1, 2, 1], [0, 2, 1], [1, 2, 1], [2, 2, 1], [3, 2, 1], [4, 2, 1], [5, 2, 1], [6, 2, 1], [7, 2, 1], [-7, 3, 1], [-6, 3, 1], [-5, 3, 1], [-4, 3, 1], [-3, 3, 1], [-2, 3, 1], [-1, 3, 1], [0, 3, 1], [1, 3, 1], [2, 3, 1], [3, 3, 1], [4, 3, 1], [5, 3, 1], [6, 3, 1], [7, 3, 1], [-6, 4, 1], [-5, 4, 1], [-4, 4, 1], [-3, 4, 1], [-2, 4, 1], [-1, 4, 1], [0, 4, 1], [1, 4, 1], [2, 4, 1], [3, 4, 1], [4, 4, 1], [5, 4, 1], [6, 4, 1], [-6, 5, 1], [-5, 5, 1], [-4, 5, 1], [-3, 5, 1], [-2, 5, 1], [-1, 5, 1], [0, 5, 1], [1, 5, 1], [2, 5, 1], [3, 5, 1], [4, 5, 1], [5, 5, 1], [6, 5, 1], [-5, 6, 1], [-4, 6, 1], [-3, 6, 1], [-2, 6, 1], [-1, 6, 1], [0, 6, 1], [1, 6, 1], [2, 6, 1], [3, 6, 1], [4, 6, 1], [5, 6, 1], [-3, 7, 1], [-2, 7, 1], [-1, 7, 1], [0, 7, 1], [1, 7, 1], [2, 7, 1], [3, 7, 1], [-2, -4, 2], [-1, -4, 2], [0, -4, 2], [1, -4, 2], [2, -4, 2], [-3, -3, 2], [-2, -3, 2], [-1, -3, 2], [0, -3, 2], [1, -3, 2], [2, -3, 2], [3, -3, 2], [-4, -2, 2], [-3, -2, 2], [-2, -2, 2], [-1, -2, 2], [0, -2, 2], [1, -2, 2], [2, -2, 2], [3, -2, 2], [4, -2, 2], [-4, -1, 2], [-3, -1, 2], [-2, -1, 2], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2], [3, -1, 2], [4, -1, 2], [-4, 0, 2], [-3, 0, 2], [-2, 0, 2], [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [3, 0, 2], [4, 0, 2], [-4, 1, 2], [-3, 1, 2], [-2, 1, 2], [-1, 1, 2], [0, 1, 2], [1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 1, 2], [-4, 2, 2], [-3, 2, 2], [-2, 2, 2], [-1, 2, 2], [0, 2, 2], [1, 2, 2], [2, 2, 2], [3, 2, 2], [4, 2, 2], [-3, 3, 2], [-2, 3, 2], [-1, 3, 2], [0, 3, 2], [1, 3, 2], [2, 3, 2], [3, 3, 2], [-2, 4, 2], [-1, 4, 2], [0, 4, 2], [1, 4, 2], [2, 4, 2]]; + + actual = px_cylinder([r1, r2], h, true); + assertEqualPoints(expected, actual); + + expected2 = [[-4, -9, 0], [-3, -9, 0], [-2, -9, 0], [-1, -9, 0], [0, -9, 0], [1, -9, 0], [2, -9, 0], [3, -9, 0], [4, -9, 0], [-5, -8, 0], [-4, -8, 0], [-3, -8, 0], [-2, -8, 0], [-1, -8, 0], [0, -8, 0], [1, -8, 0], [2, -8, 0], [3, -8, 0], [4, -8, 0], [5, -8, 0], [-7, -7, 0], [-6, -7, 0], [-5, -7, 0], [-4, -7, 0], [-3, -7, 0], [-2, -7, 0], [-1, -7, 0], [0, -7, 0], [1, -7, 0], [2, -7, 0], [3, -7, 0], [4, -7, 0], [5, -7, 0], [6, -7, 0], [7, -7, 0], [-7, -6, 0], [-6, -6, 0], [-5, -6, 0], [-4, -6, 0], [-3, -6, 0], [-2, -6, 0], [-1, -6, 0], [0, -6, 0], [1, -6, 0], [2, -6, 0], [3, -6, 0], [4, -6, 0], [5, -6, 0], [6, -6, 0], [7, -6, 0], [-8, -5, 0], [-7, -5, 0], [-6, -5, 0], [-5, -5, 0], [-4, -5, 0], [-3, -5, 0], [-2, -5, 0], [-1, -5, 0], [0, -5, 0], [1, -5, 0], [2, -5, 0], [3, -5, 0], [4, -5, 0], [5, -5, 0], [6, -5, 0], [7, -5, 0], [8, -5, 0], [-9, -4, 0], [-8, -4, 0], [-7, -4, 0], [-6, -4, 0], [-5, -4, 0], [-4, -4, 0], [-3, -4, 0], [-2, -4, 0], [-1, -4, 0], [0, -4, 0], [1, -4, 0], [2, -4, 0], [3, -4, 0], [4, -4, 0], [5, -4, 0], [6, -4, 0], [7, -4, 0], [8, -4, 0], [9, -4, 0], [-9, -3, 0], [-8, -3, 0], [-7, -3, 0], [-6, -3, 0], [-5, -3, 0], [-4, -3, 0], [-3, -3, 0], [-2, -3, 0], [-1, -3, 0], [0, -3, 0], [1, -3, 0], [2, -3, 0], [3, -3, 0], [4, -3, 0], [5, -3, 0], [6, -3, 0], [7, -3, 0], [8, -3, 0], [9, -3, 0], [-9, -2, 0], [-8, -2, 0], [-7, -2, 0], [-6, -2, 0], [-5, -2, 0], [-4, -2, 0], [-3, -2, 0], [-2, -2, 0], [-1, -2, 0], [0, -2, 0], [1, -2, 0], [2, -2, 0], [3, -2, 0], [4, -2, 0], [5, -2, 0], [6, -2, 0], [7, -2, 0], [8, -2, 0], [9, -2, 0], [-9, -1, 0], [-8, -1, 0], [-7, -1, 0], [-6, -1, 0], [-5, -1, 0], [-4, -1, 0], [-3, -1, 0], [-2, -1, 0], [-1, -1, 0], [0, -1, 0], [1, -1, 0], [2, -1, 0], [3, -1, 0], [4, -1, 0], [5, -1, 0], [6, -1, 0], [7, -1, 0], [8, -1, 0], [9, -1, 0], [-9, 0, 0], [-8, 0, 0], [-7, 0, 0], [-6, 0, 0], [-5, 0, 0], [-4, 0, 0], [-3, 0, 0], [-2, 0, 0], [-1, 0, 0], [0, 0, 0], [1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [-9, 1, 0], [-8, 1, 0], [-7, 1, 0], [-6, 1, 0], [-5, 1, 0], [-4, 1, 0], [-3, 1, 0], [-2, 1, 0], [-1, 1, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0], [3, 1, 0], [4, 1, 0], [5, 1, 0], [6, 1, 0], [7, 1, 0], [8, 1, 0], [9, 1, 0], [-9, 2, 0], [-8, 2, 0], [-7, 2, 0], [-6, 2, 0], [-5, 2, 0], [-4, 2, 0], [-3, 2, 0], [-2, 2, 0], [-1, 2, 0], [0, 2, 0], [1, 2, 0], [2, 2, 0], [3, 2, 0], [4, 2, 0], [5, 2, 0], [6, 2, 0], [7, 2, 0], [8, 2, 0], [9, 2, 0], [-9, 3, 0], [-8, 3, 0], [-7, 3, 0], [-6, 3, 0], [-5, 3, 0], [-4, 3, 0], [-3, 3, 0], [-2, 3, 0], [-1, 3, 0], [0, 3, 0], [1, 3, 0], [2, 3, 0], [3, 3, 0], [4, 3, 0], [5, 3, 0], [6, 3, 0], [7, 3, 0], [8, 3, 0], [9, 3, 0], [-9, 4, 0], [-8, 4, 0], [-7, 4, 0], [-6, 4, 0], [-5, 4, 0], [-4, 4, 0], [-3, 4, 0], [-2, 4, 0], [-1, 4, 0], [0, 4, 0], [1, 4, 0], [2, 4, 0], [3, 4, 0], [4, 4, 0], [5, 4, 0], [6, 4, 0], [7, 4, 0], [8, 4, 0], [9, 4, 0], [-8, 5, 0], [-7, 5, 0], [-6, 5, 0], [-5, 5, 0], [-4, 5, 0], [-3, 5, 0], [-2, 5, 0], [-1, 5, 0], [0, 5, 0], [1, 5, 0], [2, 5, 0], [3, 5, 0], [4, 5, 0], [5, 5, 0], [6, 5, 0], [7, 5, 0], [8, 5, 0], [-7, 6, 0], [-6, 6, 0], [-5, 6, 0], [-4, 6, 0], [-3, 6, 0], [-2, 6, 0], [-1, 6, 0], [0, 6, 0], [1, 6, 0], [2, 6, 0], [3, 6, 0], [4, 6, 0], [5, 6, 0], [6, 6, 0], [7, 6, 0], [-7, 7, 0], [-6, 7, 0], [-5, 7, 0], [-4, 7, 0], [-3, 7, 0], [-2, 7, 0], [-1, 7, 0], [0, 7, 0], [1, 7, 0], [2, 7, 0], [3, 7, 0], [4, 7, 0], [5, 7, 0], [6, 7, 0], [7, 7, 0], [-5, 8, 0], [-4, 8, 0], [-3, 8, 0], [-2, 8, 0], [-1, 8, 0], [0, 8, 0], [1, 8, 0], [2, 8, 0], [3, 8, 0], [4, 8, 0], [5, 8, 0], [-4, 9, 0], [-3, 9, 0], [-2, 9, 0], [-1, 9, 0], [0, 9, 0], [1, 9, 0], [2, 9, 0], [3, 9, 0], [4, 9, 0], [-4, -9, 1], [-3, -9, 1], [-2, -9, 1], [-1, -9, 1], [0, -9, 1], [1, -9, 1], [2, -9, 1], [3, -9, 1], [4, -9, 1], [-5, -8, 1], [-4, -8, 1], [-3, -8, 1], [-2, -8, 1], [-1, -8, 1], [0, -8, 1], [1, -8, 1], [2, -8, 1], [3, -8, 1], [4, -8, 1], [5, -8, 1], [-7, -7, 1], [-6, -7, 1], [-5, -7, 1], [-4, -7, 1], [-3, -7, 1], [-2, -7, 1], [-1, -7, 1], [0, -7, 1], [1, -7, 1], [2, -7, 1], [3, -7, 1], [4, -7, 1], [5, -7, 1], [6, -7, 1], [7, -7, 1], [-7, -6, 1], [-6, -6, 1], [-5, -6, 1], [-4, -6, 1], [-3, -6, 1], [-2, -6, 1], [-1, -6, 1], [0, -6, 1], [1, -6, 1], [2, -6, 1], [3, -6, 1], [4, -6, 1], [5, -6, 1], [6, -6, 1], [7, -6, 1], [-8, -5, 1], [-7, -5, 1], [-6, -5, 1], [-5, -5, 1], [-4, -5, 1], [-3, -5, 1], [-2, -5, 1], [-1, -5, 1], [0, -5, 1], [1, -5, 1], [2, -5, 1], [3, -5, 1], [4, -5, 1], [5, -5, 1], [6, -5, 1], [7, -5, 1], [8, -5, 1], [-9, -4, 1], [-8, -4, 1], [-7, -4, 1], [-6, -4, 1], [-5, -4, 1], [-4, -4, 1], [-3, -4, 1], [-2, -4, 1], [-1, -4, 1], [0, -4, 1], [1, -4, 1], [2, -4, 1], [3, -4, 1], [4, -4, 1], [5, -4, 1], [6, -4, 1], [7, -4, 1], [8, -4, 1], [9, -4, 1], [-9, -3, 1], [-8, -3, 1], [-7, -3, 1], [-6, -3, 1], [-5, -3, 1], [-4, -3, 1], [-3, -3, 1], [-2, -3, 1], [-1, -3, 1], [0, -3, 1], [1, -3, 1], [2, -3, 1], [3, -3, 1], [4, -3, 1], [5, -3, 1], [6, -3, 1], [7, -3, 1], [8, -3, 1], [9, -3, 1], [-9, -2, 1], [-8, -2, 1], [-7, -2, 1], [-6, -2, 1], [-5, -2, 1], [-4, -2, 1], [-3, -2, 1], [-2, -2, 1], [-1, -2, 1], [0, -2, 1], [1, -2, 1], [2, -2, 1], [3, -2, 1], [4, -2, 1], [5, -2, 1], [6, -2, 1], [7, -2, 1], [8, -2, 1], [9, -2, 1], [-9, -1, 1], [-8, -1, 1], [-7, -1, 1], [-6, -1, 1], [-5, -1, 1], [-4, -1, 1], [-3, -1, 1], [-2, -1, 1], [-1, -1, 1], [0, -1, 1], [1, -1, 1], [2, -1, 1], [3, -1, 1], [4, -1, 1], [5, -1, 1], [6, -1, 1], [7, -1, 1], [8, -1, 1], [9, -1, 1], [-9, 0, 1], [-8, 0, 1], [-7, 0, 1], [-6, 0, 1], [-5, 0, 1], [-4, 0, 1], [-3, 0, 1], [-2, 0, 1], [-1, 0, 1], [0, 0, 1], [1, 0, 1], [2, 0, 1], [3, 0, 1], [4, 0, 1], [5, 0, 1], [6, 0, 1], [7, 0, 1], [8, 0, 1], [9, 0, 1], [-9, 1, 1], [-8, 1, 1], [-7, 1, 1], [-6, 1, 1], [-5, 1, 1], [-4, 1, 1], [-3, 1, 1], [-2, 1, 1], [-1, 1, 1], [0, 1, 1], [1, 1, 1], [2, 1, 1], [3, 1, 1], [4, 1, 1], [5, 1, 1], [6, 1, 1], [7, 1, 1], [8, 1, 1], [9, 1, 1], [-9, 2, 1], [-8, 2, 1], [-7, 2, 1], [-6, 2, 1], [-5, 2, 1], [-4, 2, 1], [-3, 2, 1], [-2, 2, 1], [-1, 2, 1], [0, 2, 1], [1, 2, 1], [2, 2, 1], [3, 2, 1], [4, 2, 1], [5, 2, 1], [6, 2, 1], [7, 2, 1], [8, 2, 1], [9, 2, 1], [-9, 3, 1], [-8, 3, 1], [-7, 3, 1], [-6, 3, 1], [-5, 3, 1], [-4, 3, 1], [-3, 3, 1], [-2, 3, 1], [-1, 3, 1], [0, 3, 1], [1, 3, 1], [2, 3, 1], [3, 3, 1], [4, 3, 1], [5, 3, 1], [6, 3, 1], [7, 3, 1], [8, 3, 1], [9, 3, 1], [-9, 4, 1], [-8, 4, 1], [-7, 4, 1], [-6, 4, 1], [-5, 4, 1], [-4, 4, 1], [-3, 4, 1], [-2, 4, 1], [-1, 4, 1], [0, 4, 1], [1, 4, 1], [2, 4, 1], [3, 4, 1], [4, 4, 1], [5, 4, 1], [6, 4, 1], [7, 4, 1], [8, 4, 1], [9, 4, 1], [-8, 5, 1], [-7, 5, 1], [-6, 5, 1], [-5, 5, 1], [-4, 5, 1], [-3, 5, 1], [-2, 5, 1], [-1, 5, 1], [0, 5, 1], [1, 5, 1], [2, 5, 1], [3, 5, 1], [4, 5, 1], [5, 5, 1], [6, 5, 1], [7, 5, 1], [8, 5, 1], [-7, 6, 1], [-6, 6, 1], [-5, 6, 1], [-4, 6, 1], [-3, 6, 1], [-2, 6, 1], [-1, 6, 1], [0, 6, 1], [1, 6, 1], [2, 6, 1], [3, 6, 1], [4, 6, 1], [5, 6, 1], [6, 6, 1], [7, 6, 1], [-7, 7, 1], [-6, 7, 1], [-5, 7, 1], [-4, 7, 1], [-3, 7, 1], [-2, 7, 1], [-1, 7, 1], [0, 7, 1], [1, 7, 1], [2, 7, 1], [3, 7, 1], [4, 7, 1], [5, 7, 1], [6, 7, 1], [7, 7, 1], [-5, 8, 1], [-4, 8, 1], [-3, 8, 1], [-2, 8, 1], [-1, 8, 1], [0, 8, 1], [1, 8, 1], [2, 8, 1], [3, 8, 1], [4, 8, 1], [5, 8, 1], [-4, 9, 1], [-3, 9, 1], [-2, 9, 1], [-1, 9, 1], [0, 9, 1], [1, 9, 1], [2, 9, 1], [3, 9, 1], [4, 9, 1], [-4, -9, 2], [-3, -9, 2], [-2, -9, 2], [-1, -9, 2], [0, -9, 2], [1, -9, 2], [2, -9, 2], [3, -9, 2], [4, -9, 2], [-5, -8, 2], [-4, -8, 2], [-3, -8, 2], [-2, -8, 2], [-1, -8, 2], [0, -8, 2], [1, -8, 2], [2, -8, 2], [3, -8, 2], [4, -8, 2], [5, -8, 2], [-7, -7, 2], [-6, -7, 2], [-5, -7, 2], [-4, -7, 2], [-3, -7, 2], [-2, -7, 2], [-1, -7, 2], [0, -7, 2], [1, -7, 2], [2, -7, 2], [3, -7, 2], [4, -7, 2], [5, -7, 2], [6, -7, 2], [7, -7, 2], [-7, -6, 2], [-6, -6, 2], [-5, -6, 2], [-4, -6, 2], [-3, -6, 2], [-2, -6, 2], [-1, -6, 2], [0, -6, 2], [1, -6, 2], [2, -6, 2], [3, -6, 2], [4, -6, 2], [5, -6, 2], [6, -6, 2], [7, -6, 2], [-8, -5, 2], [-7, -5, 2], [-6, -5, 2], [-5, -5, 2], [-4, -5, 2], [-3, -5, 2], [-2, -5, 2], [-1, -5, 2], [0, -5, 2], [1, -5, 2], [2, -5, 2], [3, -5, 2], [4, -5, 2], [5, -5, 2], [6, -5, 2], [7, -5, 2], [8, -5, 2], [-9, -4, 2], [-8, -4, 2], [-7, -4, 2], [-6, -4, 2], [-5, -4, 2], [-4, -4, 2], [-3, -4, 2], [-2, -4, 2], [-1, -4, 2], [0, -4, 2], [1, -4, 2], [2, -4, 2], [3, -4, 2], [4, -4, 2], [5, -4, 2], [6, -4, 2], [7, -4, 2], [8, -4, 2], [9, -4, 2], [-9, -3, 2], [-8, -3, 2], [-7, -3, 2], [-6, -3, 2], [-5, -3, 2], [-4, -3, 2], [-3, -3, 2], [-2, -3, 2], [-1, -3, 2], [0, -3, 2], [1, -3, 2], [2, -3, 2], [3, -3, 2], [4, -3, 2], [5, -3, 2], [6, -3, 2], [7, -3, 2], [8, -3, 2], [9, -3, 2], [-9, -2, 2], [-8, -2, 2], [-7, -2, 2], [-6, -2, 2], [-5, -2, 2], [-4, -2, 2], [-3, -2, 2], [-2, -2, 2], [-1, -2, 2], [0, -2, 2], [1, -2, 2], [2, -2, 2], [3, -2, 2], [4, -2, 2], [5, -2, 2], [6, -2, 2], [7, -2, 2], [8, -2, 2], [9, -2, 2], [-9, -1, 2], [-8, -1, 2], [-7, -1, 2], [-6, -1, 2], [-5, -1, 2], [-4, -1, 2], [-3, -1, 2], [-2, -1, 2], [-1, -1, 2], [0, -1, 2], [1, -1, 2], [2, -1, 2], [3, -1, 2], [4, -1, 2], [5, -1, 2], [6, -1, 2], [7, -1, 2], [8, -1, 2], [9, -1, 2], [-9, 0, 2], [-8, 0, 2], [-7, 0, 2], [-6, 0, 2], [-5, 0, 2], [-4, 0, 2], [-3, 0, 2], [-2, 0, 2], [-1, 0, 2], [0, 0, 2], [1, 0, 2], [2, 0, 2], [3, 0, 2], [4, 0, 2], [5, 0, 2], [6, 0, 2], [7, 0, 2], [8, 0, 2], [9, 0, 2], [-9, 1, 2], [-8, 1, 2], [-7, 1, 2], [-6, 1, 2], [-5, 1, 2], [-4, 1, 2], [-3, 1, 2], [-2, 1, 2], [-1, 1, 2], [0, 1, 2], [1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 1, 2], [5, 1, 2], [6, 1, 2], [7, 1, 2], [8, 1, 2], [9, 1, 2], [-9, 2, 2], [-8, 2, 2], [-7, 2, 2], [-6, 2, 2], [-5, 2, 2], [-4, 2, 2], [-3, 2, 2], [-2, 2, 2], [-1, 2, 2], [0, 2, 2], [1, 2, 2], [2, 2, 2], [3, 2, 2], [4, 2, 2], [5, 2, 2], [6, 2, 2], [7, 2, 2], [8, 2, 2], [9, 2, 2], [-9, 3, 2], [-8, 3, 2], [-7, 3, 2], [-6, 3, 2], [-5, 3, 2], [-4, 3, 2], [-3, 3, 2], [-2, 3, 2], [-1, 3, 2], [0, 3, 2], [1, 3, 2], [2, 3, 2], [3, 3, 2], [4, 3, 2], [5, 3, 2], [6, 3, 2], [7, 3, 2], [8, 3, 2], [9, 3, 2], [-9, 4, 2], [-8, 4, 2], [-7, 4, 2], [-6, 4, 2], [-5, 4, 2], [-4, 4, 2], [-3, 4, 2], [-2, 4, 2], [-1, 4, 2], [0, 4, 2], [1, 4, 2], [2, 4, 2], [3, 4, 2], [4, 4, 2], [5, 4, 2], [6, 4, 2], [7, 4, 2], [8, 4, 2], [9, 4, 2], [-8, 5, 2], [-7, 5, 2], [-6, 5, 2], [-5, 5, 2], [-4, 5, 2], [-3, 5, 2], [-2, 5, 2], [-1, 5, 2], [0, 5, 2], [1, 5, 2], [2, 5, 2], [3, 5, 2], [4, 5, 2], [5, 5, 2], [6, 5, 2], [7, 5, 2], [8, 5, 2], [-7, 6, 2], [-6, 6, 2], [-5, 6, 2], [-4, 6, 2], [-3, 6, 2], [-2, 6, 2], [-1, 6, 2], [0, 6, 2], [1, 6, 2], [2, 6, 2], [3, 6, 2], [4, 6, 2], [5, 6, 2], [6, 6, 2], [7, 6, 2], [-7, 7, 2], [-6, 7, 2], [-5, 7, 2], [-4, 7, 2], [-3, 7, 2], [-2, 7, 2], [-1, 7, 2], [0, 7, 2], [1, 7, 2], [2, 7, 2], [3, 7, 2], [4, 7, 2], [5, 7, 2], [6, 7, 2], [7, 7, 2], [-5, 8, 2], [-4, 8, 2], [-3, 8, 2], [-2, 8, 2], [-1, 8, 2], [0, 8, 2], [1, 8, 2], [2, 8, 2], [3, 8, 2], [4, 8, 2], [5, 8, 2], [-4, 9, 2], [-3, 9, 2], [-2, 9, 2], [-1, 9, 2], [0, 9, 2], [1, 9, 2], [2, 9, 2], [3, 9, 2], [4, 9, 2]]; + + actual2 = px_cylinder(r1, h, true); + assertEqualPoints(expected2, actual2); +} + +test_px_cylinder(); \ No newline at end of file diff --git a/test/pixel/test_px_line.scad b/test/pixel/test_px_line.scad new file mode 100644 index 00000000..6dbfd515 --- /dev/null +++ b/test/pixel/test_px_line.scad @@ -0,0 +1,13 @@ + +module test_px_line() { + echo("==== test_px_line ===="); + + include ; + include ; + expected = [[-10, 0, -10], [-9, 1, -10], [-9, 2, -9], [-8, 3, -9], [-8, 4, -8], [-7, 5, -8], [-6, 6, -8], [-6, 7, -7], [-5, 8, -7], [-5, 9, -6], [-4, 10, -6], [-3, 11, -6], [-3, 12, -5], [-2, 13, -5], [-2, 14, -4], [-1, 15, -4], [0, 16, -4], [0, 17, -3], [1, 18, -3], [1, 19, -2], [2, 20, -2], [3, 21, -2], [3, 22, -1], [4, 23, -1], [4, 24, 0], [5, 25, 0], [6, 26, 0], [6, 27, 1], [7, 28, 1], [7, 29, 2], [8, 30, 2], [9, 31, 2], [9, 32, 3], [10, 33, 3], [10, 34, 4], [11, 35, 4], [12, 36, 4], [12, 37, 5], [13, 38, 5], [13, 39, 6], [14, 40, 6], [15, 41, 6], [15, 42, 7], [16, 43, 7], [16, 44, 8], [17, 45, 8], [18, 46, 8], [18, 47, 9], [19, 48, 9], [19, 49, 10]]; + actual = px_line([-10, 0, -10], [20, 50, 10]); + + assertEqualPoints(expected, actual); +} + +test_px_line(); \ No newline at end of file diff --git a/test/pixel/test_px_polygon.scad b/test/pixel/test_px_polygon.scad new file mode 100644 index 00000000..c67cce05 --- /dev/null +++ b/test/pixel/test_px_polygon.scad @@ -0,0 +1,21 @@ + +module test_px_polygon() { + echo("==== test_px_polygon ===="); + + include ; + include ; + include ; + include ; + include ; + + expected = [[5, 10], [4, 10], [3, 9], [2, 9], [1, 9], [0, 8], [-1, 8], [-2, 8], [-3, 7], [-4, 7], [-5, 7], [-6, 6], [-7, 6], [-8, 6], [-9, 5], [-10, 5], [-10, 4], [-9, 3], [-9, 2], [-9, 1], [-8, 0], [-8, -1], [-8, -2], [-7, -3], [-7, -4], [-7, -5], [-6, -6], [-6, -7], [-6, -8], [-5, -9], [-5, -10], [-5, -10], [-4, -9], [-4, -8], [-3, -7], [-3, -6], [-2, -5], [-2, -4], [-1, -3], [-1, -2], [0, -1], [0, 0], [1, 1], [1, 2], [2, 3], [2, 4], [3, 5], [3, 6], [4, 7], [4, 8], [5, 9]]; + actual = px_polygon([[5, 10], [-10, 5], [-5, -10]], false); + + + assertEqualPoints(expected, actual); + + expected2 = [[-10, 5], [-9, 2], [-9, 3], [-9, 4], [-9, 5], [-8, -1], [-8, 0], [-8, 1], [-8, 2], [-8, 3], [-8, 4], [-8, 5], [-7, -4], [-7, -3], [-7, -2], [-7, -1], [-7, 0], [-7, 1], [-7, 2], [-7, 3], [-7, 4], [-7, 5], [-7, 6], [-6, -7], [-6, -6], [-6, -5], [-6, -4], [-6, -3], [-6, -2], [-6, -1], [-6, 0], [-6, 1], [-6, 2], [-6, 3], [-6, 4], [-6, 5], [-6, 6], [-5, -10], [-5, -9], [-5, -8], [-5, -7], [-5, -6], [-5, -5], [-5, -4], [-5, -3], [-5, -2], [-5, -1], [-5, 0], [-5, 1], [-5, 2], [-5, 3], [-5, 4], [-5, 5], [-5, 6], [-4, -8], [-4, -7], [-4, -6], [-4, -5], [-4, -4], [-4, -3], [-4, -2], [-4, -1], [-4, 0], [-4, 1], [-4, 2], [-4, 3], [-4, 4], [-4, 5], [-4, 6], [-4, 7], [-3, -6], [-3, -5], [-3, -4], [-3, -3], [-3, -2], [-3, -1], [-3, 0], [-3, 1], [-3, 2], [-3, 3], [-3, 4], [-3, 5], [-3, 6], [-3, 7], [-2, -4], [-2, -3], [-2, -2], [-2, -1], [-2, 0], [-2, 1], [-2, 2], [-2, 3], [-2, 4], [-2, 5], [-2, 6], [-2, 7], [-1, -2], [-1, -1], [-1, 0], [-1, 1], [-1, 2], [-1, 3], [-1, 4], [-1, 5], [-1, 6], [-1, 7], [-1, 8], [0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [2, 4], [2, 5], [2, 6], [2, 7], [2, 8], [2, 9], [3, 6], [3, 7], [3, 8], [3, 9], [4, 8], [4, 9], [5, 10]]; + actual2 = px_polygon([[5, 10], [-10, 5], [-5, -10]], true); +} + +test_px_polygon(); \ No newline at end of file diff --git a/test/pixel/test_px_polyline.scad b/test/pixel/test_px_polyline.scad new file mode 100644 index 00000000..66584b36 --- /dev/null +++ b/test/pixel/test_px_polyline.scad @@ -0,0 +1,14 @@ + +module test_px_polyline() { + echo("==== test_px_polyline ===="); + + include ; + include ; + include ; + expected = [[5, 10, 5], [4, 9, 5], [3, 8, 5], [2, 7, 6], [1, 6, 6], [0, 5, 6], [-1, 4, 6], [-2, 3, 6], [-3, 2, 6], [-4, 1, 7], [-5, 0, 7], [-6, -1, 7], [-7, -2, 7], [-8, -3, 7], [-9, -4, 7], [-10, -5, 8], [-11, -6, 8], [-12, -7, 8], [-13, -8, 8], [-14, -9, 8], [-15, -10, 8], [-16, -11, 9], [-17, -12, 9], [-18, -13, 9], [-19, -14, 9], [-20, -15, 9], [-21, -16, 9], [-22, -17, 10], [-23, -18, 10], [-24, -19, 10], [-25, -20, 10], [-25, -19, 10], [-25, -18, 10], [-25, -17, 10], [-25, -16, 11], [-25, -15, 11], [-25, -14, 11], [-25, -13, 11], [-25, -12, 11], [-25, -11, 11], [-25, -10, 11], [-25, -9, 12], [-25, -8, 12], [-25, -7, 12], [-25, -6, 12], [-25, -5, 12], [-25, -4, 12], [-25, -3, 12], [-25, -2, 13], [-25, -1, 13], [-25, 0, 13], [-25, 1, 13], [-25, 2, 13], [-25, 3, 13], [-25, 4, 13], [-25, 5, 14], [-25, 6, 14], [-25, 7, 14], [-25, 8, 14], [-25, 9, 14], [-25, 10, 14], [-25, 11, 14], [-25, 12, 15], [-25, 13, 15], [-25, 14, 15], [-25, 15, 15], [-24, 15, 15], [-23, 15, 15], [-22, 16, 15], [-21, 16, 15], [-20, 16, 16], [-19, 16, 16], [-18, 16, 16], [-17, 17, 16], [-16, 17, 16], [-15, 17, 16], [-14, 17, 16], [-13, 17, 16], [-12, 18, 16], [-11, 18, 16], [-10, 18, 17], [-9, 18, 17], [-8, 18, 17], [-7, 19, 17], [-6, 19, 17], [-5, 19, 17], [-4, 19, 17], [-3, 19, 17], [-2, 20, 17], [-1, 20, 17], [0, 20, 18], [1, 20, 18], [2, 20, 18], [3, 21, 18], [4, 21, 18], [5, 21, 18], [6, 21, 18], [7, 21, 18], [8, 22, 18], [9, 22, 18], [10, 22, 19], [11, 22, 19], [12, 22, 19], [13, 23, 19], [14, 23, 19], [15, 23, 19], [16, 23, 19], [17, 23, 19], [18, 24, 19], [19, 24, 19], [20, 24, 20], [21, 24, 20], [22, 24, 20], [23, 25, 20], [24, 25, 20]]; + actual = px_polyline([[5, 10, 5], [-25, -20, 10], [-25, 15, 15], [25, 25, 20]]); + + assertEqualPoints(expected, actual); +} + +test_px_polyline(); \ No newline at end of file diff --git a/test/pixel/test_px_sphere.scad b/test/pixel/test_px_sphere.scad new file mode 100644 index 00000000..d0c4708f --- /dev/null +++ b/test/pixel/test_px_sphere.scad @@ -0,0 +1,13 @@ + +module test_px_sphere() { + echo("==== test_px_sphere ===="); + + include ; + include ; + expected = [[-2, -2, -4], [-1, -2, -4], [0, -2, -4], [1, -2, -4], [2, -2, -4], [-2, -1, -4], [-1, -1, -4], [0, -1, -4], [1, -1, -4], [2, -1, -4], [-2, 0, -4], [-1, 0, -4], [0, 0, -4], [1, 0, -4], [2, 0, -4], [-2, 1, -4], [-1, 1, -4], [0, 1, -4], [1, 1, -4], [2, 1, -4], [-2, 2, -4], [-1, 2, -4], [0, 2, -4], [1, 2, -4], [2, 2, -4], [-2, -3, -3], [-1, -3, -3], [0, -3, -3], [1, -3, -3], [2, -3, -3], [-3, -2, -3], [-2, -2, -3], [2, -2, -3], [3, -2, -3], [-3, -1, -3], [3, -1, -3], [-3, 0, -3], [3, 0, -3], [-3, 1, -3], [3, 1, -3], [-3, 2, -3], [-2, 2, -3], [2, 2, -3], [3, 2, -3], [-2, 3, -3], [-1, 3, -3], [0, 3, -3], [1, 3, -3], [2, 3, -3], [-2, -4, -2], [-1, -4, -2], [0, -4, -2], [1, -4, -2], [2, -4, -2], [-3, -3, -2], [-2, -3, -2], [2, -3, -2], [3, -3, -2], [-4, -2, -2], [-3, -2, -2], [3, -2, -2], [4, -2, -2], [-4, -1, -2], [4, -1, -2], [-4, 0, -2], [4, 0, -2], [-4, 1, -2], [4, 1, -2], [-4, 2, -2], [-3, 2, -2], [3, 2, -2], [4, 2, -2], [-3, 3, -2], [-2, 3, -2], [2, 3, -2], [3, 3, -2], [-2, 4, -2], [-1, 4, -2], [0, 4, -2], [1, 4, -2], [2, 4, -2], [-2, -4, -1], [-1, -4, -1], [0, -4, -1], [1, -4, -1], [2, -4, -1], [-3, -3, -1], [3, -3, -1], [-4, -2, -1], [4, -2, -1], [-4, -1, -1], [4, -1, -1], [-4, 0, -1], [4, 0, -1], [-4, 1, -1], [4, 1, -1], [-4, 2, -1], [4, 2, -1], [-3, 3, -1], [3, 3, -1], [-2, 4, -1], [-1, 4, -1], [0, 4, -1], [1, 4, -1], [2, 4, -1], [-2, -4, 0], [-1, -4, 0], [0, -4, 0], [1, -4, 0], [2, -4, 0], [-3, -3, 0], [3, -3, 0], [-4, -2, 0], [4, -2, 0], [-4, -1, 0], [4, -1, 0], [-4, 0, 0], [4, 0, 0], [-4, 1, 0], [4, 1, 0], [-4, 2, 0], [4, 2, 0], [-3, 3, 0], [3, 3, 0], [-2, 4, 0], [-1, 4, 0], [0, 4, 0], [1, 4, 0], [2, 4, 0], [-2, -4, 1], [-1, -4, 1], [0, -4, 1], [1, -4, 1], [2, -4, 1], [-3, -3, 1], [3, -3, 1], [-4, -2, 1], [4, -2, 1], [-4, -1, 1], [4, -1, 1], [-4, 0, 1], [4, 0, 1], [-4, 1, 1], [4, 1, 1], [-4, 2, 1], [4, 2, 1], [-3, 3, 1], [3, 3, 1], [-2, 4, 1], [-1, 4, 1], [0, 4, 1], [1, 4, 1], [2, 4, 1], [-2, -4, 2], [-1, -4, 2], [0, -4, 2], [1, -4, 2], [2, -4, 2], [-3, -3, 2], [-2, -3, 2], [2, -3, 2], [3, -3, 2], [-4, -2, 2], [-3, -2, 2], [3, -2, 2], [4, -2, 2], [-4, -1, 2], [4, -1, 2], [-4, 0, 2], [4, 0, 2], [-4, 1, 2], [4, 1, 2], [-4, 2, 2], [-3, 2, 2], [3, 2, 2], [4, 2, 2], [-3, 3, 2], [-2, 3, 2], [2, 3, 2], [3, 3, 2], [-2, 4, 2], [-1, 4, 2], [0, 4, 2], [1, 4, 2], [2, 4, 2], [-2, -3, 3], [-1, -3, 3], [0, -3, 3], [1, -3, 3], [2, -3, 3], [-3, -2, 3], [-2, -2, 3], [2, -2, 3], [3, -2, 3], [-3, -1, 3], [3, -1, 3], [-3, 0, 3], [3, 0, 3], [-3, 1, 3], [3, 1, 3], [-3, 2, 3], [-2, 2, 3], [2, 2, 3], [3, 2, 3], [-2, 3, 3], [-1, 3, 3], [0, 3, 3], [1, 3, 3], [2, 3, 3], [-2, -2, 4], [-1, -2, 4], [0, -2, 4], [1, -2, 4], [2, -2, 4], [-2, -1, 4], [-1, -1, 4], [0, -1, 4], [1, -1, 4], [2, -1, 4], [-2, 0, 4], [-1, 0, 4], [0, 0, 4], [1, 0, 4], [2, 0, 4], [-2, 1, 4], [-1, 1, 4], [0, 1, 4], [1, 1, 4], [2, 1, 4], [-2, 2, 4], [-1, 2, 4], [0, 2, 4], [1, 2, 4], [2, 2, 4]]; + actual = px_sphere(5, false); + + assertEqualPoints(expected, actual); +} + +test_px_sphere(); \ No newline at end of file diff --git a/test/test_all.scad b/test/test_all.scad index fe4e1e76..2d66a739 100644 --- a/test/test_all.scad +++ b/test/test_all.scad @@ -17,14 +17,16 @@ include ; // Transformation include ; +include ; // Function include ; -include ; -include ; -include ; include ; include ; +include ; +include ; +include ; +include ; // Path include ; @@ -35,17 +37,21 @@ include ; include ; include ; include ; +include ; // Extrude include ; include ; // 2D Shape +include ; include ; include ; +include ; include ; include ; include ; +include ; include ; include ; @@ -54,4 +60,23 @@ include ; include ; include ; include ; -include ; \ No newline at end of file +include ; +include ; + +// Utilities +include ; +include ; +include ; +include ; +include ; + +// Pixel +include ; +include ; +include ; +include ; +include ; +include ; + +// Matrix +include ; \ No newline at end of file diff --git a/test/test_along_with.scad b/test/test_along_with.scad new file mode 100644 index 00000000..7016a52f --- /dev/null +++ b/test/test_along_with.scad @@ -0,0 +1,55 @@ +include ; + +module test_along_with_default_angles() { + echo("==== test_along_with_default_angles ===="); + + include ; + include ; + + $fn = 24; + + points = circle_path(radius = 50); + + module test_along_with_angles(angles) { + expected_angles = [[0, 0, 97.5], [0, 0, 97.5], [0, 0, 112.5], [0, 0, 127.5], [0, 0, 142.5], [0, 0, 157.5], [0, 0, 172.5], [0, 0, -172.5], [0, 0, -157.5], [0, 0, -142.5], [0, 0, -127.5], [0, 0, -112.5], [0, 0, -97.5], [0, 0, -82.5], [0, 0, -67.5], [0, 0, -52.5], [0, 0, -37.5], [0, 0, -22.5], [0, 0, -7.5], [0, 0, 7.5], [0, 0, 22.5], [0, 0, 37.5], [0, 0, 52.5], [0, 0, 67.5]]; + assert($fn == len(angles)); + assertEqualPoints(expected_angles, angles); + } + + along_with(points, method = "EULER_ANGLE") + sphere(5); + +} + +module test_along_with_children() { + echo("==== test_along_with_children ===="); + + include ; + include ; + + $fn = 24; + + points = circle_path(radius = 50); + + module test_along_with_angles(angles) { + expected_angles = [[0, 0, 97.5], [0, 0, 97.5], [0, 0, 112.5], [0, 0, 127.5], [0, 0, 142.5], [0, 0, 157.5], [0, 0, 172.5], [0, 0, -172.5]]; + + assert(8 == len(angles)); + assertEqualPoints(expected_angles, angles); + } + + along_with(points, method = "EULER_ANGLE") { + linear_extrude(10, center = true) text("A", valign = "center", halign = "center"); + linear_extrude(5, center = true) circle(2); + sphere(1); + cube(5); + linear_extrude(10, center = true) text("A", valign = "center", halign = "center"); + linear_extrude(5, center = true) circle(2); + sphere(1); + cube(5); + } + +} + +test_along_with_default_angles(); +test_along_with_children(); \ No newline at end of file diff --git a/test/test_archimedean_spiral.scad b/test/test_archimedean_spiral.scad index bb37fd13..cee26083 100644 --- a/test/test_archimedean_spiral.scad +++ b/test/test_archimedean_spiral.scad @@ -12,18 +12,16 @@ module test_archimedean_spiral() { ); - expected_points = [[-5, 0], [-3.3333, -5.7735], [1.9153, -7.6542], [6.9287, -5.6121], [9.7591, -1.1017], [9.7906, 4.1666], [7.2895, 8.7588], [3.0136, 11.7181], [-2.0901, 12.5895], [-7.0994, 11.3524], [-11.25, 8.3116], [-14.0047, 3.9802], [-15.0734, -1.03], [-14.3991, -6.0996], [-12.1214, -10.6703], [-8.5301, -14.2915], [-4.013, -16.6466], [0.9931, -17.5619], [6.0464, -17.0006], [10.7367, -15.0488], [14.7127, -11.8925], [17.7005, -7.7927], [19.5144, -3.0584], [20.0591, 1.9792], [19.327, 6.9904], [17.3894, 11.6667], [14.385, 15.7377], [10.5054, 18.9824], [5.9805, 21.2371], [1.0622, 22.3994], [-3.9897, 22.4281], [-8.9216, 21.3404], [-13.4974, 19.2066], [-17.5086, 16.1426], [-20.7812, 12.3017], [-23.1817, 7.8645], [-24.6193, 3.0301], [-25.0472, -1.9943], [-24.4614, -7.0016], [-22.8983, -11.7935], [-20.4309, -16.1876], [-17.1632, -20.0228], [-13.2255, -23.1648], [-8.7672, -25.5085], [-3.9513, -26.9808], [1.0527, -27.5407], [6.0742, -27.1795], [10.9476, -25.9189], [15.5171, -23.8091], [19.6415, -20.9256], [23.1974, -17.3655], [26.0825, -13.2437], [28.2172, -8.6885], [29.5463, -3.8373], [30.0392, 1.168], [29.6895, 6.1848], [28.5147, 11.0741], [26.5539, 15.704], [23.8664, 19.9529], [20.5291, 23.7124], [16.6337, 26.8894], [12.2839, 29.4078], [7.5924, 31.21], [2.6774, 32.2573], [-2.3402, 32.5302], [-7.3397, 32.0283], [-12.2036, 30.7692], [-16.8203, 28.7878], [-21.0862, 26.1347], [-24.9077, 22.8745], [-28.2033, 19.084], [-30.9046, 14.8497], [-32.9575, 10.2661], [-34.3228, 5.4333], [-34.9764, 0.4543], [-34.9096, -4.5667], [-34.1286, -9.5267], [-32.6536, -14.326], [-30.5187, -18.8701], [-27.77, -23.0711], [-24.4648, -26.8496], [-20.67, -30.1356], [-16.4604, -32.8699], [-11.9176, -35.0046], [-7.1276, -36.5038], [-2.1794, -37.3437], [2.8365, -37.513], [7.83, -37.0127], [12.713, -35.8552], [17.4007, -34.0647], [21.8134, -31.6755], [25.8769, -28.7318], [29.5245, -25.2864], [32.6974, -21.3997], [35.3456, -17.1384], [37.4285, -12.5742], [38.9152, -7.7828], [39.7851, -2.8422], [40.0275, 2.1685], [39.6416, 7.1699]]; - - expected_angles = [180, 240, 285, 321, 354, 384, 411, 436, 460, 483, 504, 525, 544, 563, 582, 600, 617, 634, 650, 666, 682, 697, 712, 726, 740, 754, 768, 782, 795, 808, 821, 833, 846, 858, 870, 882, 893, 905, 916, 928, 939, 950, 961, 972, 982, 993, 1003, 1013, 1024, 1034, 1044, 1054, 1063, 1073, 1083, 1092, 1102, 1111, 1120, 1130, 1139, 1148, 1157, 1166, 1175, 1183, 1192, 1201, 1209, 1218, 1226, 1235, 1243, 1252, 1260, 1268, 1276, 1284, 1292, 1300, 1308, 1316, 1324, 1332, 1339, 1347, 1355, 1362, 1370, 1378, 1385, 1393, 1400, 1407, 1415, 1422, 1429, 1436, 1444, 1451]; + expected_points = [[-5, -5.6166e-6], [-3.33332, -5.77351], [1.91533, -7.65424], [6.92877, -5.61211], [9.7591, -1.1017], [9.79062, 4.16668], [7.28945, 8.75883], [3.01356, 11.7181], [-2.09019, 12.5895], [-7.09946, 11.3523], [-11.25, 8.31153], [-14.0047, 3.9801], [-15.0734, -1.03017], [-14.399, -6.09976], [-12.1214, -10.6704], [-8.52998, -14.2915], [-4.01284, -16.6467], [0.993248, -17.5618], [6.04659, -17.0006], [10.7369, -15.0487], [14.7128, -11.8923], [17.7006, -7.79251], [19.5144, -3.05819], [20.0591, 1.97944], [19.327, 6.99059], [17.3893, 11.6669], [14.3848, 15.7379], [10.5052, 18.9825], [5.98025, 21.2372], [1.06198, 22.3994], [-3.98996, 22.4281], [-8.92185, 21.3403], [-13.4977, 19.2064], [-17.5088, 16.1424], [-20.7814, 12.3014], [-23.1818, 7.86423], [-24.6194, 3.02975], [-25.0472, -1.9946], [-24.4613, -7.0019], [-22.8982, -11.7938], [-20.4306, -16.1878], [-17.163, -20.0231], [-13.2252, -23.165], [-8.76686, -25.5087], [-3.95086, -26.9808], [1.05313, -27.5407], [6.07462, -27.1794], [10.948, -25.9187], [15.5175, -23.8089], [19.6418, -20.9253], [23.1977, -17.3652], [26.0827, -13.2433], [28.2174, -8.68809], [29.5464, -3.8368], [30.0391, 1.16851], [29.6894, 6.18531], [28.5145, 11.0746], [26.5536, 15.7045], [23.866, 19.9533], [20.5287, 23.7128], [16.6332, 26.8897], [12.2835, 29.408], [7.59187, 31.2101], [2.6768, 32.2573], [-2.34079, 32.5302], [-7.34027, 32.0282], [-12.2042, 30.769], [-16.8208, 28.7875], [-21.0866, 26.1344], [-24.9081, 22.8741], [-28.2036, 19.0834], [-30.9049, 14.8491], [-32.9577, 10.2655], [-34.3229, 5.43264], [-34.9764, 0.453654], [-34.9095, -4.56731], [-34.1284, -9.52732], [-32.6534, -14.3266], [-30.5184, -18.8707], [-27.7696, -23.0716], [-24.4643, -26.8501], [-20.6694, -30.136], [-16.4598, -32.8703], [-11.9169, -35.0049], [-7.12684, -36.5039], [-2.17866, -37.3437], [2.83721, -37.513], [7.83071, -37.0125], [12.7137, -35.855], [17.4014, -34.0643], [21.814, -31.675], [25.8775, -28.7313], [29.525, -25.2858], [32.6978, -21.399], [35.3459, -17.1377], [37.4287, -12.5734], [38.9154, -7.78198], [39.7852, -2.84131], [40.0274, 2.16931], [39.6415, 7.17075]]; + expected_angles = [180, 240, 284.049, 320.993, 353.559, 383.054, 410.231, 435.578, 459.427, 482.021, 503.543, 524.135, 543.91, 562.959, 581.357, 599.169, 616.447, 633.237, 649.579, 665.507, 681.051, 696.239, 711.093, 725.636, 739.885, 753.859, 767.572, 781.039, 794.273, 807.286, 820.087, 832.689, 845.098, 857.325, 869.377, 881.261, 892.984, 904.553, 915.973, 927.251, 938.391, 949.398, 960.277, 971.033, 981.669, 992.19, 1002.6, 1012.9, 1023.09, 1033.19, 1043.18, 1053.08, 1062.89, 1072.6, 1082.23, 1091.77, 1101.23, 1110.6, 1119.9, 1129.12, 1138.26, 1147.33, 1156.33, 1165.26, 1174.12, 1182.91, 1191.64, 1200.3, 1208.9, 1217.44, 1225.92, 1234.34, 1242.7, 1251.01, 1259.26, 1267.45, 1275.6, 1283.69, 1291.73, 1299.72, 1307.66, 1315.55, 1323.4, 1331.2, 1338.95, 1346.66, 1354.33, 1361.95, 1369.52, 1377.06, 1384.55, 1392.01, 1399.42, 1406.8, 1414.13, 1421.43, 1428.69, 1435.92, 1443.1, 1450.25]; actual_points = [for(pa = points_angles) pa[0]]; - // ceil for annoying float errors when echoing...XD - actual_angles = [for(pa = points_angles) ceil(pa[1])]; - + actual_angles = [for(pa = points_angles) pa[1]]; + assertEqualPoints(expected_points, actual_points); for(i = [0:0]) { - assertEqual(expected_angles[i], actual_angles[i]); + assertEqualNum(expected_angles[i], actual_angles[i]); } } diff --git a/test/test_archimedean_spiral_extrude.scad b/test/test_archimedean_spiral_extrude.scad index 96de41f9..af44fbbd 100644 --- a/test/test_archimedean_spiral_extrude.scad +++ b/test/test_archimedean_spiral_extrude.scad @@ -11,111 +11,10 @@ module test_archimedean_spiral_extrude_slide() { include ; module test_archimedean_spiral_extrude(sections) { - expected = [ - [[-12.5, 0, 0], [-12.5, 0, 4], [-11.5, 0, 4], [-11.5, 0, 2], [-3.5, 0, 2], [-3.5, 0, 4], [-2.5, 0, 4], [-2.5, 0, 0]] - , [[-10.984, -8.877, 0], [-10.984, -8.877, 4.162], [-10.206, -8.248, 4.162], [-10.206, -8.248, 2.081], [-3.984, -3.22, 2.081], [-3.984, -3.22, 4.162], [-3.206, -2.591, 4.162], [-3.206, -2.591, 0]] - , [[-5.092, -14.585, 0], [-5.092, -14.585, 4.323], [-4.763, -13.64, 4.323], [-4.763, -13.64, 2.162], [-2.126, -6.088, 2.162], [-2.126, -6.088, 4.323], [-1.796, -5.143, 4.323], [-1.796, -5.143, 0]] - , [[2.437, -16.422, 0], [2.437, -16.422, 4.485], [2.29, -15.433, 4.485], [2.29, -15.433, 2.242], [1.116, -7.519, 2.242], [1.116, -7.519, 4.485], [0.969, -6.53, 4.485], [0.969, -6.53, 0]] - , [[9.691, -14.738, 0], [9.691, -14.738, 4.646], [9.142, -13.902, 4.646], [9.142, -13.902, 2.323], [4.746, -7.218, 2.323], [4.746, -7.218, 4.646], [4.197, -6.382, 4.646], [4.197, -6.382, 0]] - , [[15.438, -10.356, 0], [15.438, -10.356, 4.808], [14.607, -9.799, 4.808], [14.607, -9.799, 2.404], [7.964, -5.342, 2.404], [7.964, -5.342, 4.808], [7.133, -4.785, 4.808], [7.133, -4.785, 0]] - , [[19, -4.265, 0], [19, -4.265, 4.97], [18.024, -4.046, 4.97], [18.024, -4.046, 2.485], [10.219, -2.294, 2.485], [10.219, -2.294, 4.97], [9.243, -2.075, 4.97], [9.243, -2.075, 0]] - , [[20.14, 2.559, 0], [20.14, 2.559, 5.131], [19.148, 2.433, 5.131], [19.148, 2.433, 2.566], [11.212, 1.425, 2.566], [11.212, 1.425, 5.131], [10.22, 1.299, 5.131], [10.22, 1.299, 0]] - , [[18.944, 9.259, 0], [18.944, 9.259, 5.293], [18.045, 8.82, 5.293], [18.045, 8.82, 2.646], [10.858, 5.307, 2.646], [10.858, 5.307, 5.293], [9.959, 4.868, 5.293], [9.959, 4.868, 0]] - , [[15.722, 15.146, 0], [15.722, 15.146, 5.455], [15.002, 14.452, 5.455], [15.002, 14.452, 2.727], [9.24, 8.902, 2.727], [9.24, 8.902, 5.455], [8.52, 8.208, 5.455], [8.52, 8.208, 0]] - , [[10.924, 19.719, 0], [10.924, 19.719, 5.616], [10.439, 18.844, 5.616], [10.439, 18.844, 2.808], [6.562, 11.846, 2.808], [6.562, 11.846, 5.616], [6.078, 10.971, 5.616], [6.078, 10.971, 0]] - , [[5.066, 22.666, 0], [5.066, 22.666, 5.778], [4.848, 21.69, 5.778], [4.848, 21.69, 2.889], [3.103, 13.883, 2.889], [3.103, 13.883, 5.778], [2.885, 12.907, 5.778], [2.885, 12.907, 0]] - , [[-1.321, 23.846, 0], [-1.321, 23.846, 5.939], [-1.265, 22.847, 5.939], [-1.265, 22.847, 2.97], [-0.823, 14.859, 2.97], [-0.823, 14.859, 5.939], [-0.768, 13.861, 5.939], [-0.768, 13.861, 0]] - , [[-7.733, 23.265, 0], [-7.733, 23.265, 6.101], [-7.418, 22.316, 6.101], [-7.418, 22.316, 3.051], [-4.894, 14.724, 3.051], [-4.894, 14.724, 6.101], [-4.579, 13.775, 6.101], [-4.579, 13.775, 0]] - , [[-13.726, 21.05, 0], [-13.726, 21.05, 6.263], [-13.179, 20.212, 6.263], [-13.179, 20.212, 3.131], [-8.81, 13.511, 3.131], [-8.81, 13.511, 6.263], [-8.264, 12.673, 6.263], [-8.264, 12.673, 0]] - , [[-18.928, 17.42, 0], [-18.928, 17.42, 6.424], [-18.192, 16.743, 6.424], [-18.192, 16.743, 3.212], [-12.306, 11.325, 3.212], [-12.306, 11.325, 6.424], [-11.57, 10.648, 6.424], [-11.57, 10.648, 0]] - , [[-23.055, 12.658, 0], [-23.055, 12.658, 6.586], [-22.179, 12.176, 6.586], [-22.179, 12.176, 3.293], [-15.166, 8.326, 3.293], [-15.166, 8.326, 6.586], [-14.289, 7.845, 6.586], [-14.289, 7.845, 0]] - , [[-25.912, 7.083, 0], [-25.912, 7.083, 6.747], [-24.948, 6.819, 6.747], [-24.948, 6.819, 3.374], [-17.231, 4.71, 3.374], [-17.231, 4.71, 6.747], [-16.266, 4.446, 6.747], [-16.266, 4.446, 0]] - , [[-27.391, 1.031, 0], [-27.391, 1.031, 6.909], [-26.392, 0.993, 6.909], [-26.392, 0.993, 3.455], [-18.397, 0.692, 3.455], [-18.397, 0.692, 6.909], [-17.398, 0.655, 6.909], [-17.398, 0.655, 0]] - , [[-27.462, -5.166, 0], [-27.462, -5.166, 7.071], [-26.479, -4.982, 7.071], [-26.479, -4.982, 3.535], [-18.617, -3.502, 3.535], [-18.617, -3.502, 7.071], [-17.635, -3.318, 7.071], [-17.635, -3.318, 0]] - , [[-26.17, -11.198, 0], [-26.17, -11.198, 7.232], [-25.251, -10.804, 7.232], [-25.251, -10.804, 3.616], [-17.896, -7.657, 3.616], [-17.896, -7.657, 7.232], [-16.976, -7.264, 7.232], [-16.976, -7.264, 0]] - , [[-23.619, -16.783, 0], [-23.619, -16.783, 7.394], [-22.804, -16.204, 7.394], [-22.804, -16.204, 3.697], [-16.283, -11.57, 3.697], [-16.283, -11.57, 7.394], [-15.468, -10.991, 7.394], [-15.468, -10.991, 0]] - , [[-19.962, -21.684, 0], [-19.962, -21.684, 7.556], [-19.285, -20.949, 7.556], [-19.285, -20.949, 3.778], [-13.867, -15.063, 3.778], [-13.867, -15.063, 7.556], [-13.189, -14.327, 7.556], [-13.189, -14.327, 0]] - , [[-15.39, -25.708, 0], [-15.39, -25.708, 7.717], [-14.876, -24.85, 7.717], [-14.876, -24.85, 3.859], [-10.767, -17.986, 3.859], [-10.767, -17.986, 7.717], [-10.253, -17.128, 7.717], [-10.253, -17.128, 0]] - , [[-10.116, -28.711, 0], [-10.116, -28.711, 7.879], [-9.784, -27.768, 7.879], [-9.784, -27.768, 3.939], [-7.126, -20.223, 3.939], [-7.126, -20.223, 7.879], [-6.793, -19.279, 7.879], [-6.793, -19.279, 0]] - , [[-4.372, -30.6, 0], [-4.372, -30.6, 8.04], [-4.231, -29.61, 8.04], [-4.231, -29.61, 4.02], [-3.099, -21.691, 4.02], [-3.099, -21.691, 8.04], [-2.958, -20.701, 8.04], [-2.958, -20.701, 0]] - , [[1.61, -31.331, 0], [1.61, -31.331, 8.202], [1.559, -30.333, 8.202], [1.559, -30.333, 4.101], [1.148, -22.343, 4.101], [1.148, -22.343, 8.202], [1.097, -21.344, 8.202], [1.097, -21.344, 0]] - , [[7.603, -30.904, 0], [7.603, -30.904, 8.364], [7.364, -29.933, 8.364], [7.364, -29.933, 4.182], [5.453, -22.165, 4.182], [5.453, -22.165, 8.364], [5.214, -21.194, 8.364], [5.214, -21.194, 0]] - , [[13.391, -29.362, 0], [13.391, -29.362, 8.525], [12.976, -28.452, 8.525], [12.976, -28.452, 4.263], [9.656, -21.174, 4.263], [9.656, -21.174, 8.525], [9.241, -20.264, 8.525], [9.241, -20.264, 0]] - , [[18.778, -26.783, 0], [18.778, -26.783, 8.687], [18.204, -25.964, 8.687], [18.204, -25.964, 4.343], [13.611, -19.414, 4.343], [13.611, -19.414, 8.687], [13.037, -18.595, 8.687], [13.037, -18.595, 0]] - , [[23.592, -23.275, 0], [23.592, -23.275, 8.848], [22.881, -22.573, 8.848], [22.881, -22.573, 4.424], [17.186, -16.954, 4.424], [17.186, -16.954, 8.848], [16.474, -16.252, 8.848], [16.474, -16.252, 0]] - , [[27.689, -18.973, 0], [27.689, -18.973, 9.01], [26.865, -18.407, 9.01], [26.865, -18.407, 4.505], [20.265, -13.886, 4.505], [20.265, -13.886, 9.01], [19.44, -13.32, 9.01], [19.44, -13.32, 0]] - , [[30.955, -14.027, 0], [30.955, -14.027, 9.172], [30.044, -13.614, 9.172], [30.044, -13.614, 4.586], [22.757, -10.312, 4.586], [22.757, -10.312, 9.172], [21.846, -9.899, 9.172], [21.846, -9.899, 0]] - , [[33.304, -8.601, 0], [33.304, -8.601, 9.333], [32.336, -8.351, 9.333], [32.336, -8.351, 4.667], [24.59, -6.351, 4.667], [24.59, -6.351, 9.333], [23.622, -6.101, 9.333], [23.622, -6.101, 0]] - , [[34.685, -2.866, 0], [34.685, -2.866, 9.495], [33.688, -2.784, 9.495], [33.688, -2.784, 4.747], [25.716, -2.125, 4.747], [25.716, -2.125, 9.495], [24.719, -2.043, 9.495], [24.719, -2.043, 0]] - , [[35.076, 3.007, 0], [35.076, 3.007, 9.657], [34.079, 2.921, 9.657], [34.079, 2.921, 4.828], [26.108, 2.238, 4.828], [26.108, 2.238, 9.657], [25.112, 2.153, 9.657], [25.112, 2.153, 0]] - , [[34.482, 8.85, 0], [34.482, 8.85, 9.818], [33.514, 8.602, 9.818], [33.514, 8.602, 4.909], [25.765, 6.613, 4.909], [25.765, 6.613, 9.818], [24.796, 6.364, 9.818], [24.796, 6.364, 0]] - , [[32.938, 14.505, 0], [32.938, 14.505, 9.98], [32.023, 14.102, 9.98], [32.023, 14.102, 4.99], [24.701, 10.878, 4.99], [24.701, 10.878, 9.98], [23.786, 10.475, 9.98], [23.786, 10.475, 0]] - , [[30.5, 19.823, 0], [30.5, 19.823, 10.141], [29.661, 19.279, 10.141], [29.661, 19.279, 5.071], [22.954, 14.919, 5.071], [22.954, 14.919, 10.141], [22.115, 14.374, 10.141], [22.115, 14.374, 0]] - , [[27.246, 24.672, 0], [27.246, 24.672, 10.303], [26.505, 24.001, 10.303], [26.505, 24.001, 5.152], [20.575, 18.631, 5.152], [20.575, 18.631, 10.303], [19.833, 17.96, 10.303], [19.833, 17.96, 0]] - , [[23.271, 28.936, 0], [23.271, 28.936, 10.465], [22.645, 28.157, 10.465], [22.645, 28.157, 5.232], [17.631, 21.923, 5.232], [17.631, 21.923, 10.465], [17.004, 21.144, 10.465], [17.004, 21.144, 0]] - , [[18.686, 32.518, 0], [18.686, 32.518, 10.626], [18.188, 31.651, 10.626], [18.188, 31.651, 5.313], [14.202, 24.715, 5.313], [14.202, 24.715, 10.626], [13.704, 23.848, 10.626], [13.704, 23.848, 0]] - , [[13.61, 35.343, 0], [13.61, 35.343, 10.788], [13.25, 34.409, 10.788], [13.25, 34.409, 5.394], [10.376, 26.944, 5.394], [10.376, 26.944, 10.788], [10.016, 26.011, 10.788], [10.016, 26.011, 0]] - , [[8.17, 37.353, 0], [8.17, 37.353, 10.949], [7.956, 36.376, 10.949], [7.956, 36.376, 5.475], [6.247, 28.561, 5.475], [6.247, 28.561, 10.949], [6.033, 27.584, 10.949], [6.033, 27.584, 0]] - , [[2.497, 38.515, 0], [2.497, 38.515, 11.111], [2.433, 37.517, 11.111], [2.433, 37.517, 5.556], [1.915, 29.533, 5.556], [1.915, 29.533, 11.111], [1.85, 28.536, 11.111], [1.85, 28.536, 0]] - , [[-3.277, 38.813, 0], [-3.277, 38.813, 11.273], [-3.192, 37.817, 11.273], [-3.192, 37.817, 5.636], [-2.519, 29.845, 5.636], [-2.519, 29.845, 11.273], [-2.435, 28.848, 11.273], [-2.435, 28.848, 0]] - , [[-9.022, 38.253, 0], [-9.022, 38.253, 11.434], [-8.793, 37.28, 11.434], [-8.793, 37.28, 5.717], [-6.956, 29.494, 5.717], [-6.956, 29.494, 11.434], [-6.727, 28.52, 11.434], [-6.727, 28.52, 0]] - , [[-14.616, 36.859, 0], [-14.616, 36.859, 11.596], [-14.247, 35.93, 11.596], [-14.247, 35.93, 5.798], [-11.298, 28.493, 5.798], [-11.298, 28.493, 11.596], [-10.93, 27.563, 11.596], [-10.93, 27.563, 0]] - , [[-19.94, 34.671, 0], [-19.94, 34.671, 11.758], [-19.442, 33.804, 11.758], [-19.442, 33.804, 5.879], [-15.453, 26.869, 5.879], [-15.453, 26.869, 11.758], [-14.955, 26.002, 11.758], [-14.955, 26.002, 0]] - , [[-24.888, 31.744, 0], [-24.888, 31.744, 11.919], [-24.271, 30.957, 11.919], [-24.271, 30.957, 5.96], [-19.335, 24.661, 5.96], [-19.335, 24.661, 11.919], [-18.718, 23.874, 11.919], [-18.718, 23.874, 0]] - , [[-29.363, 28.148, 0], [-29.363, 28.148, 12.081], [-28.642, 27.456, 12.081], [-28.642, 27.456, 6.04], [-22.866, 21.919, 6.04], [-22.866, 21.919, 12.081], [-22.145, 21.227, 12.081], [-22.145, 21.227, 0]] - , [[-33.282, 23.961, 0], [-33.282, 23.961, 12.242], [-32.471, 23.377, 12.242], [-32.471, 23.377, 6.121], [-25.978, 18.703, 6.121], [-25.978, 18.703, 12.242], [-25.167, 18.119, 12.242], [-25.167, 18.119, 0]] - , [[-36.574, 19.275, 0], [-36.574, 19.275, 12.404], [-35.689, 18.809, 12.404], [-35.689, 18.809, 6.202], [-28.612, 15.079, 6.202], [-28.612, 15.079, 12.404], [-27.727, 14.613, 12.404], [-27.727, 14.613, 0]] - , [[-39.182, 14.185, 0], [-39.182, 14.185, 12.566], [-38.242, 13.844, 12.566], [-38.242, 13.844, 6.283], [-30.72, 11.121, 6.283], [-30.72, 11.121, 12.566], [-29.779, 10.781, 12.566], [-29.779, 10.781, 0]] - , [[-41.066, 8.791, 0], [-41.066, 8.791, 12.727], [-40.088, 8.582, 12.727], [-40.088, 8.582, 6.364], [-32.266, 6.907, 6.364], [-32.266, 6.907, 12.727], [-31.288, 6.698, 12.727], [-31.288, 6.698, 0]] - , [[-42.198, 3.198, 0], [-42.198, 3.198, 12.889], [-41.201, 3.122, 12.889], [-41.201, 3.122, 6.444], [-33.224, 2.518, 6.444], [-33.224, 2.518, 12.889], [-32.227, 2.442, 12.889], [-32.227, 2.442, 0]] - , [[-42.567, -2.491, 0], [-42.567, -2.491, 13.051], [-41.568, -2.432, 13.051], [-41.568, -2.432, 6.525], [-33.582, -1.965, 6.525], [-33.582, -1.965, 13.051], [-32.584, -1.906, 13.051], [-32.584, -1.906, 0]] - , [[-42.173, -8.171, 0], [-42.173, -8.171, 13.212], [-41.191, -7.981, 13.212], [-41.191, -7.981, 6.606], [-33.337, -6.459, 6.606], [-33.337, -6.459, 13.212], [-32.355, -6.269, 13.212], [-32.355, -6.269, 0]] - , [[-41.031, -13.743, 0], [-41.031, -13.743, 13.374], [-40.083, -13.426, 13.374], [-40.083, -13.426, 6.687], [-32.497, -10.885, 6.687], [-32.497, -10.885, 13.374], [-31.549, -10.567, 13.374], [-31.549, -10.567, 0]] - , [[-39.17, -19.112, 0], [-39.17, -19.112, 13.535], [-38.271, -18.673, 13.535], [-38.271, -18.673, 6.768], [-31.081, -15.165, 6.768], [-31.081, -15.165, 13.535], [-30.183, -14.727, 13.535], [-30.183, -14.727, 0]] - , [[-36.628, -24.187, 0], [-36.628, -24.187, 13.697], [-35.793, -23.636, 13.697], [-35.793, -23.636, 6.848], [-29.118, -19.228, 6.848], [-29.118, -19.228, 13.697], [-28.283, -18.677, 13.697], [-28.283, -18.677, 0]] - , [[-33.455, -28.887, 0], [-33.455, -28.887, 13.859], [-32.698, -28.234, 13.859], [-32.698, -28.234, 6.929], [-26.643, -23.005, 6.929], [-26.643, -23.005, 13.859], [-25.886, -22.352, 13.859], [-25.886, -22.352, 0]] - , [[-29.709, -33.138, 0], [-29.709, -33.138, 14.02], [-29.041, -32.393, 14.02], [-29.041, -32.393, 7.01], [-23.701, -26.436, 7.01], [-23.701, -26.436, 14.02], [-23.033, -25.692, 14.02], [-23.033, -25.692, 0]] - , [[-25.457, -36.874, 0], [-25.457, -36.874, 14.182], [-24.889, -36.051, 14.182], [-24.889, -36.051, 7.091], [-20.344, -29.467, 7.091], [-20.344, -29.467, 14.182], [-19.776, -28.644, 14.182], [-19.776, -28.644, 0]] - , [[-20.772, -40.04, 0], [-20.772, -40.04, 14.343], [-20.311, -39.153, 14.343], [-20.311, -39.153, 7.172], [-16.627, -32.051, 7.172], [-16.627, -32.051, 14.343], [-16.167, -31.164, 14.343], [-16.167, -31.164, 0]] - , [[-15.732, -42.593, 0], [-15.732, -42.593, 14.505], [-15.385, -41.655, 14.505], [-15.385, -41.655, 7.253], [-12.614, -34.15, 7.253], [-12.614, -34.15, 14.505], [-12.267, -33.212, 14.505], [-12.267, -33.212, 0]] - , [[-10.418, -44.498, 0], [-10.418, -44.498, 14.667], [-10.19, -43.524, 14.667], [-10.19, -43.524, 7.333], [-8.366, -35.735, 7.333], [-8.366, -35.735, 14.667], [-8.139, -34.761, 14.667], [-8.139, -34.761, 0]] - , [[-4.915, -45.731, 0], [-4.915, -45.731, 14.828], [-4.808, -44.737, 14.828], [-4.808, -44.737, 7.414], [-3.953, -36.783, 7.414], [-3.953, -36.783, 14.828], [-3.846, -35.788, 14.828], [-3.846, -35.788, 0]] - , [[0.693, -46.281, 0], [0.693, -46.281, 14.99], [0.678, -45.281, 14.99], [0.678, -45.281, 7.495], [0.559, -37.282, 7.495], [0.559, -37.282, 14.99], [0.544, -36.282, 14.99], [0.544, -36.282, 0]] - , [[6.322, -46.144, 0], [6.322, -46.144, 15.152], [6.187, -45.153, 15.152], [6.187, -45.153, 7.576], [5.101, -37.227, 7.576], [5.101, -37.227, 15.152], [4.965, -36.237, 15.152], [4.965, -36.237, 0]] - , [[11.889, -45.329, 0], [11.889, -45.329, 15.313], [11.635, -44.362, 15.313], [11.635, -44.362, 7.657], [9.606, -36.624, 7.657], [9.606, -36.624, 15.313], [9.352, -35.656, 15.313], [9.352, -35.656, 0]] - , [[17.313, -43.854, 0], [17.313, -43.854, 15.475], [16.946, -42.924, 15.475], [16.946, -42.924, 7.737], [14.008, -35.483, 7.737], [14.008, -35.483, 15.475], [13.641, -34.552, 15.475], [13.641, -34.552, 0]] - , [[22.519, -41.744, 0], [22.519, -41.744, 15.636], [22.044, -40.864, 15.636], [22.044, -40.864, 7.818], [18.246, -33.823, 7.818], [18.246, -33.823, 15.636], [17.771, -32.943, 15.636], [17.771, -32.943, 0]] - , [[27.435, -39.036, 0], [27.435, -39.036, 15.798], [26.86, -38.218, 15.798], [26.86, -38.218, 7.899], [22.26, -31.673, 7.899], [22.26, -31.673, 15.798], [21.685, -30.854, 15.798], [21.685, -30.854, 0]] - , [[31.995, -35.771, 0], [31.995, -35.771, 15.96], [31.329, -35.025, 15.96], [31.329, -35.025, 7.98], [25.995, -29.063, 7.98], [25.995, -29.063, 15.96], [25.329, -28.317, 15.96], [25.329, -28.317, 0]] - , [[36.14, -31.998, 0], [36.14, -31.998, 16.121], [35.391, -31.335, 16.121], [35.391, -31.335, 8.061], [29.402, -26.032, 8.061], [29.402, -26.032, 16.121], [28.653, -25.369, 16.121], [28.653, -25.369, 0]] - , [[39.817, -27.773, 0], [39.817, -27.773, 16.283], [38.996, -27.201, 16.283], [38.996, -27.201, 8.141], [32.435, -22.624, 8.141], [32.435, -22.624, 16.283], [31.615, -22.052, 16.283], [31.615, -22.052, 0]] - , [[42.979, -23.156, 0], [42.979, -23.156, 16.444], [42.099, -22.682, 16.444], [42.099, -22.682, 8.222], [35.056, -18.887, 8.222], [35.056, -18.887, 16.444], [34.176, -18.413, 16.444], [34.176, -18.413, 0]] - , [[45.59, -18.21, 0], [45.59, -18.21, 16.606], [44.662, -17.839, 16.606], [44.662, -17.839, 8.303], [37.232, -14.872, 8.303], [37.232, -14.872, 16.606], [36.304, -14.501, 16.606], [36.304, -14.501, 0]] - , [[47.62, -13.003, 0], [47.62, -13.003, 16.768], [46.656, -12.74, 16.768], [46.656, -12.74, 8.384], [38.938, -10.632, 8.384], [38.938, -10.632, 16.768], [37.973, -10.369, 16.768], [37.973, -10.369, 0]] - , [[49.047, -7.603, 0], [49.047, -7.603, 16.929], [48.059, -7.45, 16.929], [48.059, -7.45, 8.465], [40.153, -6.225, 8.465], [40.153, -6.225, 16.929], [39.165, -6.071, 16.929], [39.165, -6.071, 0]] - , [[49.857, -2.081, 0], [49.857, -2.081, 17.091], [48.858, -2.039, 17.091], [48.858, -2.039, 8.545], [40.865, -1.706, 8.545], [40.865, -1.706, 17.091], [39.866, -1.664, 17.091], [39.866, -1.664, 0]] - , [[50.045, 3.494, 0], [50.045, 3.494, 17.253], [49.047, 3.424, 17.253], [49.047, 3.424, 8.626], [41.066, 2.867, 8.626], [41.066, 2.867, 17.253], [40.069, 2.797, 17.253], [40.069, 2.797, 0]] - , [[49.612, 9.051, 0], [49.612, 9.051, 17.414], [48.628, 8.872, 17.414], [48.628, 8.872, 8.707], [40.758, 7.436, 8.707], [40.758, 7.436, 17.414], [39.774, 7.257, 17.414], [39.774, 7.257, 0]] - , [[48.569, 14.524, 0], [48.569, 14.524, 17.576], [47.611, 14.237, 17.576], [47.611, 14.237, 8.788], [39.946, 11.945, 8.788], [39.946, 11.945, 17.576], [38.988, 11.659, 17.576], [38.988, 11.659, 0]] - , [[46.932, 19.845, 0], [46.932, 19.845, 17.737], [46.011, 19.456, 17.737], [46.011, 19.456, 8.869], [38.642, 16.34, 8.869], [38.642, 16.34, 17.737], [37.721, 15.951, 17.737], [37.721, 15.951, 0]] - , [[44.725, 24.953, 0], [44.725, 24.953, 17.899], [43.852, 24.466, 17.899], [43.852, 24.466, 8.949], [36.865, 20.568, 8.949], [36.865, 20.568, 17.899], [35.992, 20.081, 17.899], [35.992, 20.081, 0]] - , [[41.978, 29.788, 0], [41.978, 29.788, 18.061], [41.163, 29.21, 18.061], [41.163, 29.21, 9.03], [34.638, 24.58, 9.03], [34.638, 24.58, 18.061], [33.823, 24.001, 18.061], [33.823, 24.001, 0]] - , [[38.727, 34.296, 0], [38.727, 34.296, 18.222], [37.979, 33.633, 18.222], [37.979, 33.633, 9.111], [31.99, 28.329, 9.111], [31.99, 28.329, 18.222], [31.241, 27.666, 18.222], [31.241, 27.666, 0]] - , [[35.013, 38.427, 0], [35.013, 38.427, 18.384], [34.34, 37.687, 18.384], [34.34, 37.687, 9.192], [28.952, 31.774, 9.192], [28.952, 31.774, 18.384], [28.278, 31.035, 18.384], [28.278, 31.035, 0]] - , [[30.882, 42.135, 0], [30.882, 42.135, 18.545], [30.291, 41.328, 18.545], [30.291, 41.328, 9.273], [25.562, 34.876, 9.273], [25.562, 34.876, 18.545], [24.97, 34.069, 18.545], [24.97, 34.069, 0]] - , [[26.383, 45.381, 0], [26.383, 45.381, 18.707], [25.88, 44.517, 18.707], [25.88, 44.517, 9.354], [21.859, 37.6, 9.354], [21.859, 37.6, 18.707], [21.357, 36.736, 18.707], [21.357, 36.736, 0]] - , [[21.568, 48.133, 0], [21.568, 48.133, 18.869], [21.159, 47.22, 18.869], [21.159, 47.22, 9.434], [17.888, 39.92, 9.434], [17.888, 39.92, 18.869], [17.479, 39.007, 18.869], [17.479, 39.007, 0]] - , [[16.494, 50.362, 0], [16.494, 50.362, 19.03], [16.183, 49.412, 19.03], [16.183, 49.412, 9.515], [13.693, 41.809, 9.515], [13.693, 41.809, 19.03], [13.382, 40.859, 19.03], [13.382, 40.859, 0]] - , [[11.217, 52.048, 0], [11.217, 52.048, 19.192], [11.007, 51.071, 19.192], [11.007, 51.071, 9.596], [9.321, 43.25, 9.596], [9.321, 43.25, 19.192], [9.111, 42.273, 19.192], [9.111, 42.273, 0]] - , [[5.797, 53.176, 0], [5.797, 53.176, 19.354], [5.689, 52.182, 19.354], [5.689, 52.182, 9.677], [4.822, 44.229, 9.677], [4.822, 44.229, 19.354], [4.713, 43.235, 19.354], [4.713, 43.235, 0]] - , [[0.292, 53.736, 0], [0.292, 53.736, 19.515], [0.286, 52.736, 19.515], [0.286, 52.736, 9.758], [0.243, 44.736, 9.758], [0.243, 44.736, 19.515], [0.237, 43.736, 19.515], [0.237, 43.736, 0]] - , [[-5.239, 53.727, 0], [-5.239, 53.727, 19.677], [-5.142, 52.732, 19.677], [-5.142, 52.732, 9.838], [-4.366, 44.77, 9.838], [-4.366, 44.77, 19.677], [-4.269, 43.774, 19.677], [-4.269, 43.774, 0]] - , [[-10.737, 53.152, 0], [-10.737, 53.152, 19.838], [-10.539, 52.172, 19.838], [-10.539, 52.172, 9.919], [-8.955, 44.33, 9.919], [-8.955, 44.33, 19.838], [-8.757, 43.35, 19.838], [-8.757, 43.35, 0]] - , [[-16.146, 52.02, 0], [-16.146, 52.02, 20], [-15.849, 51.065, 20], [-15.849, 51.065, 10], [-13.478, 43.425, 10], [-13.478, 43.425, 20], [-13.182, 42.47, 20], [-13.182, 42.47, 0]] - ]; - + expected = [[[-12.5, -0.0000140415, 0], [-12.5, -0.0000140415, 4], [-11.5, -0.0000129182, 4], [-11.5, -0.0000129182, 2], [-3.5, -3.93162e-6, 2], [-3.5, -3.93162e-6, 4], [-2.5, -2.8083e-6, 4], [-2.5, -2.8083e-6, 0]], [[-10.9842, -8.87663, 0], [-10.9842, -8.87663, 4.16162], [-10.2065, -8.24809, 4.16162], [-10.2065, -8.24809, 2.08081], [-3.98424, -3.21976, 2.08081], [-3.98424, -3.21976, 4.16162], [-3.20646, -2.59122, 4.16162], [-3.20646, -2.59122, 0]], [[-5.09238, -14.5846, 0], [-5.09238, -14.5846, 4.32323], [-4.76273, -13.6404, 4.32323], [-4.76273, -13.6404, 2.16162], [-2.12557, -6.08761, 2.16162], [-2.12557, -6.08761, 4.32323], [-1.79592, -5.14351, 4.32323], [-1.79592, -5.14351, 0]], [[2.43691, -16.4219, 0], [2.43691, -16.4219, 4.48485], [2.29013, -15.4327, 4.48485], [2.29013, -15.4327, 2.24242], [1.11583, -7.51935, 2.24242], [1.11583, -7.51935, 4.48485], [0.969043, -6.53019, 4.48485], [0.969043, -6.53019, 0]], [[9.69147, -14.7377, 0], [9.69147, -14.7377, 4.64646], [9.14202, -13.9021, 4.64646], [9.14202, -13.9021, 2.32323], [4.74648, -7.2179, 2.32323], [4.74648, -7.2179, 4.64646], [4.19703, -6.38237, 4.64646], [4.19703, -6.38237, 0]], [[15.4378, -10.3557, 0], [15.4378, -10.3557, 4.80808], [14.6073, -9.79865, 4.80808], [14.6073, -9.79865, 2.40404], [7.96364, -5.34204, 2.40404], [7.96364, -5.34204, 4.80808], [7.13318, -4.78496, 4.80808], [7.13318, -4.78496, 0]], [[19, -4.26514, 0], [19, -4.26514, 4.9697], [18.0243, -4.04611, 4.9697], [18.0243, -4.04611, 2.48485], [10.2185, -2.29386, 2.48485], [10.2185, -2.29386, 4.9697], [9.24281, -2.07483, 4.9697], [9.24281, -2.07483, 0]], [[20.1398, 2.55924, 0], [20.1398, 2.55924, 5.13131], [19.1478, 2.43318, 5.13131], [19.1478, 2.43318, 2.56566], [11.2116, 1.4247, 2.56566], [11.2116, 1.4247, 5.13131], [10.2196, 1.29864, 5.13131], [10.2196, 1.29864, 0]], [[18.9436, 9.25917, 0], [18.9436, 9.25917, 5.29293], [18.0452, 8.82004, 5.29293], [18.0452, 8.82004, 2.64646], [10.8578, 5.30701, 2.64646], [10.8578, 5.30701, 5.29293], [9.95934, 4.86789, 5.29293], [9.95934, 4.86789, 0]], [[15.7218, 15.1457, 0], [15.7218, 15.1457, 5.45455], [15.0017, 14.4519, 5.45455], [15.0017, 14.4519, 2.72727], [9.24022, 8.9016, 2.72727], [9.24022, 8.9016, 5.45455], [8.52004, 8.20782, 5.45455], [8.52004, 8.20782, 0]], [[10.9234, 19.7189, 0], [10.9234, 19.7189, 5.61616], [10.4388, 18.8441, 5.61616], [10.4388, 18.8441, 2.80808], [6.56225, 11.8461, 2.80808], [6.56225, 11.8461, 5.61616], [6.07768, 10.9714, 5.61616], [6.07768, 10.9714, 0]], [[5.06562, 22.6659, 0], [5.06562, 22.6659, 5.77778], [4.84751, 21.69, 5.77778], [4.84751, 21.69, 2.88889], [3.10263, 13.8826, 2.88889], [3.10263, 13.8826, 5.77778], [2.88452, 12.9067, 5.77778], [2.88452, 12.9067, 0]], [[-1.32091, 23.8455, 0], [-1.32091, 23.8455, 5.93939], [-1.2656, 22.8471, 5.93939], [-1.2656, 22.8471, 2.9697], [-0.823122, 14.8593, 2.9697], [-0.823122, 14.8593, 5.93939], [-0.767813, 13.8609, 5.93939], [-0.767813, 13.8609, 0]], [[-7.73333, 23.2645, 0], [-7.73333, 23.2645, 6.10101], [-7.41789, 22.3155, 6.10101], [-7.41789, 22.3155, 3.05051], [-4.89439, 14.724, 3.05051], [-4.89439, 14.724, 6.10101], [-4.57895, 13.775, 6.10101], [-4.57895, 13.775, 0]], [[-13.7257, 21.0498, 0], [-13.7257, 21.0498, 6.26263], [-13.1795, 20.2121, 6.26263], [-13.1795, 20.2121, 3.13131], [-8.80993, 13.5109, 3.13131], [-8.80993, 13.5109, 6.26263], [-8.26373, 12.6732, 6.26263], [-8.26373, 12.6732, 0]], [[-18.9279, 17.42, 0], [-18.9279, 17.42, 6.42424], [-18.1921, 16.7428, 6.42424], [-18.1921, 16.7428, 3.21212], [-12.3056, 11.3253, 3.21212], [-12.3056, 11.3253, 6.42424], [-11.5698, 10.6481, 6.42424], [-11.5698, 10.6481, 0]], [[-23.0553, 12.6576, 0], [-23.0553, 12.6576, 6.58586], [-22.1787, 12.1763, 6.58586], [-22.1787, 12.1763, 3.29293], [-15.1661, 8.32631, 3.29293], [-15.1661, 8.32631, 6.58586], [-14.2895, 7.84506, 6.58586], [-14.2895, 7.84506, 0]], [[-25.9125, 7.08267, 0], [-25.9125, 7.08267, 6.74747], [-24.9479, 6.81901, 6.74747], [-24.9479, 6.81901, 3.37374], [-17.231, 4.70974, 3.37374], [-17.231, 4.70974, 6.74747], [-16.2663, 4.44608, 6.74747], [-16.2663, 4.44608, 0]], [[-27.3908, 1.03079, 0], [-27.3908, 1.03079, 6.90909], [-26.3915, 0.993185, 6.90909], [-26.3915, 0.993185, 3.45455], [-18.3972, 0.692336, 3.45455], [-18.3972, 0.692336, 6.90909], [-17.3979, 0.65473, 6.90909], [-17.3979, 0.65473, 0]], [[-27.4622, -5.16665, 0], [-27.4622, -5.16665, 7.07071], [-26.4794, -4.98175, 7.07071], [-26.4794, -4.98175, 3.53535], [-18.6173, -3.50261, 3.53535], [-18.6173, -3.50261, 7.07071], [-17.6346, -3.31771, 7.07071], [-17.6346, -3.31771, 0]], [[-26.1701, -11.198, 0], [-26.1701, -11.198, 7.23232], [-25.2507, -10.8046, 7.23232], [-25.2507, -10.8046, 3.61616], [-17.8958, -7.65749, 3.61616], [-17.8958, -7.65749, 7.23232], [-16.9764, -7.26409, 7.23232], [-16.9764, -7.26409, 0]], [[-23.6189, -16.7836, 0], [-23.6189, -16.7836, 7.39394], [-22.8038, -16.2044, 7.39394], [-22.8038, -16.2044, 3.69697], [-16.2826, -11.5704, 3.69697], [-16.2826, -11.5704, 7.39394], [-15.4674, -10.9912, 7.39394], [-15.4674, -10.9912, 0]], [[-19.9619, -21.6845, 0], [-19.9619, -21.6845, 7.55556], [-19.2847, -20.9488, 7.55556], [-19.2847, -20.9488, 3.77778], [-13.8664, -15.063, 3.77778], [-13.8664, -15.063, 7.55556], [-13.1891, -14.3273, 7.55556], [-13.1891, -14.3273, 0]], [[-15.3893, -25.7081, 0], [-15.3893, -25.7081, 7.71717], [-14.8757, -24.8501, 7.71717], [-14.8757, -24.8501, 3.85859], [-10.7667, -17.986, 3.85859], [-10.7667, -17.986, 7.71717], [-10.2531, -17.128, 7.71717], [-10.2531, -17.128, 0]], [[-10.1162, -28.7112, 0], [-10.1162, -28.7112, 7.87879], [-9.78392, -27.768, 7.87879], [-9.78392, -27.768, 3.93939], [-7.12536, -20.2227, 3.93939], [-7.12536, -20.2227, 7.87879], [-6.79304, -19.2795, 7.87879], [-6.79304, -19.2795, 0]], [[-4.372, -30.6005, 0], [-4.372, -30.6005, 8.0404], [-4.23057, -29.6105, 8.0404], [-4.23057, -29.6105, 4.0202], [-3.09907, -21.6909, 4.0202], [-3.09907, -21.6909, 8.0404], [-2.95763, -20.701, 8.0404], [-2.95763, -20.701, 0]], [[1.6104, -31.3312, 0], [1.6104, -31.3312, 8.20202], [1.55907, -30.3325, 8.20202], [1.55907, -30.3325, 4.10101], [1.14842, -22.3431, 4.10101], [1.14842, -22.3431, 8.20202], [1.09709, -21.3444, 8.20202], [1.09709, -21.3444, 0]], [[7.60312, -30.9044, 0], [7.60312, -30.9044, 8.36364], [7.36422, -29.9333, 8.36364], [7.36422, -29.9333, 4.18182], [5.45304, -22.165, 4.18182], [5.45304, -22.165, 8.36364], [5.21414, -21.1939, 8.36364], [5.21414, -21.1939, 0]], [[13.3911, -29.362, 0], [13.3911, -29.362, 8.52525], [12.9761, -28.4522, 8.52525], [12.9761, -28.4522, 4.26263], [9.65651, -21.1734, 4.26263], [9.65651, -21.1734, 8.52525], [9.24156, -20.2636, 8.52525], [9.24156, -20.2636, 0]], [[18.7782, -26.7826, 0], [18.7782, -26.7826, 8.68687], [18.2042, -25.9638, 8.68687], [18.2042, -25.9638, 4.34343], [13.6115, -19.4135, 4.34343], [13.6115, -19.4135, 8.68687], [13.0374, -18.5947, 8.68687], [13.0374, -18.5947, 0]], [[23.5926, -23.275, 0], [23.5926, -23.275, 8.84848], [22.8807, -22.5727, 8.84848], [22.8807, -22.5727, 4.42424], [17.1857, -16.9543, 4.42424], [17.1857, -16.9543, 8.84848], [16.4738, -16.252, 8.84848], [16.4738, -16.252, 0]], [[27.6896, -18.9724, 0], [27.6896, -18.9724, 9.0101], [26.8647, -18.4072, 9.0101], [26.8647, -18.4072, 4.50505], [20.2652, -13.8854, 4.50505], [20.2652, -13.8854, 9.0101], [19.4403, -13.3201, 9.0101], [19.4403, -13.3201, 0]], [[30.9547, -14.0265, 0], [30.9547, -14.0265, 9.17172], [30.0438, -13.6137, 9.17172], [30.0438, -13.6137, 4.58586], [22.757, -10.3119, 4.58586], [22.757, -10.3119, 9.17172], [21.8461, -9.89912, 9.17172], [21.8461, -9.89912, 0]], [[33.304, -8.60086, 0], [33.304, -8.60086, 9.33333], [32.3357, -8.35081, 9.33333], [32.3357, -8.35081, 4.66667], [24.5899, -6.35041, 4.66667], [24.5899, -6.35041, 9.33333], [23.6216, -6.10036, 9.33333], [23.6216, -6.10036, 0]], [[34.685, -2.86586, 0], [34.685, -2.86586, 9.49495], [33.6884, -2.78351, 9.49495], [33.6884, -2.78351, 4.74747], [25.7156, -2.12475, 4.74747], [25.7156, -2.12475, 9.49495], [24.7189, -2.04241, 9.49495], [24.7189, -2.04241, 0]], [[35.0755, 3.00723, 0], [35.0755, 3.00723, 9.65657], [34.0791, 2.92181, 9.65657], [34.0791, 2.92181, 4.82828], [26.1084, 2.23843, 4.82828], [26.1084, 2.23843, 9.65657], [25.112, 2.153, 9.65657], [25.112, 2.153, 0]], [[34.482, 8.85087, 0], [34.482, 8.85087, 9.81818], [33.5134, 8.60225, 9.81818], [33.5134, 8.60225, 4.90909], [25.7646, 6.61328, 4.90909], [25.7646, 6.61328, 9.81818], [24.796, 6.36466, 9.81818], [24.796, 6.36466, 0]], [[32.9377, 14.5056, 0], [32.9377, 14.5056, 9.9798], [32.0225, 14.1026, 9.9798], [32.0225, 14.1026, 4.9899], [24.7011, 10.8782, 4.9899], [24.7011, 10.8782, 9.9798], [23.7859, 10.4752, 9.9798], [23.7859, 10.4752, 0]], [[30.4996, 19.8238, 0], [30.4996, 19.8238, 10.1414], [29.6611, 19.2789, 10.1414], [29.6611, 19.2789, 5.07071], [22.9535, 14.9191, 5.07071], [22.9535, 14.9191, 10.1414], [22.115, 14.3741, 10.1414], [22.115, 14.3741, 0]], [[27.2456, 24.6727, 0], [27.2456, 24.6727, 10.303], [26.5043, 24.0014, 10.303], [26.5043, 24.0014, 5.15152], [20.5744, 18.6315, 5.15152], [20.5744, 18.6315, 10.303], [19.8332, 17.9602, 10.303], [19.8332, 17.9602, 0]], [[23.2711, 28.9365, 0], [23.2711, 28.9365, 10.4646], [22.6444, 28.1572, 10.4646], [22.6444, 28.1572, 5.23232], [17.6308, 21.9231, 5.23232], [17.6308, 21.9231, 10.4646], [17.0041, 21.1438, 10.4646], [17.0041, 21.1438, 0]], [[18.6857, 32.5186, 0], [18.6857, 32.5186, 10.6263], [18.1875, 31.6516, 10.6263], [18.1875, 31.6516, 5.31313], [14.2017, 24.7152, 5.31313], [14.2017, 24.7152, 10.6263], [13.7035, 23.8481, 10.6263], [13.7035, 23.8481, 0]], [[13.6094, 35.3427, 0], [13.6094, 35.3427, 10.7879], [13.2501, 34.4095, 10.7879], [13.2501, 34.4095, 5.39394], [10.3753, 26.9439, 5.39394], [10.3753, 26.9439, 10.7879], [10.0159, 26.0107, 10.7879], [10.0159, 26.0107, 0]], [[8.16947, 37.353, 0], [8.16947, 37.353, 10.9495], [7.95581, 36.3761, 10.9495], [7.95581, 36.3761, 5.47475], [6.24653, 28.5608, 5.47475], [6.24653, 28.5608, 10.9495], [6.03287, 27.5839, 10.9495], [6.03287, 27.5839, 0]], [[2.49682, 38.5146, 0], [2.49682, 38.5146, 11.1111], [2.43213, 37.5167, 11.1111], [2.43213, 37.5167, 5.55556], [1.91459, 29.5334, 5.55556], [1.91459, 29.5334, 11.1111], [1.8499, 28.5355, 11.1111], [1.8499, 28.5355, 0]], [[-3.27697, 38.813, 0], [-3.27697, 38.813, 11.2727], [-3.19284, 37.8165, 11.2727], [-3.19284, 37.8165, 5.63636], [-2.5198, 29.8449, 5.63636], [-2.5198, 29.8449, 11.2727], [-2.43567, 28.8484, 11.2727], [-2.43567, 28.8484, 0]], [[-9.02272, 38.2533, 0], [-9.02272, 38.2533, 11.4343], [-8.79315, 37.28, 11.4343], [-8.79315, 37.28, 5.71717], [-6.95661, 29.4937, 5.71717], [-6.95661, 29.4937, 11.4343], [-6.72704, 28.5204, 11.4343], [-6.72704, 28.5204, 0]], [[-14.6162, 36.859, 0], [-14.6162, 36.859, 11.596], [-14.2476, 35.9294, 11.596], [-14.2476, 35.9294, 5.79798], [-11.2987, 28.4928, 5.79798], [-11.2987, 28.4928, 11.596], [-10.93, 27.5632, 11.596], [-10.93, 27.5632, 0]], [[-19.9407, 34.6706, 0], [-19.9407, 34.6706, 11.7576], [-19.4421, 33.8038, 11.7576], [-19.4421, 33.8038, 5.87879], [-15.4536, 26.869, 5.87879], [-15.4536, 26.869, 11.7576], [-14.955, 26.0021, 11.7576], [-14.955, 26.0021, 0]], [[-24.8886, 31.7437, 0], [-24.8886, 31.7437, 11.9192], [-24.2716, 30.9567, 11.9192], [-24.2716, 30.9567, 5.9596], [-19.3355, 24.6611, 5.9596], [-19.3355, 24.6611, 11.9192], [-18.7185, 23.8742, 11.9192], [-18.7185, 23.8742, 0]], [[-29.3638, 28.1471, 0], [-29.3638, 28.1471, 12.0808], [-28.6419, 27.4551, 12.0808], [-28.6419, 27.4551, 6.0404], [-22.8667, 21.9192, 6.0404], [-22.8667, 21.9192, 12.0808], [-22.1448, 21.2272, 12.0808], [-22.1448, 21.2272, 0]], [[-33.2824, 23.9611, 0], [-33.2824, 23.9611, 12.2424], [-32.4708, 23.3768, 12.2424], [-32.4708, 23.3768, 6.12121], [-25.9783, 18.7026, 6.12121], [-25.9783, 18.7026, 12.2424], [-25.1668, 18.1184, 12.2424], [-25.1668, 18.1184, 0]], [[-36.574, 19.2747, 0], [-36.574, 19.2747, 12.404], [-35.6893, 18.8084, 12.404], [-35.6893, 18.8084, 6.20202], [-28.612, 15.0787, 6.20202], [-28.612, 15.0787, 12.404], [-27.7273, 14.6124, 12.404], [-27.7273, 14.6124, 0]], [[-39.1825, 14.1842, 0], [-39.1825, 14.1842, 12.5657], [-38.2422, 13.8438, 12.5657], [-38.2422, 13.8438, 6.28283], [-30.7199, 11.1207, 6.28283], [-30.7199, 11.1207, 12.5657], [-29.7796, 10.7803, 12.5657], [-29.7796, 10.7803, 0]], [[-41.0663, 8.79046, 0], [-41.0663, 8.79046, 12.7273], [-40.0884, 8.58115, 12.7273], [-40.0884, 8.58115, 6.36364], [-32.2656, 6.90664, 6.36364], [-32.2656, 6.90664, 12.7273], [-31.2878, 6.69732, 12.7273], [-31.2878, 6.69732, 0]], [[-42.1985, 3.19725, 0], [-42.1985, 3.19725, 12.8889], [-41.2014, 3.1217, 12.8889], [-41.2014, 3.1217, 6.44444], [-33.2242, 2.51729, 6.44444], [-33.2242, 2.51729, 12.8889], [-32.2271, 2.44174, 12.8889], [-32.2271, 2.44174, 0]], [[-42.5667, -2.49114, 0], [-42.5667, -2.49114, 13.0505], [-41.5684, -2.43272, 13.0505], [-41.5684, -2.43272, 6.52525], [-33.5821, -1.96533, 6.52525], [-33.5821, -1.96533, 13.0505], [-32.5838, -1.90691, 13.0505], [-32.5838, -1.90691, 0]], [[-42.1725, -8.17157, 0], [-42.1725, -8.17157, 13.2121], [-41.1908, -7.98134, 13.2121], [-41.1908, -7.98134, 6.60606], [-33.3369, -6.45952, 6.60606], [-33.3369, -6.45952, 13.2121], [-32.3551, -6.2693, 13.2121], [-32.3551, -6.2693, 0]], [[-41.0309, -13.7439, 0], [-41.0309, -13.7439, 13.3737], [-40.0827, -13.4263, 13.3737], [-40.0827, -13.4263, 6.68687], [-32.497, -10.8853, 6.68687], [-32.497, -10.8853, 13.3737], [-31.5488, -10.5677, 13.3737], [-31.5488, -10.5677, 0]], [[-39.1695, -19.1125, 0], [-39.1695, -19.1125, 13.5354], [-38.2708, -18.674, 13.5354], [-38.2708, -18.674, 6.76768], [-31.0811, -15.1658, 6.76768], [-31.0811, -15.1658, 13.5354], [-30.1824, -14.7273, 13.5354], [-30.1824, -14.7273, 0]], [[-36.6274, -24.1879, 0], [-36.6274, -24.1879, 13.697], [-35.793, -23.6368, 13.697], [-35.793, -23.6368, 6.84848], [-29.1173, -19.2283, 6.84848], [-29.1173, -19.2283, 13.697], [-28.2828, -18.6773, 13.697], [-28.2828, -18.6773, 0]], [[-33.4541, -28.8877, 0], [-33.4541, -28.8877, 13.8586], [-32.6973, -28.2341, 13.8586], [-32.6973, -28.2341, 6.92929], [-26.6423, -23.0056, 6.92929], [-26.6423, -23.0056, 13.8586], [-25.8854, -22.3521, 13.8586], [-25.8854, -22.3521, 0]], [[-29.7083, -33.138, 0], [-29.7083, -33.138, 14.0202], [-29.0408, -32.3934, 14.0202], [-29.0408, -32.3934, 7.0101], [-23.7006, -26.4367, 7.0101], [-23.7006, -26.4367, 14.0202], [-23.033, -25.6921, 14.0202], [-23.033, -25.6921, 0]], [[-25.4564, -36.8739, 0], [-25.4564, -36.8739, 14.1818], [-24.8883, -36.0509, 14.1818], [-24.8883, -36.0509, 7.09091], [-20.3432, -29.4674, 7.09091], [-20.3432, -29.4674, 14.1818], [-19.7751, -28.6445, 14.1818], [-19.7751, -28.6445, 0]], [[-20.7714, -40.0405, 0], [-20.7714, -40.0405, 14.3434], [-20.3109, -39.1528, 14.3434], [-20.3109, -39.1528, 7.17172], [-16.627, -32.0515, 7.17172], [-16.627, -32.0515, 14.3434], [-16.1665, -31.1638, 14.3434], [-16.1665, -31.1638, 0]], [[-15.7312, -42.5931, 0], [-15.7312, -42.5931, 14.5051], [-15.3847, -41.6551, 14.5051], [-15.3847, -41.6551, 7.25253], [-12.6131, -34.1506, 7.25253], [-12.6131, -34.1506, 14.5051], [-12.2666, -33.2125, 14.5051], [-12.2666, -33.2125, 0]], [[-10.4175, -44.4978, 0], [-10.4175, -44.4978, 14.6667], [-10.1896, -43.5241, 14.6667], [-10.1896, -43.5241, 7.33333], [-8.36597, -35.7347, 7.33333], [-8.36597, -35.7347, 14.6667], [-8.13802, -34.7611, 14.6667], [-8.13802, -34.7611, 0]], [[-4.91415, -45.7312, 0], [-4.91415, -45.7312, 14.8283], [-4.80731, -44.7369, 14.8283], [-4.80731, -44.7369, 7.41414], [-3.95257, -36.7827, 7.41414], [-3.95257, -36.7827, 14.8283], [-3.84573, -35.7884, 14.8283], [-3.84573, -35.7884, 0]], [[0.694121, -46.2806, 0], [0.694121, -46.2806, 14.9899], [0.679124, -45.2807, 14.9899], [0.679124, -45.2807, 7.49495], [0.559153, -37.2816, 7.49495], [0.559153, -37.2816, 14.9899], [0.544157, -36.2817, 14.9899], [0.544157, -36.2817, 0]], [[6.32293, -46.1439, 0], [6.32293, -46.1439, 15.1515], [6.18717, -45.1532, 15.1515], [6.18717, -45.1532, 7.57576], [5.10111, -37.2272, 7.57576], [5.10111, -37.2272, 15.1515], [4.96535, -36.2365, 15.1515], [4.96535, -36.2365, 0]], [[11.8895, -45.329, 0], [11.8895, -45.329, 15.3131], [11.6358, -44.3618, 15.3131], [11.6358, -44.3618, 7.65657], [9.60611, -36.6235, 7.65657], [9.60611, -36.6235, 15.3131], [9.3524, -35.6562, 15.3131], [9.3524, -35.6562, 0]], [[17.3139, -43.8535, 0], [17.3139, -43.8535, 15.4747], [16.9466, -42.9234, 15.4747], [16.9466, -42.9234, 7.73737], [14.0088, -35.4824, 7.73737], [14.0088, -35.4824, 15.4747], [13.6416, -34.5522, 15.4747], [13.6416, -34.5522, 0]], [[22.5198, -41.744, 0], [22.5198, -41.744, 15.6364], [22.045, -40.8639, 15.6364], [22.045, -40.8639, 7.81818], [18.2467, -33.8231, 7.81818], [18.2467, -33.8231, 15.6364], [17.7719, -32.943, 15.6364], [17.7719, -32.943, 0]], [[27.4358, -39.0354, 0], [27.4358, -39.0354, 15.798], [26.8608, -38.2173, 15.798], [26.8608, -38.2173, 7.89899], [22.2606, -31.6722, 7.89899], [22.2606, -31.6722, 15.798], [21.6856, -30.854, 15.798], [21.6856, -30.854, 0]], [[31.996, -35.7702, 0], [31.996, -35.7702, 15.9596], [31.3293, -35.0249, 15.9596], [31.3293, -35.0249, 7.9798], [25.9957, -29.0622, 7.9798], [25.9957, -29.0622, 15.9596], [25.329, -28.3168, 15.9596], [25.329, -28.3168, 0]], [[36.1406, -31.9976, 0], [36.1406, -31.9976, 16.1212], [35.3919, -31.3347, 16.1212], [35.3919, -31.3347, 8.06061], [29.4021, -26.0316, 8.06061], [29.4021, -26.0316, 16.1212], [28.6534, -25.3687, 16.1212], [28.6534, -25.3687, 0]], [[39.817, -27.7727, 0], [39.817, -27.7727, 16.2828], [38.9968, -27.2006, 16.2828], [38.9968, -27.2006, 8.14141], [32.4353, -22.6239, 8.14141], [32.4353, -22.6239, 16.2828], [31.6151, -22.0518, 16.2828], [31.6151, -22.0518, 0]], [[42.9796, -23.1554, 0], [42.9796, -23.1554, 16.4444], [42.0992, -22.6811, 16.4444], [42.0992, -22.6811, 8.22222], [35.0563, -18.8867, 8.22222], [35.0563, -18.8867, 16.4444], [34.1759, -18.4124, 16.4444], [34.1759, -18.4124, 0]], [[45.5907, -18.2096, 0], [45.5907, -18.2096, 16.6061], [44.662, -17.8387, 16.6061], [44.662, -17.8387, 8.30303], [37.2327, -14.8713, 8.30303], [37.2327, -14.8713, 16.6061], [36.3041, -14.5004, 16.6061], [36.3041, -14.5004, 0]], [[47.6205, -13.0024, 0], [47.6205, -13.0024, 16.7677], [46.6558, -12.739, 16.7677], [46.6558, -12.739, 8.38384], [38.9383, -10.6318, 8.38384], [38.9383, -10.6318, 16.7677], [37.9736, -10.3684, 16.7677], [37.9736, -10.3684, 0]], [[49.0472, -7.60249, 0], [49.0472, -7.60249, 16.9293], [48.059, -7.44932, 16.9293], [48.059, -7.44932, 8.46465], [40.1534, -6.22392, 8.46465], [40.1534, -6.22392, 16.9293], [39.1652, -6.07075, 16.9293], [39.1652, -6.07075, 0]], [[49.8571, -2.08005, 0], [49.8571, -2.08005, 17.0909], [48.8579, -2.03837, 17.0909], [48.8579, -2.03837, 8.54545], [40.8649, -1.7049, 8.54545], [40.8649, -1.7049, 17.0909], [39.8658, -1.66321, 17.0909], [39.8658, -1.66321, 0]], [[50.0446, 3.49472, 0], [50.0446, 3.49472, 17.2525], [49.047, 3.42506, 17.2525], [49.047, 3.42506, 8.62626], [41.0664, 2.86776, 8.62626], [41.0664, 2.86776, 17.2525], [40.0688, 2.79809, 17.2525], [40.0688, 2.79809, 0]], [[49.6118, 9.05229, 0], [49.6118, 9.05229, 17.4141], [48.628, 8.87279, 17.4141], [48.628, 8.87279, 8.70707], [40.7579, 7.4368, 8.70707], [40.7579, 7.4368, 17.4141], [39.7742, 7.2573, 17.4141], [39.7742, 7.2573, 0]], [[48.5684, 14.5247, 0], [48.5684, 14.5247, 17.5758], [47.6103, 14.2381, 17.5758], [47.6103, 14.2381, 8.78788], [39.9457, 11.946, 8.78788], [39.9457, 11.946, 17.5758], [38.9876, 11.6595, 17.5758], [38.9876, 11.6595, 0]], [[46.9314, 19.8461, 0], [46.9314, 19.8461, 17.7374], [46.0103, 19.4566, 17.7374], [46.0103, 19.4566, 8.86869], [38.6421, 16.3408, 8.86869], [38.6421, 16.3408, 17.7374], [37.721, 15.9513, 17.7374], [37.721, 15.9513, 0]], [[44.7244, 24.9539, 0], [44.7244, 24.9539, 17.899], [43.8512, 24.4667, 17.899], [43.8512, 24.4667, 8.94949], [36.865, 20.5688, 8.94949], [36.865, 20.5688, 17.899], [35.9917, 20.0815, 17.899], [35.9917, 20.0815, 0]], [[41.9776, 29.7891, 0], [41.9776, 29.7891, 18.0606], [41.1621, 29.2103, 18.0606], [41.1621, 29.2103, 9.0303], [34.6379, 24.5805, 9.0303], [34.6379, 24.5805, 18.0606], [33.8224, 24.0018, 18.0606], [33.8224, 24.0018, 0]], [[38.7267, 34.2968, 0], [38.7267, 34.2968, 18.2222], [37.9781, 33.6338, 18.2222], [37.9781, 33.6338, 9.11111], [31.9891, 28.3299, 9.11111], [31.9891, 28.3299, 18.2222], [31.2404, 27.6669, 18.2222], [31.2404, 27.6669, 0]], [[35.0127, 38.4271, 0], [35.0127, 38.4271, 18.3838], [34.3392, 37.6879, 18.3838], [34.3392, 37.6879, 9.19192], [28.9512, 31.7744, 9.19192], [28.9512, 31.7744, 18.3838], [28.2777, 31.0353, 18.3838], [28.2777, 31.0353, 0]], [[30.8813, 42.1351, 0], [30.8813, 42.1351, 18.5455], [30.2902, 41.3285, 18.5455], [30.2902, 41.3285, 9.27273], [25.561, 34.876, 9.27273], [25.561, 34.876, 18.5455], [24.9699, 34.0694, 18.5455], [24.9699, 34.0694, 0]], [[26.382, 45.3816, 0], [26.382, 45.3816, 18.7071], [25.8794, 44.5171, 18.7071], [25.8794, 44.5171, 9.35354], [21.8587, 37.6009, 9.35354], [21.8587, 37.6009, 18.7071], [21.3561, 36.7363, 18.7071], [21.3561, 36.7363, 0]], [[21.5675, 48.1332, 0], [21.5675, 48.1332, 18.8687], [21.1586, 47.2206, 18.8687], [21.1586, 47.2206, 9.43434], [17.8873, 39.92, 9.43434], [17.8873, 39.92, 18.8687], [17.4784, 39.0075, 18.8687], [17.4784, 39.0075, 0]], [[16.4932, 50.3625, 0], [16.4932, 50.3625, 19.0303], [16.182, 49.4122, 19.0303], [16.182, 49.4122, 9.51515], [13.6922, 41.8095, 9.51515], [13.6922, 41.8095, 19.0303], [13.381, 40.8592, 19.0303], [13.381, 40.8592, 0]], [[11.2166, 52.0484, 0], [11.2166, 52.0484, 19.1919], [11.0059, 51.0708, 19.1919], [11.0059, 51.0708, 9.59596], [9.32057, 43.2504, 9.59596], [9.32057, 43.2504, 19.1919], [9.1099, 42.2728, 19.1919], [9.1099, 42.2728, 0]], [[5.79603, 53.1759, 0], [5.79603, 53.1759, 19.3535], [5.68767, 52.1817, 19.3535], [5.68767, 52.1817, 9.67677], [4.82083, 44.2288, 9.67677], [4.82083, 44.2288, 19.3535], [4.71247, 43.2347, 19.3535], [4.71247, 43.2347, 0]], [[0.290748, 53.7363, 0], [0.290748, 53.7363, 19.5152], [0.285338, 52.7363, 19.5152], [0.285338, 52.7363, 9.75758], [0.242053, 44.7364, 9.75758], [0.242053, 44.7364, 19.5152], [0.236643, 43.7364, 19.5152], [0.236643, 43.7364, 0]], [[-5.24019, 53.7272, 0], [-5.24019, 53.7272, 19.6768], [-5.14311, 52.7319, 19.6768], [-5.14311, 52.7319, 9.83838], [-4.36653, 44.7697, 9.83838], [-4.36653, 44.7697, 19.6768], [-4.26946, 43.7744, 19.6768], [-4.26946, 43.7744, 0]], [[-10.7384, 53.152, 0], [-10.7384, 53.152, 19.8384], [-10.5404, 52.1718, 19.8384], [-10.5404, 52.1718, 9.91919], [-8.95611, 44.3302, 9.91919], [-8.95611, 44.3302, 19.8384], [-8.75808, 43.35, 19.8384], [-8.75808, 43.35, 0]], [[-16.1467, 52.0202, 0], [-16.1467, 52.0202, 20], [-15.8503, 51.0651, 20], [-15.8503, 51.0651, 10], [-13.4788, 43.4247, 10], [-13.4788, 43.4247, 20], [-13.1823, 42.4697, 20], [-13.1823, 42.4697, 0]]]; + for(i = [0:len(expected) - 1]) { - assertEqualPoints(expected[i], sections[i], float_digits = 3); + assertEqualPoints(expected[i], sections[i]); } } diff --git a/test/test_bend.scad b/test/test_bend.scad index 7301f40c..8603174c 100644 --- a/test/test_bend.scad +++ b/test/test_bend.scad @@ -13,7 +13,7 @@ module test_bend() { expected_angle = 11.25; assertEqualPoints(expected_points, points); - assertEqual(expected_angle, angle); + assertEqualNum(expected_angle, angle); } bend(size = [x, y, z], angle = 270) diff --git a/test/test_bezier_curve.scad b/test/test_bezier_curve.scad index fb6cb44c..51f94396 100644 --- a/test/test_bezier_curve.scad +++ b/test/test_bezier_curve.scad @@ -12,16 +12,12 @@ module test_bezier_curve() { p2 = [-50, 90, 0]; p3 = [0, 200, -35]; - expected = [[0, 0, 0], [5.0588, 8.7888, 4.7338], [8.37, 17.21, 8.47], [10.1363, 25.3463, 11.2613], [10.56, 33.28, 13.16], [9.8438, 41.0938, 14.2188], [8.19, 48.87, 14.49], [5.8013, 56.6913, 14.0263], [2.88, 64.64, 12.88], [-0.3712, 72.7987, 11.1038], [-3.75, 81.25, 8.75], [-7.0537, 90.0762, 5.8713], [-10.08, 99.36, 2.52], [-12.6263, 109.184, -1.2513], [-14.49, 119.63, -5.39], [-15.4688, 130.781, -9.8438], [-15.36, 142.72, -14.56], [-13.9612, 155.529, -19.4863], [-11.07, 169.29, -24.57], [-6.4837, 184.086, -29.7588], [0, 200, -35]]; - + expected = [[0, 0, 0], [5.05875, 8.78875, 4.73375], [8.37, 17.21, 8.47], [10.1363, 25.3463, 11.2613], [10.56, 33.28, 13.16], [9.84375, 41.0938, 14.2188], [8.19, 48.87, 14.49], [5.80125, 56.6912, 14.0262], [2.88, 64.64, 12.88], [-0.37125, 72.7988, 11.1038], [-3.75, 81.25, 8.75], [-7.05375, 90.0763, 5.87125], [-10.08, 99.36, 2.52], [-12.6263, 109.184, -1.25125], [-14.49, 119.63, -5.39], [-15.4688, 130.781, -9.84375], [-15.36, 142.72, -14.56], [-13.9612, 155.529, -19.4863], [-11.07, 169.29, -24.57], [-6.48375, 184.086, -29.7588], [0, 200, -35]]; actual = bezier_curve(t_step, [p0, p1, p2, p3] ); - - // round_echo_pts(actual, float_digits = 3); - assertEqualPoints(expected, actual, float_digits = 3); - + assertEqualPoints(expected, actual, 0.0005); } test_bezier_curve(); \ No newline at end of file diff --git a/test/test_bezier_surface.scad b/test/test_bezier_surface.scad index aa5dc186..31337295 100644 --- a/test/test_bezier_surface.scad +++ b/test/test_bezier_surface.scad @@ -15,14 +15,13 @@ module test_bezier_surface() { [[0, 150, 0], [60, 150, -35], [90, 180, 60], [200, 150, 45]] ]; - expected = [[[0, 0, 20], [0, 7.5, 21.209], [0, 15, 21.87], [0, 22.5, 22.036], [0, 30, 21.76], [0, 37.5, 21.094], [0, 45, 20.09], [0, 52.5, 18.801], [0, 60, 17.28], [0, 67.5, 15.579], [0, 75, 13.75], [0, 82.5, 11.846], [0, 90, 9.92], [0, 97.5, 8.024], [0, 105, 6.21], [0, 112.5, 4.531], [0, 120, 3.04], [0, 127.5, 1.789], [0, 135, 0.83], [0, 142.5, 0.216], [0, 150, 0]], [[8.789, 0, 12.837], [9.551, 7.703, 14.183], [10.157, 15.402, 15.13], [10.619, 23.096, 15.706], [10.95, 30.781, 15.941], [11.163, 38.455, 15.86], [11.271, 46.114, 15.492], [11.286, 53.756, 14.865], [11.22, 61.378, 14.006], [11.087, 68.977, 12.943], [10.9, 76.55, 11.703], [10.669, 84.094, 10.315], [10.41, 91.606, 8.805], [10.133, 99.083, 7.202], [9.853, 106.523, 5.534], [9.58, 113.923, 3.827], [9.329, 121.279, 2.111], [9.112, 128.589, 0.411], [8.941, 135.85, -1.243], [8.829, 143.059, -2.824], [8.789, 150.214, -4.305]], [[17.21, 0, 7.7], [18.635, 7.864, 9.251], [19.769, 15.723, 10.508], [20.634, 23.572, 11.48], [21.254, 31.406, 12.175], [21.652, 39.221, 12.604], [21.854, 47.012, 12.775], [21.881, 54.774, 12.697], [21.759, 62.501, 12.38], [21.51, 70.19, 11.831], [21.159, 77.835, 11.061], [20.728, 85.431, 10.079], [20.243, 92.974, 8.892], [19.725, 100.459, 7.512], [19.2, 107.88, 5.945], [18.691, 115.234, 4.203], [18.221, 122.514, 2.293], [17.814, 129.717, 0.224], [17.494, 136.837, -1.993], [17.285, 143.87, -4.351], [17.21, 150.81, -6.84]], [[25.346, 0, 4.362], [27.34, 7.987, 6.174], [28.925, 15.967, 7.756], [30.134, 23.936, 9.103], [31.001, 31.886, 10.213], [31.559, 39.813, 11.08], [31.841, 47.709, 11.7], [31.879, 55.569, 12.07], [31.708, 63.387, 12.186], [31.36, 71.157, 12.043], [30.869, 78.873, 11.636], [30.267, 86.528, 10.963], [29.587, 94.117, 10.019], [28.864, 101.634, 8.8], [28.13, 109.072, 7.301], [27.417, 116.427, 5.519], [26.76, 123.69, 3.45], [26.191, 130.858, 1.089], [25.744, 137.923, -1.568], [25.451, 144.879, -4.525], [25.346, 151.721, -7.785]], [[33.28, 0, 2.6], [35.749, 8.075, 4.712], [37.712, 16.143, 6.625], [39.21, 24.199, 8.325], [40.284, 32.235, 9.801], [40.975, 40.245, 11.04], [41.324, 48.223, 12.029], [41.372, 56.162, 12.756], [41.16, 64.055, 13.209], [40.729, 71.897, 13.374], [40.12, 79.68, 13.24], [39.374, 87.399, 12.794], [38.533, 95.046, 12.023], [37.637, 102.615, 10.916], [36.727, 110.1, 9.459], [35.845, 117.495, 7.64], [35.031, 124.792, 5.447], [34.327, 131.986, 2.867], [33.772, 139.069, -0.113], [33.41, 146.036, -3.504], [33.28, 152.88, -7.32]], [[41.094, 0, 2.188], [43.949, 8.132, 4.626], [46.22, 16.257, 6.867], [47.952, 24.37, 8.894], [49.194, 32.464, 10.69], [49.993, 40.532, 12.239], [50.396, 48.569, 13.523], [50.451, 56.568, 14.527], [50.206, 64.523, 15.233], [49.708, 72.426, 15.624], [49.004, 80.273, 15.684], [48.142, 88.057, 15.395], [47.169, 95.771, 14.743], [46.133, 103.409, 13.708], [45.08, 110.965, 12.275], [44.06, 118.433, 10.427], [43.119, 125.805, 8.147], [42.304, 133.076, 5.419], [41.663, 140.24, 2.225], [41.244, 147.289, -1.45], [41.094, 154.219, -5.625]], [[48.87, 0, 2.9], [52.026, 8.161, 5.675], [54.534, 16.315, 8.232], [56.449, 24.459, 10.556], [57.821, 32.586, 12.628], [58.704, 40.689, 14.43], [59.15, 48.765, 15.944], [59.211, 56.806, 17.154], [58.94, 64.808, 18.042], [58.389, 72.765, 18.589], [57.611, 80.67, 18.779], [56.658, 88.519, 18.593], [55.583, 96.305, 18.014], [54.438, 104.023, 17.025], [53.276, 111.668, 15.607], [52.148, 119.233, 13.744], [51.108, 126.713, 11.416], [50.207, 134.103, 8.608], [49.499, 141.396, 5.301], [49.036, 148.587, 1.478], [48.87, 155.67, -2.88]], [[56.691, 0, 4.513], [60.064, 8.165, 7.619], [62.745, 16.325, 10.473], [64.791, 24.476, 13.06], [66.257, 32.613, 15.363], [67.201, 40.731, 17.366], [67.677, 48.827, 19.054], [67.743, 56.895, 20.411], [67.453, 64.93, 21.421], [66.864, 72.929, 22.068], [66.033, 80.887, 22.337], [65.015, 88.798, 22.212], [63.866, 96.658, 21.676], [62.642, 104.464, 20.715], [61.399, 112.209, 19.312], [60.194, 119.89, 17.452], [59.083, 127.502, 15.118], [58.121, 135.04, 12.295], [57.364, 142.5, 8.968], [56.869, 149.877, 5.12], [56.691, 157.166, 0.735]], [[64.64, 0, 6.8], [68.149, 8.147, 10.219], [70.939, 16.292, 13.341], [73.067, 24.429, 16.153], [74.593, 32.557, 18.644], [75.575, 40.673, 20.801], [76.071, 48.771, 22.613], [76.139, 56.851, 24.068], [75.837, 64.908, 25.154], [75.225, 72.938, 25.858], [74.36, 80.94, 26.17], [73.301, 88.909, 26.077], [72.105, 96.843, 25.566], [70.832, 104.738, 24.627], [69.539, 112.59, 23.247], [68.285, 120.398, 21.414], [67.128, 128.156, 19.116], [66.127, 135.863, 16.342], [65.34, 143.515, 13.079], [64.825, 151.108, 9.316], [64.64, 158.64, 5.04]], [[72.799, 0, 9.538], [76.367, 8.112, 13.235], [79.204, 16.223, 16.586], [81.369, 24.33, 19.584], [82.921, 32.432, 22.22], [83.919, 40.528, 24.489], [84.423, 48.615, 26.384], [84.492, 56.692, 27.899], [84.186, 64.758, 29.026], [83.563, 72.81, 29.758], [82.683, 80.847, 30.089], [81.606, 88.868, 30.013], [80.39, 96.87, 29.521], [79.095, 104.852, 28.609], [77.781, 112.812, 27.268], [76.505, 120.749, 25.493], [75.329, 128.661, 23.275], [74.311, 136.546, 20.61], [73.51, 144.402, 17.489], [72.987, 152.229, 13.906], [72.799, 160.024, 9.855]], [[81.25, 0, 12.5], [84.804, 8.063, 16.428], [87.629, 16.125, 19.961], [89.785, 24.188, 23.099], [91.33, 32.25, 25.84], [92.324, 40.313, 28.184], [92.826, 48.375, 30.129], [92.895, 56.438, 31.675], [92.59, 64.5, 32.82], [91.97, 72.563, 33.564], [91.094, 80.625, 33.906], [90.021, 88.688, 33.845], [88.81, 96.75, 33.38], [87.52, 104.813, 32.51], [86.211, 112.875, 31.234], [84.941, 120.938, 29.551], [83.77, 129, 27.46], [82.756, 137.063, 24.96], [81.959, 145.125, 22.051], [81.437, 153.188, 18.731], [81.25, 161.25, 15]], [[90.076, 0, 15.462], [93.544, 8.001, 19.557], [96.301, 16.005, 23.217], [98.405, 24.011, 26.447], [99.913, 32.023, 29.252], [100.883, 40.041, 31.638], [101.373, 48.067, 33.608], [101.44, 56.104, 35.167], [101.142, 64.152, 36.322], [100.537, 72.214, 37.075], [99.682, 80.29, 37.433], [98.635, 88.384, 37.399], [97.454, 96.495, 36.979], [96.195, 104.627, 36.178], [94.918, 112.781, 35], [93.679, 120.958, 33.451], [92.535, 129.159, 31.534], [91.546, 137.388, 29.256], [90.768, 145.645, 26.62], [90.259, 153.932, 23.631], [90.076, 162.251, 20.295]], [[99.36, 0, 18.2], [102.674, 7.933, 22.382], [105.309, 15.868, 26.104], [107.319, 23.811, 29.375], [108.76, 31.763, 32.206], [109.688, 39.727, 34.605], [110.156, 47.709, 36.583], [110.22, 55.709, 38.15], [109.935, 63.732, 39.315], [109.357, 71.782, 40.088], [108.54, 79.86, 40.48], [107.539, 87.971, 40.5], [106.41, 96.117, 40.157], [105.208, 104.302, 39.462], [103.987, 112.53, 38.425], [102.803, 120.803, 37.055], [101.71, 129.124, 35.362], [100.765, 137.497, 33.357], [100.021, 145.925, 31.048], [99.534, 154.412, 28.446], [99.36, 162.96, 25.56]], [[109.184, 0, 20.488], [112.279, 7.859, 24.665], [114.74, 15.723, 28.375], [116.617, 23.596, 31.632], [117.963, 31.482, 34.449], [118.829, 39.388, 36.839], [119.267, 47.316, 38.816], [119.327, 55.272, 40.393], [119.061, 63.26, 41.584], [118.521, 71.285, 42.402], [117.758, 79.351, 42.86], [116.823, 87.463, 42.972], [115.769, 95.627, 42.751], [114.645, 103.845, 42.211], [113.505, 112.123, 41.365], [112.399, 120.466, 40.226], [111.379, 128.878, 38.808], [110.496, 137.364, 37.125], [109.801, 145.928, 35.189], [109.347, 154.574, 33.015], [109.184, 163.309, 30.615]], [[119.63, 0, 22.1], [122.444, 7.784, 26.164], [124.682, 15.575, 29.781], [126.389, 23.376, 32.965], [127.613, 31.194, 35.731], [128.401, 39.036, 38.094], [128.798, 46.905, 40.069], [128.853, 54.809, 41.67], [128.611, 62.752, 42.913], [128.12, 70.74, 43.813], [127.426, 78.78, 44.384], [126.576, 86.876, 44.641], [125.618, 95.035, 44.599], [124.596, 103.262, 44.272], [123.559, 111.562, 43.677], [122.554, 119.942, 42.827], [121.626, 128.407, 41.737], [120.823, 136.962, 40.423], [120.191, 145.614, 38.899], [119.778, 154.368, 37.179], [119.63, 163.23, 35.28]], [[130.781, 0, 22.813], [133.256, 7.712, 26.641], [135.224, 15.43, 30.073], [136.725, 23.161, 33.121], [137.801, 30.911, 35.8], [138.494, 38.687, 38.123], [138.843, 46.493, 40.102], [138.891, 54.338, 41.753], [138.679, 62.228, 43.088], [138.247, 70.167, 44.12], [137.637, 78.164, 44.863], [136.889, 86.224, 45.331], [136.046, 94.354, 45.538], [135.148, 102.559, 45.495], [134.236, 110.847, 45.218], [133.352, 119.224, 44.719], [132.536, 127.695, 44.012], [131.83, 136.268, 43.111], [131.275, 144.948, 42.029], [130.912, 153.742, 40.779], [130.781, 162.656, 39.375]], [[142.72, 0, 22.4], [144.799, 7.645, 25.855], [146.452, 15.297, 29.002], [147.714, 22.961, 31.849], [148.618, 30.645, 34.405], [149.2, 38.355, 36.679], [149.494, 46.097, 38.678], [149.534, 53.878, 40.413], [149.356, 61.705, 41.891], [148.993, 69.583, 43.12], [148.48, 77.52, 44.11], [147.852, 85.521, 44.869], [147.144, 93.594, 45.405], [146.389, 101.745, 45.728], [145.623, 109.98, 45.846], [144.88, 118.305, 45.766], [144.195, 126.728, 45.499], [143.601, 135.254, 45.052], [143.135, 143.891, 44.434], [142.829, 152.644, 43.654], [142.72, 161.52, 42.72]], [[155.529, 0, 20.637], [157.16, 7.587, 23.567], [158.457, 15.18, 26.32], [159.446, 22.785, 28.896], [160.155, 30.409, 31.295], [160.612, 38.056, 33.516], [160.842, 45.733, 35.559], [160.874, 53.447, 37.423], [160.734, 61.203, 39.107], [160.449, 69.007, 40.611], [160.047, 76.865, 41.935], [159.555, 84.783, 43.078], [158.999, 92.768, 44.04], [158.407, 100.825, 44.82], [157.806, 108.96, 45.416], [157.223, 117.18, 45.83], [156.685, 125.49, 46.061], [156.22, 133.896, 46.107], [155.854, 142.405, 45.968], [155.615, 151.022, 45.644], [155.529, 159.754, 45.135]], [[169.29, 0, 17.3], [170.423, 7.541, 19.536], [171.324, 15.087, 21.778], [172.011, 22.643, 24.01], [172.504, 30.214, 26.218], [172.821, 37.804, 28.388], [172.981, 45.418, 30.505], [173.003, 53.061, 32.554], [172.906, 60.739, 34.521], [172.708, 68.455, 36.392], [172.429, 76.215, 38.151], [172.087, 84.024, 39.785], [171.701, 91.886, 41.279], [171.289, 99.806, 42.618], [170.872, 107.79, 43.788], [170.467, 115.841, 44.774], [170.094, 123.966, 45.562], [169.77, 132.168, 46.137], [169.516, 140.453, 46.485], [169.35, 148.825, 46.59], [169.29, 157.29, 46.44]], [[184.086, 0, 12.162], [184.675, 7.511, 13.524], [185.142, 15.025, 15.128], [185.499, 22.545, 16.939], [185.755, 30.074, 18.924], [185.92, 37.614, 21.048], [186.003, 45.168, 23.278], [186.014, 52.74, 25.579], [185.964, 60.332, 27.917], [185.861, 67.947, 30.259], [185.716, 75.588, 32.569], [185.538, 83.258, 34.814], [185.338, 90.959, 36.96], [185.124, 98.696, 38.972], [184.908, 106.469, 40.817], [184.697, 114.283, 42.46], [184.503, 122.141, 43.867], [184.336, 130.045, 45.004], [184.204, 137.997, 45.837], [184.117, 146.002, 46.332], [184.086, 154.061, 46.455]], [[200, 0, 5], [200, 7.5, 5.29], [200, 15, 6.12], [200, 22.5, 7.43], [200, 30, 9.16], [200, 37.5, 11.25], [200, 45, 13.64], [200, 52.5, 16.27], [200, 60, 19.08], [200, 67.5, 22.01], [200, 75, 25], [200, 82.5, 27.99], [200, 90, 30.92], [200, 97.5, 33.73], [200, 105, 36.36], [200, 112.5, 38.75], [200, 120, 40.84], [200, 127.5, 42.57], [200, 135, 43.88], [200, 142.5, 44.71], [200, 150, 45]]]; + expected = [[[0, 0, 20], [0, 7.5, 21.2087], [0, 15, 21.87], [0, 22.5, 22.0362], [0, 30, 21.76], [0, 37.5, 21.0938], [0, 45, 20.09], [0, 52.5, 18.8012], [0, 60, 17.28], [0, 67.5, 15.5788], [0, 75, 13.75], [0, 82.5, 11.8462], [0, 90, 9.92], [0, 97.5, 8.02375], [0, 105, 6.21], [0, 112.5, 4.53125], [0, 120, 3.04], [0, 127.5, 1.78875], [0, 135, 0.83], [0, 142.5, 0.21625], [0, 150, 0]], [[8.78875, 0, 12.8375], [9.55074, 7.70258, 14.1825], [10.1565, 15.4023, 15.1296], [10.6188, 23.0962, 15.7065], [10.9502, 30.7815, 15.9407], [11.1634, 38.4552, 15.8601], [11.271, 46.1145, 15.4923], [11.2858, 53.7565, 14.865], [11.2204, 61.3783, 14.0059], [11.0874, 68.977, 12.9426], [10.8995, 76.5497, 11.703], [10.6695, 84.0936, 10.3146], [10.4098, 91.6057, 8.80514], [10.1333, 99.0832, 7.20235], [9.85258, 106.523, 5.5339], [9.58029, 113.923, 3.82748], [9.32911, 121.279, 2.11078], [9.1117, 128.589, 0.411491], [8.94073, 135.85, -1.2427], [8.82885, 143.059, -2.82409], [8.78875, 150.214, -4.305]], [[17.21, 0, 7.7], [18.6355, 7.86369, 9.25093], [19.7688, 15.7225, 10.5078], [20.6336, 23.5716, 11.4796], [21.2535, 31.4062, 12.1754], [21.6523, 39.2213, 12.6042], [21.8537, 47.012, 12.7752], [21.8814, 54.7737, 12.6973], [21.759, 62.5013, 12.3797], [21.5102, 70.19, 11.8313], [21.1588, 77.835, 11.0613], [20.7283, 85.4314, 10.0786], [20.2426, 92.9743, 8.89232], [19.7254, 100.459, 7.51155], [19.2002, 107.88, 5.94531], [18.6908, 115.234, 4.20266], [18.2209, 122.514, 2.29264], [17.8142, 129.717, 0.224314], [17.4943, 136.837, -1.99327], [17.285, 143.87, -4.35106], [17.21, 150.81, -6.84]], [[25.3463, 0, 4.3625], [27.3398, 7.98668, 6.17412], [28.9247, 15.9673, 7.75576], [30.1341, 23.936, 9.1033], [31.0011, 31.8865, 10.2126], [31.5589, 39.8129, 11.0797], [31.8405, 47.7092, 11.7003], [31.8792, 55.5694, 12.0704], [31.708, 63.3874, 12.1858], [31.3601, 71.1572, 12.0425], [30.8686, 78.8728, 11.6364], [30.2667, 86.5282, 10.9633], [29.5874, 94.1172, 10.0192], [28.864, 101.634, 8.79987], [28.1295, 109.072, 7.30128], [27.4171, 116.427, 5.51932], [26.76, 123.69, 3.44986], [26.1912, 130.858, 1.08881], [25.7439, 137.923, -1.56795], [25.4512, 144.879, -4.52452], [25.3463, 151.721, -7.785]], [[33.28, 0, 2.6], [35.7492, 8.07492, 4.71232], [37.7123, 16.1434, 6.62496], [39.2103, 24.1988, 8.32544], [40.2842, 32.2349, 9.80128], [40.975, 40.245, 11.04], [41.3238, 48.2227, 12.0291], [41.3717, 56.1616, 12.7562], [41.1597, 64.055, 13.2086], [40.7288, 71.8967, 13.3741], [40.12, 79.68, 13.24], [39.3744, 87.3985, 12.7939], [38.5331, 95.0458, 12.0234], [37.6371, 102.615, 10.9158], [36.7274, 110.1, 9.45888], [35.845, 117.495, 7.64], [35.031, 124.792, 5.44672], [34.3265, 131.986, 2.86656], [33.7725, 139.069, -0.11296], [33.41, 146.036, -3.50432], [33.28, 152.88, -7.32]], [[41.0938, 0, 2.1875], [43.9493, 8.13176, 4.62572], [46.2195, 16.2572, 6.86672], [47.9519, 24.37, 8.89373], [49.1938, 32.4638, 10.69], [49.9927, 40.5322, 12.2388], [50.3961, 48.5691, 13.5233], [50.4515, 56.5679, 14.5268], [50.2062, 64.5225, 15.2325], [49.7079, 72.4264, 15.6237], [49.0039, 80.2734, 15.6836], [48.1417, 88.0571, 15.3954], [47.1687, 95.7713, 14.7425], [46.1325, 103.409, 13.708], [45.0805, 110.965, 12.2752], [44.0601, 118.433, 10.4272], [43.1188, 125.805, 8.1475], [42.304, 133.076, 5.41916], [41.6633, 140.24, 2.22547], [41.244, 147.289, -1.45033], [41.0938, 154.219, -5.625]], [[48.87, 0, 2.9], [52.0256, 8.16056, 5.67454], [54.5343, 16.3154, 8.23239], [56.4487, 24.459, 10.5559], [57.821, 32.5855, 12.6275], [58.7039, 40.6894, 14.4295], [59.1497, 48.7649, 15.9443], [59.2109, 56.8064, 17.1543], [58.9399, 64.8082, 18.0418], [58.3892, 72.7646, 18.5891], [57.6113, 80.67, 18.7788], [56.6585, 88.5187, 18.593], [55.5833, 96.305, 18.0142], [54.4382, 104.023, 17.0248], [53.2756, 111.668, 15.6072], [52.148, 119.233, 13.7436], [51.1078, 126.713, 11.4165], [50.2074, 134.103, 8.6082], [49.4994, 141.396, 5.30111], [49.0361, 148.587, 1.47759], [48.87, 155.67, -2.88]], [[56.6912, 0, 4.5125], [60.0636, 8.16467, 7.61896], [62.7447, 16.3247, 10.4733], [64.7905, 24.4756, 13.0598], [66.2572, 32.6126, 15.3626], [67.2007, 40.7312, 17.3658], [67.6771, 48.8268, 19.0538], [67.7425, 56.8947, 20.4107], [67.4529, 64.9304, 21.4208], [66.8644, 72.9292, 22.0681], [66.033, 80.8866, 22.337], [65.0147, 88.7979, 22.2117], [63.8657, 96.6585, 21.6762], [62.6419, 104.464, 20.7149], [61.3995, 112.209, 19.312], [60.1944, 119.89, 17.4516], [59.0827, 127.502, 15.1179], [58.1205, 135.04, 12.2953], [57.3639, 142.5, 8.96774], [56.8687, 149.877, 5.11958], [56.6912, 157.166, 0.735]], [[64.64, 0, 6.8], [68.1489, 8.14746, 10.2192], [70.9386, 16.2917, 13.3409], [73.0672, 24.4294, 16.1531], [74.5933, 32.5574, 18.6438], [75.575, 40.6725, 20.8013], [76.0707, 48.7714, 22.6134], [76.1388, 56.8508, 24.0682], [75.8374, 64.9075, 25.1539], [75.2251, 72.9383, 25.8585], [74.36, 80.94, 26.17], [73.3005, 88.9093, 26.0765], [72.105, 96.8429, 25.5661], [70.8316, 104.738, 24.6268], [69.5389, 112.59, 23.2466], [68.285, 120.398, 21.4138], [67.1283, 128.156, 19.1162], [66.1272, 135.863, 16.3419], [65.3398, 143.515, 13.0791], [64.8247, 151.108, 9.31579], [64.64, 158.64, 5.04]], [[72.7988, 0, 9.5375], [76.3671, 8.11228, 13.2355], [79.2039, 16.2229, 16.5864], [81.3686, 24.3302, 19.5835], [82.9205, 32.4324, 22.2201], [83.9188, 40.528, 24.4893], [84.423, 48.6152, 26.3845], [84.4922, 56.6924, 27.8988], [84.1857, 64.7579, 29.0255], [83.563, 72.8101, 29.7579], [82.6833, 80.8472, 30.0892], [81.6059, 88.8676, 30.0126], [80.3901, 96.8696, 29.5215], [79.0952, 104.852, 28.6089], [77.7806, 112.812, 27.2682], [76.5054, 120.749, 25.4926], [75.3292, 128.661, 23.2754], [74.3111, 136.546, 20.6098], [73.5104, 144.402, 17.489], [72.9866, 152.229, 13.9064], [72.7988, 160.024, 9.855]], [[81.25, 0, 12.5], [84.8036, 8.0625, 16.428], [87.6288, 16.125, 19.9612], [89.7845, 24.1875, 23.0989], [91.33, 32.25, 25.84], [92.3242, 40.3125, 28.1836], [92.8263, 48.375, 30.1288], [92.8952, 56.4375, 31.6745], [92.59, 64.5, 32.82], [91.9698, 72.5625, 33.5642], [91.0938, 80.625, 33.9063], [90.0208, 88.6875, 33.8452], [88.81, 96.75, 33.38], [87.5205, 104.813, 32.5098], [86.2112, 112.875, 31.2337], [84.9414, 120.938, 29.5508], [83.77, 129, 27.46], [82.7561, 137.063, 24.9605], [81.9588, 145.125, 22.0512], [81.437, 153.188, 18.7314], [81.25, 161.25, 15]], [[90.0763, 0, 15.4625], [93.544, 8.00147, 19.5569], [96.301, 16.0046, 23.2168], [98.4047, 24.0111, 26.447], [99.9129, 32.0226, 29.2523], [100.883, 40.0407, 31.6376], [101.373, 48.0673, 33.6077], [101.44, 56.1038, 35.1675], [101.142, 64.1521, 36.3217], [100.537, 72.2137, 37.0751], [99.6823, 80.2903, 37.4327], [98.6353, 88.3837, 37.3991], [97.4537, 96.4954, 36.9793], [96.1953, 104.627, 36.1781], [94.9177, 112.781, 35.0003], [93.6785, 120.958, 33.4507], [92.5354, 129.159, 31.5342], [91.546, 137.388, 29.2555], [90.7679, 145.645, 26.6195], [90.2588, 153.932, 23.6311], [90.0763, 162.251, 20.295]], [[99.36, 0, 18.2], [102.674, 7.93254, 22.3824], [105.309, 15.8683, 26.1043], [107.319, 23.8106, 29.3755], [108.76, 31.7626, 32.2058], [109.688, 39.7275, 34.605], [110.156, 47.7086, 36.583], [110.22, 55.7092, 38.1497], [109.935, 63.7325, 39.3149], [109.357, 71.7817, 40.0884], [108.54, 79.86, 40.48], [107.539, 87.9707, 40.4996], [106.41, 96.1171, 40.1571], [105.208, 104.302, 39.4623], [103.987, 112.53, 38.425], [102.802, 120.802, 37.055], [101.71, 129.124, 35.3622], [100.765, 137.497, 33.3565], [100.021, 145.925, 31.0477], [99.5344, 154.412, 28.4456], [99.36, 162.96, 25.56]], [[109.184, 0, 20.4875], [112.279, 7.85908, 24.6648], [114.74, 15.7228, 28.3752], [116.617, 23.5957, 31.6322], [117.963, 31.4824, 34.449], [118.829, 39.3875, 36.8392], [119.267, 47.3157, 38.8162], [119.327, 55.2715, 40.3933], [119.061, 63.2596, 41.584], [118.521, 71.2845, 42.4017], [117.758, 79.3509, 42.8598], [116.823, 87.4634, 42.9718], [115.769, 95.6265, 42.751], [114.645, 103.845, 42.2108], [113.505, 112.123, 41.3647], [112.399, 120.466, 40.2262], [111.379, 128.878, 38.8085], [110.496, 137.364, 37.1251], [109.801, 145.928, 35.1894], [109.347, 154.574, 33.0149], [109.184, 163.309, 30.615]], [[119.63, 0, 22.1], [122.444, 7.78445, 26.1643], [124.682, 15.5746, 29.7809], [126.389, 23.376, 32.9648], [127.613, 31.1945, 35.7309], [128.401, 39.0356, 38.0939], [128.798, 46.9051, 40.0688], [128.853, 54.8086, 41.6703], [128.611, 62.7518, 42.9134], [128.12, 70.7404, 43.813], [127.426, 78.78, 44.3838], [126.576, 86.8763, 44.6407], [125.618, 95.035, 44.5986], [124.596, 103.262, 44.2723], [123.559, 111.562, 43.6767], [122.554, 119.942, 42.8267], [121.626, 128.407, 41.7371], [120.823, 136.962, 40.4228], [120.191, 145.614, 38.8986], [119.778, 154.368, 37.1794], [119.63, 163.23, 35.28]], [[130.781, 0, 22.8125], [133.256, 7.71199, 26.6409], [135.224, 15.4303, 30.0727], [136.725, 23.1613, 33.1212], [137.801, 30.9113, 35.8], [138.494, 38.6865, 38.1226], [138.843, 46.4934, 40.1023], [138.891, 54.3383, 41.7528], [138.679, 62.2275, 43.0875], [138.247, 70.1673, 44.1198], [137.637, 78.1641, 44.8633], [136.889, 86.2241, 45.3313], [136.046, 94.3538, 45.5375], [135.148, 102.559, 45.4952], [134.236, 110.847, 45.218], [133.352, 119.224, 44.7192], [132.536, 127.695, 44.0125], [131.83, 136.268, 43.1112], [131.275, 144.948, 42.0289], [130.912, 153.742, 40.779], [130.781, 162.656, 39.375]], [[142.72, 0, 22.4], [144.799, 7.64508, 25.855], [146.452, 15.2966, 29.0018], [147.714, 22.9612, 31.849], [148.618, 30.6451, 34.4051], [149.2, 38.355, 36.6788], [149.494, 46.0973, 38.6785], [149.534, 53.8784, 40.4129], [149.356, 61.705, 41.8906], [148.993, 69.5833, 43.1201], [148.48, 77.52, 44.11], [147.852, 85.5215, 44.8689], [147.144, 93.5942, 45.4054], [146.389, 101.745, 45.7281], [145.623, 109.98, 45.8455], [144.88, 118.305, 45.7663], [144.195, 126.728, 45.4989], [143.601, 135.254, 45.052], [143.135, 143.891, 44.4342], [142.829, 152.644, 43.654], [142.72, 161.52, 42.72]], [[155.529, 0, 20.6375], [157.16, 7.58707, 23.5668], [158.457, 15.1802, 26.3198], [159.446, 22.7853, 28.896], [160.155, 30.4085, 31.295], [160.612, 38.0558, 33.516], [160.842, 45.7333, 35.5587], [160.874, 53.4468, 37.4226], [160.734, 61.2026, 39.107], [160.449, 69.0065, 40.6115], [160.047, 76.8647, 41.9355], [159.555, 84.7831, 43.0785], [158.999, 92.7678, 44.04], [158.407, 100.825, 44.8195], [157.806, 108.96, 45.4164], [157.223, 117.18, 45.8303], [156.685, 125.49, 46.0605], [156.22, 133.896, 46.1067], [155.854, 142.405, 45.9681], [155.615, 151.022, 45.6444], [155.529, 159.754, 45.135]], [[169.29, 0, 17.3], [170.423, 7.54131, 19.5364], [171.324, 15.0875, 21.7779], [172.011, 22.6434, 24.0101], [172.504, 30.2138, 26.2182], [172.821, 37.8038, 28.388], [172.981, 45.418, 30.5047], [173.003, 53.0613, 32.5539], [172.906, 60.7387, 34.5211], [172.708, 68.455, 36.3917], [172.429, 76.215, 38.1513], [172.087, 84.0236, 39.7851], [171.701, 91.8857, 41.2789], [171.289, 99.8061, 42.6179], [170.872, 107.79, 43.7878], [170.467, 115.841, 44.7739], [170.094, 123.966, 45.5618], [169.77, 132.168, 46.1368], [169.516, 140.453, 46.4846], [169.35, 148.825, 46.5905], [169.29, 157.29, 46.44]], [[184.086, 0, 12.1625], [184.675, 7.51117, 13.5241], [185.142, 15.0252, 15.1275], [185.499, 22.545, 16.9388], [185.755, 30.0735, 18.9237], [185.92, 37.6136, 21.0481], [186.003, 45.168, 23.2779], [186.014, 52.7398, 25.5791], [185.964, 60.3317, 27.9173], [185.861, 67.9468, 30.2587], [185.716, 75.5878, 32.5689], [185.538, 83.2577, 34.8139], [185.338, 90.9593, 36.9597], [185.124, 98.6956, 38.9719], [184.908, 106.469, 40.8166], [184.697, 114.283, 42.4596], [184.503, 122.141, 43.8668], [184.336, 130.045, 45.0041], [184.204, 137.997, 45.8373], [184.117, 146.002, 46.3323], [184.086, 154.061, 46.455]], [[200, 0, 5], [200, 7.5, 5.29], [200, 15, 6.12], [200, 22.5, 7.43], [200, 30, 9.16], [200, 37.5, 11.25], [200, 45, 13.64], [200, 52.5, 16.27], [200, 60, 19.08], [200, 67.5, 22.01], [200, 75, 25], [200, 82.5, 27.99], [200, 90, 30.92], [200, 97.5, 33.73], [200, 105, 36.36], [200, 112.5, 38.75], [200, 120, 40.84], [200, 127.5, 42.57], [200, 135, 43.88], [200, 142.5, 44.71], [200, 150, 45]]]; actual = bezier_surface(t_step, ctrl_pts); - - for(i = [0:len(expected) - 1]) { - assertEqualPoints(expected[i], actual[i], float_digits = 3); - } + for(i = [0:len(expected) - 1]) { + assertEqualPoints(expected[i], actual[i], 0.0006); + } } test_bezier_surface(); \ No newline at end of file diff --git a/test/test_cross_sections.scad b/test/test_cross_sections.scad index 33e8b238..4ec60d30 100644 --- a/test/test_cross_sections.scad +++ b/test/test_cross_sections.scad @@ -26,108 +26,7 @@ module test_cross_sections() { for(i = [0:len(pts_angles) - 1]) [90, 0, pts_angles[i][1]] ]; - expected = [ - [[-8, 0, -10], [-8, 0, 10], [-12, 0, 10], [-12, 0, -10]] - ,[[-8.6994, -4.8132, -9.967], [-8.1492, -4.5088, 9.8412], [-11.6157, -6.4267, 9.967], [-12.1659, -6.7311, -9.8412]] - ,[[-6.878, -9.4072, -9.923], [-6.143, -8.4019, 9.6739], [-8.4562, -11.5658, 9.923], [-9.1913, -12.5711, -9.6739]] - ,[[-3.1918, -12.8199, -9.8682], [-2.745, -11.0255, 9.4983], [-3.6808, -14.784, 9.8682], [-4.1275, -16.5785, -9.4983]] - ,[[1.5997, -14.5687, -9.8028], [1.3334, -12.1435, 9.3149], [1.7507, -15.9442, 9.8028], [2.017, -18.3694, -9.3149]] - ,[[6.7711, -14.5108, -9.7272], [5.4956, -11.7773, 9.1239], [7.0899, -15.1939, 9.7272], [8.3654, -17.9273, -9.1239]] - ,[[11.6997, -12.74, -9.6415], [9.2792, -10.1043, 8.9258], [11.791, -12.8394, 9.6415], [14.2115, -15.4751, -8.9258]] - ,[[15.8948, -9.5061, -9.5462], [12.3539, -7.3884, 8.721], [15.4894, -9.2636, 9.5462], [19.0303, -11.3813, -8.721]] - ,[[19.0056, -5.1511, -9.4413], [14.5101, -3.9327, 8.5098], [17.9753, -4.8719, 9.4413], [22.4707, -6.0903, -8.5098]] - ,[[20.8154, -0.0611, -9.3273], [15.6418, -0.0459, 8.2925], [19.1657, -0.0562, 9.3273], [24.3394, -0.0714, -8.2925]] - ,[[21.2291, 5.3718, -9.2043], [15.7291, 3.9801, 8.0697], [19.0783, 4.8276, 9.2043], [24.5783, 6.2193, -8.0697]] - ,[[20.2549, 10.776, -9.0729], [14.8199, 7.8845, 7.8416], [17.8064, 9.4734, 9.0729], [23.2414, 12.3649, -7.8416]] - ,[[17.986, 15.8198, -8.9331], [13.0134, 11.4461, 7.6087], [15.4976, 13.6311, 8.9331], [20.4701, 18.0048, -7.6087]] - ,[[14.5805, 20.2234, -8.7855], [10.4452, 14.4877, 7.3713], [12.335, 17.1089, 8.7855], [16.4703, 22.8446, -7.3713]] - ,[[10.2434, 23.766, -8.6303], [7.2741, 16.8768, 7.1299], [8.5217, 19.7714, 8.6303], [11.4911, 26.6606, -7.1299]] - ,[[5.2094, 26.2883, -8.4678], [3.6709, 18.5244, 6.8848], [4.2677, 21.5364, 8.4678], [5.8063, 29.3002, -6.8848]] - ,[[-0.2725, 27.6913, -8.2984], [-0.1907, 19.3821, 6.6365], [-0.2201, 22.369, 8.2984], [-0.3019, 30.6781, -6.6365]] - ,[[-5.9515, 27.9334, -8.1224], [-4.1415, 19.4382, 6.3853], [-4.7462, 22.2761, 8.1224], [-6.5562, 30.7712, -6.3853]] - ,[[-11.5863, 27.0248, -7.9403], [-8.0228, 18.713, 6.1316], [-9.1318, 21.2997, 7.9403], [-12.6953, 29.6115, -6.1316]] - ,[[-16.9534, 25.0213, -7.7523], [-11.6906, 17.2541, 5.8758], [-13.2195, 19.5105, 7.7523], [-18.4823, 27.2778, -5.8758]] - ,[[-21.8538, 22.017, -7.5588], [-15.0189, 15.1311, 5.6184], [-16.8755, 17.0015, 7.5588], [-23.7104, 23.8874, -5.6184]] - ,[[-26.1178, 18.1367, -7.3602], [-17.9016, 12.4312, 5.3596], [-19.9911, 13.8822, 7.3602], [-28.2073, 19.5877, -5.3596]] - ,[[-29.608, 13.5285, -7.1568], [-20.2537, 9.2543, 5.0999], [-22.4833, 10.2731, 7.1568], [-31.8377, 14.5473, -5.0999]] - ,[[-32.2209, 8.3567, -6.9491], [-22.0116, 5.7089, 4.8397], [-24.2938, 6.3008, 6.9491], [-34.5031, 8.9486, -4.8397]] - ,[[-33.8866, 2.7944, -6.7373], [-23.1328, 1.9076, 4.5793], [-25.3884, 2.0936, 6.7373], [-36.1423, 2.9804, -4.5793]] - ,[[-34.5686, -2.9822, -6.5219], [-23.595, -2.0355, 4.3191], [-25.7552, -2.2219, 6.5219], [-36.7288, -3.1685, -4.3191]] - ,[[-34.2616, -8.7996, -6.3033], [-23.3951, -6.0087, 4.0594], [-25.4025, -6.5243, 6.3033], [-36.269, -9.3152, -4.0594]] - ,[[-32.989, -14.492, -6.0817], [-22.5472, -9.9049, 3.8007], [-24.3567, -10.6998, 6.0817], [-34.7986, -15.2869, -3.8007]] - ,[[-30.7999, -19.9048, -5.8576], [-21.0812, -13.624, 3.5433], [-22.6603, -14.6445, 5.8576], [-32.3791, -20.9253, -3.5433]] - ,[[-27.766, -24.8987, -5.6314], [-19.0409, -17.0746, 3.2875], [-20.3689, -18.2655, 5.6314], [-29.094, -26.0896, -3.2875]] - ,[[-23.9774, -29.3515, -5.4034], [-16.4816, -20.1756, 3.0338], [-17.5491, -21.4824, 5.4034], [-25.0449, -30.6583, -3.0338]] - ,[[-19.5393, -33.1603, -5.174], [-13.4683, -22.8572, 2.7823], [-14.2762, -24.2281, 5.174], [-20.3472, -34.5313, -2.7823]] - ,[[-14.5684, -36.2426, -4.9436], [-10.0739, -25.0615, 2.5334], [-10.6316, -26.449, 4.9436], [-15.1261, -37.6301, -2.5334]] - ,[[-9.1885, -38.5369, -4.7124], [-6.3765, -26.7431, 2.2876], [-6.7012, -28.1049, 4.7124], [-9.5132, -39.8987, -2.2876]] - ,[[-3.5281, -40.0022, -4.481], [-2.458, -27.8692, 2.045], [-2.5727, -29.1693, 4.481], [-3.6428, -41.3023, -2.045]] - ,[[2.2837, -40.6181, -4.2495], [1.5978, -28.4193, 1.8059], [1.6658, -29.6285, 4.2495], [2.3516, -41.8273, -1.8059]] - ,[[8.1196, -40.3838, -4.0185], [5.7071, -28.3853, 1.5707], [5.9275, -29.4812, 4.0185], [8.3399, -41.4797, -1.5707]] - ,[[13.857, -39.3164, -3.7881], [9.7877, -27.7704, 1.3397], [10.1286, -28.7377, 3.7881], [14.1979, -40.2837, -1.3397]] - ,[[19.3804, -37.4498, -3.5589], [13.7599, -26.5891, 1.1131], [14.1894, -27.4189, 3.5589], [19.8098, -38.2796, -1.1131]] - ,[[24.5828, -34.8326, -3.331], [17.5487, -24.8656, 0.8912], [18.0357, -25.5555, 3.331], [25.0697, -35.5225, -0.8912]] - ,[[29.3681, -31.5265, -3.1048], [21.0842, -22.6338, 0.6742], [21.5994, -23.1868, 3.1048], [29.8833, -32.0795, -0.6742]] - ,[[33.6516, -27.6041, -2.8807], [24.3027, -19.9353, 0.4623], [24.8196, -20.3593, 2.8807], [34.1685, -28.0282, -0.4623]] - ,[[37.3613, -23.147, -2.6589], [27.1475, -16.8191, 0.2559], [27.6431, -17.1261, 2.6589], [37.8568, -23.454, -0.2559]] - ,[[40.4386, -18.2435, -2.4398], [29.5699, -13.3402, 0.0551], [30.0247, -13.5454, 2.4398], [40.8934, -18.4487, -0.0551]] - ,[[42.8383, -12.9867, -2.2237], [31.5289, -9.5581, -0.1399], [31.9277, -9.6791, 2.2237], [43.2372, -13.1076, 0.1399]] - ,[[44.5289, -7.4725, -2.0107], [32.9923, -5.5365, -0.3288], [33.3241, -5.5922, 2.0107], [44.8606, -7.5282, 0.3288]] - ,[[45.4921, -1.798, -1.8013], [33.9365, -1.3413, -0.5116], [34.1942, -1.3515, 1.8013], [45.7499, -1.8082, 0.5116]] - ,[[45.7227, 3.9407, -1.5957], [34.3463, 2.9602, -0.688], [34.5272, 2.9758, 1.5957], [45.9035, 3.9563, 0.688]] - ,[[45.2275, 9.6496, -1.3942], [34.2154, 7.3001, -0.8578], [34.3203, 7.3224, 1.3942], [45.3324, 9.6719, 0.8578]] - ,[[44.0252, 15.2385, -1.1969], [33.5457, 11.6112, -1.021], [33.5789, 11.6228, 1.1969], [44.0584, 15.25, 1.021]] - ,[[42.1447, 20.6225, -1.0042], [32.3471, 15.8282, -1.1773], [32.316, 15.813, 1.0042], [42.1136, 20.6072, 1.1773]] - ,[[39.6247, 25.7223, -0.8163], [30.6371, 19.888, -1.3267], [30.5515, 19.8324, 0.8163], [39.539, 25.6667, 1.3267]] - ,[[36.5121, 30.4659, -0.6334], [28.4406, 23.731, -1.4691], [28.3123, 23.6239, 0.6334], [36.3838, 30.3588, 1.4691]] - ,[[32.8613, 34.789, -0.4556], [25.7887, 27.3015, -1.6043], [25.6309, 27.1345, 0.4556], [32.7036, 34.622, 1.6043]] - ,[[28.7328, 38.6357, -0.2833], [22.7186, 30.5487, -1.7323], [22.5456, 30.3161, 0.2833], [28.5598, 38.4031, 1.7323]] - ,[[24.1916, 41.9585, -0.1166], [19.2726, 33.4269, -1.853], [19.0992, 33.126, 0.1166], [24.0181, 41.6576, 1.853]] - ,[[19.3069, 44.7191, 0.0444], [15.4977, 35.8962, -1.9664], [15.3383, 35.5269, -0.0444], [19.1474, 44.3498, 1.9664]] - ,[[14.15, 46.888, 0.1995], [11.4444, 37.9227, -2.0724], [11.3131, 37.4877, -0.1995], [14.0187, 46.4531, 2.0724]] - ,[[8.7938, 48.4451, 0.3484], [7.1663, 39.4789, -2.171], [7.0763, 38.9831, -0.3484], [8.7038, 47.9493, 2.171]] - ,[[3.3117, 49.3785, 0.4912], [2.7191, 40.5438, -2.2621], [2.6823, 39.9944, -0.4912], [3.2748, 48.8291, 2.2621]] - ,[[-2.224, 49.6854, 0.6276], [-1.8398, 41.1031, -2.3458], [-1.8132, 40.5091, -0.6276], [-2.1974, 49.0914, 2.3458]] - ,[[-7.7421, 49.371, 0.7575], [-6.4528, 41.149, -2.422], [-6.3543, 40.5208, -0.7575], [-7.6436, 48.7427, 2.422]] - ,[[-13.1742, 48.4479, 0.8809], [-11.062, 40.6803, -2.4908], [-10.8851, 40.0296, -0.8809], [-12.9973, 47.7972, 2.4908]] - ,[[-18.4549, 46.9363, 0.9976], [-15.6105, 39.7022, -2.5523], [-15.3507, 39.0414, -0.9976], [-18.1951, 46.2755, 2.5523]] - ,[[-23.5227, 44.8627, 1.1076], [-20.0428, 38.2259, -2.6064], [-19.6979, 37.568, -1.1076], [-23.1777, 44.2048, 2.6064]] - ,[[-28.3204, 42.2597, 1.2108], [-24.3055, 36.2687, -2.6532], [-23.8753, 35.6268, -1.2108], [-27.8902, 41.6178, 2.6532]] - ,[[-32.7959, 39.1652, 1.3072], [-28.3479, 33.8534, -2.6928], [-27.8343, 33.24, -1.3072], [-32.2823, 38.5518, 2.6928]] - ,[[-36.9023, 35.6215, 1.3966], [-32.1226, 31.0077, -2.7253], [-31.5294, 30.4351, -1.3966], [-36.3092, 35.049, 2.7253]] - ,[[-40.5983, 31.6749, 1.4792], [-35.5857, 27.764, -2.7507], [-34.9187, 27.2436, -1.4792], [-39.9313, 31.1545, 2.7507]] - ,[[-43.8484, 27.3749, 1.5548], [-38.6975, 24.1592, -2.7693], [-37.964, 23.7012, -1.5548], [-43.1149, 26.9169, 2.7693]] - ,[[-46.6232, 22.7734, 1.6235], [-41.423, 20.2334, -2.781], [-40.6315, 19.8467, -1.6235], [-45.8317, 22.3868, 2.781]] - ,[[-48.899, 17.9242, 1.6852], [-43.7316, 16.03, -2.786], [-42.892, 15.7223, -1.6852], [-48.0594, 17.6164, 2.786]] - ,[[-50.6584, 12.882, 1.7401], [-45.5979, 11.5952, -2.7844], [-44.7209, 11.3722, -1.7401], [-49.7814, 12.659, 2.7844]] - ,[[-51.8898, 7.7023, 1.7881], [-47.0015, 6.9767, -2.7764], [-46.0985, 6.8427, -1.7881], [-50.9868, 7.5683, 2.7764]] - ,[[-52.5874, 2.4402, 1.8292], [-47.9275, 2.224, -2.7622], [-47.0102, 2.1814, -1.8292], [-51.6701, 2.3977, 2.7622]] - ,[[-52.7512, -2.8497, 1.8636], [-48.3661, -2.6128, -2.7419], [-47.4464, -2.5631, -1.8636], [-51.8314, -2.8, 2.7419]] - ,[[-52.3861, -8.114, 1.8914], [-48.3129, -7.4831, -2.7157], [-47.4023, -7.3421, -1.8914], [-51.4756, -7.973, 2.7157]] - ,[[-51.5026, -13.3011, 1.9125], [-47.7684, -12.3367, -2.6838], [-46.8784, -12.1069, -1.9125], [-50.6126, -13.0713, 2.6838]] - ,[[-50.1157, -18.3616, 1.927], [-46.7387, -17.1243, -2.6464], [-45.8799, -16.8096, -1.927], [-49.2569, -18.0469, 2.6464]] - ,[[-48.2449, -23.2483, 1.9352], [-45.2344, -21.7975, -2.6036], [-44.4166, -21.4035, -1.9352], [-47.4271, -22.8542, 2.6036]] - ,[[-45.9137, -27.9171, 1.9371], [-43.2708, -26.3101, -2.5557], [-42.503, -25.8433, -1.9371], [-45.1459, -27.4502, 2.5557]] - ,[[-43.1493, -32.327, 1.9328], [-40.8678, -30.6178, -2.5029], [-40.1579, -30.0859, -1.9328], [-42.4393, -31.7951, 2.5029]] - ,[[-39.9822, -36.4404, 1.9224], [-38.0494, -34.6789, -2.4455], [-37.4038, -34.0904, -1.9224], [-39.3365, -35.852, 2.4455]] - ,[[-36.4458, -40.2234, 1.9062], [-34.8432, -38.4547, -2.3836], [-34.2671, -37.8189, -1.9062], [-35.8698, -39.5876, 2.3836]] - ,[[-32.576, -43.6457, 1.8843], [-31.2804, -41.9098, -2.3175], [-30.7777, -41.2363, -1.8843], [-32.0734, -42.9723, 2.3175]] - ,[[-28.4107, -46.6811, 1.8567], [-27.3951, -45.0122, -2.2475], [-26.9683, -44.311, -1.8567], [-27.984, -45.9799, 2.2475]] - ,[[-23.9894, -49.307, 1.8238], [-23.224, -47.7338, -2.1737], [-22.8742, -47.0149, -1.8238], [-23.6397, -48.5881, 2.1737]] - ,[[-19.353, -51.5054, 1.7857], [-18.8063, -50.0505, -2.0966], [-18.5332, -49.3236, -1.7857], [-19.0799, -50.7785, 2.0966]] - ,[[-14.5431, -53.2617, 1.7426], [-14.1827, -51.9419, -2.0162], [-13.9847, -51.2167, -1.7426], [-14.3451, -52.5365, 2.0162]] - ,[[-9.6019, -54.5657, 1.6946], [-9.3954, -53.3923, -1.9329], [-9.2697, -52.6778, -1.6946], [-9.4761, -53.8511, 1.9329]] - ,[[-4.5717, -55.4109, 1.6421], [-4.4874, -54.3899, -1.847], [-4.4301, -53.6944, -1.6421], [-4.5143, -54.7154, 1.847]] - ,[[0.5054, -55.7948, 1.5852], [0.4975, -54.9272, -1.7587], [0.4914, -54.2584, -1.5852], [0.4993, -55.126, 1.7587]] - ,[[5.5877, -55.7184, 1.5241], [5.5157, -55.001, -1.6683], [5.452, -54.3657, -1.5241], [5.524, -55.0832, 1.6683]] - ,[[10.6345, -55.1867, 1.459], [10.5238, -54.6123, -1.576], [10.4089, -54.0162, -1.459], [10.5196, -54.5906, 1.576]] - ,[[15.6062, -54.2076, 1.3903], [15.479, -53.7659, -1.4822], [15.32, -53.2138, -1.3903], [15.4472, -53.6555, 1.4822]] - ,[[20.4644, -52.7927, 1.3181], [20.3396, -52.4708, -1.3872], [20.144, -51.9663, -1.3181], [20.2688, -52.2882, 1.3872]] - ,[[25.1725, -50.9564, 1.2428], [25.0653, -50.7395, -1.2912], [24.8409, -50.2851, -1.2428], [24.948, -50.502, 1.2912]] - ,[[29.6956, -48.7161, 1.1644], [29.6176, -48.5881, -1.1944], [29.372, -48.1852, -1.1644], [29.4501, -48.3133, 1.1944]] - ,[[34.0009, -46.0918, 1.0834], [33.9598, -46.0361, -1.0973], [33.7009, -45.6851, -1.0834], [33.742, -45.7408, 1.0973]] - ,[[38.0578, -43.1059, 1], [38.0578, -43.1059, -1], [37.793, -42.8061, -1], [37.793, -42.8061, 1]] - ]; + expected = [[[-8, -8.98657e-6, -10], [-8, -8.98657e-6, 10], [-12, -0.0000134799, 10], [-12, -0.0000134799, -10]], [[-8.69941, -4.81325, -9.96698], [-8.14922, -4.50884, 9.84122], [-11.6156, -6.42677, 9.96698], [-12.1658, -6.73118, -9.84122]], [[-6.87799, -9.40726, -9.92296], [-6.14294, -8.4019, 9.67387], [-8.45619, -11.5658, 9.92296], [-9.19124, -12.5712, -9.67387]], [[-3.19172, -12.82, -9.86815], [-2.74495, -11.0255, 9.4983], [-3.6807, -14.784, 9.86815], [-4.12747, -16.5785, -9.4983]], [[1.59972, -14.5687, -9.80282], [1.33342, -12.1435, 9.31486], [1.75076, -15.9442, 9.80282], [2.01706, -18.3694, -9.31486]], [[6.77117, -14.5107, -9.72719], [5.49566, -11.7773, 9.12391], [7.08993, -15.1939, 9.72719], [8.36544, -17.9273, -9.12391]], [[11.6998, -12.74, -9.64155], [9.27924, -10.1042, 8.92583], [11.791, -12.8393, 9.64155], [14.2116, -15.4751, -8.92583]], [[15.8949, -9.50598, -9.54615], [12.354, -7.38833, 8.72099], [15.4894, -9.26352, 9.54615], [19.0303, -11.3812, -8.72099]], [[19.0056, -5.15104, -9.44129], [14.5101, -3.93264, 8.50976], [17.9753, -4.8718, 9.44129], [22.4708, -6.0902, -8.50976]], [[20.8154, -0.0609642, -9.32725], [15.6418, -0.0458117, 8.29253], [19.1657, -0.0561326, 9.32725], [24.3394, -0.0712851, -8.29253]], [[21.229, 5.37195, -9.20434], [15.7291, 3.9802, 8.06968], [19.0783, 4.82771, 9.20434], [24.5783, 6.21946, -8.06968]], [[20.2549, 10.7762, -9.07287], [14.8198, 7.88457, 7.8416], [17.8063, 9.47349, 9.07287], [23.2414, 12.3651, -7.8416]], [[17.9859, 15.8199, -8.93315], [13.0133, 11.4462, 7.60868], [15.4975, 13.6312, 8.93315], [20.47, 18.0049, -7.60868]], [[14.5804, 20.2235, -8.78551], [10.4452, 14.4878, 7.37132], [12.3349, 17.1089, 8.78551], [16.4701, 22.8447, -7.37132]], [[10.2433, 23.7661, -8.63027], [7.27401, 16.8769, 7.1299], [8.5216, 19.7715, 8.63027], [11.4909, 26.6607, -7.1299]], [[5.20923, 26.2883, -8.46779], [3.67076, 18.5244, 6.88482], [4.26761, 21.5364, 8.46779], [5.80607, 29.3003, -6.88482]], [[-0.272672, 27.6913, -8.29839], [-0.190853, 19.3821, 6.63649], [-0.220264, 22.369, 8.29839], [-0.302083, 30.6781, -6.63649]], [[-5.95173, 27.9333, -8.12244], [-4.14168, 19.4382, 6.38528], [-4.74634, 22.276, 8.12244], [-6.55639, 30.7712, -6.38528]], [[-11.5865, 27.0247, -7.94028], [-8.02297, 18.713, 6.13159], [-9.13197, 21.2996, 7.94028], [-12.6955, 29.6114, -6.13159]], [[-16.9536, 25.0212, -7.75228], [-11.6908, 17.254, 5.87583], [-13.2196, 19.5104, 7.75228], [-18.4825, 27.2776, -5.87583]], [[-21.8539, 22.0168, -7.55879], [-15.019, 15.131, 5.61836], [-16.8756, 17.0014, 7.55879], [-23.7105, 23.8873, -5.61836]], [[-26.1179, 18.1365, -7.36018], [-17.9017, 12.4311, 5.35959], [-19.9912, 13.8821, 7.36018], [-28.2075, 19.5875, -5.35959]], [[-29.6081, 13.5283, -7.15682], [-20.2537, 9.25418, 5.0999], [-22.4834, 10.2729, 7.15682], [-31.8378, 14.5471, -5.0999]], [[-32.2209, 8.35645, -6.94907], [-22.0116, 5.70868, 4.83966], [-24.2939, 6.30058, 6.94907], [-34.5032, 8.94835, -4.83966]], [[-33.8866, 2.79414, -6.73732], [-23.1328, 1.90742, 4.57925], [-25.3885, 2.09342, 6.73732], [-36.1423, 2.98013, -4.57925]], [[-34.5686, -2.98247, -6.52192], [-23.595, -2.0357, 4.31905], [-25.7552, -2.22208, 6.52192], [-36.7288, -3.16884, -4.31905]], [[-34.2615, -8.79991, -6.30327], [-23.395, -6.0089, 4.05942], [-25.4024, -6.52448, 6.30327], [-36.2689, -9.31549, -4.05942]], [[-32.9889, -14.4922, -6.08172], [-22.5471, -9.90508, 3.80073], [-24.3566, -10.7, 6.08172], [-34.7984, -15.2872, -3.80073]], [[-30.7998, -19.9051, -5.85765], [-21.0811, -13.6241, 3.54332], [-22.6602, -14.6447, 5.85765], [-32.3789, -20.9256, -3.54332]], [[-27.7658, -24.8989, -5.63143], [-19.0407, -17.0747, 3.28755], [-20.3687, -18.2656, 5.63143], [-29.0938, -26.0898, -3.28755]], [[-23.9771, -29.3517, -5.40343], [-16.4814, -20.1757, 3.03376], [-17.5489, -21.4826, 5.40343], [-25.0447, -30.6585, -3.03376]], [[-19.5391, -33.1605, -5.17403], [-13.4681, -22.8573, 2.78228], [-14.276, -24.2283, 5.17403], [-20.3469, -34.5314, -2.78228]], [[-14.568, -36.2428, -4.94357], [-10.0737, -25.0616, 2.53344], [-10.6314, -26.4491, 4.94357], [-15.1258, -37.6303, -2.53344]], [[-9.18817, -38.5369, -4.71244], [-6.37624, -26.7432, 2.28756], [-6.70093, -28.105, 4.71244], [-9.51286, -39.8988, -2.28756]], [[-3.52774, -40.0022, -4.48097], [-2.45775, -27.8692, 2.04496], [-2.5724, -29.1693, 4.48097], [-3.64239, -41.3023, -2.04496]], [[2.28404, -40.6181, -4.24954], [1.59808, -28.4193, 1.80592], [1.66607, -29.6285, 4.24954], [2.35204, -41.8273, -1.80592]], [[8.11996, -40.3838, -4.01848], [5.70741, -28.3852, 1.57074], [5.92777, -29.4811, 4.01848], [8.34031, -41.4797, -1.57074]], [[13.8574, -39.3163, -3.78814], [9.78792, -27.7703, 1.33971], [10.1288, -28.7376, 3.78814], [14.1983, -40.2835, -1.33971]], [[19.3807, -37.4496, -3.55887], [13.7602, -26.5889, 1.1131], [14.1896, -27.4188, 3.55887], [19.8102, -38.2794, -1.1131]], [[24.5832, -34.8323, -3.33099], [17.549, -24.8655, 0.891165], [18.0359, -25.5554, 3.33099], [25.0701, -35.5222, -0.891165]], [[29.3684, -31.5262, -3.10482], [21.0844, -22.6336, 0.674163], [21.5996, -23.1866, 3.10482], [29.8836, -32.0792, -0.674163]], [[33.6518, -27.6038, -2.8807], [24.3029, -19.9351, 0.462334], [24.8198, -20.3591, 2.8807], [34.1688, -28.0278, -0.462334]], [[37.3615, -23.1466, -2.65893], [27.1477, -16.8188, 0.255906], [27.6433, -17.1259, 2.65893], [37.8571, -23.4537, -0.255906]], [[40.4388, -18.2431, -2.43982], [29.57, -13.3399, 0.0550995], [30.0248, -13.545, 2.43982], [40.8936, -18.4483, -0.0550995]], [[42.8385, -12.9862, -2.22366], [31.529, -9.55782, -0.13988], [31.9278, -9.67872, 2.22366], [43.2373, -13.1071, 0.13988]], [[44.529, -7.47204, -2.01074], [32.9924, -5.53618, -0.328838], [33.3241, -5.59185, 2.01074], [44.8607, -7.52771, 0.328838]], [[45.4921, -1.79751, -1.80134], [33.9365, -1.34092, -0.51159], [34.1942, -1.3511, 1.80134], [45.7499, -1.8077, 0.51159]], [[45.7226, 3.94115, -1.59574], [34.3463, 2.96055, -0.687966], [34.5272, 2.97614, 1.59574], [45.9035, 3.95674, 0.687966]], [[45.2274, 9.65004, -1.39418], [34.2153, 7.30043, -0.857807], [34.3202, 7.32281, 1.39418], [45.3323, 9.67243, 0.857807]], [[44.025, 15.239, -1.19694], [33.5455, 11.6116, -1.02097], [33.5788, 11.6231, 1.19694], [44.0583, 15.2505, 1.02097]], [[42.1445, 20.6229, -1.00423], [32.3469, 15.8286, -1.17731], [32.3158, 15.8134, 1.00423], [42.1134, 20.6077, 1.17731]], [[39.6244, 25.7227, -0.8163], [30.6369, 19.8884, -1.32672], [30.5513, 19.8328, 0.8163], [39.5387, 25.6671, 1.32672]], [[36.5118, 30.4663, -0.633365], [28.4403, 23.7313, -1.46909], [28.312, 23.6242, 0.633365], [36.3834, 30.3592, 1.46909]], [[32.8609, 34.7894, -0.455635], [25.7884, 27.3018, -1.60432], [25.6306, 27.1348, 0.455635], [32.7032, 34.6224, 1.60432]], [[28.7323, 38.636, -0.283306], [22.7182, 30.5489, -1.73233], [22.5453, 30.3164, 0.283306], [28.5594, 38.4035, 1.73233]], [[24.1911, 41.9588, -0.116567], [19.2722, 33.4271, -1.85305], [19.0988, 33.1262, 0.116567], [24.0177, 41.6579, 1.85305]], [[19.3063, 44.7193, 0.0444085], [15.4973, 35.8963, -1.96642], [15.3379, 35.5271, -0.0444085], [19.1469, 44.3501, 1.96642]], [[14.1494, 46.8882, 0.199456], [11.4439, 37.9228, -2.0724], [11.3127, 37.4878, -0.199456], [14.0182, 46.4532, 2.0724]], [[8.79326, 48.4452, 0.348425], [7.16581, 39.479, -2.17096], [7.07582, 38.9832, -0.348425], [8.70327, 47.9494, 2.17096]], [[3.31108, 49.3786, 0.491176], [2.71867, 40.5439, -2.26209], [2.68183, 39.9944, -0.491176], [3.27424, 48.8292, 2.26209]], [[-2.22457, 49.6854, 0.627581], [-1.84032, 41.1031, -2.34576], [-1.81372, 40.509, -0.627581], [-2.19797, 49.0913, 2.34576]], [[-7.74272, 49.3709, 0.757525], [-6.45329, 41.1489, -2.42201], [-6.35477, 40.5207, -0.757525], [-7.64419, 48.7426, 2.42201]], [[-13.1748, 48.4477, 0.880906], [-11.0625, 40.6802, -2.49083], [-10.8856, 40.0295, -0.880906], [-12.9979, 47.797, 2.49083]], [[-18.4555, 46.936, 0.997633], [-15.611, 39.702, -2.55228], [-15.3512, 39.0412, -0.997633], [-18.1957, 46.2753, 2.55228]], [[-23.5232, 44.8624, 1.10763], [-20.0433, 38.2257, -2.60638], [-19.6983, 37.5678, -1.10763], [-23.1783, 44.2046, 2.60638]], [[-28.3209, 42.2594, 1.21083], [-24.306, 36.2684, -2.65321], [-23.8757, 35.6265, -1.21083], [-27.8907, 41.6174, 2.65321]], [[-32.7964, 39.1648, 1.30718], [-28.3484, 33.853, -2.69282], [-27.8347, 33.2397, -1.30718], [-32.2828, 38.5514, 2.69282]], [[-36.9028, 35.621, 1.39664], [-32.123, 31.0072, -2.7253], [-31.5298, 30.4347, -1.39664], [-36.3096, 35.0485, 2.7253]], [[-40.5987, 31.6744, 1.47919], [-35.586, 27.7636, -2.75075], [-34.919, 27.2432, -1.47919], [-39.9317, 31.154, 2.75075]], [[-43.8488, 27.3743, 1.5548], [-38.6979, 24.1587, -2.76926], [-37.9643, 23.7007, -1.5548], [-43.1152, 26.9164, 2.76926]], [[-46.6235, 22.7728, 1.62348], [-41.4233, 20.2328, -2.78095], [-40.6318, 19.8462, -1.62348], [-45.8319, 22.3862, 2.78095]], [[-48.8992, 17.9235, 1.68524], [-43.7318, 16.0295, -2.78595], [-42.8922, 15.7217, -1.68524], [-48.0596, 17.6158, 2.78595]], [[-50.6585, 12.8814, 1.74009], [-45.598, 11.5946, -2.7844], [-44.721, 11.3716, -1.74009], [-49.7815, 12.6584, 2.7844]], [[-51.8899, 7.70161, 1.78808], [-47.0016, 6.97608, -2.77644], [-46.0986, 6.84206, -1.78808], [-50.9869, 7.56758, 2.77644]], [[-52.5875, 2.43952, 1.82925], [-47.9276, 2.22335, -2.76223], [-47.0103, 2.1808, -1.82925], [-51.6702, 2.39697, 2.76223]], [[-52.7511, -2.85036, 1.86365], [-48.3661, -2.61342, -2.74193], [-47.4463, -2.56372, -1.86365], [-51.8313, -2.80066, 2.74193]], [[-52.386, -8.11469, 1.89136], [-48.3128, -7.48374, -2.71573], [-47.4022, -7.34269, -1.89136], [-51.4755, -7.97365, 2.71573]], [[-51.5025, -13.3018, 1.91246], [-47.7683, -12.3374, -2.68381], [-46.8782, -12.1075, -1.91246], [-50.6124, -13.072, 2.68381]], [[-50.1155, -18.3622, 1.92704], [-46.7385, -17.1249, -2.64636], [-45.8796, -16.8102, -1.92704], [-49.2566, -18.0476, 2.64636]], [[-48.2446, -23.2489, 1.93521], [-45.2341, -21.7982, -2.60358], [-44.4163, -21.4041, -1.93521], [-47.4268, -22.8548, 2.60358]], [[-45.9133, -27.9177, 1.93709], [-43.2704, -26.3107, -2.5557], [-42.5027, -25.8439, -1.93709], [-45.1455, -27.4508, 2.5557]], [[-43.1488, -32.3276, 1.93279], [-40.8674, -30.6183, -2.50292], [-40.1574, -30.0864, -1.93279], [-42.4388, -31.7957, 2.50292]], [[-39.9817, -36.441, 1.92245], [-38.0489, -34.6794, -2.44547], [-37.4033, -34.0909, -1.92245], [-39.336, -35.8525, 2.44547]], [[-36.4453, -40.2239, 1.90622], [-34.8427, -38.4552, -2.38358], [-34.2666, -37.8194, -1.90622], [-35.8692, -39.5881, 2.38358]], [[-32.5754, -43.6462, 1.88427], [-31.2798, -41.9102, -2.3175], [-30.7772, -41.2368, -1.88427], [-32.0728, -42.9727, 2.3175]], [[-28.4101, -46.6815, 1.85674], [-27.3944, -45.0126, -2.24747], [-26.9677, -44.3114, -1.85674], [-27.9833, -45.9803, 2.24747]], [[-23.9887, -49.3074, 1.82383], [-23.2234, -47.7342, -2.17373], [-22.8736, -47.0152, -1.82383], [-23.639, -48.5884, 2.17373]], [[-19.3523, -51.5056, 1.78571], [-18.8056, -50.0507, -2.09656], [-18.5325, -49.3239, -1.78571], [-19.0792, -50.7788, 2.09656]], [[-14.5423, -53.2619, 1.74258], [-14.182, -51.9421, -2.01619], [-13.984, -51.2169, -1.74258], [-14.3443, -52.5367, 2.01619]], [[-9.60108, -54.5658, 1.69463], [-9.39462, -53.3924, -1.93291], [-9.2689, -52.6779, -1.69463], [-9.47536, -53.8513, 1.93291]], [[-4.57088, -55.4109, 1.64208], [-4.48665, -54.3899, -1.84698], [-4.42929, -53.6945, -1.64208], [-4.51351, -54.7155, 1.84698]], [[0.506175, -55.7947, 1.58515], [0.498304, -54.9272, -1.75867], [0.492238, -54.2584, -1.58515], [0.500108, -55.126, 1.75867]], [[5.58849, -55.7184, 1.52406], [5.51653, -55.0009, -1.66826], [5.45282, -54.3657, -1.52406], [5.52477, -55.0831, 1.66826]], [[10.6353, -55.1865, 1.45903], [10.5246, -54.6121, -1.57602], [10.4097, -54.0161, -1.45903], [10.5204, -54.5905, 1.57602]], [[15.607, -54.2074, 1.39031], [15.4798, -53.7657, -1.48224], [15.3208, -53.2136, -1.39031], [15.448, -53.6553, 1.48224]], [[20.4652, -52.7924, 1.31814], [20.3404, -52.4705, -1.38719], [20.1448, -51.966, -1.31814], [20.2696, -52.2879, 1.38719]], [[25.1733, -50.956, 1.24277], [25.0661, -50.7391, -1.29116], [24.8416, -50.2847, -1.24277], [24.9488, -50.5017, 1.29116]], [[29.6964, -48.7156, 1.16445], [29.6183, -48.5876, -1.19443], [29.3728, -48.1848, -1.16445], [29.4508, -48.3128, 1.19443]], [[34.0016, -46.0913, 1.08344], [33.9605, -46.0356, -1.09728], [33.7016, -45.6846, -1.08344], [33.7427, -45.7403, 1.09728]], [[38.0584, -43.1054, 1], [38.0584, -43.1054, -1], [37.7937, -42.8055, -1], [37.7937, -42.8055, 1]]]; sects = cross_sections(shape_pts, pts, angles, twist = 180, scale = 0.1); diff --git a/test/test_ellipse_extrude.scad b/test/test_ellipse_extrude.scad index 8655c3c0..3b4573a1 100644 --- a/test/test_ellipse_extrude.scad +++ b/test/test_ellipse_extrude.scad @@ -13,11 +13,11 @@ module test_ellipse_extrude() { expected_zs = [0, 0.392295, 0.782172, 1.16723, 1.54508, 1.91342, 2.26995, 2.61249, 2.93893, 3.24724, 3.53553, 3.80203, 4.04508, 4.2632, 4.45503, 4.6194, 4.75528, 4.86185, 4.93844, 4.98459, 5]; for(i = [0:len(expected_fs) - 1]) { - assertEqual(expected_fs[i], child_fs[i]); + assertEqualNum(expected_fs[i], child_fs[i]); } for(i = [0:len(expected_zs) - 1]) { - assertEqual(expected_zs[i], pre_zs[i]); + assertEqualNum(expected_zs[i], pre_zs[i]); } diff --git a/test/test_function_grapher.scad b/test/test_function_grapher.scad index b78ab755..17e4ec98 100644 --- a/test/test_function_grapher.scad +++ b/test/test_function_grapher.scad @@ -33,7 +33,7 @@ module test_function_grapher_default() { expected_faces = [[0, 5, 1], [1, 6, 2], [2, 7, 3], [4, 9, 5], [5, 10, 6], [6, 11, 7], [8, 13, 9], [9, 14, 10], [10, 15, 11], [0, 4, 5], [1, 5, 6], [2, 6, 7], [4, 8, 9], [5, 9, 10], [6, 10, 11], [8, 12, 13], [9, 13, 14], [10, 14, 15], [17, 21, 16], [18, 22, 17], [19, 23, 18], [21, 25, 20], [22, 26, 21], [23, 27, 22], [25, 29, 24], [26, 30, 25], [27, 31, 26], [21, 20, 16], [22, 21, 17], [23, 22, 18], [25, 24, 20], [26, 25, 21], [27, 26, 22], [29, 28, 24], [30, 29, 25], [31, 30, 26], [0, 1, 17, 16], [1, 2, 18, 17], [2, 3, 19, 18], [3, 7, 23, 19], [7, 11, 27, 23], [11, 15, 31, 27], [13, 12, 28, 29], [14, 13, 29, 30], [15, 14, 30, 31], [4, 0, 16, 20], [8, 4, 20, 24], [12, 8, 24, 28]]; for(i = [0:len(expected_faces) - 1]) { - assertTrue(expected_faces[i] == faces[i]); + assert(expected_faces[i] == faces[i]); } } diff --git a/test/test_golden_spiral.scad b/test/test_golden_spiral.scad index de2963c9..cf6f658b 100644 --- a/test/test_golden_spiral.scad +++ b/test/test_golden_spiral.scad @@ -12,20 +12,19 @@ module test_golden_spiral() { point_distance = 1 ); - expected_pts = [[2, 0], [1.8478, 0.7654], [1.4142, 1.4142], [0.7654, 1.8478], [0, 2], [-0.9271, 1.8532], [-1.7634, 1.4271], [-2.4271, 0.7634], [-2.8532, -0.0729], [-3, -1], [-2.9039, -1.9755], [-2.6194, -2.9134], [-2.1573, -3.7779], [-1.5355, -4.5355], [-0.7779, -5.1573], [0.0866, -5.6194], [1.0245, -5.9039], [2, -6], [2.9643, -5.9417], [3.9145, -5.7675], [4.8368, -5.4801], [5.7178, -5.0836], [6.5445, -4.5839], [7.305, -3.9881], [7.9881, -3.305], [8.5839, -2.5445], [9.0836, -1.7178], [9.4801, -0.8368], [9.7675, 0.0855], [9.9417, 1.0357], [10, 2], [10, 2], [9.9636, 2.9715], [9.8548, 3.9375], [9.6741, 4.8928], [9.4224, 5.8318], [9.1014, 6.7494], [8.7126, 7.6405], [8.2583, 8.5], [7.7411, 9.3232], [7.1638, 10.1054], [6.5297, 10.8422], [5.8422, 11.5297], [5.1054, 12.1638], [4.3232, 12.7411], [3.5, 13.2583], [2.6405, 13.7126], [1.7494, 14.1014], [0.8318, 14.4224], [-0.1072, 14.6741], [-1.0625, 14.8548], [-2.0285, 14.9636], [-3, 15], [-3.9992, 14.9762], [-4.9962, 14.9049], [-5.9886, 14.7863], [-6.9743, 14.6205], [-7.9509, 14.408], [-8.9164, 14.1494], [-9.8684, 13.845], [-10.8049, 13.4957], [-11.7237, 13.1023], [-12.6228, 12.6655], [-13.5, 12.1865], [-14.3535, 11.6663], [-15.1812, 11.1061], [-15.9813, 10.5071], [-16.7521, 9.8707], [-17.4917, 9.1984], [-18.1984, 8.4917], [-18.8707, 7.7521], [-19.5071, 6.9813], [-20.1061, 6.1812], [-20.6663, 5.3535], [-21.1865, 4.5], [-21.6655, 3.6228], [-22.1023, 2.7237], [-22.4957, 1.8049], [-22.845, 0.8684], [-23.1494, -0.0836], [-23.408, -1.0491], [-23.6205, -2.0257], [-23.7863, -3.0114], [-23.9049, -4.0038], [-23.9762, -5.0008], [-24, -6], [-23.9856, -6.9889], [-23.9425, -7.9769], [-23.8706, -8.9633], [-23.7701, -9.9472], [-23.641, -10.9277], [-23.4835, -11.904], [-23.2976, -12.8754], [-23.0835, -13.8409], [-22.8415, -14.7998], [-22.5716, -15.7513], [-22.2742, -16.6945], [-21.9495, -17.6287], [-21.5978, -18.553], [-21.2193, -19.4667], [-20.8145, -20.369], [-20.3835, -21.2592], [-19.9268, -22.1364], [-19.4449, -23], [-18.938, -23.8492], [-18.4066, -24.6833], [-17.8512, -25.5016], [-17.2722, -26.3034], [-16.6701, -27.088], [-16.0455, -27.8548], [-15.3989, -28.6031], [-14.7307, -29.3322], [-14.0416, -30.0416], [-13.3322, -30.7307], [-12.6031, -31.3989], [-11.8548, -32.0455], [-11.088, -32.6701], [-10.3034, -33.2722], [-9.5016, -33.8512], [-8.6833, -34.4066], [-7.8492, -34.938], [-7, -35.4449], [-6.1364, -35.9268], [-5.2592, -36.3835], [-4.369, -36.8145], [-3.4667, -37.2193], [-2.553, -37.5978], [-1.6287, -37.9495], [-0.6945, -38.2742], [0.2487, -38.5716], [1.2002, -38.8415], [2.1591, -39.0835], [3.1246, -39.2976], [4.096, -39.4835], [5.0723, -39.641], [6.0528, -39.7701], [7.0367, -39.8706], [8.0231, -39.9425], [9.0111, -39.9856], [10, -40], [10.993, -39.991], [11.9856, -39.9641], [12.9776, -39.9193], [13.9687, -39.8566], [14.9584, -39.776], [15.9465, -39.6776], [16.9327, -39.5613], [17.9167, -39.4273], [18.898, -39.2755], [19.8765, -39.106], [20.8517, -38.9188], [21.8234, -38.7141], [22.7912, -38.4919], [23.7549, -38.2523], [24.7141, -37.9952], [25.6684, -37.721], [26.6177, -37.4295], [27.5616, -37.1209], [28.4997, -36.7954], [29.4318, -36.4529], [30.3576, -36.0937], [31.2767, -35.7179], [32.1889, -35.3255], [33.0939, -34.9166], [33.9913, -34.4916], [34.881, -34.0504], [35.7625, -33.5932], [36.6356, -33.1201], [37.5, -32.6314], [38.3555, -32.1271], [39.2017, -31.6075], [40.0384, -31.0727], [40.8653, -30.5229], [41.6821, -29.9582], [42.4887, -29.3789], [43.2846, -28.7851], [44.0697, -28.1771], [44.8436, -27.5549], [45.6062, -26.9189], [46.3573, -26.2692], [47.0964, -25.6061], [47.8235, -24.9298], [48.5382, -24.2404], [49.2404, -23.5382], [49.9298, -22.8235], [50.6061, -22.0964], [51.2692, -21.3573], [51.9189, -20.6062], [52.5549, -19.8436], [53.1771, -19.0697], [53.7851, -18.2846], [54.3789, -17.4887], [54.9582, -16.6821], [55.5229, -15.8653], [56.0727, -15.0384], [56.6075, -14.2017], [57.1271, -13.3555], [57.6314, -12.5], [58.1201, -11.6356], [58.5932, -10.7625], [59.0504, -9.881], [59.4916, -8.9913], [59.9166, -8.0939], [60.3255, -7.1889], [60.7179, -6.2767], [61.0937, -5.3576], [61.4529, -4.4318], [61.7954, -3.4997], [62.1209, -2.5616], [62.4295, -1.6177], [62.721, -0.6684], [62.9952, 0.2859], [63.2523, 1.2451], [63.4919, 2.2088], [63.7141, 3.1766], [63.9188, 4.1483], [64.106, 5.1235], [64.2755, 6.102], [64.4273, 7.0833], [64.5613, 8.0673], [64.6776, 9.0535], [64.776, 10.0416], [64.8566, 11.0313], [64.9193, 12.0224], [64.9641, 13.0144], [64.991, 14.007], [65, 15]]; - + expected_pts = [[2, 0], [1.84776, 0.765367], [1.41421, 1.41421], [0.765367, 1.84776], [0, 2], [-0.927051, 1.85317], [-1.76336, 1.42705], [-2.42705, 0.763356], [-2.85317, -0.072949], [-3, -1], [-2.90393, -1.97545], [-2.6194, -2.91342], [-2.15735, -3.77785], [-1.53553, -4.53553], [-0.777851, -5.15735], [0.0865828, -5.6194], [1.02455, -5.90393], [2, -6], [2.96429, -5.94167], [3.91453, -5.76753], [4.83684, -5.48013], [5.71779, -5.08365], [6.54452, -4.58387], [7.30498, -3.98809], [7.98809, -3.30498], [8.58387, -2.54452], [9.08365, -1.71779], [9.48013, -0.836839], [9.76753, 0.0854747], [9.94167, 1.03571], [10, 2], [10, 2], [9.96365, 2.97149], [9.8548, 3.93755], [9.67406, 4.89277], [9.42245, 5.83182], [9.10136, 6.74943], [8.7126, 7.64049], [8.25833, 8.5], [7.7411, 9.32316], [7.16381, 10.1054], [6.52967, 10.8422], [5.84225, 11.5297], [5.10537, 12.1638], [4.32316, 12.7411], [3.5, 13.2583], [2.64049, 13.7126], [1.74943, 14.1014], [0.831817, 14.4224], [-0.107228, 14.6741], [-1.06245, 14.8548], [-2.02851, 14.9636], [-3, 15], [-3.99922, 14.9762], [-4.99618, 14.9049], [-5.98861, 14.7863], [-6.97428, 14.6205], [-7.95094, 14.408], [-8.91638, 14.1494], [-9.86843, 13.845], [-10.8049, 13.4957], [-11.7237, 13.1023], [-12.6228, 12.6655], [-13.5, 12.1865], [-14.3535, 11.6663], [-15.1812, 11.1061], [-15.9813, 10.5071], [-16.7521, 9.87074], [-17.4917, 9.19841], [-18.1984, 8.49166], [-18.8707, 7.75208], [-19.5071, 6.98134], [-20.1061, 6.1812], [-20.6663, 5.35346], [-21.1865, 4.5], [-21.6655, 3.62276], [-22.1023, 2.72372], [-22.4957, 1.80491], [-22.845, 0.868427], [-23.1494, -0.0836163], [-23.408, -1.04906], [-23.6205, -2.02572], [-23.7863, -3.01139], [-23.9049, -4.00382], [-23.9762, -5.00078], [-24, -6], [-23.9856, -6.98888], [-23.9425, -7.97692], [-23.8706, -8.9633], [-23.7701, -9.94716], [-23.641, -10.9277], [-23.4835, -11.904], [-23.2976, -12.8754], [-23.0835, -13.8409], [-22.8415, -14.7998], [-22.5716, -15.7513], [-22.2742, -16.6945], [-21.9495, -17.6287], [-21.5978, -18.553], [-21.2193, -19.4667], [-20.8145, -20.369], [-20.3835, -21.2592], [-19.9268, -22.1364], [-19.4449, -23], [-18.938, -23.8492], [-18.4066, -24.6833], [-17.8512, -25.5016], [-17.2722, -26.3034], [-16.6701, -27.088], [-16.0455, -27.8548], [-15.3989, -28.6031], [-14.7307, -29.3322], [-14.0416, -30.0416], [-13.3322, -30.7307], [-12.6031, -31.3989], [-11.8548, -32.0455], [-11.088, -32.6701], [-10.3034, -33.2722], [-9.5016, -33.8512], [-8.68331, -34.4066], [-7.8492, -34.938], [-7, -35.4449], [-6.13641, -35.9268], [-5.25917, -36.3835], [-4.36902, -36.8145], [-3.46671, -37.2193], [-2.55301, -37.5978], [-1.62868, -37.9495], [-0.694522, -38.2742], [0.24869, -38.5716], [1.20015, -38.8415], [2.15906, -39.0835], [3.1246, -39.2976], [4.09596, -39.4835], [5.07232, -39.641], [6.05284, -39.7701], [7.0367, -39.8706], [8.02308, -39.9425], [9.01112, -39.9856], [10, -40], [10.993, -39.991], [11.9856, -39.9641], [12.9776, -39.9193], [13.9687, -39.8566], [14.9584, -39.776], [15.9465, -39.6776], [16.9327, -39.5613], [17.9167, -39.4273], [18.898, -39.2755], [19.8765, -39.106], [20.8517, -38.9188], [21.8234, -38.7141], [22.7912, -38.4919], [23.7549, -38.2523], [24.7141, -37.9952], [25.6684, -37.721], [26.6177, -37.4295], [27.5616, -37.1209], [28.4997, -36.7954], [29.4318, -36.4529], [30.3576, -36.0937], [31.2767, -35.7179], [32.1889, -35.3255], [33.0939, -34.9166], [33.9913, -34.4916], [34.881, -34.0504], [35.7625, -33.5932], [36.6356, -33.1201], [37.5, -32.6314], [38.3555, -32.1271], [39.2017, -31.6075], [40.0384, -31.0727], [40.8653, -30.5229], [41.6821, -29.9582], [42.4887, -29.3789], [43.2846, -28.7851], [44.0697, -28.1771], [44.8436, -27.5549], [45.6062, -26.9189], [46.3573, -26.2692], [47.0964, -25.6061], [47.8235, -24.9298], [48.5382, -24.2404], [49.2404, -23.5382], [49.9298, -22.8235], [50.6061, -22.0964], [51.2692, -21.3573], [51.9189, -20.6062], [52.5549, -19.8436], [53.1771, -19.0697], [53.7851, -18.2846], [54.3789, -17.4887], [54.9582, -16.6821], [55.5229, -15.8653], [56.0727, -15.0384], [56.6075, -14.2017], [57.1271, -13.3555], [57.6314, -12.5], [58.1201, -11.6356], [58.5932, -10.7625], [59.0504, -9.88096], [59.4916, -8.99134], [59.9166, -8.0939], [60.3255, -7.18893], [60.7179, -6.27673], [61.0937, -5.3576], [61.4529, -4.43183], [61.7954, -3.49972], [62.1209, -2.56158], [62.4295, -1.61772], [62.721, -0.668445], [62.9952, 0.285941], [63.2523, 1.24512], [63.4919, 2.20879], [63.7141, 3.17663], [63.9188, 4.14832], [64.106, 5.12354], [64.2755, 6.10199], [64.4273, 7.08334], [64.5613, 8.06727], [64.6776, 9.05345], [64.776, 10.0416], [64.8566, 11.0313], [64.9193, 12.0224], [64.9641, 13.0144], [64.991, 14.007], [65, 15]]; actual_pts = [for(pt_angle = pts_angles) pt_angle[0]]; - - expected_angles = [0, 22.5, 45, 67.5, 90, 108, 126, 144, 162, 180, 191.25, 202.5, 213.75, 225, 236.25, 247.5, 258.75, 270, 276.923, 283.846, 290.769, 297.692, 304.615, 311.538, 318.462, 325.385, 332.308, 339.231, 346.154, 353.077, 360, 360, 364.286, 368.571, 372.857, 377.143, 381.429, 385.714, 390, 394.286, 398.571, 402.857, 407.143, 411.429, 415.714, 420, 424.286, 428.571, 432.857, 437.143, 441.429, 445.714, 450, 452.727, 455.455, 458.182, 460.909, 463.636, 466.364, 469.091, 471.818, 474.545, 477.273, 480, 482.727, 485.455, 488.182, 490.909, 493.636, 496.364, 499.091, 501.818, 504.545, 507.273, 510, 512.727, 515.455, 518.182, 520.909, 523.636, 526.364, 529.091, 531.818, 534.545, 537.273, 540, 541.667, 543.333, 545, 546.667, 548.333, 550, 551.667, 553.333, 555, 556.667, 558.333, 560, 561.667, 563.333, 565, 566.667, 568.333, 570, 571.667, 573.333, 575, 576.667, 578.333, 580, 581.667, 583.333, 585, 586.667, 588.333, 590, 591.667, 593.333, 595, 596.667, 598.333, 600, 601.667, 603.333, 605, 606.667, 608.333, 610, 611.667, 613.333, 615, 616.667, 618.333, 620, 621.667, 623.333, 625, 626.667, 628.333, 630, 631.034, 632.069, 633.103, 634.138, 635.172, 636.207, 637.241, 638.276, 639.31, 640.345, 641.379, 642.414, 643.448, 644.483, 645.517, 646.552, 647.586, 648.621, 649.655, 650.69, 651.724, 652.759, 653.793, 654.828, 655.862, 656.897, 657.931, 658.966, 660, 661.034, 662.069, 663.103, 664.138, 665.172, 666.207, 667.241, 668.276, 669.31, 670.345, 671.379, 672.414, 673.448, 674.483, 675.517, 676.552, 677.586, 678.621, 679.655, 680.69, 681.724, 682.759, 683.793, 684.828, 685.862, 686.897, 687.931, 688.966, 690, 691.034, 692.069, 693.103, 694.138, 695.172, 696.207, 697.241, 698.276, 699.31, 700.345, 701.379, 702.414, 703.448, 704.483, 705.517, 706.552, 707.586, 708.621, 709.655, 710.69, 711.724, 712.759, 713.793, 714.828, 715.862, 716.897, 717.931, 718.966, 720]; - actual_angles = [for(pt_angle = pts_angles) round_n(pt_angle[1], float_digits = 3)]; - + expected_angles = [0, 22.5, 45, 67.5, 90, 108, 126, 144, 162, 180, 191.25, 202.5, 213.75, 225, 236.25, 247.5, 258.75, 270, 276.923, 283.846, 290.769, 297.692, 304.615, 311.538, 318.462, 325.385, 332.308, 339.231, 346.154, 353.077, 360, 360, 364.286, 368.571, 372.857, 377.143, 381.429, 385.714, 390, 394.286, 398.571, 402.857, 407.143, 411.429, 415.714, 420, 424.286, 428.571, 432.857, 437.143, 441.429, 445.714, 450, 452.727, 455.455, 458.182, 460.909, 463.636, 466.364, 469.091, 471.818, 474.545, 477.273, 480, 482.727, 485.455, 488.182, 490.909, 493.636, 496.364, 499.091, 501.818, 504.545, 507.273, 510, 512.727, 515.455, 518.182, 520.909, 523.636, 526.364, 529.091, 531.818, 534.545, 537.273, 540, 541.667, 543.333, 545, 546.667, 548.333, 550, 551.667, 553.333, 555, 556.667, 558.333, 560, 561.667, 563.333, 565, 566.667, 568.333, 570, 571.667, 573.333, 575, 576.667, 578.333, 580, 581.667, 583.333, 585, 586.667, 588.333, 590, 591.667, 593.333, 595, 596.667, 598.333, 600, 601.667, 603.333, 605, 606.667, 608.333, 610, 611.667, 613.333, 615, 616.667, 618.333, 620, 621.667, 623.333, 625, 626.667, 628.333, 630, 631.034, 632.069, 633.103, 634.138, 635.172, 636.207, 637.241, 638.276, 639.31, 640.345, 641.379, 642.414, 643.448, 644.483, 645.517, 646.552, 647.586, 648.621, 649.655, 650.69, 651.724, 652.759, 653.793, 654.828, 655.862, 656.897, 657.931, 658.966, 660, 661.034, 662.069, 663.103, 664.138, 665.172, 666.207, 667.241, 668.276, 669.31, 670.345, 671.379, 672.414, 673.448, 674.483, 675.517, 676.552, 677.586, 678.621, 679.655, 680.69, 681.724, 682.759, 683.793, 684.828, 685.862, 686.897, 687.931, 688.966, 690, 691.034, 692.069, 693.103, 694.138, 695.172, 696.207, 697.241, 698.276, 699.31, 700.345, 701.379, 702.414, 703.448, 704.483, 705.517, 706.552, 707.586, 708.621, 709.655, 710.69, 711.724, 712.759, 713.793, 714.828, 715.862, 716.897, 717.931, 718.966, 720]; + actual_angles = [for(pt_angle = pts_angles) pt_angle[1]]; + assertEqualPoints(expected_pts, actual_pts); for(i = [0:len(expected_angles) - 1]) { - assertEqual( + assertEqualNum( expected_angles[i], - actual_angles[i] + actual_angles[i], + 0.0005 ); } } diff --git a/test/test_golden_spiral_extrude.scad b/test/test_golden_spiral_extrude.scad index bb8e4ad8..900414a9 100644 --- a/test/test_golden_spiral_extrude.scad +++ b/test/test_golden_spiral_extrude.scad @@ -13,239 +13,10 @@ module test_golden_spiral_extrude_solid() { include ; module test_golden_spiral_extrude(sections) { - expected = [ - [[0, 0, -10], [0, 0, 10], [0, 4, 10], [0, 4, -10]] - , [[-0.05, -0.12, -9.932], [0.056, 0.135, 9.987], [1.58, 3.815, 9.932], [1.475, 3.561, -9.987]] - , [[-0.182, -0.182, -9.862], [0.206, 0.206, 9.972], [3.011, 3.011, 9.862], [2.623, 2.623, -9.972]] - , [[-0.355, -0.147, -9.791], [0.402, 0.167, 9.955], [4.051, 1.678, 9.791], [3.293, 1.364, -9.955]] - , [[-0.51, 0, -9.717], [0.579, 0, 9.935], [4.51, 0, 9.717], [3.421, 0, -9.935]] - , [[-0.651, -0.113, -9.643], [0.638, -0.532, 9.914], [4.358, -1.741, 9.643], [3.069, -1.322, -9.914]] - , [[-0.802, -0.144, -9.567], [0.508, -1.096, 9.89], [3.656, -3.383, 9.567], [2.346, -2.431, -9.89]] - , [[-0.927, -0.1, -9.489], [0.179, -1.622, 9.865], [2.454, -4.754, 9.489], [1.348, -3.232, -9.865]] - , [[-0.998, -0.005, -9.41], [-0.337, -2.04, 9.838], [0.852, -5.701, 9.41], [0.191, -3.666, -9.838]] - , [[-1, 0.112, -9.329], [-1, -2.284, 9.808], [-1, -6.112, 9.329], [-1, -3.716, -9.808]] - , [[-1.346, 0.261, -9.247], [-1.863, -2.338, 9.777], [-2.605, -6.069, 9.247], [-2.088, -3.47, -9.777]] - , [[-1.635, 0.467, -9.163], [-2.745, -2.213, 9.743], [-4.192, -5.706, 9.163], [-3.082, -3.026, -9.743]] - , [[-1.859, 0.714, -9.078], [-3.609, -1.904, 9.708], [-5.696, -5.029, 9.078], [-3.947, -2.41, -9.708]] - , [[-2.016, 0.984, -8.992], [-4.416, -1.416, 9.671], [-7.055, -4.055, 8.992], [-4.655, -1.655, -9.671]] - , [[-2.104, 1.262, -8.904], [-5.128, -0.758, 9.632], [-8.211, -2.818, 8.904], [-5.187, -0.797, -9.632]] - , [[-2.128, 1.533, -8.816], [-5.71, 0.049, 9.591], [-9.111, -1.36, 8.816], [-5.529, 0.124, -9.591]] - , [[-2.094, 1.782, -8.726], [-6.129, 0.98, 9.548], [-9.714, 0.267, 8.726], [-5.679, 1.069, -9.548]] - , [[-2.012, 2, -8.634], [-6.36, 2, 9.504], [-9.988, 2, 8.634], [-5.64, 2, -9.504]] - , [[-1.911, 2, -8.542], [-6.49, 2, 9.458], [-10.089, 2, 8.542], [-5.51, 2, -9.458]] - , [[-1.783, 2.459, -8.448], [-6.555, 3.039, 9.41], [-10.1, 3.469, 8.448], [-5.328, 2.89, -9.41]] - , [[-1.605, 2.888, -8.353], [-6.491, 4.093, 9.36], [-9.93, 4.941, 8.353], [-5.044, 3.736, -9.36]] - , [[-1.381, 3.282, -8.258], [-6.294, 5.145, 9.308], [-9.579, 6.391, 8.258], [-4.666, 4.528, -9.308]] - , [[-1.119, 3.637, -8.161], [-5.965, 6.18, 9.255], [-9.049, 7.799, 8.161], [-4.203, 5.255, -9.255]] - , [[-0.822, 3.948, -8.063], [-5.504, 7.18, 9.2], [-8.345, 9.141, 8.063], [-3.664, 5.909, -9.2]] - , [[-0.499, 4.214, -7.964], [-4.916, 8.127, 9.144], [-7.477, 10.396, 7.964], [-3.06, 6.483, -9.144]] - , [[-0.155, 4.433, -7.864], [-4.207, 9.006, 9.086], [-6.455, 11.544, 7.864], [-2.403, 6.97, -9.086]] - , [[0.203, 4.603, -7.763], [-3.385, 9.801, 9.026], [-5.292, 12.565, 7.763], [-1.704, 7.366, -9.026]] - , [[0.57, 4.725, -7.661], [-2.46, 10.498, 8.965], [-4.005, 13.442, 7.661], [-0.976, 7.67, -8.965]] - , [[0.938, 4.8, -7.559], [-1.444, 11.082, 8.903], [-2.612, 14.16, 7.559], [-0.229, 7.878, -8.903]] - , [[1.303, 4.829, -7.455], [-0.352, 11.542, 8.838], [-1.132, 14.707, 7.455], [0.523, 7.993, -8.838]] - , [[1.658, 4.813, -7.351], [0.802, 11.869, 8.773], [0.413, 15.07, 7.351], [1.27, 8.014, -8.773]] - , [[2, 4.756, -7.246], [2, 12.053, 8.706], [2, 15.244, 7.246], [2, 7.947, -8.706]] - , [[2.971, 4.644, -7.141], [2.971, 12.127, 8.637], [2.971, 15.283, 7.141], [2.971, 7.8, -8.637]] - , [[3.535, 4.477, -7.034], [4.107, 12.121, 8.567], [4.341, 15.233, 7.034], [3.768, 7.588, -8.567]] - , [[4.078, 4.27, -6.927], [5.248, 12.028, 8.496], [5.707, 15.078, 6.927], [4.538, 7.32, -8.496]] - , [[4.6, 4.026, -6.819], [6.385, 11.846, 8.424], [7.063, 14.818, 6.819], [5.279, 6.999, -8.424]] - , [[5.098, 3.748, -6.711], [7.513, 11.577, 8.35], [8.401, 14.455, 6.711], [5.986, 6.626, -8.35]] - , [[5.569, 3.436, -6.602], [8.624, 11.22, 8.275], [9.712, 13.989, 6.602], [6.657, 6.205, -8.275]] - , [[6.013, 3.093, -6.493], [9.712, 10.776, 8.198], [10.987, 13.423, 6.493], [7.288, 5.741, -8.198]] - , [[6.426, 2.723, -6.383], [10.77, 10.247, 8.121], [12.221, 12.76, 6.383], [7.876, 5.235, -8.121]] - , [[6.807, 2.326, -6.273], [11.791, 9.636, 8.042], [13.404, 12.002, 6.273], [8.42, 4.692, -8.042]] - , [[7.155, 1.906, -6.162], [12.768, 8.944, 7.962], [14.529, 11.153, 6.162], [8.917, 4.115, -7.962]] - , [[7.469, 1.466, -6.051], [13.695, 8.176, 7.881], [15.59, 10.218, 6.051], [9.364, 3.509, -7.881]] - , [[7.748, 1.008, -5.939], [14.566, 7.334, 7.799], [16.58, 9.203, 5.939], [9.762, 2.877, -7.799]] - , [[7.99, 0.535, -5.827], [15.374, 6.423, 7.716], [17.492, 8.112, 5.827], [10.108, 2.223, -7.716]] - , [[8.196, 0.049, -5.715], [16.115, 5.448, 7.632], [18.321, 6.951, 5.715], [10.402, 1.552, -7.632]] - , [[8.364, -0.447, -5.602], [16.783, 4.413, 7.547], [19.061, 5.728, 5.602], [10.642, 0.868, -7.547]] - , [[8.495, -0.95, -5.49], [17.374, 3.325, 7.461], [19.707, 4.449, 5.49], [10.829, 0.174, -7.461]] - , [[8.589, -1.458, -5.377], [17.882, 2.19, 7.373], [20.256, 3.121, 5.377], [10.963, -0.526, -7.373]] - , [[8.645, -1.967, -5.264], [18.305, 1.013, 7.285], [20.703, 1.753, 5.264], [11.043, -1.227, -7.285]] - , [[8.664, -2.476, -5.15], [18.639, -0.199, 7.197], [21.046, 0.351, 5.15], [11.071, -1.926, -7.197]] - , [[8.646, -2.981, -5.037], [18.88, -1.438, 7.107], [21.282, -1.076, 5.037], [11.047, -2.619, -7.107]] - , [[8.592, -3.48, -4.923], [19.027, -2.698, 7.016], [21.408, -2.52, 4.923], [10.973, -3.302, -7.016]] - , [[8.515, -3.999, -4.81], [19.091, -3.999, 6.925], [21.438, -3.999, 4.81], [10.862, -3.999, -6.925]] - , [[8.418, -4.687, -4.696], [19.089, -5.195, 6.833], [21.392, -5.305, 4.696], [10.721, -4.797, -6.833]] - , [[8.29, -5.368, -4.583], [19.028, -6.394, 6.74], [21.283, -6.609, 4.583], [10.544, -5.584, -6.74]] - , [[8.132, -6.041, -4.469], [18.909, -7.591, 6.647], [21.109, -7.907, 4.469], [10.332, -6.358, -6.647]] - , [[7.944, -6.705, -4.356], [18.73, -8.784, 6.552], [20.872, -9.197, 4.356], [10.086, -7.118, -6.552]] - , [[7.727, -7.358, -4.242], [18.492, -9.97, 6.458], [20.571, -10.474, 4.242], [9.807, -7.863, -6.458]] - , [[7.481, -8, -4.129], [18.195, -11.146, 6.362], [20.209, -11.737, 4.129], [9.495, -8.591, -6.362]] - , [[7.208, -8.629, -4.016], [17.84, -12.309, 6.266], [19.784, -12.981, 4.016], [9.151, -9.301, -6.266]] - , [[6.906, -9.243, -3.903], [17.428, -13.455, 6.17], [19.298, -14.204, 3.903], [8.777, -9.992, -6.17]] - , [[6.578, -9.843, -3.79], [16.959, -14.583, 6.073], [18.753, -15.403, 3.79], [8.372, -10.662, -6.073]] - , [[6.224, -10.426, -3.678], [16.433, -15.689, 5.975], [18.149, -16.574, 3.678], [7.94, -11.311, -5.975]] - , [[5.844, -10.992, -3.566], [15.853, -16.771, 5.877], [17.489, -17.715, 3.566], [7.48, -11.936, -5.877]] - , [[5.439, -11.539, -3.454], [15.219, -17.825, 5.779], [16.773, -18.823, 3.454], [6.993, -12.538, -5.779]] - , [[5.011, -12.068, -3.343], [14.533, -18.848, 5.68], [16.003, -19.895, 3.343], [6.481, -13.115, -5.68]] - , [[4.56, -12.576, -3.231], [13.796, -19.839, 5.581], [15.181, -20.928, 3.231], [5.946, -13.665, -5.581]] - , [[4.087, -13.063, -3.121], [13.01, -20.794, 5.482], [14.31, -21.921, 3.121], [5.387, -14.189, -5.482]] - , [[3.593, -13.527, -3.01], [12.176, -21.711, 5.382], [13.391, -22.87, 3.01], [4.808, -14.686, -5.382]] - , [[3.078, -13.969, -2.901], [11.296, -22.588, 5.282], [12.426, -23.772, 2.901], [4.208, -15.153, -5.282]] - , [[2.545, -14.387, -2.791], [10.374, -23.422, 5.182], [11.418, -24.627, 2.791], [3.589, -15.592, -5.182]] - , [[1.993, -14.78, -2.682], [9.41, -24.211, 5.082], [10.369, -25.432, 2.682], [2.953, -16.001, -5.082]] - , [[1.424, -15.148, -2.574], [8.406, -24.953, 4.981], [9.283, -26.184, 2.574], [2.301, -16.379, -4.981]] - , [[0.839, -15.49, -2.466], [7.366, -25.647, 4.88], [8.161, -26.883, 2.466], [1.634, -16.727, -4.88]] - , [[0.24, -15.806, -2.359], [6.292, -26.289, 4.78], [7.006, -27.525, 2.359], [0.953, -17.042, -4.78]] - , [[-0.374, -16.094, -2.252], [5.186, -26.879, 4.679], [5.821, -28.111, 2.252], [0.261, -17.326, -4.679]] - , [[-1, -16.354, -2.146], [4.051, -27.414, 4.578], [4.61, -28.637, 2.146], [-0.441, -17.577, -4.578]] - , [[-1.637, -16.586, -2.041], [2.89, -27.894, 4.477], [3.374, -29.104, 2.041], [-1.153, -17.796, -4.477]] - , [[-2.285, -16.789, -1.936], [1.705, -28.317, 4.376], [2.118, -29.51, 1.936], [-1.872, -17.982, -4.376]] - , [[-2.942, -16.962, -1.832], [0.5, -28.682, 4.275], [0.844, -29.854, 1.832], [-2.598, -18.134, -4.275]] - , [[-3.606, -17.106, -1.729], [-0.724, -28.988, 4.174], [-0.445, -30.135, 1.729], [-3.328, -18.253, -4.174]] - , [[-4.277, -17.219, -1.626], [-1.961, -29.234, 4.073], [-1.746, -30.353, 1.626], [-4.061, -18.339, -4.073]] - , [[-4.953, -17.303, -1.525], [-3.211, -29.419, 3.973], [-3.055, -30.507, 1.525], [-4.797, -18.391, -3.973]] - , [[-5.633, -17.355, -1.424], [-4.469, -29.543, 3.872], [-4.369, -30.597, 1.424], [-5.532, -18.41, -3.872]] - , [[-6.315, -17.377, -1.324], [-5.733, -29.605, 3.772], [-5.685, -30.623, 1.324], [-6.267, -18.395, -3.772]] - , [[-6.989, -17.377, -1.224], [-6.989, -29.615, 3.672], [-6.989, -30.594, 1.224], [-6.989, -18.356, -3.672]] - , [[-7.785, -17.36, -1.126], [-8.141, -29.585, 3.572], [-8.168, -30.525, 1.126], [-7.813, -18.3, -3.572]] - , [[-8.582, -17.322, -1.028], [-9.292, -29.521, 3.472], [-9.345, -30.419, 1.028], [-8.634, -18.221, -3.472]] - , [[-9.378, -17.262, -0.932], [-10.442, -29.421, 3.373], [-10.517, -30.279, 0.932], [-9.453, -18.119, -3.373]] - , [[-10.172, -17.179, -0.836], [-11.588, -29.286, 3.274], [-11.683, -30.103, 0.836], [-10.268, -17.996, -3.274]] - , [[-10.965, -17.075, -0.741], [-12.729, -29.116, 3.175], [-12.843, -29.891, 0.741], [-11.079, -17.851, -3.175]] - , [[-11.756, -16.95, -0.648], [-13.865, -28.912, 3.077], [-13.995, -29.645, 0.648], [-11.885, -17.683, -3.077]] - , [[-12.544, -16.802, -0.555], [-14.995, -28.673, 2.979], [-15.138, -29.365, 0.555], [-12.687, -17.494, -2.979]] - , [[-13.328, -16.633, -0.463], [-16.117, -28.399, 2.882], [-16.271, -29.05, 0.463], [-13.483, -17.284, -2.882]] - , [[-14.109, -16.442, -0.373], [-17.23, -28.091, 2.785], [-17.394, -28.701, 0.373], [-14.272, -17.052, -2.785]] - , [[-14.885, -16.229, -0.283], [-18.334, -27.75, 2.688], [-18.504, -28.319, 0.283], [-15.055, -16.798, -2.688]] - , [[-15.656, -15.995, -0.194], [-19.427, -27.375, 2.592], [-19.602, -27.904, 0.194], [-15.831, -16.524, -2.592]] - , [[-16.421, -15.739, -0.107], [-20.507, -26.967, 2.496], [-20.685, -27.457, 0.107], [-16.599, -16.228, -2.496]] - , [[-17.179, -15.462, -0.02], [-21.575, -26.527, 2.402], [-21.754, -26.977, 0.02], [-17.358, -15.912, -2.402]] - , [[-17.931, -15.163, 0.065], [-22.629, -26.054, 2.307], [-22.807, -26.466, -0.065], [-18.109, -15.575, -2.307]] - , [[-18.676, -14.844, 0.149], [-23.668, -25.549, 2.213], [-23.842, -25.923, -0.149], [-18.85, -15.218, -2.213]] - , [[-19.412, -14.503, 0.232], [-24.691, -25.013, 2.12], [-24.86, -25.351, -0.232], [-19.582, -14.84, -2.12]] - , [[-20.14, -14.141, 0.314], [-25.697, -24.447, 2.027], [-25.86, -24.748, -0.314], [-20.303, -14.443, -2.027]] - , [[-20.859, -13.759, 0.395], [-26.685, -23.85, 1.936], [-26.839, -24.117, -0.395], [-21.013, -14.026, -1.936]] - , [[-21.568, -13.356, 0.474], [-27.654, -23.224, 1.844], [-27.798, -23.457, -0.474], [-21.712, -13.59, -1.844]] - , [[-22.267, -12.933, 0.553], [-28.604, -22.568, 1.754], [-28.736, -22.769, -0.553], [-22.399, -13.134, -1.754]] - , [[-22.955, -12.49, 0.63], [-29.533, -21.885, 1.664], [-29.652, -22.054, -0.63], [-23.074, -12.66, -1.664]] - , [[-23.631, -12.027, 0.705], [-30.441, -21.174, 1.575], [-30.545, -21.313, -0.705], [-23.735, -12.167, -1.575]] - , [[-24.296, -11.544, 0.78], [-31.326, -20.436, 1.487], [-31.414, -20.547, -0.78], [-24.383, -11.655, -1.487]] - , [[-24.948, -11.043, 0.853], [-32.188, -19.672, 1.399], [-32.258, -19.755, -0.853], [-25.018, -11.126, -1.399]] - , [[-25.586, -10.522, 0.925], [-33.027, -18.882, 1.313], [-33.078, -18.94, -0.925], [-25.638, -10.579, -1.313]] - , [[-26.211, -9.982, 0.996], [-33.84, -18.068, 1.227], [-33.872, -18.101, -0.996], [-26.243, -10.015, -1.227]] - , [[-26.822, -9.424, 1.066], [-34.628, -17.23, 1.142], [-34.639, -17.241, -1.066], [-26.833, -9.435, -1.142]] - , [[-27.418, -8.848, 1.134], [-35.39, -16.369, 1.058], [-35.379, -16.358, -1.134], [-27.407, -8.837, -1.058]] - , [[-27.999, -8.254, 1.201], [-36.126, -15.486, 0.975], [-36.092, -15.456, -1.201], [-27.965, -8.224, -0.975]] - , [[-28.564, -7.642, 1.266], [-36.834, -14.582, 0.893], [-36.776, -14.534, -1.266], [-28.507, -7.594, -0.893]] - , [[-29.112, -7.014, 1.331], [-37.513, -13.657, 0.811], [-37.432, -13.593, -1.331], [-29.031, -6.95, -0.811]] - , [[-29.644, -6.369, 1.393], [-38.165, -12.713, 0.731], [-38.058, -12.634, -1.393], [-29.538, -6.29, -0.731]] - , [[-30.158, -5.709, 1.455], [-38.787, -11.75, 0.652], [-38.655, -11.658, -1.455], [-30.027, -5.616, -0.652]] - , [[-30.655, -5.032, 1.515], [-39.379, -10.77, 0.573], [-39.221, -10.666, -1.515], [-30.497, -4.928, -0.573]] - , [[-31.132, -4.34, 1.574], [-39.941, -9.773, 0.496], [-39.757, -9.66, -1.574], [-30.949, -4.227, -0.496]] - , [[-31.591, -3.633, 1.631], [-40.472, -8.761, 0.42], [-40.262, -8.639, -1.631], [-31.382, -3.512, -0.42]] - , [[-32.031, -2.912, 1.687], [-40.972, -7.733, 0.344], [-40.736, -7.606, -1.687], [-31.795, -2.785, -0.344]] - , [[-32.451, -2.178, 1.742], [-41.441, -6.693, 0.27], [-41.178, -6.56, -1.742], [-32.188, -2.045, -0.27]] - , [[-32.851, -1.43, 1.795], [-41.878, -5.639, 0.197], [-41.588, -5.504, -1.795], [-32.561, -1.294, -0.197]] - , [[-33.229, -0.669, 1.847], [-42.283, -4.574, 0.125], [-41.966, -4.437, -1.847], [-32.913, -0.532, -0.125]] - , [[-33.587, 0.104, 1.898], [-42.655, -3.498, 0.053], [-42.312, -3.362, -1.898], [-33.244, 0.241, -0.053]] - , [[-33.924, 0.889, 1.947], [-42.994, -2.412, -0.016], [-42.625, -2.278, -1.947], [-33.555, 1.023, 0.016]] - , [[-34.238, 1.685, 1.995], [-43.3, -1.318, -0.085], [-42.905, -1.187, -1.995], [-33.843, 1.816, 0.085]] - , [[-34.53, 2.491, 2.041], [-43.573, -0.216, -0.153], [-43.153, -0.091, -2.041], [-34.11, 2.617, 0.153]] - , [[-34.799, 3.307, 2.086], [-43.813, 0.892, -0.219], [-43.368, 1.011, -2.086], [-34.354, 3.426, 0.219]] - , [[-35.046, 4.132, 2.129], [-44.019, 2.006, -0.285], [-43.55, 2.117, -2.129], [-34.576, 4.244, 0.285]] - , [[-35.269, 4.966, 2.171], [-44.192, 3.124, -0.349], [-43.698, 3.226, -2.171], [-34.775, 5.068, 0.349]] - , [[-35.468, 5.808, 2.212], [-44.331, 4.245, -0.412], [-43.814, 4.336, -2.212], [-34.951, 5.899, 0.412]] - , [[-35.643, 6.657, 2.251], [-44.436, 5.369, -0.474], [-43.897, 5.448, -2.251], [-35.104, 6.736, 0.474]] - , [[-35.794, 7.513, 2.289], [-44.508, 6.495, -0.535], [-43.947, 6.56, -2.289], [-35.234, 7.579, 0.535]] - , [[-35.921, 8.375, 2.325], [-44.546, 7.62, -0.594], [-43.964, 7.671, -2.325], [-35.339, 8.426, 0.594]] - , [[-36.023, 9.242, 2.36], [-44.55, 8.745, -0.652], [-43.948, 8.78, -2.36], [-35.421, 9.277, 0.652]] - , [[-36.1, 10.113, 2.394], [-44.521, 9.868, -0.709], [-43.9, 9.887, -2.394], [-35.479, 10.132, 0.709]] - , [[-36.166, 10, 2.426], [-44.473, 10, -0.765], [-43.834, 10, -2.426], [-35.527, 10, 0.765]] - , [[-36.225, 10.925, 2.457], [-44.412, 11.073, -0.819], [-43.757, 11.061, -2.457], [-35.57, 10.913, 0.819]] - , [[-36.268, 11.852, 2.486], [-44.332, 12.143, -0.872], [-43.66, 12.119, -2.486], [-35.597, 11.828, 0.872]] - , [[-36.294, 12.781, 2.514], [-44.231, 13.211, -0.924], [-43.545, 13.174, -2.514], [-35.607, 12.744, 0.924]] - , [[-36.303, 13.712, 2.541], [-44.111, 14.276, -0.975], [-43.41, 14.226, -2.541], [-35.602, 13.661, 0.975]] - , [[-36.296, 14.643, 2.566], [-43.971, 15.338, -1.024], [-43.256, 15.273, -2.566], [-35.581, 14.579, 1.024]] - , [[-36.271, 15.576, 2.59], [-43.812, 16.396, -1.073], [-43.084, 16.317, -2.59], [-35.543, 15.497, 1.073]] - , [[-36.23, 16.509, 2.612], [-43.633, 17.45, -1.119], [-42.893, 17.356, -2.612], [-35.49, 16.415, 1.119]] - , [[-36.171, 17.443, 2.633], [-43.435, 18.5, -1.165], [-42.683, 18.39, -2.633], [-35.42, 17.334, 1.165]] - , [[-36.096, 18.377, 2.652], [-43.217, 19.544, -1.209], [-42.455, 19.419, -2.652], [-35.333, 18.252, 1.209]] - , [[-36.003, 19.31, 2.671], [-42.981, 20.584, -1.252], [-42.209, 20.443, -2.671], [-35.231, 19.169, 1.252]] - , [[-35.893, 20.243, 2.688], [-42.725, 21.618, -1.294], [-41.945, 21.461, -2.688], [-35.112, 20.086, 1.294]] - , [[-35.766, 21.174, 2.703], [-42.451, 22.646, -1.334], [-41.663, 22.472, -2.703], [-34.977, 21.001, 1.334]] - , [[-35.621, 22.105, 2.717], [-42.158, 23.668, -1.373], [-41.363, 23.478, -2.717], [-34.826, 21.915, 1.373]] - , [[-35.46, 23.034, 2.73], [-41.847, 24.683, -1.411], [-41.045, 24.476, -2.73], [-34.658, 22.826, 1.411]] - , [[-35.281, 23.96, 2.741], [-41.517, 25.692, -1.447], [-40.71, 25.468, -2.741], [-34.473, 23.736, 1.447]] - , [[-35.084, 24.885, 2.752], [-41.169, 26.693, -1.482], [-40.358, 26.452, -2.752], [-34.273, 24.644, 1.482]] - , [[-34.871, 25.807, 2.76], [-40.803, 27.687, -1.516], [-39.988, 27.429, -2.76], [-34.056, 25.548, 1.516]] - , [[-34.64, 26.726, 2.768], [-40.42, 28.673, -1.548], [-39.602, 28.397, -2.768], [-33.822, 26.45, 1.548]] - , [[-34.392, 27.641, 2.774], [-40.018, 29.651, -1.579], [-39.199, 29.358, -2.774], [-33.572, 27.349, 1.579]] - , [[-34.127, 28.553, 2.779], [-39.6, 30.62, -1.609], [-38.779, 30.31, -2.779], [-33.306, 28.243, 1.609]] - , [[-33.845, 29.461, 2.783], [-39.164, 31.581, -1.637], [-38.343, 31.254, -2.783], [-33.023, 29.134, 1.637]] - , [[-33.545, 30.365, 2.785], [-38.711, 32.532, -1.665], [-37.891, 32.188, -2.785], [-32.725, 30.021, 1.665]] - , [[-33.229, 31.264, 2.786], [-38.242, 33.475, -1.69], [-37.422, 33.113, -2.786], [-32.409, 30.903, 1.69]] - , [[-32.895, 32.159, 2.786], [-37.755, 34.407, -1.715], [-36.938, 34.029, -2.786], [-32.078, 31.781, 1.715]] - , [[-32.544, 33.047, 2.785], [-37.253, 35.33, -1.738], [-36.439, 34.935, -2.785], [-31.73, 32.653, 1.738]] - , [[-32.177, 33.931, 2.782], [-36.734, 36.242, -1.76], [-35.924, 35.831, -2.782], [-31.367, 33.52, 1.76]] - , [[-31.792, 34.808, 2.778], [-36.2, 37.144, -1.781], [-35.394, 36.717, -2.778], [-30.987, 34.381, 1.781]] - , [[-31.391, 35.679, 2.773], [-35.649, 38.036, -1.8], [-34.849, 37.593, -2.773], [-30.591, 35.236, 1.8]] - , [[-30.973, 36.543, 2.767], [-35.084, 38.916, -1.818], [-34.29, 38.457, -2.767], [-30.179, 36.084, 1.818]] - , [[-30.539, 37.4, 2.76], [-34.503, 39.785, -1.835], [-33.715, 39.311, -2.76], [-29.752, 36.926, 1.835]] - , [[-30.088, 38.25, 2.751], [-33.907, 40.642, -1.85], [-33.127, 40.154, -2.751], [-29.308, 37.761, 1.85]] - , [[-29.621, 39.092, 2.742], [-33.296, 41.488, -1.864], [-32.525, 40.985, -2.742], [-28.849, 38.589, 1.864]] - , [[-29.137, 39.926, 2.731], [-32.671, 42.322, -1.877], [-31.909, 41.805, -2.731], [-28.374, 39.409, 1.877]] - , [[-28.638, 40.752, 2.719], [-32.032, 43.144, -1.889], [-31.279, 42.613, -2.719], [-27.884, 40.221, 1.889]] - , [[-28.122, 41.569, 2.706], [-31.379, 43.953, -1.899], [-30.636, 43.409, -2.706], [-27.379, 41.025, 1.899]] - , [[-27.591, 42.377, 2.692], [-30.712, 44.749, -1.908], [-29.979, 44.193, -2.692], [-26.858, 41.82, 1.908]] - , [[-27.044, 43.175, 2.677], [-30.031, 45.533, -1.916], [-29.31, 44.964, -2.677], [-26.323, 42.606, 1.916]] - , [[-26.481, 43.964, 2.661], [-29.338, 46.304, -1.922], [-28.629, 45.723, -2.661], [-25.772, 43.384, 1.922]] - , [[-25.903, 44.744, 2.644], [-28.631, 47.061, -1.928], [-27.935, 46.469, -2.644], [-25.206, 44.152, 1.928]] - , [[-25.31, 45.512, 2.626], [-27.912, 47.805, -1.932], [-27.228, 47.202, -2.626], [-24.626, 44.91, 1.932]] - , [[-24.702, 46.27, 2.606], [-27.181, 48.535, -1.935], [-26.51, 47.922, -2.606], [-24.031, 45.658, 1.935]] - , [[-24.079, 47.018, 2.586], [-26.437, 49.251, -1.937], [-25.78, 48.629, -2.586], [-23.422, 46.396, 1.937]] - , [[-23.442, 47.754, 2.565], [-25.682, 49.954, -1.937], [-25.039, 49.323, -2.565], [-22.799, 47.123, 1.937]] - , [[-22.79, 48.478, 2.543], [-24.915, 50.642, -1.937], [-24.287, 50.003, -2.543], [-22.162, 47.839, 1.937]] - , [[-22.123, 49.191, 2.52], [-24.136, 51.316, -1.935], [-23.523, 50.669, -2.52], [-21.511, 48.544, 1.935]] - , [[-21.443, 49.891, 2.496], [-23.347, 51.975, -1.932], [-22.75, 51.321, -2.496], [-20.846, 49.237, 1.932]] - , [[-20.749, 50.579, 2.472], [-22.547, 52.619, -1.928], [-21.965, 51.959, -2.472], [-20.168, 49.919, 1.928]] - , [[-20.042, 51.255, 2.446], [-21.736, 53.249, -1.923], [-21.171, 52.583, -2.446], [-19.476, 50.589, 1.923]] - , [[-19.321, 51.917, 2.42], [-20.915, 53.864, -1.916], [-20.366, 53.193, -2.42], [-18.772, 51.246, 1.916]] - , [[-18.587, 52.566, 2.392], [-20.085, 54.464, -1.909], [-19.552, 53.788, -2.392], [-18.054, 51.89, 1.909]] - , [[-17.841, 53.201, 2.364], [-19.245, 55.048, -1.9], [-18.728, 54.369, -2.364], [-17.325, 52.522, 1.9]] - , [[-17.082, 53.823, 2.335], [-18.395, 55.617, -1.891], [-17.896, 54.935, -2.335], [-16.582, 53.141, 1.891]] - , [[-16.31, 54.43, 2.306], [-17.536, 56.171, -1.88], [-17.054, 55.486, -2.306], [-15.828, 53.746, 1.88]] - , [[-15.527, 55.023, 2.275], [-16.669, 56.708, -1.868], [-16.204, 56.023, -2.275], [-15.061, 54.337, 1.868]] - , [[-14.731, 55.602, 2.244], [-15.793, 57.231, -1.855], [-15.345, 56.544, -2.244], [-14.283, 54.915, 1.855]] - , [[-13.925, 56.165, 2.213], [-14.909, 57.737, -1.842], [-14.479, 57.05, -2.213], [-13.494, 55.478, 1.842]] - , [[-13.107, 56.714, 2.18], [-14.017, 58.227, -1.827], [-13.604, 57.541, -2.18], [-12.694, 56.027, 1.827]] - , [[-12.278, 57.247, 2.147], [-13.118, 58.701, -1.811], [-12.722, 58.016, -2.147], [-11.882, 56.561, 1.811]] - , [[-11.439, 57.764, 2.113], [-12.211, 59.16, -1.794], [-11.833, 58.476, -2.113], [-11.06, 57.081, 1.794]] - , [[-10.589, 58.266, 2.079], [-11.297, 59.602, -1.776], [-10.936, 58.92, -2.079], [-10.228, 57.585, 1.776]] - , [[-9.729, 58.752, 2.044], [-10.376, 60.027, -1.758], [-10.032, 59.349, -2.044], [-9.385, 58.074, 1.758]] - , [[-8.86, 59.221, 2.008], [-9.449, 60.436, -1.738], [-9.122, 59.762, -2.008], [-8.533, 58.547, 1.738]] - , [[-7.982, 59.674, 1.972], [-8.516, 60.829, -1.718], [-8.206, 60.159, -1.972], [-7.672, 59.004, 1.718]] - , [[-7.094, 60.11, 1.936], [-7.577, 61.205, -1.696], [-7.284, 60.541, -1.936], [-6.801, 59.446, 1.696]] - , [[-6.198, 60.53, 1.898], [-6.632, 61.565, -1.674], [-6.356, 60.906, -1.898], [-5.921, 59.871, 1.674]] - , [[-5.293, 60.932, 1.861], [-5.682, 61.908, -1.651], [-5.422, 61.255, -1.861], [-5.033, 60.28, 1.651]] - , [[-4.381, 61.317, 1.823], [-4.727, 62.234, -1.627], [-4.483, 61.589, -1.823], [-4.137, 60.672, 1.627]] - , [[-3.46, 61.685, 1.784], [-3.767, 62.543, -1.602], [-3.539, 61.906, -1.784], [-3.233, 61.047, 1.602]] - , [[-2.533, 62.035, 1.745], [-2.803, 62.836, -1.576], [-2.59, 62.207, -1.745], [-2.321, 61.406, 1.576]] - , [[-1.598, 62.368, 1.706], [-1.834, 63.112, -1.55], [-1.637, 62.491, -1.706], [-1.401, 61.747, 1.55]] - , [[-0.657, 62.683, 1.666], [-0.862, 63.371, -1.523], [-0.68, 62.759, -1.666], [-0.475, 62.071, 1.523]] - , [[0.29, 62.979, 1.626], [0.115, 63.613, -1.495], [0.282, 63.011, -1.626], [0.457, 62.378, 1.495]] - , [[1.244, 63.258, 1.586], [1.094, 63.838, -1.466], [1.247, 63.247, -1.586], [1.396, 62.667, 1.466]] - , [[2.203, 63.518, 1.545], [2.076, 64.046, -1.437], [2.215, 63.466, -1.545], [2.341, 62.938, 1.437]] - , [[3.166, 63.76, 1.504], [3.062, 64.237, -1.407], [3.187, 63.668, -1.504], [3.292, 63.192, 1.407]] - , [[4.135, 63.984, 1.463], [4.049, 64.411, -1.376], [4.161, 63.854, -1.463], [4.247, 63.427, 1.376]] - , [[5.108, 64.189, 1.422], [5.039, 64.568, -1.345], [5.139, 64.023, -1.422], [5.208, 63.644, 1.345]] - , [[6.086, 64.375, 1.38], [6.031, 64.708, -1.313], [6.118, 64.176, -1.38], [6.173, 63.843, 1.313]] - , [[7.067, 64.542, 1.338], [7.025, 64.83, -1.28], [7.1, 64.312, -1.338], [7.142, 64.024, 1.28]] - , [[8.051, 64.691, 1.296], [8.02, 64.936, -1.247], [8.084, 64.432, -1.296], [8.115, 64.186, 1.247]] - , [[9.038, 64.821, 1.254], [9.016, 65.025, -1.213], [9.069, 64.534, -1.254], [9.091, 64.33, 1.213]] - , [[10.027, 64.932, 1.212], [10.013, 65.097, -1.179], [10.056, 64.62, -1.212], [10.071, 64.455, 1.179]] - , [[11.019, 65.023, 1.17], [11.01, 65.151, -1.144], [11.043, 64.69, -1.17], [11.053, 64.562, 1.144]] - , [[12.013, 65.096, 1.127], [12.008, 65.189, -1.109], [12.032, 64.742, -1.127], [12.037, 64.65, 1.109]] - , [[13.008, 65.15, 1.085], [13.005, 65.21, -1.073], [13.021, 64.778, -1.085], [13.023, 64.719, 1.073]] - , [[14.004, 65.185, 1.042], [14.003, 65.213, -1.037], [14.011, 64.798, -1.042], [14.011, 64.769, 1.037]] - , [[15, 65.2, 1], [15, 65.2, -1], [15, 64.8, -1], [15, 64.8, 1]] - ]; + expected = [[[0, 0, -10], [0, 0, 10], [0, 4, 10], [0, 4, -10]], [[-0.0496427, -0.119848, -9.93183], [0.0558577, 0.134853, 9.98697], [1.58038, 3.81537, 9.93183], [1.47488, 3.56067, -9.98697]], [[-0.182394, -0.182394, -9.86199], [0.205896, 0.205896, 9.97182], [3.01082, 3.01082, 9.86199], [2.62253, 2.62253, -9.97182]], [[-0.355362, -0.147196, -9.79052], [0.402464, 0.166706, 9.95457], [4.05088, 1.67793, 9.79052], [3.29305, 1.36403, -9.95457]], [[-0.509794, 0, -9.71743], [0.57926, 0, 9.93524], [4.50979, 0, 9.71743], [3.42074, 0, -9.93524]], [[-0.651326, -0.113291, -9.64276], [0.637777, -0.532146, 9.91385], [4.35767, -1.74081, 9.64276], [3.06856, -1.32196, -9.91385]], [[-0.802105, -0.143779, -9.56654], [0.508005, -1.09563, 9.89042], [3.65621, -3.38293, 9.56654], [2.3461, -2.43108, -9.89042]], [[-0.926991, -0.100488, -9.4888], [0.178532, -1.62211, 9.86496], [2.4537, -4.75361, 9.4888], [1.34818, -3.23199, -9.86496]], [[-0.998322, -0.0051646, -9.40956], [-0.33711, -2.04017, 9.83751], [0.852424, -5.70117, 9.40956], [0.191212, -3.66617, -9.83751]], [[-1, 0.11171, -9.32886], [-1, -2.28432, 9.80807], [-1, -6.11171, 9.32886], [-1, -3.71568, -9.80807]], [[-1.34586, 0.261256, -9.24673], [-1.86279, -2.33753, 9.77667], [-2.60505, -6.06911, 9.24673], [-2.08811, -3.47032, -9.77667]], [[-1.63487, 0.467284, -9.1632], [-2.74492, -2.21261, 9.74333], [-4.19196, -5.70608, 9.1632], [-3.08192, -3.02619, -9.74333]], [[-1.8594, 0.713813, -9.07829], [-3.60887, -1.90445, 9.70808], [-5.6963, -5.02851, 9.07829], [-3.94683, -2.41025, -9.70808]], [[-2.01574, 0.984259, -8.99204], [-4.41598, -1.41598, 9.67094], [-7.05533, -4.05533, 8.99204], [-4.65508, -1.65508, -9.67094]], [[-2.10402, 1.26232, -8.90449], [-5.12819, -0.758368, 9.63192], [-8.21068, -2.81802, 8.90449], [-5.18651, -0.797335, -9.63192]], [[-2.12791, 1.5328, -8.81565], [-5.70977, 0.049149, 9.59105], [-9.11089, -1.35964, 8.81565], [-5.52902, 0.124017, -9.59105]], [[-2.09421, 1.78235, -8.72557], [-6.12909, 0.979761, 9.54836], [-9.71365, 0.266748, 8.72557], [-5.67877, 1.06934, -9.54836]], [[-2.01222, 2, -8.63427], [-6.36016, 2, 9.50386], [-9.98778, 2, 8.63427], [-5.63984, 2, -9.50386]], [[-1.91057, 2, -8.54179], [-6.48956, 2, 9.45759], [-10.0894, 2, 8.54179], [-5.51044, 2, -9.45759]], [[-1.78292, 2.45933, -8.44815], [-6.55492, 3.03875, 9.40956], [-10.1004, 3.46926, 8.44815], [-5.32843, 2.88983, -9.40956]], [[-1.60477, 2.8885, -8.3534], [-6.4906, 4.09274, 9.3598], [-9.9303, 4.94055, 8.3534], [-5.04447, 3.73631, -9.3598]], [[-1.38141, 3.2824, -8.25755], [-6.29397, 5.14549, 9.30835], [-9.57885, 6.39128, 8.25755], [-4.66629, 4.52819, -9.30835]], [[-1.11859, 3.63676, -8.16065], [-5.96451, 6.1801, 9.25521], [-9.04871, 7.79881, 8.16065], [-4.20278, 5.25547, -9.25521]], [[-0.822378, 3.94815, -8.06272], [-5.50391, 7.17957, 9.20042], [-8.34536, 9.14089, 8.06272], [-3.66383, 5.90946, -9.20042]], [[-0.499073, 4.21399, -7.9638], [-4.91603, 8.12706, 9.144], [-7.4771, 10.396, 7.9638], [-3.06015, 6.4829, -9.144]], [[-0.155059, 4.43256, -7.86392], [-4.20693, 9.00618, 9.08598], [-6.4549, 11.5436, 7.86392], [-2.40303, 6.97, -9.08598]], [[0.203284, 4.60299, -7.76311], [-3.38482, 9.80125, 9.02638], [-5.29232, 12.5647, 7.76311], [-1.70422, 7.36649, -9.02638]], [[0.569696, 4.72522, -7.66141], [-2.45991, 10.4976, 8.96524], [-4.00527, 13.4421, 7.66141], [-0.975662, 7.66965, -8.96524]], [[0.938127, 4.79993, -7.55885], [-1.44435, 11.082, 8.90258], [-2.61181, 14.1603, 7.55885], [-0.229333, 7.87827, -8.90258]], [[1.30283, 4.82853, -7.45545], [-0.352005, 11.5425, 8.83842], [-1.13188, 14.7065, 7.45545], [0.522954, 7.99261, -8.83842]], [[1.65843, 4.81308, -7.35126], [0.801691, 11.869, 8.7728], [0.412983, 15.0703, 7.35126], [1.26972, 8.01438, -8.7728]], [[2, 4.7562, -7.2463], [2, 12.0534, 8.70574], [2, 15.2438, 7.2463], [2, 7.94661, -8.70574]], [[2.97149, 4.64423, -7.14061], [2.97149, 12.1275, 8.63727], [2.97149, 15.2831, 7.14061], [2.97149, 7.7998, -8.63727]], [[3.53452, 4.47675, -7.03423], [4.1074, 12.1212, 8.56741], [4.34058, 15.2329, 7.03423], [3.7677, 7.58835, -8.56741]], [[4.07827, 4.27018, -6.92717], [5.24753, 12.0277, 8.49621], [5.70728, 15.0779, 6.92717], [4.53802, 7.3204, -8.49621]], [[4.60021, 4.02643, -6.81949], [6.38504, 11.8463, 8.42367], [7.06342, 14.8185, 6.81949], [5.2786, 6.99863, -8.42367]], [[5.098, 3.74755, -6.7112], [7.513, 11.5768, 8.34984], [8.40086, 14.4552, 6.7112], [5.98587, 6.62594, -8.34984]], [[5.56947, 3.43573, -6.60234], [8.62446, 11.2197, 8.27474], [9.7115, 13.9895, 6.60234], [6.65651, 6.20547, -8.27474]], [[6.01264, 3.09327, -6.49295], [9.71249, 10.7761, 8.19841], [10.9874, 13.4234, 6.49295], [7.28751, 5.74056, -8.19841]], [[6.4257, 2.72256, -6.38305], [10.7702, 10.2475, 8.12086], [12.2206, 12.7596, 6.38305], [7.87609, 5.23471, -8.12086]], [[6.80707, 2.32609, -6.27269], [11.7909, 9.63603, 8.04214], [13.4037, 12.0015, 6.27269], [8.41983, 4.69158, -8.04214]], [[7.15533, 1.90642, -6.16188], [12.7679, 8.94439, 7.96226], [14.5292, 11.1529, 6.16188], [8.91658, 4.11496, -7.96226]], [[7.46927, 1.46617, -6.05068], [13.6949, 8.17576, 7.88127], [15.5901, 10.2183, 6.05068], [9.36449, 3.50873, -7.88127]], [[7.74787, 1.00798, -5.93909], [14.5656, 7.33388, 7.79918], [16.5797, 9.20276, 5.93909], [9.76205, 2.87686, -7.79918]], [[7.99032, 0.534539, -5.82717], [15.3742, 6.42297, 7.71604], [17.4919, 8.11178, 5.82717], [10.108, 2.22335, -7.71604]], [[8.19599, 0.048554, -5.71494], [16.1151, 5.44774, 7.63186], [18.3207, 6.95145, 5.71494], [10.4015, 1.55226, -7.63186]], [[8.36443, -0.447276, -5.60244], [16.7833, 4.41334, 7.54668], [19.0608, 5.72825, 5.60244], [10.6419, 0.867636, -7.54668]], [[8.49539, -0.950257, -5.48969], [17.3738, 3.32535, 7.46054], [19.7073, 4.44912, 5.48969], [10.8289, 0.173521, -7.46054]], [[8.58881, -1.45772, -5.37672], [17.8823, 2.18972, 7.37345], [20.2561, 3.12135, 5.37672], [10.9626, -0.526085, -7.37345]], [[8.64478, -1.96702, -5.26358], [18.305, 1.01278, 7.28546], [20.7033, 1.75256, 5.26358], [11.0431, -1.22724, -7.28546]], [[8.66358, -2.47556, -5.15029], [18.6386, -0.198832, 7.19659], [21.046, 0.350655, 5.15029], [11.071, -1.92607, -7.19659]], [[8.64566, -2.98079, -5.03688], [18.88, -1.43821, 7.10687], [21.2816, -1.07622, 5.03688], [11.0473, -2.61881, -7.10687]], [[8.59162, -3.48024, -4.92338], [19.0271, -2.69821, 7.01633], [21.4084, -2.51976, 4.92338], [10.9729, -3.30179, -7.01633]], [[8.51477, -3.99922, -4.80983], [19.0907, -3.99922, 6.92501], [21.4377, -3.99922, 4.80983], [10.8617, -3.99922, -6.92501]], [[8.41765, -4.68715, -4.69626], [19.0889, -5.19549, 6.83294], [21.3922, -5.3052, 4.69626], [10.7209, -4.79687, -6.83294]], [[8.2899, -5.36829, -4.58269], [19.0283, -6.39368, 6.74014], [21.2826, -6.60894, 4.58269], [10.5442, -5.58355, -6.74014]], [[8.13194, -6.04136, -4.46916], [18.9085, -7.5908, 6.64665], [21.1091, -7.90719, 4.46916], [10.3325, -6.35775, -6.64665]], [[7.94421, -6.70514, -4.35571], [18.7297, -8.78386, 6.55249], [20.8719, -9.19674, 4.35571], [10.0864, -7.11801, -6.55249]], [[7.72722, -7.35839, -4.24235], [18.4918, -9.96985, 6.45771], [20.5715, -10.4744, 4.24235], [9.8069, -7.86292, -6.45771]], [[7.4815, -7.99993, -4.12911], [18.1952, -11.1458, 6.36232], [20.2085, -11.7369, 4.12911], [9.49479, -8.59109, -6.36232]], [[7.20763, -8.62858, -4.01604], [17.8404, -12.3086, 6.26637], [19.7838, -12.9812, 4.01604], [9.15101, -9.30119, -6.26637]], [[6.90625, -9.2432, -3.90316], [17.428, -13.4555, 6.16988], [19.2983, -14.2042, 3.90316], [8.77655, -9.99196, -6.16988]], [[6.57802, -9.84268, -3.79049], [16.9587, -14.5834, 6.07288], [18.7531, -15.4028, 3.79049], [8.37243, -10.6622, -6.07288]], [[6.22364, -10.4259, -3.67808], [16.4334, -15.6894, 5.9754], [18.1494, -16.5741, 3.67808], [7.93971, -11.3106, -5.9754]], [[5.84386, -10.9919, -3.56594], [15.8531, -16.7707, 5.87748], [17.4888, -17.7151, 3.56594], [7.47951, -11.9362, -5.87748]], [[5.43947, -11.5395, -3.4541], [15.2192, -17.8245, 5.77914], [16.7727, -18.8229, 3.4541], [6.99297, -12.5379, -5.77914]], [[5.01129, -12.0678, -3.3426], [14.533, -18.8481, 5.68042], [16.0029, -19.8949, 3.3426], [6.48128, -13.1146, -5.68042]], [[4.56017, -12.5758, -3.23147], [13.7958, -19.8388, 5.58135], [15.1813, -20.9284, 3.23147], [5.94564, -13.6653, -5.58135]], [[4.08701, -13.0626, -3.12072], [13.0095, -20.794, 5.48195], [14.3098, -21.9207, 3.12072], [5.38731, -14.1893, -5.48195]], [[3.59274, -13.5273, -3.01039], [12.1758, -21.7112, 5.38226], [13.3906, -22.8695, 3.01039], [4.80755, -14.6856, -5.38226]], [[3.07831, -13.969, -2.90051], [11.2965, -22.588, 5.28231], [12.4258, -23.7724, 2.90051], [4.20767, -15.1535, -5.28231]], [[2.54472, -14.387, -2.7911], [10.3737, -23.4221, 5.18213], [11.418, -24.6272, 2.7911], [3.58899, -15.5921, -5.18213]], [[1.99299, -14.7804, -2.68219], [9.40953, -24.2113, 5.08175], [10.3694, -25.4318, 2.68219], [2.95286, -16.0009, -5.08175]], [[1.42418, -15.1484, -2.57381], [8.40627, -24.9534, 4.98119], [9.28274, -26.1842, 2.57381], [2.30064, -16.3792, -4.98119]], [[0.839355, -15.4905, -2.46598], [7.36628, -25.6466, 4.8805], [8.16065, -26.8826, 2.46598], [1.63372, -16.7265, -4.8805]], [[0.239638, -15.8058, -2.35873], [6.29203, -26.2889, 4.77969], [7.00588, -27.5253, 2.35873], [0.95348, -17.0422, -4.77969]], [[-0.373837, -16.0939, -2.25208], [5.18609, -26.8786, 4.6788], [5.82127, -28.1107, 2.25208], [0.261345, -17.3259, -4.6788]], [[-0.999912, -16.354, -2.14607], [4.05109, -27.4142, 4.57786], [4.60974, -28.6374, 2.14607], [-0.441268, -17.5773, -4.57786]], [[-1.6374, -16.5858, -2.04071], [2.88978, -27.8941, 4.47689], [3.37425, -29.1043, 2.04071], [-1.15293, -17.7959, -4.47689]], [[-2.28509, -16.7886, -1.93603], [1.70497, -28.3171, 4.37593], [2.11786, -29.5101, 1.93603], [-1.87221, -17.9816, -4.37593]], [[-2.94177, -16.9621, -1.83206], [0.499531, -28.6821, 4.27501], [0.843643, -29.854, 1.83206], [-2.59766, -18.134, -4.27501]], [[-3.60617, -17.1058, -1.72881], [-0.723614, -28.9879, 4.17416], [-0.445278, -30.1352, 1.72881], [-3.32783, -18.2531, -4.17416]], [[-4.27703, -17.2195, -1.62632], [-1.96148, -29.2337, 4.07339], [-1.74574, -30.353, 1.62632], [-4.0613, -18.3388, -4.07339]], [[-4.95308, -17.3027, -1.5246], [-3.21104, -29.4188, 3.97275], [-3.05457, -30.5071, 1.5246], [-4.79661, -18.391, -3.97275]], [[-5.633, -17.3553, -1.42369], [-4.46924, -29.5427, 3.87226], [-4.36856, -30.5971, 1.42369], [-5.53232, -18.4097, -3.87226]], [[-6.31549, -17.3771, -1.32359], [-5.733, -29.605, 3.77194], [-5.68451, -30.6229, 1.32359], [-6.267, -18.395, -3.77194]], [[-6.98888, -17.3773, -1.22434], [-6.98888, -29.6147, 3.67184], [-6.98888, -30.594, 1.22434], [-6.98888, -18.3565, -3.67184]], [[-7.78541, -17.3604, -1.12595], [-8.14111, -29.5853, 3.57196], [-8.16844, -30.5245, 1.12595], [-7.81273, -18.2996, -3.57196]], [[-8.58188, -17.3219, -1.02845], [-9.29238, -29.5207, 3.47235], [-9.34472, -30.4193, 1.02845], [-8.63422, -18.2205, -3.47235]], [[-9.37774, -17.2616, -0.931863], [-10.4415, -29.4209, 3.37303], [-10.5166, -30.2786, 0.931863], [-9.45277, -18.1193, -3.37303]], [[-10.1724, -17.1794, -0.836202], [-11.5875, -29.2861, 3.27402], [-11.6829, -30.1026, 0.836202], [-10.2679, -17.9959, -3.27402]], [[-10.9654, -17.0755, -0.741491], [-12.7291, -29.1163, 3.17536], [-12.8427, -29.8914, 0.741491], [-11.0789, -17.8506, -3.17536]], [[-11.7561, -16.9497, -0.64775], [-13.8653, -28.9118, 3.07706], [-13.9947, -29.6454, 0.64775], [-11.8855, -17.6834, -3.07706]], [[-12.544, -16.8022, -0.554998], [-14.995, -28.6726, 2.97916], [-15.1379, -29.3648, 0.554998], [-12.6869, -17.4944, -2.97916]], [[-13.3284, -16.6329, -0.463255], [-16.117, -28.3991, 2.88168], [-16.2713, -29.0501, 0.463255], [-13.4827, -17.2839, -2.88168]], [[-14.1088, -16.4419, -0.37254], [-17.2303, -28.0915, 2.78465], [-17.3938, -28.7014, 0.37254], [-14.2723, -17.0518, -2.78465]], [[-14.8847, -16.2292, -0.28287], [-18.3339, -27.7501, 2.68809], [-18.5043, -28.3193, 0.28287], [-15.0552, -16.7984, -2.68809]], [[-15.6555, -15.9949, -0.194264], [-19.4266, -27.3752, 2.59203], [-19.6018, -27.9042, 0.194264], [-15.8308, -16.5239, -2.59203]], [[-16.4206, -15.7391, -0.106739], [-20.5073, -26.9673, 2.4965], [-20.6854, -27.4565, 0.106739], [-16.5987, -16.2283, -2.4965]], [[-17.1794, -15.4619, -0.0203131], [-21.5752, -26.5267, 2.40151], [-21.754, -26.9768, 0.0203131], [-17.3582, -15.912, -2.40151]], [[-17.9314, -15.1634, 0.0649977], [-22.6291, -26.0538, 2.30709], [-22.8067, -26.4656, -0.0649977], [-18.109, -15.5751, -2.30709]], [[-18.6759, -14.8437, 0.149177], [-23.668, -25.5492, 2.21326], [-23.8424, -25.9233, -0.149177], [-18.8504, -15.2178, -2.21326]], [[-19.4124, -14.503, 0.232209], [-24.6909, -25.0133, 2.12006], [-24.8604, -25.3507, -0.232209], [-19.5819, -14.8404, -2.12006]], [[-20.1404, -14.1414, 0.314078], [-25.697, -24.4467, 2.0275], [-25.8596, -24.7483, -0.314078], [-20.303, -14.443, -2.0275]], [[-20.8592, -13.7591, 0.39477], [-26.6851, -23.8499, 1.9356], [-26.8392, -24.1168, -0.39477], [-21.0133, -14.026, -1.9356]], [[-21.5683, -13.3563, 0.474269], [-27.6545, -23.2236, 1.8444], [-27.7983, -23.4568, -0.474269], [-21.7121, -13.5896, -1.8444]], [[-22.267, -12.9332, 0.552562], [-28.6041, -22.5684, 1.7539], [-28.7362, -22.7691, -0.552562], [-22.3991, -13.134, -1.7539]], [[-22.9549, -12.4901, 0.629635], [-29.5332, -21.8848, 1.66414], [-29.6519, -22.0543, -0.629635], [-23.0736, -12.6596, -1.66414]], [[-23.6314, -12.0271, 0.705474], [-30.4408, -21.1737, 1.57513], [-30.5446, -21.3132, -0.705474], [-23.7352, -12.1666, -1.57513]], [[-24.2958, -11.5445, 0.780068], [-31.3261, -20.4357, 1.48689], [-31.4137, -20.5466, -0.780068], [-24.3835, -11.6554, -1.48689]], [[-24.9477, -11.0425, 0.853403], [-32.1882, -19.6715, 1.39946], [-32.2584, -19.7552, -0.853403], [-25.0179, -11.1262, -1.39946]], [[-25.5864, -10.5216, 0.925468], [-33.0265, -18.8819, 1.31284], [-33.078, -18.9398, -0.925468], [-25.6379, -10.5795, -1.31284]], [[-26.2115, -9.9819, 0.996252], [-33.8401, -18.0678, 1.22706], [-33.8718, -18.1014, -0.996252], [-26.2432, -10.0155, -1.22706]], [[-26.8223, -9.4238, 1.06574], [-34.6283, -17.2298, 1.14213], [-34.6391, -17.2406, -1.06574], [-26.8331, -9.43461, -1.14213]], [[-27.4183, -8.84763, 1.13393], [-35.3904, -16.3689, 1.05809], [-35.3794, -16.3585, -1.13393], [-27.4073, -8.83722, -1.05809]], [[-27.999, -8.25373, 1.20081], [-36.1257, -15.4859, 0.974937], [-36.092, -15.4558, -1.20081], [-27.9653, -8.2237, -0.974937]], [[-28.5639, -7.64248, 1.26636], [-36.8336, -14.5816, 0.892702], [-36.7763, -14.5335, -1.26636], [-28.5067, -7.59445, -0.892702]], [[-29.1124, -7.01427, 1.33058], [-37.5134, -13.6569, 0.8114], [-37.432, -13.5925, -1.33058], [-29.031, -6.94986, -0.8114]], [[-29.644, -6.36949, 1.39346], [-38.1646, -12.7128, 0.731049], [-38.0583, -12.6337, -1.39346], [-29.5377, -6.29037, -0.731049]], [[-30.1582, -5.70856, 1.45499], [-38.7866, -11.7502, 0.651667], [-38.655, -11.6581, -1.45499], [-30.0266, -5.61641, -0.651667]], [[-30.6545, -5.03192, 1.51517], [-39.3788, -10.77, 0.573271], [-39.2214, -10.6665, -1.51517], [-30.4971, -4.92841, -0.573271]], [[-31.1324, -4.34003, 1.57398], [-39.9408, -9.77316, 0.495878], [-39.7573, -9.65997, -1.57398], [-30.9489, -4.22684, -0.495878]], [[-31.5914, -3.63335, 1.63142], [-40.4722, -8.76066, 0.419505], [-40.2623, -8.63947, -1.63142], [-31.3815, -3.51216, -0.419505]], [[-32.0311, -2.91237, 1.68749], [-40.9724, -7.73348, 0.344166], [-40.7359, -7.60598, -1.68749], [-31.7946, -2.78486, -0.344166]], [[-32.451, -2.17758, 1.74217], [-41.4411, -6.69261, 0.269878], [-41.178, -6.56046, -1.74217], [-32.1878, -2.04543, -0.269878]], [[-32.8506, -1.42951, 1.79546], [-41.8779, -5.63905, 0.196656], [-41.5881, -5.50391, -1.79546], [-32.5608, -1.29438, -0.196656]], [[-33.2295, -0.66869, 1.84737], [-42.2825, -4.57381, 0.124515], [-41.9662, -4.43733, -1.84737], [-32.9131, -0.532213, -0.124515]], [[-33.5873, 0.104338, 1.89787], [-42.6546, -3.4979, 0.0534689], [-42.3118, -3.36171, -1.89787], [-33.2445, 0.240531, -0.0534689]], [[-33.9235, 0.889008, 1.94698], [-42.994, -2.41236, -0.0164685], [-42.625, -2.27805, -1.94698], [-33.5545, 1.02332, 0.0164685]], [[-34.2379, 1.68474, 1.99468], [-43.3003, -1.31821, -0.0852837], [-42.9054, -1.18736, -1.99468], [-33.843, 1.81559, 0.0852837]], [[-34.5299, 2.49095, 2.04097], [-43.5734, -0.216487, -0.152964], [-43.153, -0.0906416, -2.04097], [-34.1096, 2.61679, 0.152964]], [[-34.7993, 3.30702, 2.08585], [-43.8131, 0.891771, -0.219496], [-43.3678, 1.0111, -2.08585], [-34.3539, 3.42635, 0.219496]], [[-35.0456, 4.13233, 2.12932], [-44.0193, 2.00552, -0.284868], [-43.5495, 2.11688, -2.12932], [-34.5758, 4.24368, 0.284868]], [[-35.2686, 4.96625, 2.17138], [-44.192, 3.12373, -0.349068], [-43.6983, 3.22567, -2.17138], [-34.775, 5.06819, 0.349068]], [[-35.468, 5.80814, 2.21202], [-44.3309, 4.24536, -0.412085], [-43.8141, 4.33649, -2.21202], [-34.9511, 5.89927, 0.412085]], [[-35.6433, 6.65733, 2.25125], [-44.4362, 5.36936, -0.473909], [-43.8969, 5.44835, -2.25125], [-35.104, 6.73632, 0.473909]], [[-35.7944, 7.51315, 2.28906], [-44.5077, 6.4947, -0.534528], [-43.9468, 6.56026, -2.28906], [-35.2335, 7.57871, 0.534528]], [[-35.921, 8.37491, 2.32545], [-44.5456, 7.62035, -0.593933], [-43.964, 7.67124, -2.32545], [-35.3393, 8.4258, 0.593933]], [[-36.0228, 9.24193, 2.36043], [-44.5499, 8.74528, -0.652114], [-43.9484, 8.78031, -2.36043], [-35.4213, 9.27696, 0.652114]], [[-36.0996, 10.1135, 2.394], [-44.5207, 9.86846, -0.709062], [-43.9004, 9.88651, -2.394], [-35.4793, 10.1315, 0.709062]], [[-36.1656, 10, 2.42615], [-44.4725, 10, -0.764769], [-43.8344, 10, -2.42615], [-35.5275, 10, 0.764769]], [[-36.2251, 10.925, 2.45689], [-44.4121, 11.0728, -0.819226], [-43.757, 11.061, -2.45689], [-35.57, 10.9131, 0.819226]], [[-36.2679, 11.8521, 2.48622], [-44.3317, 12.1434, -0.872426], [-43.6604, 12.1192, -2.48622], [-35.5966, 11.8279, 0.872426]], [[-36.294, 12.7811, 2.51415], [-44.2313, 13.2114, -0.924362], [-43.5446, 13.1742, -2.51415], [-35.6073, 12.7439, 0.924362]], [[-36.3033, 13.7116, 2.54068], [-44.1112, 14.2765, -0.975026], [-43.4099, 14.2257, -2.54068], [-35.602, 13.6609, 0.975026]], [[-36.2958, 14.6434, 2.56581], [-43.9714, 15.3382, -1.02441], [-43.2563, 15.2735, -2.56581], [-35.5807, 14.5786, 1.02441]], [[-36.2713, 15.5761, 2.58955], [-43.812, 16.3962, -1.07252], [-43.0839, 16.317, -2.58955], [-35.5432, 15.4969, 1.07252]], [[-36.2298, 16.5094, 2.61189], [-43.6331, 17.4501, -1.11933], [-42.8928, 17.356, -2.61189], [-35.4895, 16.4154, 1.11933]], [[-36.1713, 17.4431, 2.63286], [-43.4349, 18.4996, -1.16485], [-42.6833, 18.3903, -2.63286], [-35.4196, 17.3337, 1.16485]], [[-36.0956, 18.3767, 2.65244], [-43.2174, 19.5443, -1.20907], [-42.4553, 19.4193, -2.65244], [-35.3335, 18.2518, 1.20907]], [[-36.0028, 19.31, 2.67066], [-42.9809, 20.5838, -1.25199], [-42.2091, 20.4429, -2.67066], [-35.2311, 19.1691, 1.25199]], [[-35.8929, 20.2427, 2.68751], [-42.7254, 21.6178, -1.2936], [-41.9448, 21.4607, -2.68751], [-35.1123, 20.0856, 1.2936]], [[-35.7657, 21.1744, 2.703], [-42.4511, 22.6459, -1.3339], [-41.6626, 22.4724, -2.703], [-34.9772, 21.0008, 1.3339]], [[-35.6212, 22.1048, 2.71713], [-42.1582, 23.6679, -1.37289], [-41.3626, 23.4777, -2.71713], [-34.8257, 21.9145, 1.37289]], [[-35.4596, 23.0335, 2.72993], [-41.8467, 24.6833, -1.41057], [-41.045, 24.4762, -2.72993], [-34.6578, 22.8264, 1.41057]], [[-35.2806, 23.9603, 2.74139], [-41.517, 25.6919, -1.44693], [-40.7099, 25.4678, -2.74139], [-34.4735, 23.7362, 1.44693]], [[-35.0844, 24.8849, 2.75152], [-41.1691, 26.6932, -1.48197], [-40.3575, 26.452, -2.75152], [-34.2728, 24.6437, 1.48197]], [[-34.8709, 25.8068, 2.76033], [-40.8033, 27.6871, -1.51569], [-39.988, 27.4287, -2.76033], [-34.0557, 25.5484, 1.51569]], [[-34.6402, 26.7257, 2.76784], [-40.4196, 28.6731, -1.5481], [-39.6016, 28.3974, -2.76784], [-33.8222, 26.4501, 1.5481]], [[-34.3922, 27.6414, 2.77404], [-40.0184, 29.6509, -1.57918], [-39.1985, 29.358, -2.77404], [-33.5723, 27.3485, 1.57918]], [[-34.127, 28.5534, 2.77896], [-39.5998, 30.6203, -1.60895], [-38.7788, 30.3102, -2.77896], [-33.3061, 28.2434, 1.60895]], [[-33.8447, 29.4615, 2.78259], [-39.164, 31.5809, -1.6374], [-38.3428, 31.2537, -2.78259], [-33.0235, 29.1343, 1.6374]], [[-33.5452, 30.3653, 2.78496], [-38.7112, 32.5325, -1.66453], [-37.8905, 32.1882, -2.78496], [-32.7245, 30.021, 1.66453]], [[-33.2285, 31.2644, 2.78608], [-38.2416, 33.4747, -1.69035], [-37.4224, 33.1135, -2.78608], [-32.4093, 30.9032, 1.69035]], [[-32.8949, 32.1585, 2.78595], [-37.7554, 34.4072, -1.71485], [-36.9384, 34.0293, -2.78595], [-32.0779, 31.7806, 1.71485]], [[-32.5442, 33.0474, 2.78459], [-37.2528, 35.3299, -1.73805], [-36.4389, 34.9353, -2.78459], [-31.7303, 32.6528, 1.73805]], [[-32.1767, 33.9305, 2.782], [-36.7342, 36.2423, -1.75994], [-35.9241, 35.8314, -2.782], [-31.3665, 33.5196, 1.75994]], [[-31.7923, 34.8077, 2.77821], [-36.1996, 37.1443, -1.78052], [-35.3941, 36.7172, -2.77821], [-30.9867, 34.3806, 1.78052]], [[-31.3911, 35.6785, 2.77323], [-35.6494, 38.0356, -1.79981], [-34.8492, 37.5926, -2.77323], [-30.5909, 35.2356, 1.79981]], [[-30.9732, 36.5427, 2.76706], [-35.0837, 38.9158, -1.8178], [-34.2895, 38.4573, -2.76706], [-30.1791, 36.0842, 1.8178]], [[-30.5388, 37.3998, 2.75973], [-34.5028, 39.7848, -1.8345], [-33.7155, 39.3111, -2.75973], [-29.7515, 36.9261, 1.8345]], [[-30.088, 38.2496, 2.75125], [-33.9069, 40.6423, -1.84992], [-33.1271, 40.1538, -2.75125], [-29.3081, 37.761, 1.84992]], [[-29.6207, 39.0917, 2.74162], [-33.2963, 41.4881, -1.86406], [-32.5247, 40.9851, -2.74162], [-28.8491, 38.5886, 1.86406]], [[-29.1373, 39.9258, 2.73088], [-32.6713, 42.3219, -1.87692], [-31.9085, 41.8048, -2.73088], [-28.3745, 39.4086, 1.87692]], [[-28.6377, 40.7515, 2.71902], [-32.032, 43.1435, -1.88852], [-31.2788, 42.6127, -2.71902], [-27.8844, 40.2207, 1.88852]], [[-28.1221, 41.5686, 2.70608], [-31.3788, 43.9527, -1.89886], [-30.6357, 43.4087, -2.70608], [-27.379, 41.0246, 1.89886]], [[-27.5908, 42.3767, 2.69206], [-30.7119, 44.7493, -1.90795], [-29.9795, 44.1925, -2.69206], [-26.8584, 41.8199, 1.90795]], [[-27.0437, 43.1754, 2.67697], [-30.0315, 45.5329, -1.91579], [-29.3104, 44.9639, -2.67697], [-26.3226, 42.6064, 1.91579]], [[-26.4812, 43.9644, 2.66085], [-29.3379, 46.3035, -1.9224], [-28.6287, 45.7228, -2.66085], [-25.7719, 43.3837, 1.9224]], [[-25.9032, 44.7435, 2.64369], [-28.6314, 47.0609, -1.92778], [-27.9346, 46.469, -2.64369], [-25.2064, 44.1516, 1.92778]], [[-25.3101, 45.5123, 2.62553], [-27.9123, 47.8047, -1.93194], [-27.2284, 47.2022, -2.62553], [-24.6262, 44.9098, 1.93194]], [[-24.702, 46.2705, 2.60637], [-27.1808, 48.535, -1.93489], [-26.5102, 47.9224, -2.60637], [-24.0315, 45.6579, 1.93489]], [[-24.0791, 47.0177, 2.58624], [-26.4371, 49.2513, -1.93665], [-25.7804, 48.6292, -2.58624], [-23.4224, 46.3956, 1.93665]], [[-23.4416, 47.7537, 2.56515], [-25.6816, 49.9537, -1.93721], [-25.0392, 49.3227, -2.56515], [-22.7991, 47.1227, 1.93721]], [[-22.7896, 48.4781, 2.54312], [-24.9146, 50.6418, -1.93659], [-24.2868, 50.0026, -2.54312], [-22.1618, 47.8389, 1.93659]], [[-22.1235, 49.1908, 2.52017], [-24.1362, 51.3156, -1.93481], [-23.5235, 50.6688, -2.52017], [-21.5107, 48.5439, 1.93481]], [[-21.4433, 49.8912, 2.49632], [-23.3469, 51.9749, -1.93187], [-22.7495, 51.321, -2.49632], [-20.846, 49.2374, 1.93187]], [[-20.7494, 50.5792, 2.47159], [-22.5468, 52.6195, -1.92778], [-21.9651, 51.9592, -2.47159], [-20.1677, 49.919, 1.92778]], [[-20.0419, 51.2545, 2.44599], [-21.7362, 53.2492, -1.92257], [-21.1706, 52.5833, -2.44599], [-19.4763, 50.5886, 1.92257]], [[-19.3211, 51.9168, 2.41955], [-20.9155, 53.864, -1.91623], [-20.3661, 53.193, -2.41955], [-18.7718, 51.2459, 1.91623]], [[-18.5873, 52.5658, 2.39229], [-20.0849, 54.4636, -1.90878], [-19.552, 53.7883, -2.39229], [-18.0545, 51.8905, 1.90878]], [[-17.8407, 53.2012, 2.36422], [-19.2446, 55.048, -1.90024], [-18.7285, 54.369, -2.36422], [-17.3245, 52.5222, 1.90024]], [[-17.0815, 53.8228, 2.33536], [-18.3951, 55.617, -1.89062], [-17.8958, 54.9351, -2.33536], [-16.5822, 53.1408, 1.89062]], [[-16.31, 54.4302, 2.30574], [-17.5365, 56.1705, -1.87993], [-17.0542, 55.4863, -2.30574], [-15.8278, 53.7459, 1.87993]], [[-15.5265, 55.0233, 2.27538], [-16.6691, 56.7084, -1.86819], [-16.204, 56.0225, -2.27538], [-15.0615, 54.3374, 1.86819]], [[-14.7313, 55.6017, 2.24429], [-15.7933, 57.2306, -1.85541], [-15.3455, 56.5437, -2.24429], [-14.2835, 54.9149, 1.85541]], [[-13.9246, 56.1653, 2.21251], [-14.9093, 57.7369, -1.8416], [-14.4788, 57.0498, -2.21251], [-13.4941, 55.4782, 1.8416]], [[-13.1067, 56.7138, 2.18004], [-14.0173, 58.2272, -1.82679], [-13.6042, 57.5405, -2.18004], [-12.6936, 56.0271, 1.82679]], [[-12.278, 57.2468, 2.14691], [-13.1178, 58.7015, -1.81098], [-12.722, 58.016, -2.14691], [-11.8822, 56.5613, 1.81098]], [[-11.4386, 57.7643, 2.11315], [-12.211, 59.1596, -1.7942], [-11.8325, 58.4759, -2.11315], [-11.0602, 57.0806, 1.7942]], [[-10.589, 58.266, 2.07877], [-11.2971, 59.6015, -1.77645], [-10.9359, 58.9203, -2.07877], [-10.2279, 57.5848, 1.77645]], [[-9.72944, 58.7517, 2.04379], [-10.3764, 60.0271, -1.75776], [-10.0325, 59.3491, -2.04379], [-9.38549, 58.0736, 1.75776]], [[-8.8602, 59.221, 2.00825], [-9.44932, 60.4363, -1.73814], [-9.12248, 59.7621, -2.00825], [-8.53336, 58.5468, 1.73814]], [[-7.98163, 59.674, 1.97215], [-8.51603, 60.8291, -1.71761], [-8.20617, 60.1593, -1.97215], [-7.67177, 59.0042, 1.71761]], [[-7.09405, 60.1103, 1.93552], [-7.57685, 61.2053, -1.69618], [-7.28381, 60.5406, -1.93552], [-6.80102, 59.4457, 1.69618]], [[-6.1978, 60.5297, 1.89839], [-6.63206, 61.5648, -1.67388], [-6.35567, 60.906, -1.89839], [-5.92141, 59.8709, 1.67388]], [[-5.2932, 60.9321, 1.86077], [-5.68195, 61.9078, -1.65072], [-5.422, 61.2554, -1.86077], [-5.03325, 60.2797, 1.65072]], [[-4.38059, 61.3173, 1.8227], [-4.7268, 62.234, -1.62671], [-4.48306, 61.5886, -1.8227], [-4.13685, 60.6719, 1.62671]], [[-3.46032, 61.6851, 1.78419], [-3.76691, 62.5434, -1.60189], [-3.53912, 61.9057, -1.78419], [-3.23253, 61.0473, 1.60189]], [[-2.53274, 62.0353, 1.74526], [-2.80254, 62.8361, -1.57626], [-2.59043, 62.2065, -1.74526], [-2.32063, 61.4058, 1.57626]], [[-1.59819, 62.3679, 1.70594], [-1.834, 63.1118, -1.54985], [-1.63726, 62.4911, -1.70594], [-1.40145, 61.7471, 1.54985]], [[-0.657032, 62.6826, 1.66625], [-0.861549, 63.3707, -1.52267], [-0.679857, 62.7594, -1.66625], [-0.47534, 62.0712, 1.52267]], [[0.290379, 62.9793, 1.62621], [0.114516, 63.6127, -1.49474], [0.281504, 63.0112, -1.62621], [0.457367, 62.3778, 1.49474]], [[1.24368, 63.2579, 1.58585], [1.09392, 63.8377, -1.46608], [1.24657, 63.2467, -1.58585], [1.39633, 62.6669, 1.46608]], [[2.20251, 63.5182, 1.54519], [2.07637, 64.0457, -1.43672], [2.21507, 63.4656, -1.54519], [2.34121, 62.9382, 1.43672]], [[3.16649, 63.7602, 1.50426], [3.0616, 64.2367, -1.40667], [3.18676, 63.6681, -1.50426], [3.29165, 63.1916, 1.40667]], [[4.13527, 63.9837, 1.46307], [4.04933, 64.4107, -1.37596], [4.16136, 63.854, -1.46307], [4.2473, 63.427, 1.37596]], [[5.10846, 64.1886, 1.42165], [5.03927, 64.5676, -1.34459], [5.13862, 64.0234, -1.42165], [5.20781, 63.6443, 1.34459]], [[6.0857, 64.3748, 1.38003], [6.03116, 64.7075, -1.3126], [6.11828, 64.1761, -1.38003], [6.17282, 63.8434, 1.3126]], [[7.0666, 64.5423, 1.33822], [7.0247, 64.8304, -1.28001], [7.10008, 64.3122, -1.33822], [7.14197, 64.0241, 1.28001]], [[8.05079, 64.691, 1.29626], [8.01963, 64.9362, -1.24683], [8.08375, 64.4316, -1.29626], [8.1149, 64.1865, 1.24683]], [[9.03788, 64.8208, 1.25415], [9.01568, 65.0249, -1.21309], [9.06903, 64.5344, -1.25415], [9.09123, 64.3302, 1.21309]], [[10.0275, 64.9316, 1.21194], [10.0126, 65.0966, -1.1788], [10.0557, 64.6204, -1.21194], [10.0706, 64.4554, 1.1788]], [[11.0193, 65.0234, 1.16964], [11.01, 65.1513, -1.14399], [11.0434, 64.6898, -1.16964], [11.0526, 64.5619, 1.14399]], [[12.0128, 65.0962, 1.12727], [12.0077, 65.189, -1.10869], [12.032, 64.7424, -1.12727], [12.037, 64.6497, 1.10869]], [[13.0077, 65.1499, 1.08486], [13.0055, 65.2096, -1.07291], [13.0211, 64.7784, -1.08486], [13.0232, 64.7187, 1.07291]], [[14.0035, 65.1845, 1.04243], [14.003, 65.2133, -1.03667], [14.0105, 64.7975, -1.04243], [14.011, 64.7688, 1.03667]], [[15, 65.2, 1], [15, 65.2, -1], [15, 64.8, -1], [15, 64.8, 1]]]; for(i = [0:len(expected) - 1]) { - assertEqualPoints(expected[i], sections[i], float_digits = 3); + assertEqualPoints(expected[i], sections[i]); } } @@ -276,229 +47,10 @@ module test_golden_spiral_extrude_hollow() { include ; module test_golden_spiral_extrude(sections) { - expected = [ - [[8, 0, 0], [7.598, 0, 1.5], [6.5, 0, 2.598], [5, 0, 3], [3.5, 0, 2.598], [2.402, 0, 1.5], [2, 0, 0], [2.402, 0, -1.5], [3.5, 0, -2.598], [5, 0, -3], [6.5, 0, -2.598], [7.598, 0, -1.5], [7, 0, 0], [6.732, 0, 1], [6, 0, 1.732], [5, 0, 2], [4, 0, 1.732], [3.268, 0, 1], [3, 0, 0], [3.268, 0, -1], [4, 0, -1.732], [5, 0, -2], [6, 0, -1.732], [6.732, 0, -1]] - , [[7.968, 1.585, 0], [7.558, 1.503, 1.562], [6.436, 1.28, 2.706], [4.904, 0.975, 3.124], [3.372, 0.671, 2.706], [2.25, 0.448, 1.562], [1.84, 0.366, 0], [2.25, 0.448, -1.562], [3.372, 0.671, -2.706], [4.904, 0.975, -3.124], [6.436, 1.28, -2.706], [7.558, 1.503, -1.562], [6.947, 1.382, 0], [6.673, 1.327, 1.041], [5.925, 1.179, 1.804], [4.904, 0.975, 2.083], [3.882, 0.772, 1.804], [3.135, 0.624, 1.041], [2.861, 0.569, 0], [3.135, 0.624, -1.041], [3.882, 0.772, -1.804], [4.904, 0.975, -2.083], [5.925, 1.179, -1.804], [6.673, 1.327, -1.041]] - , [[7.621, 3.157, 0], [7.219, 2.99, 1.624], [6.12, 2.535, 2.814], [4.619, 1.913, 3.249], [3.119, 1.292, 2.814], [2.02, 0.837, 1.624], [1.618, 0.67, 0], [2.02, 0.837, -1.624], [3.119, 1.292, -2.814], [4.619, 1.913, -3.249], [6.12, 2.535, -2.814], [7.219, 2.99, -1.624], [6.62, 2.742, 0], [6.352, 2.631, 1.083], [5.62, 2.328, 1.876], [4.619, 1.913, 2.166], [3.619, 1.499, 1.876], [2.886, 1.196, 1.083], [2.618, 1.085, 0], [2.886, 1.196, -1.083], [3.619, 1.499, -1.876], [4.619, 1.913, -2.166], [5.62, 2.328, -1.876], [6.352, 2.631, -1.083]] - , [[6.962, 4.652, 0], [6.586, 4.401, 1.687], [5.56, 3.715, 2.921], [4.157, 2.778, 3.373], [2.755, 1.841, 2.921], [1.728, 1.155, 1.687], [1.353, 0.904, 0], [1.728, 1.155, -1.687], [2.755, 1.841, -2.921], [4.157, 2.778, -3.373], [5.56, 3.715, -2.921], [6.586, 4.401, -1.687], [6.027, 4.027, 0], [5.777, 3.86, 1.124], [5.092, 3.403, 1.948], [4.157, 2.778, 2.249], [3.222, 2.153, 1.948], [2.538, 1.696, 1.124], [2.287, 1.528, 0], [2.538, 1.696, -1.124], [3.222, 2.153, -1.948], [4.157, 2.778, -2.249], [5.092, 3.403, -1.948], [5.777, 3.86, -1.124]] - , [[6.009, 6.009, 0], [5.677, 5.677, 1.749], [4.772, 4.772, 3.029], [3.536, 3.536, 3.498], [2.299, 2.299, 3.029], [1.394, 1.394, 1.749], [1.062, 1.062, 0], [1.394, 1.394, -1.749], [2.299, 2.299, -3.029], [3.536, 3.536, -3.498], [4.772, 4.772, -3.029], [5.677, 5.677, -1.749], [5.184, 5.184, 0], [4.963, 4.963, 1.166], [4.36, 4.36, 2.019], [3.536, 3.536, 2.332], [2.711, 2.711, 2.019], [2.108, 2.108, 1.166], [1.887, 1.887, 0], [2.108, 2.108, -1.166], [2.711, 2.711, -2.019], [3.536, 3.536, -2.332], [4.36, 4.36, -2.019], [4.963, 4.963, -1.166]] - , [[4.79, 7.169, 0], [4.521, 6.766, 1.811], [3.784, 5.663, 3.137], [2.778, 4.157, 3.622], [1.772, 2.652, 3.137], [1.035, 1.549, 1.811], [0.766, 1.146, 0], [1.035, 1.549, -1.811], [1.772, 2.652, -3.137], [2.778, 4.157, -3.622], [3.784, 5.663, -3.137], [4.521, 6.766, -1.811], [4.119, 6.165, 0], [3.94, 5.896, 1.207], [3.449, 5.161, 2.091], [2.778, 4.157, 2.415], [2.107, 3.153, 2.091], [1.616, 2.419, 1.207], [1.436, 2.15, 0], [1.616, 2.419, -1.207], [2.107, 3.153, -2.091], [2.778, 4.157, -2.415], [3.449, 5.161, -2.091], [3.94, 5.896, -1.207]] - , [[3.347, 8.081, 0], [3.155, 7.617, 1.873], [2.63, 6.35, 3.245], [1.913, 4.619, 3.747], [1.197, 2.889, 3.245], [0.672, 1.622, 1.873], [0.48, 1.158, 0], [0.672, 1.622, -1.873], [1.197, 2.889, -3.245], [1.913, 4.619, -3.747], [2.63, 6.35, -3.245], [3.155, 7.617, -1.873], [2.869, 6.927, 0], [2.741, 6.618, 1.249], [2.391, 5.773, 2.163], [1.913, 4.619, 2.498], [1.436, 3.466, 2.163], [1.086, 2.621, 1.249], [0.958, 2.312, 0], [1.086, 2.621, -1.249], [1.436, 3.466, -2.163], [1.913, 4.619, -2.498], [2.391, 5.773, -2.163], [2.741, 6.618, -1.249]] - , [[1.731, 8.701, 0], [1.629, 8.192, 1.935], [1.353, 6.802, 3.352], [0.975, 4.904, 3.871], [0.598, 3.006, 3.352], [0.321, 1.616, 1.935], [0.22, 1.107, 0], [0.321, 1.616, -1.935], [0.598, 3.006, -3.352], [0.975, 4.904, -3.871], [1.353, 6.802, -3.352], [1.629, 8.192, -1.935], [1.479, 7.435, 0], [1.411, 7.096, 1.29], [1.227, 6.169, 2.235], [0.975, 4.904, 2.581], [0.724, 3.638, 2.235], [0.539, 2.712, 1.29], [0.472, 2.373, 0], [0.539, 2.712, -1.29], [0.724, 3.638, -2.235], [0.975, 4.904, -2.581], [1.227, 6.169, -2.235], [1.411, 7.096, -1.29]] - , [[0, 8.995, 0], [0, 8.46, 1.998], [0, 6.998, 3.46], [0, 5, 3.995], [0, 3.002, 3.46], [0, 1.54, 1.998], [0, 1.005, 0], [0, 1.54, -1.998], [0, 3.002, -3.46], [0, 5, -3.995], [0, 6.998, -3.46], [0, 8.46, -1.998], [0, 7.664, 0], [0, 7.307, 1.332], [0, 6.332, 2.307], [0, 5, 2.664], [0, 3.668, 2.307], [0, 2.693, 1.332], [0, 2.336, 0], [0, 2.693, -1.332], [0, 3.668, -2.307], [0, 5, -2.664], [0, 6.332, -2.307], [0, 7.307, -1.332]] - , [[-1.461, 9.031, 0], [-1.394, 8.484, 2.06], [-1.213, 6.987, 3.568], [-0.964, 4.942, 4.12], [-0.716, 2.897, 3.568], [-0.534, 1.4, 2.06], [-0.468, 0.852, 0], [-0.534, 1.4, -2.06], [-0.716, 2.897, -3.568], [-0.964, 4.942, -4.12], [-1.213, 6.987, -3.568], [-1.394, 8.484, -2.06], [-1.295, 7.668, 0], [-1.251, 7.303, 1.373], [-1.13, 6.305, 2.379], [-0.964, 4.942, 2.747], [-0.799, 3.578, 2.379], [-0.678, 2.58, 1.373], [-0.633, 2.215, 0], [-0.678, 2.58, -1.373], [-0.799, 3.578, -2.379], [-0.964, 4.942, -2.747], [-1.13, 6.305, -2.379], [-1.251, 7.303, -1.373]] - , [[-2.93, 8.888, 0], [-2.794, 8.336, 2.122], [-2.422, 6.828, 3.676], [-1.915, 4.768, 4.244], [-1.407, 2.707, 3.676], [-1.035, 1.199, 2.122], [-0.899, 0.647, 0], [-1.035, 1.199, -2.122], [-1.407, 2.707, -3.676], [-1.915, 4.768, -4.244], [-2.422, 6.828, -3.676], [-2.794, 8.336, -2.122], [-2.592, 7.515, 0], [-2.501, 7.147, 1.415], [-2.253, 6.141, 2.45], [-1.915, 4.768, 2.829], [-1.576, 3.394, 2.45], [-1.328, 2.388, 1.415], [-1.237, 2.02, 0], [-1.328, 2.388, -1.415], [-1.576, 3.394, -2.45], [-1.915, 4.768, -2.829], [-2.253, 6.141, -2.45], [-2.501, 7.147, -1.415]] - , [[-4.386, 8.565, 0], [-4.178, 8.018, 2.184], [-3.611, 6.523, 3.783], [-2.837, 4.48, 4.369], [-2.062, 2.438, 3.783], [-1.495, 0.943, 2.184], [-1.288, 0.395, 0], [-1.495, 0.943, -2.184], [-2.062, 2.438, -3.783], [-2.837, 4.48, -4.369], [-3.611, 6.523, -3.783], [-4.178, 8.018, -2.184], [-3.87, 7.203, 0], [-3.731, 6.838, 1.456], [-3.353, 5.842, 2.522], [-2.837, 4.48, 2.912], [-2.32, 3.119, 2.522], [-1.942, 2.122, 1.456], [-1.804, 1.757, 0], [-1.942, 2.122, -1.456], [-2.32, 3.119, -2.522], [-2.837, 4.48, -2.912], [-3.353, 5.842, -2.522], [-3.731, 6.838, -1.456]] - , [[-5.806, 8.062, 0], [-5.526, 7.529, 2.247], [-4.762, 6.073, 3.891], [-3.718, 4.084, 4.493], [-2.674, 2.094, 3.891], [-1.909, 0.638, 2.247], [-1.63, 0.105, 0], [-1.909, 0.638, -2.247], [-2.674, 2.094, -3.891], [-3.718, 4.084, -4.493], [-4.762, 6.073, -3.891], [-5.526, 7.529, -2.247], [-5.11, 6.736, 0], [-4.923, 6.381, 1.498], [-4.414, 5.41, 2.594], [-3.718, 4.084, 2.995], [-3.022, 2.758, 2.594], [-2.512, 1.787, 1.498], [-2.326, 1.431, 0], [-2.512, 1.787, -1.498], [-3.022, 2.758, -2.594], [-3.718, 4.084, -2.995], [-4.414, 5.41, -2.594], [-4.923, 6.381, -1.498]] - , [[-7.168, 7.384, 0], [-6.816, 6.875, 2.309], [-5.856, 5.484, 3.999], [-4.545, 3.584, 4.618], [-3.233, 1.684, 3.999], [-2.273, 0.293, 2.309], [-1.921, -0.216, 0], [-2.273, 0.293, -2.309], [-3.233, 1.684, -3.999], [-4.545, 3.584, -4.618], [-5.856, 5.484, -3.999], [-6.816, 6.875, -2.309], [-6.293, 6.117, 0], [-6.059, 5.778, 1.539], [-5.419, 4.851, 2.666], [-4.545, 3.584, 3.078], [-3.67, 2.317, 2.666], [-3.03, 1.39, 1.539], [-2.796, 1.05, 0], [-3.03, 1.39, -1.539], [-3.67, 2.317, -2.666], [-4.545, 3.584, -3.078], [-5.419, 4.851, -2.666], [-6.059, 5.778, -1.539]] - , [[-8.449, 6.537, 0], [-8.028, 6.062, 2.371], [-6.877, 4.763, 4.107], [-5.305, 2.988, 4.742], [-3.733, 1.213, 4.107], [-2.582, -0.086, 2.371], [-2.16, -0.561, 0], [-2.582, -0.086, -2.371], [-3.733, 1.213, -4.107], [-5.305, 2.988, -4.742], [-6.877, 4.763, -4.107], [-8.028, 6.062, -2.371], [-7.401, 5.354, 0], [-7.12, 5.037, 1.581], [-6.353, 4.171, 2.738], [-5.305, 2.988, 3.161], [-4.257, 1.805, 2.738], [-3.49, 0.939, 1.581], [-3.209, 0.622, 0], [-3.49, 0.939, -1.581], [-4.257, 1.805, -2.738], [-5.305, 2.988, -3.161], [-6.353, 4.171, -2.738], [-7.12, 5.037, -1.581]] - , [[-9.631, 5.532, 0], [-9.143, 5.1, 2.433], [-7.809, 3.918, 4.214], [-5.988, 2.305, 4.866], [-4.167, 0.691, 4.214], [-2.834, -0.49, 2.433], [-2.346, -0.922, 0], [-2.834, -0.49, -2.433], [-4.167, 0.691, -4.214], [-5.988, 2.305, -4.866], [-7.809, 3.918, -4.214], [-9.143, 5.1, -2.433], [-8.416, 4.456, 0], [-8.091, 4.168, 1.622], [-7.202, 3.381, 2.81], [-5.988, 2.305, 3.244], [-4.774, 1.229, 2.81], [-3.885, 0.442, 1.622], [-3.56, 0.154, 0], [-3.885, 0.442, -1.622], [-4.774, 1.229, -2.81], [-5.988, 2.305, -3.244], [-7.202, 3.381, -2.81], [-8.091, 4.168, -1.622]] - , [[-10.691, 4.38, 0], [-10.141, 4, 2.495], [-8.638, 2.962, 4.322], [-6.584, 1.545, 4.991], [-4.53, 0.127, 4.322], [-3.027, -0.911, 2.495], [-2.477, -1.291, 0], [-3.027, -0.911, -2.495], [-4.53, 0.127, -4.322], [-6.584, 1.545, -4.991], [-8.638, 2.962, -4.322], [-10.141, 4, -2.495], [-9.322, 3.435, 0], [-8.955, 3.181, 1.664], [-7.953, 2.49, 2.881], [-6.584, 1.545, 3.327], [-5.215, 0.599, 2.881], [-4.213, -0.092, 1.664], [-3.846, -0.346, 0], [-4.213, -0.092, -1.664], [-5.215, 0.599, -2.881], [-6.584, 1.545, -3.327], [-7.953, 2.49, -2.881], [-8.955, 3.181, -1.664]] - , [[-11.613, 3.095, 0], [-11.006, 2.776, 2.558], [-9.348, 1.906, 4.43], [-7.084, 0.718, 5.115], [-4.819, -0.471, 4.43], [-3.161, -1.341, 2.558], [-2.554, -1.659, 0], [-3.161, -1.341, -2.558], [-4.819, -0.471, -4.43], [-7.084, 0.718, -5.115], [-9.348, 1.906, -4.43], [-11.006, 2.776, -2.558], [-10.103, 2.303, 0], [-9.699, 2.09, 1.705], [-8.593, 1.51, 2.953], [-7.084, 0.718, 3.41], [-5.574, -0.075, 2.953], [-4.469, -0.655, 1.705], [-4.064, -0.867, 0], [-4.469, -0.655, -1.705], [-5.574, -0.075, -2.953], [-7.084, 0.718, -3.41], [-8.593, 1.51, -2.953], [-9.699, 2.09, -1.705]] - , [[-12.379, 1.695, 0], [-11.723, 1.446, 2.62], [-9.93, 0.766, 4.538], [-7.48, -0.163, 5.24], [-5.031, -1.092, 4.538], [-3.237, -1.772, 2.62], [-2.581, -2.021, 0], [-3.237, -1.772, -2.62], [-5.031, -1.092, -4.538], [-7.48, -0.163, -5.24], [-9.93, 0.766, -4.538], [-11.723, 1.446, -2.62], [-10.746, 1.076, 0], [-10.309, 0.91, 1.747], [-9.113, 0.456, 3.025], [-7.48, -0.163, 3.493], [-5.847, -0.782, 3.025], [-4.652, -1.236, 1.747], [-4.214, -1.402, 0], [-4.652, -1.236, -1.747], [-5.847, -0.782, -3.025], [-7.48, -0.163, -3.493], [-9.113, 0.456, -3.025], [-10.309, 0.91, -1.747]] - , [[-12.976, 0.198, 0], [-12.278, 0.026, 2.682], [-10.372, -0.444, 4.645], [-7.768, -1.085, 5.364], [-5.163, -1.727, 4.645], [-3.257, -2.197, 2.682], [-2.559, -2.369, 0], [-3.257, -2.197, -2.682], [-5.163, -1.727, -4.645], [-7.768, -1.085, -5.364], [-10.372, -0.444, -4.645], [-12.278, 0.026, -2.682], [-11.24, -0.23, 0], [-10.774, -0.344, 1.788], [-9.504, -0.658, 3.097], [-7.768, -1.085, 3.576], [-6.031, -1.513, 3.097], [-4.761, -1.827, 1.788], [-4.295, -1.941, 0], [-4.761, -1.827, -1.788], [-6.031, -1.513, -3.097], [-7.768, -1.085, -3.576], [-9.504, -0.658, -3.097], [-10.774, -0.344, -1.788]] - , [[-13.39, -1.374, 0], [-12.66, -1.463, 2.744], [-10.666, -1.705, 4.753], [-7.942, -2.036, 5.488], [-5.217, -2.366, 4.753], [-3.223, -2.609, 2.744], [-2.493, -2.697, 0], [-3.223, -2.609, -2.744], [-5.217, -2.366, -4.753], [-7.942, -2.036, -5.488], [-10.666, -1.705, -4.753], [-12.66, -1.463, -2.744], [-11.574, -1.595, 0], [-11.087, -1.654, 1.829], [-9.758, -1.815, 3.169], [-7.942, -2.036, 3.659], [-6.126, -2.256, 3.169], [-4.796, -2.418, 1.829], [-4.309, -2.477, 0], [-4.796, -2.418, -1.829], [-6.126, -2.256, -3.169], [-7.942, -2.036, -3.659], [-9.758, -1.815, -3.169], [-11.087, -1.654, -1.829]] - , [[-13.613, -3, 0], [-12.861, -3, 2.806], [-10.806, -3, 4.861], [-8, -3, 5.613], [-5.194, -3, 4.861], [-3.139, -3, 2.806], [-2.387, -3, 0], [-3.139, -3, -2.806], [-5.194, -3, -4.861], [-8, -3, -5.613], [-10.806, -3, -4.861], [-12.861, -3, -2.806], [-11.742, -3, 0], [-11.241, -3, 1.871], [-9.871, -3, 3.241], [-8, -3, 3.742], [-6.129, -3, 3.241], [-4.759, -3, 1.871], [-4.258, -3, 0], [-4.759, -3, -1.871], [-6.129, -3, -3.241], [-8, -3, -3.742], [-9.871, -3, -3.241], [-11.241, -3, -1.871]] - , [[-13.737, -3, 0], [-12.969, -3, 2.869], [-10.869, -3, 4.969], [-8, -3, 5.737], [-5.131, -3, 4.969], [-3.031, -3, 2.869], [-2.263, -3, 0], [-3.031, -3, -2.869], [-5.131, -3, -4.969], [-8, -3, -5.737], [-10.869, -3, -4.969], [-12.969, -3, -2.869], [-11.825, -3, 0], [-11.312, -3, 1.912], [-9.912, -3, 3.312], [-8, -3, 3.825], [-6.088, -3, 3.312], [-4.688, -3, 1.912], [-4.175, -3, 0], [-4.688, -3, -1.912], [-6.088, -3, -3.312], [-8, -3, -3.825], [-9.912, -3, -3.312], [-11.312, -3, -1.912]] - , [[-13.809, -4.41, 0], [-13.026, -4.351, 2.931], [-10.886, -4.191, 5.076], [-7.964, -3.971, 5.862], [-5.041, -3.752, 5.076], [-2.901, -3.592, 2.931], [-2.118, -3.533, 0], [-2.901, -3.592, -2.931], [-5.041, -3.752, -5.076], [-7.964, -3.971, -5.862], [-10.886, -4.191, -5.076], [-13.026, -4.351, -2.931], [-11.861, -4.264, 0], [-11.338, -4.224, 1.954], [-9.912, -4.118, 3.384], [-7.964, -3.971, 3.908], [-6.015, -3.825, 3.384], [-4.589, -3.719, 1.954], [-4.067, -3.679, 0], [-4.589, -3.719, -1.954], [-6.015, -3.825, -3.384], [-7.964, -3.971, -3.908], [-9.912, -4.118, -3.384], [-11.338, -4.224, -1.954]] - , [[-13.774, -5.83, 0], [-12.981, -5.71, 2.993], [-10.814, -5.384, 5.184], [-7.855, -4.938, 5.986], [-4.895, -4.491, 5.184], [-2.729, -4.165, 2.993], [-1.935, -4.045, 0], [-2.729, -4.165, -2.993], [-4.895, -4.491, -5.184], [-7.855, -4.938, -5.986], [-10.814, -5.384, -5.184], [-12.981, -5.71, -2.993], [-11.801, -5.532, 0], [-11.272, -5.453, 1.995], [-9.828, -5.235, 3.456], [-7.855, -4.938, 3.991], [-5.882, -4.64, 3.456], [-4.437, -4.422, 1.995], [-3.909, -4.343, 0], [-4.437, -4.422, -1.995], [-5.882, -4.64, -3.456], [-7.855, -4.938, -3.991], [-9.828, -5.235, -3.456], [-11.272, -5.453, -1.995]] - , [[-13.631, -7.253, 0], [-12.833, -7.07, 3.055], [-10.653, -6.573, 5.292], [-7.674, -5.893, 6.111], [-4.695, -5.213, 5.292], [-2.515, -4.715, 3.055], [-1.717, -4.533, 0], [-2.515, -4.715, -3.055], [-4.695, -5.213, -5.292], [-7.674, -5.893, -6.111], [-10.653, -6.573, -5.292], [-12.833, -7.07, -3.055], [-11.646, -6.799, 0], [-11.114, -6.678, 2.037], [-9.66, -6.346, 3.528], [-7.674, -5.893, 4.074], [-5.688, -5.44, 3.528], [-4.235, -5.108, 2.037], [-3.702, -4.986, 0], [-4.235, -5.108, -2.037], [-5.688, -5.44, -3.528], [-7.674, -5.893, -4.074], [-9.66, -6.346, -3.528], [-11.114, -6.678, -2.037]] - , [[-13.38, -8.67, 0], [-12.582, -8.423, 3.118], [-10.401, -7.751, 5.4], [-7.422, -6.832, 6.235], [-4.443, -5.913, 5.4], [-2.263, -5.24, 3.118], [-1.464, -4.994, 0], [-2.263, -5.24, -3.118], [-4.443, -5.913, -5.4], [-7.422, -6.832, -6.235], [-10.401, -7.751, -5.4], [-12.582, -8.423, -3.118], [-11.394, -8.057, 0], [-10.862, -7.893, 2.078], [-9.408, -7.444, 3.6], [-7.422, -6.832, 4.157], [-5.436, -6.219, 3.6], [-3.983, -5.771, 2.078], [-3.45, -5.607, 0], [-3.983, -5.771, -2.078], [-5.436, -6.219, -3.6], [-7.422, -6.832, -4.157], [-9.408, -7.444, -3.6], [-10.862, -7.893, -2.078]] - , [[-13.021, -10.073, 0], [-12.228, -9.762, 3.18], [-10.061, -8.911, 5.507], [-7.101, -7.749, 6.359], [-4.141, -6.588, 5.507], [-1.975, -5.737, 3.18], [-1.182, -5.426, 0], [-1.975, -5.737, -3.18], [-4.141, -6.588, -5.507], [-7.101, -7.749, -6.359], [-10.061, -8.911, -5.507], [-12.228, -9.762, -3.18], [-11.048, -9.298, 0], [-10.519, -9.091, 2.12], [-9.075, -8.524, 3.672], [-7.101, -7.749, 4.24], [-5.128, -6.975, 3.672], [-3.684, -6.408, 2.12], [-3.155, -6.201, 0], [-3.684, -6.408, -2.12], [-5.128, -6.975, -3.672], [-7.101, -7.749, -4.24], [-9.075, -8.524, -3.672], [-10.519, -9.091, -2.12]] - , [[-12.554, -11.454, 0], [-11.772, -11.077, 3.242], [-9.633, -10.047, 5.615], [-6.713, -8.64, 6.484], [-3.792, -7.234, 5.615], [-1.653, -6.204, 3.242], [-0.871, -5.827, 0], [-1.653, -6.204, -3.242], [-3.792, -7.234, -5.615], [-6.713, -8.64, -6.484], [-9.633, -10.047, -5.615], [-11.772, -11.077, -3.242], [-10.607, -10.516, 0], [-10.085, -10.265, 2.161], [-8.66, -9.578, 3.743], [-6.713, -8.64, 4.323], [-4.765, -7.703, 3.743], [-3.34, -7.016, 2.161], [-2.818, -6.765, 0], [-3.34, -7.016, -2.161], [-4.765, -7.703, -3.743], [-6.713, -8.64, -4.323], [-8.66, -9.578, -3.743], [-10.085, -10.265, -2.161]] - , [[-11.981, -12.804, 0], [-11.215, -12.361, 3.304], [-9.12, -11.152, 5.723], [-6.258, -9.5, 6.608], [-3.397, -7.848, 5.723], [-1.302, -6.639, 3.304], [-0.535, -6.196, 0], [-1.302, -6.639, -3.304], [-3.397, -7.848, -5.723], [-6.258, -9.5, -6.608], [-9.12, -11.152, -5.723], [-11.215, -12.361, -3.304], [-10.074, -11.703, 0], [-9.562, -11.408, 2.203], [-8.166, -10.601, 3.815], [-6.258, -9.5, 4.406], [-4.351, -8.399, 3.815], [-2.954, -7.592, 2.203], [-2.443, -7.297, 0], [-2.954, -7.592, -2.203], [-4.351, -8.399, -3.815], [-6.258, -9.5, -4.406], [-8.166, -10.601, -3.815], [-9.562, -11.408, -2.203]] - , [[-11.304, -14.116, 0], [-10.559, -13.608, 3.366], [-8.523, -12.219, 5.831], [-5.741, -10.323, 6.733], [-2.96, -8.427, 5.831], [-0.924, -7.039, 3.366], [-0.178, -6.53, 0], [-0.924, -7.039, -3.366], [-2.96, -8.427, -5.831], [-5.741, -10.323, -6.733], [-8.523, -12.219, -5.831], [-10.559, -13.608, -3.366], [-9.45, -12.852, 0], [-8.953, -12.513, 2.244], [-7.595, -11.587, 3.887], [-5.741, -10.323, 4.488], [-3.887, -9.059, 3.887], [-2.529, -8.133, 2.244], [-2.033, -7.795, 0], [-2.529, -8.133, -2.244], [-3.887, -9.059, -3.887], [-5.741, -10.323, -4.488], [-7.595, -11.587, -3.887], [-8.953, -12.513, -2.244]] - , [[-10.525, -15.381, 0], [-9.807, -14.808, 3.429], [-7.844, -13.243, 5.938], [-5.164, -11.105, 6.857], [-2.483, -8.968, 5.938], [-0.521, -7.403, 3.429], [0.197, -6.83, 0], [-0.521, -7.403, -3.429], [-2.483, -8.968, -5.938], [-5.164, -11.105, -6.857], [-7.844, -13.243, -5.938], [-9.807, -14.808, -3.429], [-8.738, -13.956, 0], [-8.259, -13.574, 2.286], [-6.951, -12.53, 3.959], [-5.164, -11.105, 4.571], [-3.377, -9.68, 3.959], [-2.069, -8.637, 2.286], [-1.59, -8.255, 0], [-2.069, -8.637, -2.286], [-3.377, -9.68, -3.959], [-5.164, -11.105, -4.571], [-6.951, -12.53, -3.959], [-8.259, -13.574, -2.286]] - , [[-9.648, -16.591, 0], [-8.962, -15.955, 3.491], [-7.089, -14.217, 6.046], [-4.53, -11.842, 6.982], [-1.971, -9.468, 6.046], [-0.097, -7.73, 3.491], [0.588, -7.094, 0], [-0.097, -7.73, -3.491], [-1.971, -9.468, -6.046], [-4.53, -11.842, -6.982], [-7.089, -14.217, -6.046], [-8.962, -15.955, -3.491], [-7.942, -15.008, 0], [-7.484, -14.584, 2.327], [-6.236, -13.425, 4.031], [-4.53, -11.842, 4.654], [-2.824, -10.259, 4.031], [-1.575, -9.101, 2.327], [-1.118, -8.676, 0], [-1.575, -9.101, -2.327], [-2.824, -10.259, -4.031], [-4.53, -11.842, -4.654], [-6.236, -13.425, -4.031], [-7.484, -14.584, -2.327]] - , [[-8.676, -17.739, 0], [-8.028, -17.041, 3.553], [-6.259, -15.134, 6.154], [-3.842, -12.53, 7.106], [-1.426, -9.925, 6.154], [0.344, -8.018, 3.553], [0.991, -7.321, 0], [0.344, -8.018, -3.553], [-1.426, -9.925, -6.154], [-3.842, -12.53, -7.106], [-6.259, -15.134, -6.154], [-8.028, -17.041, -3.553], [-7.064, -16.002, 0], [-6.633, -15.537, 2.369], [-5.453, -14.266, 4.103], [-3.842, -12.53, 4.737], [-2.231, -10.793, 4.103], [-1.052, -9.522, 2.369], [-0.62, -9.057, 0], [-1.052, -9.522, -2.369], [-2.231, -10.793, -4.103], [-3.842, -12.53, -4.737], [-5.453, -14.266, -4.103], [-6.633, -15.537, -2.369]] - , [[-7.613, -18.817, 0], [-7.009, -18.059, 3.615], [-5.359, -15.99, 6.262], [-3.105, -13.164, 7.23], [-0.851, -10.337, 6.262], [0.799, -8.268, 3.615], [1.403, -7.511, 0], [0.799, -8.268, -3.615], [-0.851, -10.337, -6.262], [-3.105, -13.164, -7.23], [-5.359, -15.99, -6.262], [-7.009, -18.059, -3.615], [-6.111, -16.932, 0], [-5.708, -16.428, 2.41], [-4.608, -15.048, 4.174], [-3.105, -13.164, 4.82], [-1.603, -11.279, 4.174], [-0.503, -9.9, 2.41], [-0.1, -9.395, 0], [-0.503, -9.9, -2.41], [-1.603, -11.279, -4.174], [-3.105, -13.164, -4.82], [-4.608, -15.048, -4.174], [-5.708, -16.428, -2.41]] - , [[-6.466, -19.818, 0], [-5.911, -19.004, 3.677], [-4.395, -16.78, 6.369], [-2.323, -13.741, 7.355], [-0.252, -10.703, 6.369], [1.265, -8.478, 3.677], [1.82, -7.664, 0], [1.265, -8.478, -3.677], [-0.252, -10.703, -6.369], [-2.323, -13.741, -7.355], [-4.395, -16.78, -6.369], [-5.911, -19.004, -3.677], [-5.085, -17.792, 0], [-4.715, -17.25, 2.452], [-3.704, -15.767, 4.246], [-2.323, -13.741, 4.903], [-0.942, -11.715, 4.246], [0.069, -10.233, 2.452], [0.439, -9.69, 0], [0.069, -10.233, -2.452], [-0.942, -11.715, -4.246], [-2.323, -13.741, -4.903], [-3.704, -15.767, -4.246], [-4.715, -17.25, -2.452]] - , [[-5.24, -20.736, 0], [-4.739, -19.868, 3.74], [-3.37, -17.497, 6.477], [-1.5, -14.258, 7.479], [0.37, -11.02, 6.477], [1.739, -8.649, 3.74], [2.24, -7.781, 0], [1.739, -8.649, -3.74], [0.37, -11.02, -6.477], [-1.5, -14.258, -7.479], [-3.37, -17.497, -6.477], [-4.739, -19.868, -3.74], [-3.993, -18.576, 0], [-3.659, -17.998, 2.493], [-2.747, -16.417, 4.318], [-1.5, -14.258, 4.986], [-0.253, -12.099, 4.318], [0.659, -10.519, 2.493], [0.993, -9.94, 0], [0.659, -10.519, -2.493], [-0.253, -12.099, -4.318], [-1.5, -14.258, -4.986], [-2.747, -16.417, -4.318], [-3.659, -17.998, -2.493]] - , [[-3.94, -21.563, 0], [-3.498, -20.645, 3.802], [-2.29, -18.138, 6.585], [-0.64, -14.713, 7.604], [1.009, -11.287, 6.585], [2.217, -8.78, 3.802], [2.659, -7.862, 0], [2.217, -8.78, -3.802], [1.009, -11.287, -6.585], [-0.64, -14.713, -7.604], [-2.29, -18.138, -6.585], [-3.498, -20.645, -3.802], [-2.84, -19.28, 0], [-2.545, -18.668, 2.535], [-1.74, -16.996, 4.39], [-0.64, -14.713, 5.069], [0.459, -12.429, 4.39], [1.264, -10.757, 2.535], [1.559, -10.145, 0], [1.264, -10.757, -2.535], [0.459, -12.429, -4.39], [-0.64, -14.713, -5.069], [-1.74, -16.996, -4.39], [-2.545, -18.668, -2.535]] - , [[-2.573, -22.295, 0], [-2.195, -21.331, 3.864], [-1.161, -18.698, 6.693], [0.251, -15.101, 7.728], [1.662, -11.504, 6.693], [2.696, -8.871, 3.864], [3.074, -7.907, 0], [2.696, -8.871, -3.864], [1.662, -11.504, -6.693], [0.251, -15.101, -7.728], [-1.161, -18.698, -6.693], [-2.195, -21.331, -3.864], [-1.632, -19.897, 0], [-1.38, -19.255, 2.576], [-0.691, -17.499, 4.462], [0.251, -15.101, 5.152], [1.192, -12.703, 4.462], [1.881, -10.948, 2.576], [2.133, -10.305, 0], [1.881, -10.948, -2.576], [1.192, -12.703, -4.462], [0.251, -15.101, -5.152], [-0.691, -17.499, -4.462], [-1.38, -19.255, -2.576]] - , [[-1.146, -22.926, 0], [-0.836, -21.921, 3.926], [0.011, -19.174, 6.8], [1.168, -15.422, 7.853], [2.325, -11.671, 6.8], [3.173, -8.924, 3.926], [3.483, -7.919, 0], [3.173, -8.924, -3.926], [2.325, -11.671, -6.8], [1.168, -15.422, -7.853], [0.011, -19.174, -6.8], [-0.836, -21.921, -3.926], [-0.375, -20.425, 0], [-0.168, -19.755, 2.618], [0.397, -17.924, 4.534], [1.168, -15.422, 5.235], [1.94, -12.921, 4.534], [2.505, -11.09, 2.618], [2.711, -10.42, 0], [2.505, -11.09, -2.618], [1.94, -12.921, -4.534], [1.168, -15.422, -5.235], [0.397, -17.924, -4.534], [-0.168, -19.755, -2.618]] - , [[0.332, -23.451, 0], [0.57, -22.409, 3.988], [1.22, -19.563, 6.908], [2.107, -15.674, 7.977], [2.995, -11.786, 6.908], [3.644, -8.939, 3.988], [3.882, -7.897, 0], [3.644, -8.939, -3.988], [2.995, -11.786, -6.908], [2.107, -15.674, -7.977], [1.22, -19.563, -6.908], [0.57, -22.409, -3.988], [0.924, -20.859, 0], [1.082, -20.164, 2.659], [1.516, -18.266, 4.605], [2.107, -15.674, 5.318], [2.699, -13.082, 4.605], [3.132, -11.184, 2.659], [3.291, -10.489, 0], [3.132, -11.184, -2.659], [2.699, -13.082, -4.605], [2.107, -15.674, -5.318], [1.516, -18.266, -4.605], [1.082, -20.164, -2.659]] - , [[1.855, -23.866, 0], [2.017, -22.792, 4.051], [2.459, -19.86, 7.016], [3.062, -15.855, 8.101], [3.666, -11.849, 7.016], [4.108, -8.917, 4.051], [4.27, -7.844, 0], [4.108, -8.917, -4.051], [3.666, -11.849, -7.016], [3.062, -15.855, -8.101], [2.459, -19.86, -7.016], [2.017, -22.792, -4.051], [2.257, -21.195, 0], [2.365, -20.48, 2.7], [2.66, -18.525, 4.677], [3.062, -15.855, 5.401], [3.465, -13.185, 4.677], [3.76, -11.23, 2.7], [3.867, -10.514, 0], [3.76, -11.23, -2.7], [3.465, -13.185, -4.677], [3.062, -15.855, -5.401], [2.66, -18.525, -4.677], [2.365, -20.48, -2.7]] - , [[3.414, -24.166, 0], [3.496, -23.067, 4.113], [3.721, -20.065, 7.124], [4.029, -15.964, 8.226], [4.336, -11.862, 7.124], [4.561, -8.86, 4.113], [4.643, -7.761, 0], [4.561, -8.86, -4.113], [4.336, -11.862, -7.124], [4.029, -15.964, -8.226], [3.721, -20.065, -7.124], [3.496, -23.067, -4.113], [3.619, -21.432, 0], [3.674, -20.7, 2.742], [3.824, -18.698, 4.749], [4.029, -15.964, 5.484], [4.233, -13.229, 4.749], [4.383, -11.228, 2.742], [4.438, -10.495, 0], [4.383, -11.228, -2.742], [4.233, -13.229, -4.749], [4.029, -15.964, -5.484], [3.824, -18.698, -4.749], [3.674, -20.7, -2.742]] - , [[5, -24.35, 0], [5, -23.232, 4.175], [5, -20.175, 7.232], [5, -16, 8.35], [5, -11.825, 7.232], [5, -8.768, 4.175], [5, -7.65, 0], [5, -8.768, -4.175], [5, -11.825, -7.232], [5, -16, -8.35], [5, -20.175, -7.232], [5, -23.232, -4.175], [5, -21.567, 0], [5, -20.821, 2.783], [5, -18.783, 4.821], [5, -16, 5.567], [5, -13.217, 4.821], [5, -11.179, 2.783], [5, -10.433, 0], [5, -11.179, -2.783], [5, -13.217, -4.821], [5, -16, -5.567], [5, -18.783, -4.821], [5, -20.821, -2.783]] - , [[6.402, -24.441, 0], [6.348, -23.307, 4.237], [6.201, -20.209, 7.339], [5.999, -15.976, 8.475], [5.798, -11.744, 7.339], [5.65, -8.645, 4.237], [5.596, -7.511, 0], [5.65, -8.645, -4.237], [5.798, -11.744, -7.339], [5.999, -15.976, -8.475], [6.201, -20.209, -7.339], [6.348, -23.307, -4.237], [6.268, -21.62, 0], [6.232, -20.864, 2.825], [6.134, -18.798, 4.893], [5.999, -15.976, 5.65], [5.865, -13.155, 4.893], [5.766, -11.089, 2.825], [5.73, -10.333, 0], [5.766, -11.089, -2.825], [5.865, -13.155, -4.893], [5.999, -15.976, -5.65], [6.134, -18.798, -4.893], [6.232, -20.864, -2.825]] - , [[7.814, -24.465, 0], [7.704, -23.318, 4.3], [7.405, -20.185, 7.447], [6.996, -15.905, 8.599], [6.587, -11.625, 7.447], [6.288, -8.492, 4.3], [6.179, -7.345, 0], [6.288, -8.492, -4.3], [6.587, -11.625, -7.447], [6.996, -15.905, -8.599], [7.405, -20.185, -7.447], [7.704, -23.318, -4.3], [7.541, -21.612, 0], [7.468, -20.847, 2.866], [7.269, -18.758, 4.965], [6.996, -15.905, 5.733], [6.724, -13.052, 4.965], [6.524, -10.963, 2.866], [6.451, -10.198, 0], [6.524, -10.963, -2.866], [6.724, -13.052, -4.965], [6.996, -15.905, -5.733], [7.269, -18.758, -4.965], [7.468, -20.847, -2.866]] - , [[9.23, -24.421, 0], [9.064, -23.264, 4.362], [8.609, -20.104, 7.555], [7.989, -15.786, 8.724], [7.368, -11.469, 7.555], [6.913, -8.308, 4.362], [6.747, -7.152, 0], [6.913, -8.308, -4.362], [7.368, -11.469, -7.555], [7.989, -15.786, -8.724], [8.609, -20.104, -7.555], [9.064, -23.264, -4.362], [8.816, -21.543, 0], [8.705, -20.772, 2.908], [8.402, -18.664, 5.037], [7.989, -15.786, 5.816], [7.575, -12.908, 5.037], [7.272, -10.801, 2.908], [7.161, -10.03, 0], [7.272, -10.801, -2.908], [7.575, -12.908, -5.037], [7.989, -15.786, -5.816], [8.402, -18.664, -5.037], [8.705, -20.772, -2.908]] - , [[10.649, -24.309, 0], [10.424, -23.145, 4.424], [9.812, -19.965, 7.663], [8.974, -15.621, 8.848], [8.137, -11.276, 7.663], [7.524, -8.096, 4.424], [7.3, -6.932, 0], [7.524, -8.096, -4.424], [8.137, -11.276, -7.663], [8.974, -15.621, -8.848], [9.812, -19.965, -7.663], [10.424, -23.145, -4.424], [10.091, -21.413, 0], [9.941, -20.637, 2.949], [9.532, -18.517, 5.108], [8.974, -15.621, 5.899], [8.416, -12.724, 5.108], [8.008, -10.604, 2.949], [7.858, -9.828, 0], [8.008, -10.604, -2.949], [8.416, -12.724, -5.108], [8.974, -15.621, -5.899], [9.532, -18.517, -5.108], [9.941, -20.637, -2.949]] - , [[12.066, -24.127, 0], [11.783, -22.959, 4.486], [11.009, -19.768, 7.77], [9.951, -15.408, 8.972], [8.893, -11.048, 7.77], [8.119, -7.857, 4.486], [7.836, -6.689, 0], [8.119, -7.857, -4.486], [8.893, -11.048, -7.77], [9.951, -15.408, -8.972], [11.009, -19.768, -7.77], [11.783, -22.959, -4.486], [11.361, -21.221, 0], [11.172, -20.442, 2.991], [10.656, -18.315, 5.18], [9.951, -15.408, 5.982], [9.246, -12.502, 5.18], [8.73, -10.374, 2.991], [8.541, -9.595, 0], [8.73, -10.374, -2.991], [9.246, -12.502, -5.18], [9.951, -15.408, -5.982], [10.656, -18.315, -5.18], [11.172, -20.442, -2.991]] - , [[13.479, -23.878, 0], [13.136, -22.708, 4.548], [12.198, -19.513, 7.878], [10.916, -15.149, 9.097], [9.635, -10.785, 7.878], [8.697, -7.59, 4.548], [8.354, -6.421, 0], [8.697, -7.59, -4.548], [9.635, -10.785, -7.878], [10.916, -15.149, -9.097], [12.198, -19.513, -7.878], [13.136, -22.708, -4.548], [12.625, -20.968, 0], [12.396, -20.189, 3.032], [11.771, -18.059, 5.252], [10.916, -15.149, 6.065], [10.062, -12.24, 5.252], [9.437, -10.11, 3.032], [9.208, -9.33, 0], [9.437, -10.11, -3.032], [10.062, -12.24, -5.252], [10.916, -15.149, -6.065], [11.771, -18.059, -5.252], [12.396, -20.189, -3.032]] - , [[14.884, -23.559, 0], [14.48, -22.392, 4.611], [13.376, -19.202, 7.986], [11.868, -14.845, 9.221], [10.36, -10.488, 7.986], [9.257, -7.298, 4.611], [8.852, -6.131, 0], [9.257, -7.298, -4.611], [10.36, -10.488, -7.986], [11.868, -14.845, -9.221], [13.376, -19.202, -7.986], [14.48, -22.392, -4.611], [13.879, -20.654, 0], [13.61, -19.876, 3.074], [12.874, -17.75, 5.324], [11.868, -14.845, 6.147], [10.863, -11.94, 5.324], [10.127, -9.814, 3.074], [9.858, -9.036, 0], [10.127, -9.814, -3.074], [10.863, -11.94, -5.324], [11.868, -14.845, -6.147], [12.874, -17.75, -5.324], [13.61, -19.876, -3.074]] - , [[16.278, -23.172, 0], [15.813, -22.01, 4.673], [14.542, -18.834, 8.094], [12.805, -14.496, 9.346], [11.068, -10.158, 8.094], [9.797, -6.982, 4.673], [9.331, -5.82, 0], [9.797, -6.982, -4.673], [11.068, -10.158, -8.094], [12.805, -14.496, -9.346], [14.542, -18.834, -8.094], [15.813, -22.01, -4.673], [15.121, -20.28, 0], [14.81, -19.505, 3.115], [13.963, -17.388, 5.396], [12.805, -14.496, 6.23], [11.647, -11.604, 5.396], [10.8, -9.487, 3.115], [10.489, -8.712, 0], [10.8, -9.487, -3.115], [11.647, -11.604, -5.396], [12.805, -14.496, -6.23], [13.963, -17.388, -5.396], [14.81, -19.505, -3.115]] - , [[17.658, -22.717, 0], [17.131, -21.562, 4.735], [15.691, -18.409, 8.201], [13.724, -14.102, 9.47], [11.757, -9.795, 8.201], [10.317, -6.642, 4.735], [9.79, -5.488, 0], [10.317, -6.642, -4.735], [11.757, -9.795, -8.201], [13.724, -14.102, -9.47], [15.691, -18.409, -8.201], [17.131, -21.562, -4.735], [16.346, -19.845, 0], [15.995, -19.076, 3.157], [15.035, -16.974, 5.468], [13.724, -14.102, 6.313], [12.412, -11.231, 5.468], [11.452, -9.129, 3.157], [11.101, -8.359, 0], [11.452, -9.129, -3.157], [12.412, -11.231, -5.468], [13.724, -14.102, -6.313], [15.035, -16.974, -5.468], [15.995, -19.076, -3.157]] - , [[19.019, -22.193, 0], [18.43, -21.051, 4.797], [16.821, -17.929, 8.309], [14.623, -13.666, 9.594], [12.425, -9.402, 8.309], [10.815, -6.28, 4.797], [10.226, -5.138, 0], [10.815, -6.28, -4.797], [12.425, -9.402, -8.309], [14.623, -13.666, -9.594], [16.821, -17.929, -8.309], [18.43, -21.051, -4.797], [17.554, -19.351, 0], [17.161, -18.589, 3.198], [16.088, -16.508, 5.539], [14.623, -13.666, 6.396], [13.157, -10.823, 5.539], [12.084, -8.742, 3.198], [11.692, -7.98, 0], [12.084, -8.742, -3.198], [13.157, -10.823, -5.539], [14.623, -13.666, -6.396], [16.088, -16.508, -5.539], [17.161, -18.589, -3.198]] - , [[20.359, -21.603, 0], [19.708, -20.476, 4.859], [17.93, -17.395, 8.417], [15.5, -13.187, 9.719], [13.07, -8.978, 8.417], [11.292, -5.897, 4.859], [10.641, -4.77, 0], [11.292, -5.897, -4.859], [13.07, -8.978, -8.417], [15.5, -13.187, -9.719], [17.93, -17.395, -8.417], [19.708, -20.476, -4.859], [18.74, -18.798, 0], [18.306, -18.046, 3.24], [17.12, -15.992, 5.611], [15.5, -13.187, 6.479], [13.88, -10.381, 5.611], [12.694, -8.327, 3.24], [12.26, -7.575, 0], [12.694, -8.327, -3.24], [13.88, -10.381, -5.611], [15.5, -13.187, -6.479], [17.12, -15.992, -5.611], [18.306, -18.046, -3.24]] - , [[21.675, -20.947, 0], [20.962, -19.838, 4.922], [19.014, -16.807, 8.525], [16.353, -12.666, 9.843], [13.693, -8.526, 8.525], [11.745, -5.495, 4.922], [11.032, -4.386, 0], [11.745, -5.495, -4.922], [13.693, -8.526, -8.525], [16.353, -12.666, -9.843], [19.014, -16.807, -8.525], [20.962, -19.838, -4.922], [19.901, -18.187, 0], [19.426, -17.447, 3.281], [18.127, -15.427, 5.683], [16.353, -12.666, 6.562], [14.58, -9.906, 5.683], [13.281, -7.885, 3.281], [12.806, -7.146, 0], [13.281, -7.885, -3.281], [14.58, -9.906, -5.683], [16.353, -12.666, -6.562], [18.127, -15.427, -5.683], [19.426, -17.447, -3.281]] - , [[22.963, -20.226, 0], [22.188, -19.138, 4.984], [20.072, -16.166, 8.632], [17.181, -12.106, 9.968], [14.29, -8.046, 8.632], [12.174, -5.074, 4.984], [11.399, -3.987, 0], [12.174, -5.074, -4.984], [14.29, -8.046, -8.632], [17.181, -12.106, -9.968], [20.072, -16.166, -8.632], [22.188, -19.138, -4.984], [21.036, -17.519, 0], [20.519, -16.794, 3.323], [19.108, -14.813, 5.755], [17.181, -12.106, 6.645], [15.254, -9.4, 5.755], [13.843, -7.418, 3.323], [13.327, -6.693, 0], [13.843, -7.418, -3.323], [15.254, -9.4, -5.755], [17.181, -12.106, -6.645], [19.108, -14.813, -5.755], [20.519, -16.794, -3.323]] - , [[24.22, -19.44, 0], [23.384, -18.377, 5.046], [21.101, -15.474, 8.74], [17.981, -11.507, 10.092], [14.862, -7.541, 8.74], [12.579, -4.637, 5.046], [11.743, -3.574, 0], [12.579, -4.637, -5.046], [14.862, -7.541, -8.74], [17.981, -11.507, -10.092], [21.101, -15.474, -8.74], [23.384, -18.377, -5.046], [22.14, -16.796, 0], [21.583, -16.087, 3.364], [20.061, -14.151, 5.827], [17.981, -11.507, 6.728], [15.902, -8.863, 5.827], [14.38, -6.927, 3.364], [13.822, -6.218, 0], [14.38, -6.927, -3.364], [15.902, -8.863, -5.827], [17.981, -11.507, -6.728], [20.061, -14.151, -5.827], [21.583, -16.087, -3.364]] - , [[25.443, -18.592, 0], [24.546, -17.557, 5.108], [22.097, -14.731, 8.848], [18.752, -10.871, 10.217], [15.407, -7.01, 8.848], [12.958, -4.184, 5.108], [12.062, -3.15, 0], [12.958, -4.184, -5.108], [15.407, -7.01, -8.848], [18.752, -10.871, -10.217], [22.097, -14.731, -8.848], [24.546, -17.557, -5.108], [23.212, -16.018, 0], [22.615, -15.329, 3.406], [20.982, -13.444, 5.899], [18.752, -10.871, 6.811], [16.522, -8.297, 5.899], [14.889, -6.413, 3.406], [14.292, -5.723, 0], [14.889, -6.413, -3.406], [16.522, -8.297, -5.899], [18.752, -10.871, -6.811], [20.982, -13.444, -5.899], [22.615, -15.329, -3.406]] - , [[26.628, -17.683, 0], [25.672, -16.68, 5.171], [23.06, -13.94, 8.956], [19.492, -10.198, 10.341], [15.924, -6.456, 8.956], [13.312, -3.717, 5.171], [12.356, -2.714, 0], [13.312, -3.717, -5.171], [15.924, -6.456, -8.956], [19.492, -10.198, -10.341], [23.06, -13.94, -8.956], [25.672, -16.68, -5.171], [24.249, -15.188, 0], [23.612, -14.519, 3.447], [21.87, -12.693, 5.97], [19.492, -10.198, 6.894], [17.113, -7.704, 5.97], [15.372, -5.877, 3.447], [14.734, -5.209, 0], [15.372, -5.877, -3.447], [17.113, -7.704, -5.97], [19.492, -10.198, -6.894], [21.87, -12.693, -5.97], [23.612, -14.519, -3.447]] - , [[27.773, -16.714, 0], [26.758, -15.746, 5.233], [23.986, -13.103, 9.063], [20.198, -9.492, 10.465], [16.411, -5.881, 9.063], [13.639, -3.237, 5.233], [12.624, -2.27, 0], [13.639, -3.237, -5.233], [16.411, -5.881, -9.063], [20.198, -9.492, -10.465], [23.986, -13.103, -9.063], [26.758, -15.746, -5.233], [25.248, -14.306, 0], [24.571, -13.661, 3.488], [22.723, -11.899, 6.042], [20.198, -9.492, 6.977], [17.674, -7.084, 6.042], [15.825, -5.322, 3.488], [15.149, -4.677, 0], [15.825, -5.322, -3.488], [17.674, -7.084, -6.042], [20.198, -9.492, -6.977], [22.723, -11.899, -6.042], [24.571, -13.661, -3.488]] - , [[28.874, -15.687, 0], [27.802, -14.758, 5.295], [24.872, -12.22, 9.171], [20.871, -8.752, 10.59], [16.869, -5.285, 9.171], [13.94, -2.746, 5.295], [12.867, -1.817, 0], [13.94, -2.746, -5.295], [16.869, -5.285, -9.171], [20.871, -8.752, -10.59], [24.872, -12.22, -9.171], [27.802, -14.758, -5.295], [26.206, -13.375, 0], [25.491, -12.756, 3.53], [23.539, -11.064, 6.114], [20.871, -8.752, 7.06], [18.203, -6.44, 6.114], [16.25, -4.748, 3.53], [15.535, -4.129, 0], [16.25, -4.748, -3.53], [18.203, -6.44, -6.114], [20.871, -8.752, -7.06], [23.539, -11.064, -6.114], [25.491, -12.756, -3.53]] - , [[29.929, -14.604, 0], [28.801, -13.717, 5.357], [25.718, -11.293, 9.279], [21.507, -7.981, 10.714], [17.296, -4.67, 9.279], [14.213, -2.246, 5.357], [13.085, -1.358, 0], [14.213, -2.246, -5.357], [17.296, -4.67, -9.279], [21.507, -7.981, -10.714], [25.718, -11.293, -9.279], [28.801, -13.717, -5.357], [27.122, -12.397, 0], [26.37, -11.805, 3.571], [24.314, -10.189, 6.186], [21.507, -7.981, 7.143], [18.7, -5.774, 6.186], [16.645, -4.157, 3.571], [15.892, -3.566, 0], [16.645, -4.157, -3.571], [18.7, -5.774, -6.186], [21.507, -7.981, -7.143], [24.314, -10.189, -6.186], [26.37, -11.805, -3.571]] - , [[30.935, -13.468, 0], [29.752, -12.626, 5.419], [26.521, -10.325, 9.387], [22.106, -7.181, 10.839], [17.692, -4.038, 9.387], [14.46, -1.736, 5.419], [13.277, -0.894, 0], [14.46, -1.736, -5.419], [17.692, -4.038, -9.387], [22.106, -7.181, -10.839], [26.521, -10.325, -9.387], [29.752, -12.626, -5.419], [27.992, -11.373, 0], [27.203, -10.811, 3.613], [25.049, -9.277, 6.258], [22.106, -7.181, 7.226], [19.163, -5.086, 6.258], [17.009, -3.551, 3.613], [16.22, -2.99, 0], [17.009, -3.551, -3.613], [19.163, -5.086, -6.258], [22.106, -7.181, -7.226], [25.049, -9.277, -6.258], [27.203, -10.811, -3.613]] - , [[31.889, -12.281, 0], [30.653, -11.486, 5.482], [27.278, -9.317, 9.494], [22.666, -6.353, 10.963], [18.055, -3.39, 9.494], [14.679, -1.22, 5.482], [13.444, -0.426, 0], [14.679, -1.22, -5.482], [18.055, -3.39, -9.494], [22.666, -6.353, -10.963], [27.278, -9.317, -9.494], [30.653, -11.486, -5.482], [28.815, -10.305, 0], [27.991, -9.775, 3.654], [25.741, -8.329, 6.33], [22.666, -6.353, 7.309], [19.592, -4.378, 6.33], [17.342, -2.931, 3.654], [16.518, -2.402, 0], [17.342, -2.931, -3.654], [19.592, -4.378, -6.33], [22.666, -6.353, -7.309], [25.741, -8.329, -6.33], [27.991, -9.775, -3.654]] - , [[32.789, -11.044, 0], [31.502, -10.301, 5.544], [27.988, -8.272, 9.602], [23.187, -5.5, 11.088], [18.385, -2.728, 9.602], [14.871, -0.699, 5.544], [13.584, 0.044, 0], [14.871, -0.699, -5.544], [18.385, -2.728, -9.602], [23.187, -5.5, -11.088], [27.988, -8.272, -9.602], [31.502, -10.301, -5.544], [29.588, -9.196, 0], [28.73, -8.701, 3.696], [26.387, -7.348, 6.401], [23.187, -5.5, 7.392], [19.986, -3.652, 6.401], [17.643, -2.299, 3.696], [16.785, -1.804, 0], [17.643, -2.299, -3.696], [19.986, -3.652, -6.401], [23.187, -5.5, -7.392], [26.387, -7.348, -6.401], [28.73, -8.701, -3.696]] - , [[33.631, -9.76, 0], [32.296, -9.072, 5.606], [28.648, -7.192, 9.71], [23.666, -4.623, 11.212], [18.683, -2.054, 9.71], [15.035, -0.173, 5.606], [13.7, 0.515, 0], [15.035, -0.173, -5.606], [18.683, -2.054, -9.71], [23.666, -4.623, -11.212], [28.648, -7.192, -9.71], [32.296, -9.072, -5.606], [30.309, -8.048, 0], [29.419, -7.589, 3.737], [26.987, -6.335, 6.473], [23.666, -4.623, 7.475], [20.344, -2.91, 6.473], [17.912, -1.657, 3.737], [17.022, -1.198, 0], [17.912, -1.657, -3.737], [20.344, -2.91, -6.473], [23.666, -4.623, -7.475], [26.987, -6.335, -6.473], [29.419, -7.589, -3.737]] - , [[34.414, -8.433, 0], [33.033, -7.802, 5.668], [29.258, -6.078, 9.818], [24.102, -3.724, 11.336], [18.946, -1.369, 9.818], [15.172, 0.355, 5.668], [13.79, 0.986, 0], [15.172, 0.355, -5.668], [18.946, -1.369, -9.818], [24.102, -3.724, -11.336], [29.258, -6.078, -9.818], [33.033, -7.802, -5.668], [30.977, -6.863, 0], [30.056, -6.443, 3.779], [27.54, -5.293, 6.545], [24.102, -3.724, 7.558], [20.665, -2.154, 6.545], [18.149, -1.005, 3.779], [17.228, -0.584, 0], [18.149, -1.005, -3.779], [20.665, -2.154, -6.545], [24.102, -3.724, -7.558], [27.54, -5.293, -6.545], [30.056, -6.443, -3.779]] - , [[35.136, -7.064, 0], [33.71, -6.494, 5.73], [29.816, -4.935, 9.925], [24.496, -2.805, 11.461], [19.176, -0.675, 9.925], [15.281, 0.884, 5.73], [13.856, 1.455, 0], [15.281, 0.884, -5.73], [19.176, -0.675, -9.925], [24.496, -2.805, -11.461], [29.816, -4.935, -9.925], [33.71, -6.494, -5.73], [31.589, -5.645, 0], [30.639, -5.264, 3.82], [28.042, -4.225, 6.617], [24.496, -2.805, 7.641], [20.949, -1.385, 6.617], [18.353, -0.346, 3.82], [17.402, 0.035, 0], [18.353, -0.346, -3.82], [20.949, -1.385, -6.617], [24.496, -2.805, -7.641], [28.042, -4.225, -6.617], [30.639, -5.264, -3.82]] - , [[35.793, -5.658, 0], [34.326, -5.15, 5.793], [30.319, -3.763, 10.033], [24.845, -1.868, 11.585], [19.371, 0.026, 10.033], [15.364, 1.413, 5.793], [13.897, 1.921, 0], [15.364, 1.413, -5.793], [19.371, 0.026, -10.033], [24.845, -1.868, -11.585], [30.319, -3.763, -10.033], [34.326, -5.15, -5.793], [32.144, -4.395, 0], [31.166, -4.056, 3.862], [28.494, -3.131, 6.689], [24.845, -1.868, 7.724], [21.196, -0.605, 6.689], [18.524, 0.319, 3.862], [17.546, 0.658, 0], [18.524, 0.319, -3.862], [21.196, -0.605, -6.689], [24.845, -1.868, -7.724], [28.494, -3.131, -6.689], [31.166, -4.056, -3.862]] - , [[36.385, -4.215, 0], [34.879, -3.773, 5.855], [30.767, -2.566, 10.141], [25.149, -0.916, 11.71], [19.532, 0.733, 10.141], [15.419, 1.941, 5.855], [13.914, 2.383, 0], [15.419, 1.941, -5.855], [19.532, 0.733, -10.141], [25.149, -0.916, -11.71], [30.767, -2.566, -10.141], [34.879, -3.773, -5.855], [32.64, -3.116, 0], [31.636, -2.821, 3.903], [28.894, -2.016, 6.761], [25.149, -0.916, 7.806], [21.404, 0.183, 6.761], [18.663, 0.988, 3.903], [17.659, 1.283, 0], [18.663, 0.988, -3.903], [21.404, 0.183, -6.761], [25.149, -0.916, -7.806], [28.894, -2.016, -6.761], [31.636, -2.821, -3.903]] - , [[36.909, -2.741, 0], [35.368, -2.367, 5.917], [31.158, -1.346, 10.249], [25.408, 0.049, 11.834], [19.658, 1.444, 10.249], [15.448, 2.465, 5.917], [13.908, 2.839, 0], [15.448, 2.465, -5.917], [19.658, 1.444, -10.249], [25.408, 0.049, -11.834], [31.158, -1.346, -10.249], [35.368, -2.367, -5.917], [33.075, -1.811, 0], [32.048, -1.562, 3.945], [29.242, -0.881, 6.832], [25.408, 0.049, 7.889], [21.575, 0.979, 6.832], [18.768, 1.66, 3.945], [17.741, 1.909, 0], [18.768, 1.66, -3.945], [21.575, 0.979, -6.832], [25.408, 0.049, -7.889], [29.242, -0.881, -6.832], [32.048, -1.562, -3.945]] - , [[37.363, -1.237, 0], [35.79, -0.934, 5.979], [31.492, -0.106, 10.356], [25.621, 1.026, 11.959], [19.749, 2.157, 10.356], [15.451, 2.986, 5.979], [13.878, 3.289, 0], [15.451, 2.986, -5.979], [19.749, 2.157, -10.356], [25.621, 1.026, -11.959], [31.492, -0.106, -10.356], [35.79, -0.934, -5.979], [33.449, -0.483, 0], [32.4, -0.281, 3.986], [29.535, 0.271, 6.904], [25.621, 1.026, 7.972], [21.706, 1.78, 6.904], [18.841, 2.332, 3.986], [17.792, 2.535, 0], [18.841, 2.332, -3.986], [21.706, 1.78, -6.904], [25.621, 1.026, -7.972], [29.535, 0.271, -6.904], [32.4, -0.281, -3.986]] - , [[37.746, 0.292, 0], [36.144, 0.522, 6.041], [31.766, 1.152, 10.464], [25.786, 2.011, 12.083], [19.806, 2.871, 10.464], [15.429, 3.501, 6.041], [13.826, 3.731, 0], [15.429, 3.501, -6.041], [19.806, 2.871, -10.464], [25.786, 2.011, -12.083], [31.766, 1.152, -10.464], [36.144, 0.522, -6.041], [33.76, 0.865, 0], [32.691, 1.019, 4.028], [29.773, 1.438, 6.976], [25.786, 2.011, 8.055], [21.8, 2.585, 6.976], [18.881, 3.004, 4.028], [17.813, 3.158, 0], [18.881, 3.004, -4.028], [21.8, 2.585, -6.976], [25.786, 2.011, -8.055], [29.773, 1.438, -6.976], [32.691, 1.019, -4.028]] - , [[38.057, 1.843, 0], [36.429, 1.999, 6.104], [31.981, 2.424, 10.572], [25.905, 3.004, 12.207], [19.829, 3.584, 10.572], [15.381, 4.009, 6.104], [13.753, 4.164, 0], [15.381, 4.009, -6.104], [19.829, 3.584, -10.572], [25.905, 3.004, -12.207], [31.981, 2.424, -10.572], [36.429, 1.999, -6.104], [34.006, 2.23, 0], [32.921, 2.334, 4.069], [29.956, 2.617, 7.048], [25.905, 3.004, 8.138], [21.854, 3.391, 7.048], [18.889, 3.674, 4.069], [17.804, 3.777, 0], [18.889, 3.674, -4.069], [21.854, 3.391, -7.048], [25.905, 3.004, -8.138], [29.956, 2.617, -7.048], [32.921, 2.334, -4.069]] - , [[38.294, 3.414, 0], [36.644, 3.493, 6.166], [32.135, 3.707, 10.68], [25.976, 4.001, 12.332], [19.817, 4.294, 10.68], [15.309, 4.509, 6.166], [13.658, 4.588, 0], [15.309, 4.509, -6.166], [19.817, 4.294, -10.68], [25.976, 4.001, -12.332], [32.135, 3.707, -10.68], [36.644, 3.493, -6.166], [34.188, 3.61, 0], [33.088, 3.662, 4.111], [30.082, 3.805, 7.12], [25.976, 4.001, 8.221], [21.87, 4.196, 7.12], [18.865, 4.34, 4.111], [17.764, 4.392, 0], [18.865, 4.34, -4.111], [21.87, 4.196, -7.12], [25.976, 4.001, -8.221], [30.082, 3.805, -7.12], [33.088, 3.662, -4.111]] - , [[38.456, 5, 0], [36.787, 5, 6.228], [32.228, 5, 10.787], [26, 5, 12.456], [19.772, 5, 10.787], [15.213, 5, 6.228], [13.544, 5, 0], [15.213, 5, -6.228], [19.772, 5, -10.787], [26, 5, -12.456], [32.228, 5, -10.787], [36.787, 5, -6.228], [34.304, 5, 0], [33.192, 5, 4.152], [30.152, 5, 7.192], [26, 5, 8.304], [21.848, 5, 7.192], [18.808, 5, 4.152], [17.696, 5, 0], [18.808, 5, -4.152], [21.848, 5, -7.192], [26, 5, -8.304], [30.152, 5, -7.192], [33.192, 5, -4.152]] - , [[38.561, 6.355, 0], [36.876, 6.306, 6.29], [32.273, 6.172, 10.895], [25.986, 5.989, 12.581], [19.698, 5.806, 10.895], [15.095, 5.672, 6.29], [13.41, 5.623, 0], [15.095, 5.672, -6.29], [19.698, 5.806, -10.895], [25.986, 5.989, -12.581], [32.273, 6.172, -10.895], [36.876, 6.306, -6.29], [34.369, 6.233, 0], [33.246, 6.2, 4.194], [30.177, 6.111, 7.263], [25.986, 5.989, 8.387], [21.794, 5.867, 7.263], [18.725, 5.778, 4.194], [17.602, 5.745, 0], [18.725, 5.778, -4.194], [21.794, 5.867, -7.263], [25.986, 5.989, -8.387], [30.177, 6.111, -7.263], [33.246, 6.2, -4.194]] - , [[38.626, 7.716, 0], [36.927, 7.617, 6.353], [32.284, 7.346, 11.003], [25.942, 6.977, 12.705], [19.601, 6.608, 11.003], [14.958, 6.337, 6.353], [13.259, 6.238, 0], [14.958, 6.337, -6.353], [19.601, 6.608, -11.003], [25.942, 6.977, -12.705], [32.284, 7.346, -11.003], [36.927, 7.617, -6.353], [34.398, 7.469, 0], [33.265, 7.403, 4.235], [30.17, 7.223, 7.335], [25.942, 6.977, 8.47], [21.715, 6.731, 7.335], [18.62, 6.55, 4.235], [17.487, 6.484, 0], [18.62, 6.55, -4.235], [21.715, 6.731, -7.335], [25.942, 6.977, -8.47], [30.17, 7.223, -7.335], [33.265, 7.403, -4.235]] - , [[38.651, 9.081, 0], [36.939, 8.932, 6.415], [32.261, 8.522, 11.111], [25.871, 7.963, 12.829], [19.48, 7.404, 11.111], [14.802, 6.995, 6.415], [13.09, 6.845, 0], [14.802, 6.995, -6.415], [19.48, 7.404, -11.111], [25.871, 7.963, -12.829], [32.261, 8.522, -11.111], [36.939, 8.932, -6.415], [34.391, 8.709, 0], [33.25, 8.609, 4.276], [30.131, 8.336, 7.407], [25.871, 7.963, 8.553], [21.61, 7.591, 7.407], [18.492, 7.318, 4.276], [17.35, 7.218, 0], [18.492, 7.318, -4.276], [21.61, 7.591, -7.407], [25.871, 7.963, -8.553], [30.131, 8.336, -7.407], [33.25, 8.609, -4.276]] - , [[38.636, 10.451, 0], [36.913, 10.25, 6.477], [32.203, 9.699, 11.218], [25.77, 8.947, 12.954], [19.337, 8.195, 11.218], [14.628, 7.645, 6.477], [12.904, 7.443, 0], [14.628, 7.645, -6.477], [19.337, 8.195, -11.218], [25.77, 8.947, -12.954], [32.203, 9.699, -11.218], [36.913, 10.25, -6.477], [34.348, 9.95, 0], [33.198, 9.815, 4.318], [30.059, 9.448, 7.479], [25.77, 8.947, 8.636], [21.481, 8.446, 7.479], [18.342, 8.079, 4.318], [17.193, 7.945, 0], [18.342, 8.079, -4.318], [21.481, 8.446, -7.479], [25.77, 8.947, -8.636], [30.059, 9.448, -7.479], [33.198, 9.815, -4.318]] - , [[38.581, 11.823, 0], [36.848, 11.569, 6.539], [32.111, 10.875, 11.326], [25.641, 9.928, 13.078], [19.171, 8.98, 11.326], [14.434, 8.286, 6.539], [12.701, 8.032, 0], [14.434, 8.286, -6.539], [19.171, 8.98, -11.326], [25.641, 9.928, -13.078], [32.111, 10.875, -11.326], [36.848, 11.569, -6.539], [34.268, 11.191, 0], [33.112, 11.022, 4.359], [29.954, 10.56, 7.551], [25.641, 9.928, 8.719], [21.328, 9.296, 7.551], [18.17, 8.833, 4.359], [17.014, 8.664, 0], [18.17, 8.833, -4.359], [21.328, 9.296, -7.551], [25.641, 9.928, -8.719], [29.954, 10.56, -7.551], [33.112, 11.022, -4.359]] - , [[38.486, 13.197, 0], [36.744, 12.89, 6.601], [31.985, 12.05, 11.434], [25.483, 10.904, 13.203], [18.982, 9.758, 11.434], [14.223, 8.919, 6.601], [12.481, 8.611, 0], [14.223, 8.919, -6.601], [18.982, 9.758, -11.434], [25.483, 10.904, -13.203], [31.985, 12.05, -11.434], [36.744, 12.89, -6.601], [34.152, 12.432, 0], [32.99, 12.228, 4.401], [29.818, 11.668, 7.623], [25.483, 10.904, 8.802], [21.149, 10.14, 7.623], [17.977, 9.58, 4.401], [16.815, 9.376, 0], [17.977, 9.58, -4.401], [21.149, 10.14, -7.623], [25.483, 10.904, -8.802], [29.818, 11.668, -7.623], [32.99, 12.228, -4.401]] - , [[38.349, 14.57, 0], [36.601, 14.209, 6.664], [31.824, 13.223, 11.542], [25.298, 11.875, 13.327], [18.772, 10.528, 11.542], [13.994, 9.541, 6.664], [12.246, 9.18, 0], [13.994, 9.541, -6.664], [18.772, 10.528, -11.542], [25.298, 11.875, -13.327], [31.824, 13.223, -11.542], [36.601, 14.209, -6.664], [33.999, 13.672, 0], [32.833, 13.431, 4.442], [29.648, 12.774, 7.694], [25.298, 11.875, 8.885], [20.947, 10.977, 7.694], [17.762, 10.319, 4.442], [16.596, 10.079, 0], [17.762, 10.319, -4.442], [20.947, 10.977, -7.694], [25.298, 11.875, -8.885], [29.648, 12.774, -7.694], [32.833, 13.431, -4.442]] - , [[38.173, 15.943, 0], [36.419, 15.527, 6.726], [31.628, 14.392, 11.649], [25.084, 12.841, 13.452], [18.539, 11.29, 11.649], [13.748, 10.154, 6.726], [11.995, 9.739, 0], [13.748, 10.154, -6.726], [18.539, 11.29, -11.649], [25.084, 12.841, -13.452], [31.628, 14.392, -11.649], [36.419, 15.527, -6.726], [33.81, 14.909, 0], [32.64, 14.632, 4.484], [29.447, 13.875, 7.766], [25.084, 12.841, 8.968], [20.721, 11.807, 7.766], [17.527, 11.05, 4.484], [16.358, 10.773, 0], [17.527, 11.05, -4.484], [20.721, 11.807, -7.766], [25.084, 12.841, -8.968], [29.447, 13.875, -7.766], [32.64, 14.632, -4.484]] - , [[37.955, 17.314, 0], [36.198, 16.843, 6.788], [31.398, 15.557, 11.757], [24.841, 13.8, 13.576], [18.285, 12.043, 11.757], [13.485, 10.757, 6.788], [11.728, 10.286, 0], [13.485, 10.757, -6.788], [18.285, 12.043, -11.757], [24.841, 13.8, -13.576], [31.398, 15.557, -11.757], [36.198, 16.843, -6.788], [33.584, 16.142, 0], [32.413, 15.829, 4.525], [29.213, 14.971, 7.838], [24.841, 13.8, 9.051], [20.47, 12.629, 7.838], [17.27, 11.771, 4.525], [16.099, 11.457, 0], [17.27, 11.771, -4.525], [20.47, 12.629, -7.838], [24.841, 13.8, -9.051], [29.213, 14.971, -7.838], [32.413, 15.829, -4.525]] - , [[37.697, 18.681, 0], [35.938, 18.154, 6.85], [31.134, 16.716, 11.865], [24.572, 14.751, 13.7], [18.009, 12.787, 11.865], [13.205, 11.348, 6.85], [11.447, 10.822, 0], [13.205, 11.348, -6.85], [18.009, 12.787, -11.865], [24.572, 14.751, -13.7], [31.134, 16.716, -11.865], [35.938, 18.154, -6.85], [33.322, 17.371, 0], [32.149, 17.02, 4.567], [28.947, 16.061, 7.91], [24.572, 14.751, 9.134], [20.197, 13.442, 7.91], [16.994, 12.483, 4.567], [15.822, 12.132, 0], [16.994, 12.483, -4.567], [20.197, 13.442, -7.91], [24.572, 14.751, -9.134], [28.947, 16.061, -7.91], [32.149, 17.02, -4.567]] - , [[37.397, 20.043, 0], [35.639, 19.46, 6.912], [30.836, 17.869, 11.973], [24.274, 15.695, 13.825], [17.713, 13.52, 11.973], [12.909, 11.929, 6.912], [11.151, 11.346, 0], [12.909, 11.929, -6.912], [17.713, 13.52, -11.973], [24.274, 15.695, -13.825], [30.836, 17.869, -11.973], [35.639, 19.46, -6.912], [33.023, 18.594, 0], [31.851, 18.205, 4.608], [28.649, 17.144, 7.982], [24.274, 15.695, 9.217], [19.9, 14.245, 7.982], [16.698, 13.184, 4.608], [15.525, 12.795, 0], [16.698, 13.184, -4.608], [19.9, 14.245, -7.982], [24.274, 15.695, -9.217], [28.649, 17.144, -7.982], [31.851, 18.205, -4.608]] - , [[37.058, 21.4, 0], [35.301, 20.76, 6.975], [30.504, 19.014, 12.08], [23.95, 16.629, 13.949], [17.396, 14.243, 12.08], [12.598, 12.497, 6.975], [10.841, 11.858, 0], [12.598, 12.497, -6.975], [17.396, 14.243, -12.08], [23.95, 16.629, -13.949], [30.504, 19.014, -12.08], [35.301, 20.76, -6.975], [32.688, 19.809, 0], [31.517, 19.383, 4.65], [28.319, 18.219, 8.054], [23.95, 16.629, 9.3], [19.58, 15.038, 8.054], [16.382, 13.874, 4.65], [15.211, 13.448, 0], [16.382, 13.874, -4.65], [19.58, 15.038, -8.054], [23.95, 16.629, -9.3], [28.319, 18.219, -8.054], [31.517, 19.383, -4.65]] - , [[36.677, 22.749, 0], [34.925, 22.053, 7.037], [30.138, 20.151, 12.188], [23.598, 17.553, 14.074], [17.058, 14.955, 12.188], [12.271, 13.053, 7.037], [10.518, 12.357, 0], [12.271, 13.053, -7.037], [17.058, 14.955, -12.188], [23.598, 17.553, -14.074], [30.138, 20.151, -12.188], [34.925, 22.053, -7.037], [32.317, 21.017, 0], [31.149, 20.553, 4.691], [27.958, 19.285, 8.125], [23.598, 17.553, 9.382], [19.238, 15.821, 8.125], [16.046, 14.553, 4.691], [14.878, 14.089, 0], [16.046, 14.553, -4.691], [19.238, 15.821, -8.125], [23.598, 17.553, -9.382], [27.958, 19.285, -8.125], [31.149, 20.553, -4.691]] - , [[36.256, 24.09, 0], [34.51, 23.337, 7.099], [29.738, 21.279, 12.296], [23.219, 18.467, 14.198], [16.701, 15.655, 12.296], [11.929, 13.597, 7.099], [10.182, 12.843, 0], [11.929, 13.597, -7.099], [16.701, 15.655, -12.296], [23.219, 18.467, -14.198], [29.738, 21.279, -12.296], [34.51, 23.337, -7.099], [31.911, 22.216, 0], [30.746, 21.714, 4.733], [27.565, 20.341, 8.197], [23.219, 18.467, 9.465], [18.874, 16.592, 8.197], [15.692, 15.22, 4.733], [14.528, 14.718, 0], [15.692, 15.22, -4.733], [18.874, 16.592, -8.197], [23.219, 18.467, -9.465], [27.565, 20.341, -8.197], [30.746, 21.714, -4.733]] - , [[35.795, 25.422, 0], [34.056, 24.611, 7.161], [29.305, 22.396, 12.404], [22.814, 19.369, 14.323], [16.324, 16.343, 12.404], [11.573, 14.127, 7.161], [9.834, 13.316, 0], [11.573, 14.127, -7.161], [16.324, 16.343, -12.404], [22.814, 19.369, -14.323], [29.305, 22.396, -12.404], [34.056, 24.611, -7.161], [31.468, 23.404, 0], [30.309, 22.864, 4.774], [27.141, 21.387, 8.269], [22.814, 19.369, 9.548], [18.488, 17.351, 8.269], [15.32, 15.874, 4.774], [14.161, 15.334, 0], [15.32, 15.874, -4.774], [18.488, 17.351, -8.269], [22.814, 19.369, -9.548], [27.141, 21.387, -8.269], [30.309, 22.864, -4.774]] - , [[35.294, 26.743, 0], [33.564, 25.874, 7.224], [28.839, 23.501, 12.511], [22.384, 20.259, 14.447], [15.928, 17.017, 12.511], [11.203, 14.644, 7.224], [9.473, 13.775, 0], [11.203, 14.644, -7.224], [15.928, 17.017, -12.511], [22.384, 20.259, -14.447], [28.839, 23.501, -12.511], [33.564, 25.874, -7.224], [30.99, 24.582, 0], [29.837, 24.003, 4.816], [26.687, 22.42, 8.341], [22.384, 20.259, 9.631], [18.08, 18.098, 8.341], [14.93, 16.516, 4.816], [13.777, 15.937, 0], [14.93, 16.516, -4.816], [18.08, 18.098, -8.341], [22.384, 20.259, -9.631], [26.687, 22.42, -8.341], [29.837, 24.003, -4.816]] - , [[34.753, 28.052, 0], [33.034, 27.126, 7.286], [28.34, 24.594, 12.619], [21.927, 21.136, 14.571], [15.514, 17.679, 12.619], [10.819, 15.147, 7.286], [9.101, 14.221, 0], [10.819, 15.147, -7.286], [15.514, 17.679, -12.619], [21.927, 21.136, -14.571], [28.34, 24.594, -12.619], [33.034, 27.126, -7.286], [30.477, 25.747, 0], [29.332, 25.129, 4.857], [26.202, 23.442, 8.413], [21.927, 21.136, 9.714], [17.652, 18.831, 8.413], [14.522, 17.144, 4.857], [13.376, 16.526, 0], [14.522, 17.144, -4.857], [17.652, 18.831, -8.413], [21.927, 21.136, -9.714], [26.202, 23.442, -8.413], [29.332, 25.129, -4.857]] - , [[34.172, 29.348, 0], [32.467, 28.363, 7.348], [27.808, 25.674, 12.727], [21.445, 22, 14.696], [15.081, 18.326, 12.727], [10.423, 15.637, 7.348], [8.718, 14.652, 0], [10.423, 15.637, -7.348], [15.081, 18.326, -12.727], [21.445, 22, -14.696], [27.808, 25.674, -12.727], [32.467, 28.363, -7.348], [29.93, 26.899, 0], [28.793, 26.242, 4.899], [25.687, 24.449, 8.485], [21.445, 22, 9.797], [17.203, 19.551, 8.485], [14.097, 17.758, 4.899], [12.96, 17.101, 0], [14.097, 17.758, -4.899], [17.203, 19.551, -8.485], [21.445, 22, -9.797], [25.687, 24.449, -8.485], [28.793, 26.242, -4.899]] - , [[33.552, 30.63, 0], [31.862, 29.587, 7.41], [27.245, 26.739, 12.835], [20.938, 22.849, 14.82], [14.631, 18.959, 12.835], [10.014, 16.111, 7.41], [8.324, 15.069, 0], [10.014, 16.111, -7.41], [14.631, 18.959, -12.835], [20.938, 22.849, -14.82], [27.245, 26.739, -12.835], [31.862, 29.587, -7.41], [29.347, 28.036, 0], [28.221, 27.341, 4.94], [25.143, 25.443, 8.556], [20.938, 22.849, 9.88], [16.733, 20.256, 8.556], [13.655, 18.357, 4.94], [12.529, 17.662, 0], [13.655, 18.357, -4.94], [16.733, 20.256, -8.556], [20.938, 22.849, -9.88], [25.143, 25.443, -8.556], [28.221, 27.341, -4.94]] - , [[32.893, 31.896, 0], [31.22, 30.795, 7.472], [26.65, 27.789, 12.942], [20.407, 23.683, 14.945], [14.164, 19.577, 12.942], [9.593, 16.571, 7.472], [7.92, 15.471, 0], [9.593, 16.571, -7.472], [14.164, 19.577, -12.942], [20.407, 23.683, -14.945], [26.65, 27.789, -12.942], [31.22, 30.795, -7.472], [28.731, 29.158, 0], [27.615, 28.425, 4.982], [24.569, 26.421, 8.628], [20.407, 23.683, 9.963], [16.245, 20.946, 8.628], [13.198, 18.942, 4.982], [12.083, 18.208, 0], [13.198, 18.942, -4.982], [16.245, 20.946, -8.628], [20.407, 23.683, -9.963], [24.569, 26.421, -8.628], [27.615, 28.425, -4.982]] - , [[32.195, 33.145, 0], [30.541, 31.987, 7.535], [26.023, 28.823, 13.05], [19.851, 24.502, 15.069], [13.679, 20.18, 13.05], [9.161, 17.016, 7.535], [7.507, 15.858, 0], [9.161, 17.016, -7.535], [13.679, 20.18, -13.05], [19.851, 24.502, -15.069], [26.023, 28.823, -13.05], [30.541, 31.987, -7.535], [28.08, 30.264, 0], [26.978, 29.492, 5.023], [23.966, 27.383, 8.7], [19.851, 24.502, 10.046], [15.737, 21.621, 8.7], [12.724, 19.511, 5.023], [11.622, 18.739, 0], [12.724, 19.511, -5.023], [15.737, 21.621, -8.7], [19.851, 24.502, -10.046], [23.966, 27.383, -8.7], [26.978, 29.492, -5.023]] - , [[31.459, 34.376, 0], [29.827, 33.161, 7.597], [25.366, 29.84, 13.158], [19.272, 25.303, 15.194], [13.179, 20.767, 13.158], [8.718, 17.446, 7.597], [7.085, 16.23, 0], [8.718, 17.446, -7.597], [13.179, 20.767, -13.158], [19.272, 25.303, -15.194], [25.366, 29.84, -13.158], [29.827, 33.161, -7.597], [27.397, 31.352, 0], [26.308, 30.542, 5.065], [23.335, 28.328, 8.772], [19.272, 25.303, 10.129], [15.21, 22.279, 8.772], [12.236, 20.065, 5.065], [11.147, 19.255, 0], [12.236, 20.065, -5.065], [15.21, 22.279, -8.772], [19.272, 25.303, -10.129], [23.335, 28.328, -8.772], [26.308, 30.542, -5.065]] - , [[30.686, 35.589, 0], [29.076, 34.316, 7.659], [24.678, 30.838, 13.266], [18.67, 26.088, 15.318], [12.662, 21.338, 13.266], [8.264, 17.86, 7.659], [6.654, 16.587, 0], [8.264, 17.86, -7.659], [12.662, 21.338, -13.266], [18.67, 26.088, -15.318], [24.678, 30.838, -13.266], [29.076, 34.316, -7.659], [26.681, 32.422, 0], [25.607, 31.573, 5.106], [22.675, 29.255, 8.844], [18.67, 26.088, 10.212], [14.665, 22.921, 8.844], [11.733, 20.603, 5.106], [10.66, 19.754, 0], [11.733, 20.603, -5.106], [14.665, 22.921, -8.844], [18.67, 26.088, -10.212], [22.675, 29.255, -8.844], [25.607, 31.573, -5.106]] - , [[29.875, 36.781, 0], [28.29, 35.451, 7.721], [23.96, 31.818, 13.374], [18.046, 26.855, 15.442], [12.131, 21.892, 13.374], [7.801, 18.258, 7.721], [6.216, 16.929, 0], [7.801, 18.258, -7.721], [12.131, 21.892, -13.374], [18.046, 26.855, -15.442], [23.96, 31.818, -13.374], [28.29, 35.451, -7.721], [25.932, 33.472, 0], [24.875, 32.586, 5.147], [21.989, 30.164, 8.916], [18.046, 26.855, 10.295], [14.102, 23.546, 8.916], [11.216, 21.124, 5.147], [10.159, 20.237, 0], [11.216, 21.124, -5.147], [14.102, 23.546, -8.916], [18.046, 26.855, -10.295], [21.989, 30.164, -8.916], [24.875, 32.586, -5.147]] - , [[29.028, 37.952, 0], [27.47, 36.565, 7.783], [23.213, 32.777, 13.481], [17.399, 27.603, 15.567], [11.584, 22.429, 13.481], [7.328, 18.641, 7.783], [5.77, 17.254, 0], [7.328, 18.641, -7.783], [11.584, 22.429, -13.481], [17.399, 27.603, -15.567], [23.213, 32.777, -13.481], [27.47, 36.565, -7.783], [25.151, 34.502, 0], [24.113, 33.578, 5.189], [21.275, 31.053, 8.988], [17.399, 27.603, 10.378], [13.523, 24.153, 8.988], [10.685, 21.628, 5.189], [9.646, 20.704, 0], [10.685, 21.628, -5.189], [13.523, 24.153, -8.988], [17.399, 27.603, -10.378], [21.275, 31.053, -8.988], [24.113, 33.578, -5.189]] - , [[28.144, 39.1, 0], [26.615, 37.658, 7.846], [22.437, 33.716, 13.589], [16.731, 28.332, 15.691], [11.024, 22.948, 13.589], [6.846, 19.007, 7.846], [5.317, 17.564, 0], [6.846, 19.007, -7.846], [11.024, 22.948, -13.589], [16.731, 28.332, -15.691], [22.437, 33.716, -13.589], [26.615, 37.658, -7.846], [24.34, 35.511, 0], [23.32, 34.549, 5.23], [20.535, 31.922, 9.059], [16.731, 28.332, 10.461], [12.926, 24.743, 9.059], [10.141, 22.115, 5.23], [9.122, 21.154, 0], [10.141, 22.115, -5.23], [12.926, 24.743, -9.059], [16.731, 28.332, -10.461], [20.535, 31.922, -9.059], [23.32, 34.549, -5.23]] - , [[27.225, 40.225, 0], [25.727, 38.727, 7.908], [21.633, 34.633, 13.697], [16.042, 29.042, 15.816], [10.45, 23.45, 13.697], [6.357, 19.357, 7.908], [4.858, 17.858, 0], [6.357, 19.357, -7.908], [10.45, 23.45, -13.697], [16.042, 29.042, -15.816], [21.633, 34.633, -13.697], [25.727, 38.727, -7.908], [23.497, 36.497, 0], [22.498, 35.498, 5.272], [19.769, 32.769, 9.131], [16.042, 29.042, 10.544], [12.314, 25.314, 9.131], [9.585, 22.585, 5.272], [8.586, 21.586, 0], [9.585, 22.585, -5.272], [12.314, 25.314, -9.131], [16.042, 29.042, -10.544], [19.769, 32.769, -9.131], [22.498, 35.498, -5.272]] - , [[26.271, 41.325, 0], [24.805, 39.772, 7.97], [20.802, 35.528, 13.805], [15.332, 29.731, 15.94], [9.863, 23.934, 13.805], [5.859, 19.69, 7.97], [4.393, 18.136, 0], [5.859, 19.69, -7.97], [9.863, 23.934, -13.805], [15.332, 29.731, -15.94], [20.802, 35.528, -13.805], [24.805, 39.772, -7.97], [22.625, 37.46, 0], [21.648, 36.425, 5.313], [18.978, 33.596, 9.203], [15.332, 29.731, 10.627], [11.686, 25.866, 9.203], [9.017, 23.037, 5.313], [8.04, 22.001, 0], [9.017, 23.037, -5.313], [11.686, 25.866, -9.203], [15.332, 29.731, -10.627], [18.978, 33.596, -9.203], [21.648, 36.425, -5.313]] - , [[25.283, 42.399, 0], [23.852, 40.792, 8.032], [19.943, 36.399, 13.912], [14.603, 30.399, 16.065], [9.263, 24.399, 13.912], [5.354, 20.006, 8.032], [3.923, 18.398, 0], [5.354, 20.006, -8.032], [9.263, 24.399, -13.912], [14.603, 30.399, -16.065], [19.943, 36.399, -13.912], [23.852, 40.792, -8.032], [21.723, 38.399, 0], [20.769, 37.327, 5.355], [18.163, 34.399, 9.275], [14.603, 30.399, 10.71], [11.043, 26.399, 9.275], [8.437, 23.47, 5.355], [7.483, 22.398, 0], [8.437, 23.47, -5.355], [11.043, 26.399, -9.275], [14.603, 30.399, -10.71], [18.163, 34.399, -9.275], [20.769, 37.327, -5.355]] - , [[24.261, 43.447, 0], [22.867, 41.785, 8.094], [19.058, 37.246, 14.02], [13.855, 31.046, 16.189], [8.652, 24.845, 14.02], [4.843, 20.306, 8.094], [3.449, 18.644, 0], [4.843, 20.306, -8.094], [8.652, 24.845, -14.02], [13.855, 31.046, -16.189], [19.058, 37.246, -14.02], [22.867, 41.785, -8.094], [20.792, 39.313, 0], [19.863, 38.205, 5.396], [17.323, 35.179, 9.347], [13.855, 31.046, 10.793], [10.386, 26.912, 9.347], [7.847, 23.886, 5.396], [6.917, 22.778, 0], [7.847, 23.886, -5.396], [10.386, 26.912, -9.347], [13.855, 31.046, -10.793], [17.323, 35.179, -9.347], [19.863, 38.205, -5.396]] - , [[23.206, 44.467, 0], [21.851, 42.752, 8.157], [18.147, 38.068, 14.128], [13.088, 31.67, 16.313], [8.029, 25.272, 14.128], [4.325, 20.588, 8.157], [2.97, 18.874, 0], [4.325, 20.588, -8.157], [8.029, 25.272, -14.128], [13.088, 31.67, -16.313], [18.147, 38.068, -14.128], [21.851, 42.752, -8.157], [19.833, 40.201, 0], [18.93, 39.058, 5.438], [16.461, 35.936, 9.419], [13.088, 31.67, 10.876], [9.715, 27.405, 9.419], [7.246, 24.282, 5.438], [6.343, 23.139, 0], [7.246, 24.282, -5.438], [9.715, 27.405, -9.419], [13.088, 31.67, -10.876], [16.461, 35.936, -9.419], [18.93, 39.058, -5.438]] - , [[22.119, 45.457, 0], [20.804, 43.691, 8.219], [17.211, 38.865, 14.236], [12.303, 32.272, 16.438], [7.395, 25.68, 14.236], [3.803, 20.854, 8.219], [2.487, 19.087, 0], [3.803, 20.854, -8.219], [7.395, 25.68, -14.236], [12.303, 32.272, -16.438], [17.211, 38.865, -14.236], [20.804, 43.691, -8.219], [18.847, 41.062, 0], [17.971, 39.885, 5.479], [15.575, 36.667, 9.49], [12.303, 32.272, 10.959], [9.031, 27.877, 9.49], [6.636, 24.66, 5.479], [5.759, 23.482, 0], [6.636, 24.66, -5.479], [9.031, 27.877, -9.49], [12.303, 32.272, -10.959], [15.575, 36.667, -9.49], [17.971, 39.885, -5.479]] - , [[21.001, 46.418, 0], [19.729, 44.601, 8.281], [16.251, 39.635, 14.343], [11.502, 32.851, 16.562], [6.752, 26.068, 14.343], [3.275, 21.102, 8.281], [2.002, 19.284, 0], [3.275, 21.102, -8.281], [6.752, 26.068, -14.343], [11.502, 32.851, -16.562], [16.251, 39.635, -14.343], [19.729, 44.601, -8.281], [17.835, 41.896, 0], [16.986, 40.684, 5.521], [14.668, 37.373, 9.562], [11.502, 32.851, 11.041], [8.335, 28.329, 9.562], [6.017, 25.018, 5.521], [5.168, 23.807, 0], [6.017, 25.018, -5.521], [8.335, 28.329, -9.562], [11.502, 32.851, -11.041], [14.668, 37.373, -9.562], [16.986, 40.684, -5.521]] - , [[19.853, 47.348, 0], [18.624, 45.48, 8.343], [15.268, 40.377, 14.451], [10.683, 33.407, 16.687], [6.099, 26.436, 14.451], [2.742, 21.333, 8.343], [1.514, 19.465, 0], [2.742, 21.333, -8.343], [6.099, 26.436, -14.451], [10.683, 33.407, -16.687], [15.268, 40.377, -14.451], [18.624, 45.48, -8.343], [16.796, 42.701, 0], [15.977, 41.456, 5.562], [13.74, 38.054, 9.634], [10.683, 33.407, 11.124], [7.627, 28.759, 9.634], [5.389, 25.357, 5.562], [4.57, 24.112, 0], [5.389, 25.357, -5.562], [7.627, 28.759, -9.634], [10.683, 33.407, -11.124], [13.74, 38.054, -9.634], [15.977, 41.456, -5.562]] - , [[18.675, 48.246, 0], [17.492, 46.329, 8.406], [14.262, 41.092, 14.559], [9.849, 33.938, 16.811], [5.436, 26.784, 14.559], [2.206, 21.547, 8.406], [1.024, 19.63, 0], [2.206, 21.547, -8.406], [5.436, 26.784, -14.559], [9.849, 33.938, -16.811], [14.262, 41.092, -14.559], [17.492, 46.329, -8.406], [15.733, 43.477, 0], [14.945, 42.199, 5.604], [12.791, 38.707, 9.706], [9.849, 33.938, 11.207], [6.907, 29.169, 9.706], [4.754, 25.677, 5.604], [3.966, 24.399, 0], [4.754, 25.677, -5.604], [6.907, 29.169, -9.706], [9.849, 33.938, -11.207], [12.791, 38.707, -9.706], [14.945, 42.199, -5.604]] - , [[17.468, 49.111, 0], [16.333, 47.146, 8.468], [13.234, 41.778, 14.667], [9, 34.445, 16.935], [4.766, 27.112, 14.667], [1.667, 21.743, 8.468], [0.532, 19.778, 0], [1.667, 21.743, -8.468], [4.766, 27.112, -14.667], [9, 34.445, -16.935], [13.234, 41.778, -14.667], [16.333, 47.146, -8.468], [14.645, 44.223, 0], [13.889, 42.913, 5.645], [11.823, 39.334, 9.778], [9, 34.445, 11.29], [6.177, 29.556, 9.778], [4.111, 25.977, 5.645], [3.355, 24.667, 0], [4.111, 25.977, -5.645], [6.177, 29.556, -9.778], [9, 34.445, -11.29], [11.823, 39.334, -9.778], [13.889, 42.913, -5.645]] - , [[16.233, 49.943, 0], [15.148, 47.931, 8.53], [12.185, 42.435, 14.774], [8.136, 34.927, 17.06], [4.088, 27.419, 14.774], [1.125, 21.922, 8.53], [0.04, 19.911, 0], [1.125, 21.922, -8.53], [4.088, 27.419, -14.774], [8.136, 34.927, -17.06], [12.185, 42.435, -14.774], [15.148, 47.931, -8.53], [13.534, 44.938, 0], [12.811, 43.596, 5.687], [10.835, 39.932, 9.85], [8.136, 34.927, 11.373], [5.438, 29.921, 9.85], [3.462, 26.257, 5.687], [2.739, 24.916, 0], [3.462, 26.257, -5.687], [5.438, 29.921, -9.85], [8.136, 34.927, -11.373], [10.835, 39.932, -9.85], [12.811, 43.596, -5.687]] - , [[14.971, 50.74, 0], [13.938, 48.683, 8.592], [11.115, 43.062, 14.882], [7.259, 35.384, 17.184], [3.403, 27.705, 14.882], [0.58, 22.084, 8.592], [-0.453, 20.027, 0], [0.58, 22.084, -8.592], [3.403, 27.705, -14.882], [7.259, 35.384, -17.184], [11.115, 43.062, -14.882], [13.938, 48.683, -8.592], [12.401, 45.621, 0], [11.712, 44.25, 5.728], [9.83, 40.502, 9.921], [7.259, 35.384, 11.456], [4.688, 30.265, 9.921], [2.806, 26.517, 5.728], [2.118, 25.146, 0], [2.806, 26.517, -5.728], [4.688, 30.265, -9.921], [7.259, 35.384, -11.456], [9.83, 40.502, -9.921], [11.712, 44.25, -5.728]] - , [[13.684, 51.502, 0], [12.704, 49.4, 8.654], [10.027, 43.658, 14.99], [6.369, 35.814, 17.309], [2.712, 27.971, 14.99], [0.034, 22.229, 8.654], [-0.946, 20.127, 0], [0.034, 22.229, -8.654], [2.712, 27.971, -14.99], [6.369, 35.814, -17.309], [10.027, 43.658, -14.99], [12.704, 49.4, -8.654], [11.246, 46.273, 0], [10.592, 44.871, 5.77], [8.807, 41.043, 9.993], [6.369, 35.814, 11.539], [3.931, 30.585, 9.993], [2.146, 26.758, 5.77], [1.492, 25.356, 0], [2.146, 26.758, -5.77], [3.931, 30.585, -9.993], [6.369, 35.814, -11.539], [8.807, 41.043, -9.993], [10.592, 44.871, -5.77]] - , [[12.372, 52.227, 0], [11.447, 50.082, 8.717], [8.919, 44.223, 15.098], [5.467, 36.219, 17.433], [2.014, 28.216, 15.098], [-0.513, 22.357, 8.717], [-1.438, 20.212, 0], [-0.513, 22.357, -8.717], [2.014, 28.216, -15.098], [5.467, 36.219, -17.433], [8.919, 44.223, -15.098], [11.447, 50.082, -8.717], [10.07, 46.891, 0], [9.453, 45.461, 5.811], [7.768, 41.555, 10.065], [5.467, 36.219, 11.622], [3.165, 30.884, 10.065], [1.48, 26.977, 5.811], [0.863, 25.548, 0], [1.48, 26.977, -5.811], [3.165, 30.884, -10.065], [5.467, 36.219, -11.622], [7.768, 41.555, -10.065], [9.453, 45.461, -5.811]] - , [[11.035, 52.915, 0], [10.167, 50.729, 8.779], [7.794, 44.756, 15.205], [4.553, 36.598, 17.558], [1.312, 28.439, 15.205], [-1.061, 22.467, 8.779], [-1.929, 20.281, 0], [-1.061, 22.467, -8.779], [1.312, 28.439, -15.205], [4.553, 36.598, -17.558], [7.794, 44.756, -15.205], [10.167, 50.729, -8.779], [8.875, 47.476, 0], [8.296, 46.019, 5.853], [6.714, 42.037, 10.137], [4.553, 36.598, 11.705], [2.392, 31.159, 10.137], [0.81, 27.177, 5.853], [0.231, 25.72, 0], [0.81, 27.177, -5.853], [2.392, 31.159, -10.137], [4.553, 36.598, -11.705], [6.714, 42.037, -10.137], [8.296, 46.019, -5.853]] - , [[9.676, 53.565, 0], [8.866, 51.339, 8.841], [6.652, 45.257, 15.313], [3.629, 36.95, 17.682], [0.605, 28.642, 15.313], [-1.609, 22.56, 8.841], [-2.419, 20.334, 0], [-1.609, 22.56, -8.841], [0.605, 28.642, -15.313], [3.629, 36.95, -17.682], [6.652, 45.257, -15.313], [8.866, 51.339, -8.841], [7.66, 48.027, 0], [7.12, 46.543, 5.894], [5.645, 42.488, 10.209], [3.629, 36.95, 11.788], [1.613, 31.411, 10.209], [0.137, 27.356, 5.894], [-0.403, 25.872, 0], [0.137, 27.356, -5.894], [1.613, 31.411, -10.209], [3.629, 36.95, -11.788], [5.645, 42.488, -10.209], [7.12, 46.543, -5.894]] - , [[8.295, 54.177, 0], [7.545, 51.912, 8.903], [5.495, 45.726, 15.421], [2.695, 37.274, 17.806], [-0.106, 28.823, 15.421], [-2.156, 22.636, 8.903], [-2.906, 20.372, 0], [-2.156, 22.636, -8.903], [-0.106, 28.823, -15.421], [2.695, 37.274, -17.806], [5.495, 45.726, -15.421], [7.545, 51.912, -8.903], [6.428, 48.543, 0], [5.928, 47.033, 5.935], [4.561, 42.908, 10.281], [2.695, 37.274, 11.871], [0.828, 31.64, 10.281], [-0.539, 27.516, 5.935], [-1.039, 26.006, 0], [-0.539, 27.516, -5.935], [0.828, 31.64, -10.281], [2.695, 37.274, -11.871], [4.561, 42.908, -10.281], [5.928, 47.033, -5.935]] - , [[6.894, 54.749, 0], [6.205, 52.448, 8.965], [4.323, 46.16, 15.529], [1.751, 37.572, 17.931], [-0.82, 28.983, 15.529], [-2.702, 22.695, 8.965], [-3.391, 20.394, 0], [-2.702, 22.695, -8.965], [-0.82, 28.983, -15.529], [1.751, 37.572, -17.931], [4.323, 46.16, -15.529], [6.205, 52.448, -8.965], [5.18, 49.023, 0], [4.72, 47.489, 5.977], [3.466, 43.298, 10.352], [1.751, 37.572, 11.954], [0.037, 31.846, 10.352], [-1.218, 27.654, 5.977], [-1.677, 26.12, 0], [-1.218, 27.654, -5.977], [0.037, 31.846, -10.352], [1.751, 37.572, -11.954], [3.466, 43.298, -10.352], [4.72, 47.489, -5.977]] - , [[5.473, 55.282, 0], [4.847, 52.945, 9.028], [3.136, 46.562, 15.636], [0.8, 37.841, 18.055], [-1.537, 29.121, 15.636], [-3.247, 22.738, 9.028], [-3.873, 20.401, 0], [-3.247, 22.738, -9.028], [-1.537, 29.121, -15.636], [0.8, 37.841, -18.055], [3.136, 46.562, -15.636], [4.847, 52.945, -9.028], [3.915, 49.468, 0], [3.498, 47.911, 6.018], [2.358, 43.655, 10.424], [0.8, 37.841, 12.037], [-0.758, 32.028, 10.424], [-1.898, 27.772, 6.018], [-2.316, 26.215, 0], [-1.898, 27.772, -6.018], [-0.758, 32.028, -10.424], [0.8, 37.841, -12.037], [2.358, 43.655, -10.424], [3.498, 47.911, -6.018]] - , [[4.033, 55.773, 0], [3.472, 53.403, 9.09], [1.937, 46.928, 15.744], [-0.159, 38.084, 18.18], [-2.255, 29.239, 15.744], [-3.79, 22.764, 9.09], [-4.352, 20.394, 0], [-3.79, 22.764, -9.09], [-2.255, 29.239, -15.744], [-0.159, 38.084, -18.18], [1.937, 46.928, -15.744], [3.472, 53.403, -9.09], [2.636, 49.877, 0], [2.261, 48.297, 6.06], [1.238, 43.98, 10.496], [-0.159, 38.084, 12.12], [-1.557, 32.187, 10.496], [-2.58, 27.87, 6.06], [-2.954, 26.29, 0], [-2.58, 27.87, -6.06], [-1.557, 32.187, -10.496], [-0.159, 38.084, -12.12], [1.238, 43.98, -10.496], [2.261, 48.297, -6.06]] - , [[2.577, 56.224, 0], [2.081, 53.822, 9.152], [0.726, 47.261, 15.852], [-1.125, 38.298, 18.304], [-2.975, 29.335, 15.852], [-4.33, 22.773, 9.152], [-4.826, 20.372, 0], [-4.33, 22.773, -9.152], [-2.975, 29.335, -15.852], [-1.125, 38.298, -18.304], [0.726, 47.261, -15.852], [2.081, 53.822, -9.152], [1.343, 50.248, 0], [1.012, 48.647, 6.101], [0.109, 44.273, 10.568], [-1.125, 38.298, 12.203], [-2.358, 32.322, 10.568], [-3.262, 27.948, 6.101], [-3.592, 26.347, 0], [-3.262, 27.948, -6.101], [-2.358, 32.322, -10.568], [-1.125, 38.298, -12.203], [0.109, 44.273, -10.568], [1.012, 48.647, -6.101]] - , [[1.104, 56.632, 0], [0.675, 54.201, 9.214], [-0.496, 47.558, 15.96], [-2.096, 38.483, 18.429], [-3.696, 29.409, 15.96], [-4.867, 22.766, 9.214], [-5.296, 20.335, 0], [-4.867, 22.766, -9.214], [-3.696, 29.409, -15.96], [-2.096, 38.483, -18.429], [-0.496, 47.558, -15.96], [0.675, 54.201, -9.214], [0.037, 50.583, 0], [-0.248, 48.962, 6.143], [-1.029, 44.533, 10.64], [-2.096, 38.483, 12.286], [-3.163, 32.434, 10.64], [-3.944, 28.005, 6.143], [-4.229, 26.384, 0], [-3.944, 28.005, -6.143], [-3.163, 32.434, -10.64], [-2.096, 38.483, -12.286], [-1.029, 44.533, -10.64], [-0.248, 48.962, -6.143]] - , [[-0.383, 56.998, 0], [-0.744, 54.539, 9.276], [-1.728, 47.82, 16.067], [-3.072, 38.641, 18.553], [-4.417, 29.462, 16.067], [-5.401, 22.743, 9.276], [-5.761, 20.284, 0], [-5.401, 22.743, -9.276], [-4.417, 29.462, -16.067], [-3.072, 38.641, -18.553], [-1.728, 47.82, -16.067], [-0.744, 54.539, -9.276], [-1.28, 50.879, 0], [-1.52, 49.239, 6.184], [-2.176, 44.76, 10.712], [-3.072, 38.641, 12.369], [-3.969, 32.522, 10.712], [-4.625, 28.043, 6.184], [-4.865, 26.403, 0], [-4.625, 28.043, -6.184], [-3.969, 32.522, -10.712], [-3.072, 38.641, -12.369], [-2.176, 44.76, -10.712], [-1.52, 49.239, -6.184]] - , [[-1.885, 57.321, 0], [-2.175, 54.836, 9.339], [-2.969, 48.046, 16.175], [-4.053, 38.77, 18.677], [-5.137, 29.495, 16.175], [-5.931, 22.704, 9.339], [-6.221, 20.219, 0], [-5.931, 22.704, -9.339], [-5.137, 29.495, -16.175], [-4.053, 38.77, -18.677], [-2.969, 48.046, -16.175], [-2.175, 54.836, -9.339], [-2.607, 51.138, 0], [-2.801, 49.481, 6.226], [-3.33, 44.954, 10.783], [-4.053, 38.77, 12.452], [-4.776, 32.586, 10.783], [-5.305, 28.06, 6.226], [-5.498, 26.403, 0], [-5.305, 28.06, -6.226], [-4.776, 32.586, -10.783], [-4.053, 38.77, -12.452], [-3.33, 44.954, -10.783], [-2.801, 49.481, -6.226]] - , [[-3.398, 57.601, 0], [-3.618, 55.092, 9.401], [-4.217, 48.236, 16.283], [-5.037, 38.871, 18.802], [-5.856, 29.505, 16.283], [-6.456, 22.65, 9.401], [-6.675, 20.14, 0], [-6.456, 22.65, -9.401], [-5.856, 29.505, -16.283], [-5.037, 38.871, -18.802], [-4.217, 48.236, -16.283], [-3.618, 55.092, -9.401], [-3.944, 51.357, 0], [-4.091, 49.685, 6.267], [-4.49, 45.114, 10.855], [-5.037, 38.871, 12.535], [-5.583, 32.627, 10.855], [-5.983, 28.057, 6.267], [-6.129, 26.384, 0], [-5.983, 28.057, -6.267], [-5.583, 32.627, -10.855], [-5.037, 38.871, -12.535], [-4.49, 45.114, -10.855], [-4.091, 49.685, -6.267]] - , [[-4.923, 57.837, 0], [-5.07, 55.305, 9.463], [-5.473, 48.39, 16.391], [-6.023, 38.942, 18.926], [-6.573, 29.495, 16.391], [-6.976, 22.58, 9.463], [-7.124, 20.048, 0], [-6.976, 22.58, -9.463], [-6.573, 29.495, -16.391], [-6.023, 38.942, -18.926], [-5.473, 48.39, -16.391], [-5.07, 55.305, -9.463], [-5.289, 51.539, 0], [-5.388, 49.851, 6.309], [-5.656, 45.241, 10.927], [-6.023, 38.942, 12.618], [-6.39, 32.644, 10.927], [-6.658, 28.034, 6.309], [-6.757, 26.346, 0], [-6.658, 28.034, -6.309], [-6.39, 32.644, -10.927], [-6.023, 38.942, -12.618], [-5.656, 45.241, -10.927], [-5.388, 49.851, -6.309]] - , [[-6.457, 58.028, 0], [-6.531, 55.477, 9.525], [-6.734, 48.507, 16.498], [-7.011, 38.986, 19.051], [-7.288, 29.464, 16.498], [-7.491, 22.494, 9.525], [-7.565, 19.943, 0], [-7.491, 22.494, -9.525], [-7.288, 29.464, -16.498], [-7.011, 38.986, -19.051], [-6.734, 48.507, -16.498], [-6.531, 55.477, -9.525], [-6.642, 51.681, 0], [-6.691, 49.98, 6.35], [-6.826, 45.333, 10.999], [-7.011, 38.986, 12.7], [-7.196, 32.638, 10.999], [-7.331, 27.991, 6.35], [-7.381, 26.291, 0], [-7.331, 27.991, -6.35], [-7.196, 32.638, -10.999], [-7.011, 38.986, -12.7], [-6.826, 45.333, -10.999], [-6.691, 49.98, -6.35]] - , [[-8, 58.175, 0], [-8, 55.606, 9.588], [-8, 48.588, 16.606], [-8, 39, 19.175], [-8, 29.412, 16.606], [-8, 22.394, 9.588], [-8, 19.825, 0], [-8, 22.394, -9.588], [-8, 29.412, -16.606], [-8, 39, -19.175], [-8, 48.588, -16.606], [-8, 55.606, -9.588], [-8, 51.783, 0], [-8, 50.071, 6.392], [-8, 45.392, 11.071], [-8, 39, 12.783], [-8, 32.608, 11.071], [-8, 27.929, 6.392], [-8, 26.217, 0], [-8, 27.929, -6.392], [-8, 32.608, -11.071], [-8, 39, -12.783], [-8, 45.392, -11.071], [-8, 50.071, -6.392]] - , [[-9.341, 58.287, 0], [-9.295, 55.702, 9.65], [-9.167, 48.639, 16.714], [-8.993, 38.991, 19.3], [-8.819, 29.343, 16.714], [-8.691, 22.28, 9.65], [-8.645, 19.695, 0], [-8.691, 22.28, -9.65], [-8.819, 29.343, -16.714], [-8.993, 38.991, -19.3], [-9.167, 48.639, -16.714], [-9.295, 55.702, -9.65], [-9.225, 51.855, 0], [-9.194, 50.132, 6.433], [-9.109, 45.423, 11.143], [-8.993, 38.991, 12.866], [-8.877, 32.559, 11.143], [-8.792, 27.85, 6.433], [-8.761, 26.127, 0], [-8.792, 27.85, -6.433], [-8.877, 32.559, -11.143], [-8.993, 38.991, -12.866], [-9.109, 45.423, -11.143], [-9.194, 50.132, -6.433]] - , [[-10.687, 58.375, 0], [-10.593, 55.775, 9.712], [-10.336, 48.67, 16.822], [-9.986, 38.964, 19.424], [-9.635, 29.258, 16.822], [-9.378, 22.153, 9.712], [-9.284, 19.553, 0], [-9.378, 22.153, -9.712], [-9.635, 29.258, -16.822], [-9.986, 38.964, -19.424], [-10.336, 48.67, -16.822], [-10.593, 55.775, -9.712], [-10.453, 51.905, 0], [-10.391, 50.171, 6.475], [-10.219, 45.435, 11.214], [-9.986, 38.964, 12.949], [-9.752, 32.494, 11.214], [-9.581, 27.757, 6.475], [-9.518, 26.023, 0], [-9.581, 27.757, -6.475], [-9.752, 32.494, -11.214], [-9.986, 38.964, -12.949], [-10.219, 45.435, -11.214], [-10.391, 50.171, -6.475]] - , [[-12.036, 58.439, 0], [-11.894, 55.824, 9.774], [-11.507, 48.679, 16.929], [-10.978, 38.919, 19.548], [-10.448, 29.159, 16.929], [-10.061, 22.015, 9.774], [-9.919, 19.4, 0], [-10.061, 22.015, -9.774], [-10.448, 29.159, -16.929], [-10.978, 38.919, -19.548], [-11.507, 48.679, -16.929], [-11.894, 55.824, -9.774], [-11.683, 51.932, 0], [-11.589, 50.189, 6.516], [-11.33, 45.426, 11.286], [-10.978, 38.919, 13.032], [-10.625, 32.413, 11.286], [-10.367, 27.65, 6.516], [-10.272, 25.906, 0], [-10.367, 27.65, -6.516], [-10.625, 32.413, -11.286], [-10.978, 38.919, -13.032], [-11.33, 45.426, -11.286], [-11.589, 50.189, -6.516]] - , [[-13.388, 58.478, 0], [-13.198, 55.849, 9.836], [-12.678, 48.667, 17.037], [-11.969, 38.857, 19.673], [-11.259, 29.046, 17.037], [-10.739, 21.864, 9.836], [-10.549, 19.235, 0], [-10.739, 21.864, -9.836], [-11.259, 29.046, -17.037], [-11.969, 38.857, -19.673], [-12.678, 48.667, -17.037], [-13.198, 55.849, -9.836], [-12.915, 51.938, 0], [-12.788, 50.185, 6.558], [-12.442, 45.397, 11.358], [-11.969, 38.857, 13.115], [-11.495, 32.316, 11.358], [-11.149, 27.528, 6.558], [-11.022, 25.776, 0], [-11.149, 27.528, -6.558], [-11.495, 32.316, -11.358], [-11.969, 38.857, -13.115], [-12.442, 45.397, -11.358], [-12.788, 50.185, -6.558]] - , [[-14.743, 58.493, 0], [-14.504, 55.851, 9.899], [-13.851, 48.634, 17.145], [-12.958, 38.776, 19.797], [-12.066, 28.918, 17.145], [-11.413, 21.701, 9.899], [-11.174, 19.059, 0], [-11.413, 21.701, -9.899], [-12.066, 28.918, -17.145], [-12.958, 38.776, -19.797], [-13.851, 48.634, -17.145], [-14.504, 55.851, -9.899], [-14.148, 51.92, 0], [-13.989, 50.159, 6.599], [-13.553, 45.348, 11.43], [-12.958, 38.776, 13.198], [-12.363, 32.204, 11.43], [-11.928, 27.393, 6.599], [-11.769, 25.632, 0], [-11.928, 27.393, -6.599], [-12.363, 32.204, -11.43], [-12.958, 38.776, -13.198], [-13.553, 45.348, -11.43], [-13.989, 50.159, -6.599]] - , [[-16.1, 58.482, 0], [-15.812, 55.829, 9.961], [-15.024, 48.58, 17.253], [-13.947, 38.678, 19.922], [-12.87, 28.775, 17.253], [-12.081, 21.526, 9.961], [-11.793, 18.873, 0], [-12.081, 21.526, -9.961], [-12.87, 28.775, -17.253], [-13.947, 38.678, -19.922], [-15.024, 48.58, -17.253], [-15.812, 55.829, -9.961], [-15.382, 51.881, 0], [-15.19, 50.112, 6.641], [-14.665, 45.279, 11.502], [-13.947, 38.678, 13.281], [-13.229, 32.076, 11.502], [-12.703, 27.243, 6.641], [-12.511, 25.474, 0], [-12.703, 27.243, -6.641], [-13.229, 32.076, -11.502], [-13.947, 38.678, -13.281], [-14.665, 45.279, -11.502], [-15.19, 50.112, -6.641]] - , [[-17.46, 58.448, 0], [-17.121, 55.783, 10.023], [-16.196, 48.504, 17.36], [-14.933, 38.561, 20.046], [-13.669, 28.618, 17.36], [-12.744, 21.339, 10.023], [-12.406, 18.675, 0], [-12.744, 21.339, -10.023], [-13.669, 28.618, -17.36], [-14.933, 38.561, -20.046], [-16.196, 48.504, -17.36], [-17.121, 55.783, -10.023], [-16.617, 51.819, 0], [-16.392, 50.043, 6.682], [-15.775, 45.19, 11.574], [-14.933, 38.561, 13.364], [-14.09, 31.933, 11.574], [-13.474, 27.08, 6.682], [-13.248, 25.304, 0], [-13.474, 27.08, -6.682], [-14.09, 31.933, -11.574], [-14.933, 38.561, -13.364], [-15.775, 45.19, -11.574], [-16.392, 50.043, -6.682]] - , [[-18.82, 58.388, 0], [-18.431, 55.714, 10.085], [-17.368, 48.407, 17.468], [-15.917, 38.427, 20.171], [-14.465, 28.447, 17.468], [-13.402, 21.141, 10.085], [-13.013, 18.467, 0], [-13.402, 21.141, -10.085], [-14.465, 28.447, -17.468], [-15.917, 38.427, -20.171], [-17.368, 48.407, -17.468], [-18.431, 55.714, -10.085], [-17.852, 51.734, 0], [-17.593, 49.951, 6.724], [-16.884, 45.081, 11.645], [-15.917, 38.427, 13.447], [-14.949, 31.774, 11.645], [-14.24, 26.903, 6.724], [-13.981, 25.12, 0], [-14.24, 26.903, -6.724], [-14.949, 31.774, -11.645], [-15.917, 38.427, -13.447], [-16.884, 45.081, -11.645], [-17.593, 49.951, -6.724]] - , [[-20.181, 58.303, 0], [-19.741, 55.62, 10.147], [-18.54, 48.289, 17.576], [-16.898, 38.275, 20.295], [-15.256, 28.262, 17.576], [-14.055, 20.931, 10.147], [-13.615, 18.248, 0], [-14.055, 20.931, -10.147], [-15.256, 28.262, -17.576], [-16.898, 38.275, -20.295], [-18.54, 48.289, -17.576], [-19.741, 55.62, -10.147], [-19.087, 51.627, 0], [-18.794, 49.838, 6.765], [-17.992, 44.951, 11.717], [-16.898, 38.275, 13.53], [-15.804, 31.6, 11.717], [-15.002, 26.713, 6.765], [-14.709, 24.924, 0], [-15.002, 26.713, -6.765], [-15.804, 31.6, -11.717], [-16.898, 38.275, -13.53], [-17.992, 44.951, -11.717], [-18.794, 49.838, -6.765]] - , [[-21.543, 58.193, 0], [-21.052, 55.502, 10.21], [-19.71, 48.15, 17.684], [-17.876, 38.106, 20.419], [-16.043, 28.062, 17.684], [-14.701, 20.71, 10.21], [-14.21, 18.019, 0], [-14.701, 20.71, -10.21], [-16.043, 28.062, -17.684], [-17.876, 38.106, -20.419], [-19.71, 48.15, -17.684], [-21.052, 55.502, -10.21], [-20.321, 51.498, 0], [-19.993, 49.703, 6.806], [-19.099, 44.802, 11.789], [-17.876, 38.106, 13.613], [-16.654, 31.41, 11.789], [-15.759, 26.508, 6.806], [-15.432, 24.714, 0], [-15.759, 26.508, -6.806], [-16.654, 31.41, -11.789], [-17.876, 38.106, -13.613], [-19.099, 44.802, -11.789], [-19.993, 49.703, -6.806]] - , [[-22.905, 58.059, 0], [-22.362, 55.361, 10.272], [-20.878, 47.989, 17.791], [-18.852, 37.919, 20.544], [-16.825, 27.849, 17.791], [-15.341, 20.477, 10.272], [-14.798, 17.779, 0], [-15.341, 20.477, -10.272], [-16.825, 27.849, -17.791], [-18.852, 37.919, -20.544], [-20.878, 47.989, -17.791], [-22.362, 55.361, -10.272], [-21.554, 51.345, 0], [-21.192, 49.547, 6.848], [-20.203, 44.632, 11.861], [-18.852, 37.919, 13.696], [-17.501, 31.206, 11.861], [-16.511, 26.291, 6.848], [-16.149, 24.492, 0], [-16.511, 26.291, -6.848], [-17.501, 31.206, -11.861], [-18.852, 37.919, -13.696], [-20.203, 44.632, -11.861], [-21.192, 49.547, -6.848]] - , [[-24.266, 57.899, 0], [-23.671, 55.195, 10.334], [-22.045, 47.807, 17.899], [-19.823, 37.714, 20.668], [-17.602, 27.622, 17.899], [-15.976, 20.233, 10.334], [-15.38, 17.529, 0], [-15.976, 20.233, -10.334], [-17.602, 27.622, -17.899], [-19.823, 37.714, -20.668], [-22.045, 47.807, -17.899], [-23.671, 55.195, -10.334], [-22.785, 51.171, 0], [-22.389, 49.368, 6.889], [-21.304, 44.442, 11.933], [-19.823, 37.714, 13.779], [-18.342, 30.986, 11.933], [-17.258, 26.06, 6.889], [-16.861, 24.257, 0], [-17.258, 26.06, -6.889], [-18.342, 30.986, -11.933], [-19.823, 37.714, -13.779], [-21.304, 44.442, -11.933], [-22.389, 49.368, -6.889]] - , [[-25.627, 57.714, 0], [-24.979, 55.005, 10.396], [-23.209, 47.603, 18.007], [-20.791, 37.492, 20.793], [-18.373, 27.381, 18.007], [-16.603, 19.979, 10.396], [-15.956, 17.269, 0], [-16.603, 19.979, -10.396], [-18.373, 27.381, -18.007], [-20.791, 37.492, -20.793], [-23.209, 47.603, -18.007], [-24.979, 55.005, -10.396], [-24.015, 50.974, 0], [-23.583, 49.167, 6.931], [-22.403, 44.233, 12.005], [-20.791, 37.492, 13.862], [-19.179, 30.751, 12.005], [-17.999, 25.816, 6.931], [-17.567, 24.01, 0], [-17.999, 25.816, -6.931], [-19.179, 30.751, -12.005], [-20.791, 37.492, -13.862], [-22.403, 44.233, -12.005], [-23.583, 49.167, -6.931]] - , [[-26.986, 57.505, 0], [-26.285, 54.791, 10.459], [-24.37, 47.378, 18.115], [-21.755, 37.252, 20.917], [-19.139, 27.126, 18.115], [-17.225, 19.713, 10.459], [-16.524, 17, 0], [-17.225, 19.713, -10.459], [-19.139, 27.126, -18.115], [-21.755, 37.252, -20.917], [-24.37, 47.378, -18.115], [-26.285, 54.791, -10.459], [-25.242, 50.754, 0], [-24.775, 48.945, 6.972], [-23.499, 44.003, 12.076], [-21.755, 37.252, 13.945], [-20.011, 30.501, 12.076], [-18.735, 25.56, 6.972], [-18.267, 23.751, 0], [-18.735, 25.56, -6.972], [-20.011, 30.501, -12.076], [-21.755, 37.252, -13.945], [-23.499, 44.003, -12.076], [-24.775, 48.945, -6.972]] - , [[-28.343, 57.27, 0], [-27.589, 54.553, 10.521], [-25.529, 47.133, 18.222], [-22.714, 36.995, 21.041], [-19.899, 26.858, 18.222], [-17.839, 19.437, 10.521], [-17.085, 16.721, 0], [-17.839, 19.437, -10.521], [-19.899, 26.858, -18.222], [-22.714, 36.995, -21.041], [-25.529, 47.133, -18.222], [-27.589, 54.553, -10.521], [-26.467, 50.512, 0], [-25.964, 48.701, 7.014], [-24.59, 43.753, 12.148], [-22.714, 36.995, 14.028], [-20.838, 30.237, 12.148], [-19.464, 25.29, 7.014], [-18.961, 23.479, 0], [-19.464, 25.29, -7.014], [-20.838, 30.237, -12.148], [-22.714, 36.995, -14.028], [-24.59, 43.753, -12.148], [-25.964, 48.701, -7.014]] - , [[-29.698, 57.01, 0], [-28.89, 54.292, 10.583], [-26.683, 46.865, 18.33], [-23.668, 36.721, 21.166], [-20.654, 26.577, 18.33], [-18.447, 19.15, 10.583], [-17.639, 16.432, 0], [-18.447, 19.15, -10.583], [-20.654, 26.577, -18.33], [-23.668, 36.721, -21.166], [-26.683, 46.865, -18.33], [-28.89, 54.292, -10.583], [-27.688, 50.247, 0], [-27.15, 48.435, 7.055], [-25.678, 43.484, 12.22], [-23.668, 36.721, 14.111], [-21.659, 29.958, 12.22], [-20.187, 25.007, 7.055], [-19.649, 23.195, 0], [-20.187, 25.007, -7.055], [-21.659, 29.958, -12.22], [-23.668, 36.721, -14.111], [-25.678, 43.484, -12.22], [-27.15, 48.435, -7.055]] - , [[-31.05, 56.725, 0], [-30.189, 54.006, 10.645], [-27.834, 46.577, 18.438], [-24.618, 36.429, 21.29], [-21.401, 26.282, 18.438], [-19.047, 18.853, 10.645], [-18.185, 16.134, 0], [-19.047, 18.853, -10.645], [-21.401, 26.282, -18.438], [-24.618, 36.429, -21.29], [-27.834, 46.577, -18.438], [-30.189, 54.006, -10.645], [-28.906, 49.96, 0], [-28.332, 48.147, 7.097], [-26.762, 43.195, 12.292], [-24.618, 36.429, 14.194], [-22.474, 29.664, 12.292], [-20.904, 24.712, 7.097], [-20.329, 22.899, 0], [-20.904, 24.712, -7.097], [-22.474, 29.664, -12.292], [-24.618, 36.429, -14.194], [-26.762, 43.195, -12.292], [-28.332, 48.147, -7.097]] - , [[-32.399, 56.415, 0], [-31.483, 53.696, 10.707], [-28.98, 46.268, 18.546], [-25.562, 36.121, 21.415], [-22.143, 25.974, 18.546], [-19.64, 18.546, 10.707], [-18.724, 15.827, 0], [-19.64, 18.546, -10.707], [-22.143, 25.974, -18.546], [-25.562, 36.121, -21.415], [-28.98, 46.268, -18.546], [-31.483, 53.696, -10.707], [-30.12, 49.65, 0], [-29.509, 47.838, 7.138], [-27.841, 42.886, 12.364], [-25.562, 36.121, 14.276], [-23.282, 29.356, 12.364], [-21.614, 24.404, 7.138], [-21.003, 22.592, 0], [-21.614, 24.404, -7.138], [-23.282, 29.356, -12.364], [-25.562, 36.121, -14.276], [-27.841, 42.886, -12.364], [-29.509, 47.838, -7.138]] - , [[-33.745, 56.08, 0], [-32.774, 53.362, 10.77], [-30.122, 45.937, 18.653], [-26.5, 35.795, 21.539], [-22.877, 25.653, 18.653], [-20.225, 18.229, 10.77], [-19.255, 15.511, 0], [-20.225, 18.229, -10.77], [-22.877, 25.653, -18.653], [-26.5, 35.795, -21.539], [-30.122, 45.937, -18.653], [-32.774, 53.362, -10.77], [-31.33, 49.318, 0], [-30.683, 47.506, 7.18], [-28.915, 42.557, 12.436], [-26.5, 35.795, 14.359], [-24.085, 29.034, 12.436], [-22.317, 24.084, 7.18], [-21.67, 22.273, 0], [-22.317, 24.084, -7.18], [-24.085, 29.034, -12.436], [-26.5, 35.795, -14.359], [-28.915, 42.557, -12.436], [-30.683, 47.506, -7.18]] - , [[-35.086, 55.719, 0], [-34.06, 53.004, 10.832], [-31.259, 45.586, 18.761], [-27.432, 35.453, 21.664], [-23.605, 25.32, 18.761], [-20.803, 17.902, 10.832], [-19.778, 15.186, 0], [-20.803, 17.902, -10.832], [-23.605, 25.32, -18.761], [-27.432, 35.453, -21.664], [-31.259, 45.586, -18.761], [-34.06, 53.004, -10.832], [-32.534, 48.964, 0], [-31.851, 47.154, 7.221], [-29.983, 42.208, 12.507], [-27.432, 35.453, 14.442], [-24.881, 28.697, 12.507], [-23.013, 23.752, 7.221], [-22.329, 21.942, 0], [-23.013, 23.752, -7.221], [-24.881, 28.697, -12.507], [-27.432, 35.453, -14.442], [-29.983, 42.208, -12.507], [-31.851, 47.154, -7.221]] - , [[-36.422, 55.334, 0], [-35.342, 52.623, 10.894], [-32.39, 45.214, 18.869], [-28.358, 35.094, 21.788], [-24.325, 24.973, 18.869], [-21.373, 17.565, 10.894], [-20.293, 14.853, 0], [-21.373, 17.565, -10.894], [-24.325, 24.973, -18.869], [-28.358, 35.094, -21.788], [-32.39, 45.214, -18.869], [-35.342, 52.623, -10.894], [-33.734, 48.587, 0], [-33.014, 46.78, 7.263], [-31.046, 41.841, 12.579], [-28.358, 35.094, 14.525], [-25.669, 28.347, 12.579], [-23.702, 23.408, 7.263], [-22.981, 21.6, 0], [-23.702, 23.408, -7.263], [-25.669, 28.347, -12.579], [-28.358, 35.094, -14.525], [-31.046, 41.841, -12.579], [-33.014, 46.78, -7.263]] - , [[-37.754, 54.924, 0], [-36.618, 52.217, 10.956], [-33.515, 44.821, 18.977], [-29.277, 34.718, 21.912], [-25.038, 24.615, 18.977], [-21.936, 17.219, 10.956], [-20.8, 14.511, 0], [-21.936, 17.219, -10.956], [-25.038, 24.615, -18.977], [-29.277, 34.718, -21.912], [-33.515, 44.821, -18.977], [-36.618, 52.217, -10.956], [-34.928, 48.189, 0], [-34.171, 46.384, 7.304], [-32.102, 41.453, 12.651], [-29.277, 34.718, 14.608], [-26.451, 27.982, 12.651], [-24.383, 23.052, 7.304], [-23.626, 21.247, 0], [-24.383, 23.052, -7.304], [-26.451, 27.982, -12.651], [-29.277, 34.718, -14.608], [-32.102, 41.453, -12.651], [-34.171, 46.384, -7.304]] - , [[-39.079, 54.489, 0], [-37.888, 51.788, 11.018], [-34.634, 44.407, 19.084], [-30.189, 34.325, 22.037], [-25.744, 24.243, 19.084], [-22.49, 16.863, 11.018], [-21.298, 14.162, 0], [-22.49, 16.863, -11.018], [-25.744, 24.243, -19.084], [-30.189, 34.325, -22.037], [-34.634, 44.407, -19.084], [-37.888, 51.788, -11.018], [-36.116, 47.768, 0], [-35.322, 45.967, 7.346], [-33.152, 41.047, 12.723], [-30.189, 34.325, 14.691], [-27.225, 27.604, 12.723], [-25.056, 22.684, 7.346], [-24.262, 20.883, 0], [-25.056, 22.684, -7.346], [-27.225, 27.604, -12.723], [-30.189, 34.325, -14.691], [-33.152, 41.047, -12.723], [-35.322, 45.967, -7.346]] - , [[-40.399, 54.03, 0], [-39.153, 51.335, 11.081], [-35.747, 43.973, 19.192], [-31.094, 33.917, 22.161], [-26.441, 23.86, 19.192], [-23.035, 16.498, 11.081], [-21.789, 13.804, 0], [-23.035, 16.498, -11.081], [-26.441, 23.86, -19.192], [-31.094, 33.917, -22.161], [-35.747, 43.973, -19.192], [-39.153, 51.335, -11.081], [-37.297, 47.325, 0], [-36.466, 45.529, 7.387], [-34.196, 40.621, 12.795], [-31.094, 33.917, 14.774], [-27.992, 27.212, 12.795], [-25.721, 22.304, 7.387], [-24.89, 20.508, 0], [-25.721, 22.304, -7.387], [-27.992, 27.212, -12.795], [-31.094, 33.917, -14.774], [-34.196, 40.621, -12.795], [-36.466, 45.529, -7.387]] - , [[-41.713, 53.545, 0], [-40.41, 50.859, 11.143], [-36.852, 43.518, 19.3], [-31.991, 33.492, 22.286], [-27.131, 23.465, 19.3], [-23.573, 16.125, 11.143], [-22.27, 13.438, 0], [-23.573, 16.125, -11.143], [-27.131, 23.465, -19.3], [-31.991, 33.492, -22.286], [-36.852, 43.518, -19.3], [-40.41, 50.859, -11.143], [-38.472, 46.861, 0], [-37.604, 45.07, 7.429], [-35.232, 40.176, 12.867], [-31.991, 33.492, 14.857], [-28.751, 26.807, 12.867], [-26.379, 21.914, 7.429], [-25.511, 20.122, 0], [-26.379, 21.914, -7.429], [-28.751, 26.807, -12.867], [-31.991, 33.492, -14.857], [-35.232, 40.176, -12.867], [-37.604, 45.07, -7.429]] - , [[-43.019, 53.036, 0], [-41.661, 50.359, 11.205], [-37.95, 43.043, 19.408], [-32.881, 33.05, 22.41], [-27.812, 23.057, 19.408], [-24.101, 15.742, 11.205], [-22.743, 13.064, 0], [-24.101, 15.742, -11.205], [-27.812, 23.057, -19.408], [-32.881, 33.05, -22.41], [-37.95, 43.043, -19.408], [-41.661, 50.359, -11.205], [-39.64, 46.374, 0], [-38.734, 44.589, 7.47], [-36.26, 39.712, 12.938], [-32.881, 33.05, 14.94], [-29.502, 26.388, 12.938], [-27.028, 21.511, 7.47], [-26.122, 19.726, 0], [-27.028, 21.511, -7.47], [-29.502, 26.388, -12.938], [-32.881, 33.05, -14.94], [-36.26, 39.712, -12.938], [-38.734, 44.589, -7.47]] - , [[-44.318, 52.503, 0], [-42.904, 49.835, 11.267], [-39.04, 42.548, 19.516], [-33.762, 32.593, 22.535], [-28.485, 22.638, 19.516], [-24.621, 15.351, 11.267], [-23.207, 12.684, 0], [-24.621, 15.351, -11.267], [-28.485, 22.638, -19.516], [-33.762, 32.593, -22.535], [-39.04, 42.548, -19.516], [-42.904, 49.835, -11.267], [-40.799, 45.866, 0], [-39.857, 44.088, 7.512], [-37.281, 39.23, 13.01], [-33.762, 32.593, 15.023], [-30.244, 25.957, 13.01], [-27.668, 21.098, 7.512], [-26.726, 19.32, 0], [-27.668, 21.098, -7.512], [-30.244, 25.957, -13.01], [-33.762, 32.593, -15.023], [-37.281, 39.23, -13.01], [-39.857, 44.088, -7.512]] - , [[-45.609, 51.945, 0], [-44.139, 49.289, 11.329], [-40.122, 42.032, 19.623], [-34.636, 32.12, 22.659], [-29.149, 22.208, 19.623], [-25.132, 14.952, 11.329], [-23.662, 12.296, 0], [-25.132, 14.952, -11.329], [-29.149, 22.208, -19.623], [-34.636, 32.12, -22.659], [-40.122, 42.032, -19.623], [-44.139, 49.289, -11.329], [-41.951, 45.337, 0], [-40.971, 43.566, 7.553], [-38.293, 38.728, 13.082], [-34.636, 32.12, 15.106], [-30.978, 25.512, 13.082], [-28.3, 20.674, 7.553], [-27.32, 18.904, 0], [-28.3, 20.674, -7.553], [-30.978, 25.512, -13.082], [-34.636, 32.12, -15.106], [-38.293, 38.728, -13.082], [-40.971, 43.566, -7.553]] - , [[-46.892, 51.362, 0], [-45.366, 48.719, 11.392], [-41.196, 41.497, 19.731], [-35.5, 31.631, 22.783], [-29.804, 21.766, 19.731], [-25.634, 14.544, 11.392], [-24.108, 11.9, 0], [-25.634, 14.544, -11.392], [-29.804, 21.766, -19.731], [-35.5, 31.631, -22.783], [-41.196, 41.497, -19.731], [-45.366, 48.719, -11.392], [-43.094, 44.785, 0], [-42.077, 43.023, 7.594], [-39.297, 38.208, 13.154], [-35.5, 31.631, 15.189], [-31.703, 25.054, 13.154], [-28.923, 20.24, 7.594], [-27.906, 18.477, 0], [-28.923, 20.24, -7.594], [-31.703, 25.054, -13.154], [-35.5, 31.631, -15.189], [-39.297, 38.208, -13.154], [-42.077, 43.023, -7.594]] - , [[-48.166, 50.756, 0], [-46.583, 48.126, 11.454], [-42.261, 40.942, 19.839], [-36.355, 31.127, 22.908], [-30.45, 21.313, 19.839], [-26.128, 14.128, 11.454], [-24.545, 11.498, 0], [-26.128, 14.128, -11.454], [-30.45, 21.313, -19.839], [-36.355, 31.127, -22.908], [-42.261, 40.942, -19.839], [-46.583, 48.126, -11.454], [-44.229, 44.213, 0], [-43.174, 42.46, 7.636], [-40.292, 37.67, 13.226], [-36.355, 31.127, 15.272], [-32.419, 24.584, 13.226], [-29.537, 19.794, 7.636], [-28.482, 18.041, 0], [-29.537, 19.794, -7.636], [-32.419, 24.584, -13.226], [-36.355, 31.127, -15.272], [-40.292, 37.67, -13.226], [-43.174, 42.46, -7.636]] - , [[-49.43, 50.125, 0], [-47.792, 47.51, 11.516], [-43.316, 40.366, 19.947], [-37.202, 30.608, 23.032], [-31.087, 20.849, 19.947], [-26.611, 13.705, 11.516], [-24.973, 11.09, 0], [-26.611, 13.705, -11.516], [-31.087, 20.849, -19.947], [-37.202, 30.608, -23.032], [-43.316, 40.366, -19.947], [-47.792, 47.51, -11.516], [-45.354, 43.619, 0], [-44.262, 41.876, 7.677], [-41.278, 37.113, 13.298], [-37.202, 30.608, 15.355], [-33.125, 24.102, 13.298], [-30.141, 19.339, 7.677], [-29.049, 17.596, 0], [-30.141, 19.339, -7.677], [-33.125, 24.102, -13.298], [-37.202, 30.608, -15.355], [-41.278, 37.113, -13.298], [-44.262, 41.876, -7.677]] - , [[-50.685, 49.471, 0], [-48.991, 46.872, 11.578], [-44.362, 39.772, 20.054], [-38.038, 30.073, 23.157], [-31.715, 20.374, 20.054], [-27.086, 13.274, 11.578], [-25.391, 10.675, 0], [-27.086, 13.274, -11.578], [-31.715, 20.374, -20.054], [-38.038, 30.073, -23.157], [-44.362, 39.772, -20.054], [-48.991, 46.872, -11.578], [-46.47, 43.005, 0], [-45.34, 41.272, 7.719], [-42.254, 36.539, 13.37], [-38.038, 30.073, 15.438], [-33.823, 23.607, 13.37], [-30.737, 18.873, 7.719], [-29.607, 17.141, 0], [-30.737, 18.873, -7.719], [-33.823, 23.607, -13.37], [-38.038, 30.073, -15.438], [-42.254, 36.539, -13.37], [-45.34, 41.272, -7.719]] - , [[-51.93, 48.792, 0], [-50.18, 46.211, 11.641], [-45.398, 39.158, 20.162], [-38.865, 29.523, 23.281], [-32.333, 19.888, 20.162], [-27.551, 12.835, 11.641], [-25.8, 10.253, 0], [-27.551, 12.835, -11.641], [-32.333, 19.888, -20.162], [-38.865, 29.523, -23.281], [-45.398, 39.158, -20.162], [-50.18, 46.211, -11.641], [-47.575, 42.369, 0], [-46.408, 40.648, 7.76], [-43.22, 35.946, 13.441], [-38.865, 29.523, 15.521], [-34.51, 23.1, 13.441], [-31.322, 18.398, 7.76], [-30.155, 16.677, 0], [-31.322, 18.398, -7.76], [-34.51, 23.1, -13.441], [-38.865, 29.523, -15.521], [-43.22, 35.946, -13.441], [-46.408, 40.648, -7.76]] - , [[-53.165, 48.09, 0], [-51.358, 45.527, 11.703], [-46.423, 38.524, 20.27], [-39.682, 28.958, 23.406], [-32.941, 19.392, 20.27], [-28.006, 12.389, 11.703], [-26.2, 9.826, 0], [-28.006, 12.389, -11.703], [-32.941, 19.392, -20.27], [-39.682, 28.958, -23.406], [-46.423, 38.524, -20.27], [-51.358, 45.527, -11.703], [-48.67, 41.713, 0], [-47.466, 40.004, 7.802], [-44.176, 35.336, 13.513], [-39.682, 28.958, 15.604], [-35.188, 22.581, 13.513], [-31.898, 17.912, 7.802], [-30.694, 16.203, 0], [-31.898, 17.912, -7.802], [-35.188, 22.581, -13.513], [-39.682, 28.958, -15.604], [-44.176, 35.336, -13.513], [-47.466, 40.004, -7.802]] - , [[-54.388, 47.365, 0], [-52.526, 44.821, 11.765], [-47.438, 37.872, 20.378], [-40.489, 28.379, 23.53], [-33.539, 18.886, 20.378], [-28.452, 11.936, 11.765], [-26.589, 9.393, 0], [-28.452, 11.936, -11.765], [-33.539, 18.886, -20.378], [-40.489, 28.379, -23.53], [-47.438, 37.872, -20.378], [-52.526, 44.821, -11.765], [-49.755, 41.036, 0], [-48.513, 39.341, 7.843], [-45.122, 34.708, 13.585], [-40.489, 28.379, 15.687], [-35.856, 22.05, 13.585], [-32.464, 17.417, 7.843], [-31.223, 15.722, 0], [-32.464, 17.417, -7.843], [-35.856, 22.05, -13.585], [-40.489, 28.379, -15.687], [-45.122, 34.708, -13.585], [-48.513, 39.341, -7.843]] - , [[-55.6, 46.616, 0], [-53.682, 44.093, 11.827], [-48.442, 37.201, 20.485], [-41.285, 27.785, 23.654], [-34.127, 18.37, 20.485], [-28.887, 11.477, 11.827], [-26.97, 8.954, 0], [-28.887, 11.477, -11.827], [-34.127, 18.37, -20.485], [-41.285, 27.785, -23.654], [-48.442, 37.201, -20.485], [-53.682, 44.093, -11.827], [-50.828, 40.339, 0], [-49.549, 38.657, 7.885], [-46.056, 34.062, 13.657], [-41.285, 27.785, 15.77], [-36.513, 21.508, 13.657], [-33.02, 16.913, 7.885], [-31.741, 15.231, 0], [-33.02, 16.913, -7.885], [-36.513, 21.508, -13.657], [-41.285, 27.785, -15.77], [-46.056, 34.062, -13.657], [-49.549, 38.657, -7.885]] - , [[-56.799, 45.844, 0], [-54.826, 43.343, 11.889], [-49.435, 36.511, 20.593], [-42.07, 27.177, 23.779], [-34.705, 17.843, 20.593], [-29.313, 11.011, 11.889], [-27.34, 8.51, 0], [-29.313, 11.011, -11.889], [-34.705, 17.843, -20.593], [-42.07, 27.177, -23.779], [-49.435, 36.511, -20.593], [-54.826, 43.343, -11.889], [-51.889, 39.622, 0], [-50.574, 37.955, 7.926], [-46.98, 33.399, 13.729], [-42.07, 27.177, 15.853], [-37.16, 20.955, 13.729], [-33.565, 16.4, 7.926], [-32.25, 14.732, 0], [-33.565, 16.4, -7.926], [-37.16, 20.955, -13.729], [-42.07, 27.177, -15.853], [-46.98, 33.399, -13.729], [-50.574, 37.955, -7.926]] - , [[-57.987, 45.049, 0], [-55.958, 42.572, 11.952], [-50.415, 35.802, 20.701], [-42.844, 26.555, 23.903], [-35.272, 17.308, 20.701], [-29.729, 10.538, 11.952], [-27.7, 8.06, 0], [-29.729, 10.538, -11.952], [-35.272, 17.308, -20.701], [-42.844, 26.555, -23.903], [-50.415, 35.802, -20.701], [-55.958, 42.572, -11.952], [-52.939, 38.885, 0], [-51.587, 37.233, 7.968], [-47.891, 32.72, 13.801], [-42.844, 26.555, 15.935], [-37.796, 20.39, 13.801], [-34.101, 15.877, 7.968], [-32.748, 14.225, 0], [-34.101, 15.877, -7.968], [-37.796, 20.39, -13.801], [-42.844, 26.555, -15.935], [-47.891, 32.72, -13.801], [-51.587, 37.233, -7.968]] - , [[-59.161, 44.232, 0], [-57.077, 41.778, 12.014], [-51.384, 35.075, 20.809], [-43.606, 25.919, 24.028], [-35.829, 16.762, 20.809], [-30.135, 10.059, 12.014], [-28.051, 7.606, 0], [-30.135, 10.059, -12.014], [-35.829, 16.762, -20.809], [-43.606, 25.919, -24.028], [-51.384, 35.075, -20.809], [-57.077, 41.778, -12.014], [-53.976, 38.128, 0], [-52.587, 36.492, 8.009], [-48.791, 32.023, 13.872], [-43.606, 25.919, 16.018], [-38.421, 19.815, 13.872], [-34.625, 15.346, 8.009], [-33.236, 13.71, 0], [-34.625, 15.346, -8.009], [-38.421, 19.815, -13.872], [-43.606, 25.919, -16.018], [-48.791, 32.023, -13.872], [-52.587, 36.492, -8.009]] - , [[-60.323, 43.392, 0], [-58.184, 40.964, 12.076], [-52.34, 34.33, 20.916], [-44.357, 25.269, 24.152], [-36.374, 16.208, 20.916], [-30.531, 9.575, 12.076], [-28.392, 7.147, 0], [-30.531, 9.575, -12.076], [-36.374, 16.208, -20.916], [-44.357, 25.269, -24.152], [-52.34, 34.33, -20.916], [-58.184, 40.964, -12.076], [-55.001, 37.351, 0], [-53.575, 35.732, 8.051], [-49.679, 31.31, 13.944], [-44.357, 25.269, 16.101], [-39.035, 19.228, 13.944], [-35.14, 14.806, 8.051], [-33.714, 13.188, 0], [-35.14, 14.806, -8.051], [-39.035, 19.228, -13.944], [-44.357, 25.269, -16.101], [-49.679, 31.31, -13.944], [-53.575, 35.732, -8.051]] - , [[-61.47, 42.529, 0], [-59.277, 40.128, 12.138], [-53.283, 33.568, 21.024], [-45.096, 24.606, 24.276], [-36.909, 15.645, 21.024], [-30.916, 9.084, 12.138], [-28.722, 6.683, 0], [-30.916, 9.084, -12.138], [-36.909, 15.645, -21.024], [-45.096, 24.606, -24.276], [-53.283, 33.568, -21.024], [-59.277, 40.128, -12.138], [-56.012, 36.555, 0], [-54.55, 34.954, 8.092], [-50.554, 30.581, 14.016], [-45.096, 24.606, 16.184], [-39.638, 18.632, 14.016], [-35.643, 14.258, 8.092], [-34.18, 12.657, 0], [-35.643, 14.258, -8.092], [-39.638, 18.632, -14.016], [-45.096, 24.606, -16.184], [-50.554, 30.581, -14.016], [-54.55, 34.954, -8.092]] - , [[-62.604, 41.645, 0], [-60.356, 39.271, 12.2], [-54.214, 32.787, 21.132], [-45.823, 23.93, 24.401], [-37.433, 15.072, 21.132], [-31.291, 8.588, 12.2], [-29.043, 6.215, 0], [-31.291, 8.588, -12.2], [-37.433, 15.072, -21.132], [-45.823, 23.93, -24.401], [-54.214, 32.787, -21.132], [-60.356, 39.271, -12.2], [-57.01, 35.74, 0], [-55.512, 34.157, 8.134], [-51.417, 29.835, 14.088], [-45.823, 23.93, 16.267], [-40.23, 18.025, 14.088], [-36.135, 13.702, 8.134], [-34.636, 12.12, 0], [-36.135, 13.702, -8.134], [-40.23, 18.025, -14.088], [-45.823, 23.93, -16.267], [-51.417, 29.835, -14.088], [-55.512, 34.157, -8.134]] - , [[-63.723, 40.738, 0], [-61.421, 38.394, 12.263], [-55.131, 31.989, 21.24], [-46.538, 23.24, 24.525], [-37.946, 14.491, 21.24], [-31.656, 8.087, 12.263], [-29.353, 5.742, 0], [-31.656, 8.087, -12.263], [-37.946, 14.491, -21.24], [-46.538, 23.24, -24.525], [-55.131, 31.989, -21.24], [-61.421, 38.394, -12.263], [-57.995, 34.906, 0], [-56.46, 33.343, 8.175], [-52.266, 29.073, 14.16], [-46.538, 23.24, 16.35], [-40.81, 17.408, 14.16], [-36.617, 13.138, 8.175], [-35.082, 11.575, 0], [-36.617, 13.138, -8.175], [-40.81, 17.408, -14.16], [-46.538, 23.24, -16.35], [-52.266, 29.073, -14.16], [-56.46, 33.343, -8.175]] - , [[-64.827, 39.81, 0], [-62.471, 37.496, 12.325], [-56.034, 31.174, 21.347], [-47.24, 22.538, 24.65], [-38.447, 13.902, 21.347], [-32.01, 7.58, 12.325], [-29.654, 5.266, 0], [-32.01, 7.58, -12.325], [-38.447, 13.902, -21.347], [-47.24, 22.538, -24.65], [-56.034, 31.174, -21.347], [-62.471, 37.496, -12.325], [-58.965, 34.053, 0], [-57.394, 32.51, 8.217], [-53.103, 28.296, 14.232], [-47.24, 22.538, 16.433], [-41.378, 16.781, 14.232], [-37.087, 12.566, 8.217], [-35.516, 11.024, 0], [-37.087, 12.566, -8.217], [-41.378, 16.781, -14.232], [-47.24, 22.538, -16.433], [-53.103, 28.296, -14.232], [-57.394, 32.51, -8.217]] - , [[-65.916, 38.861, 0], [-63.506, 36.578, 12.387], [-56.923, 30.342, 21.455], [-47.93, 21.823, 24.774], [-38.937, 13.305, 21.455], [-32.353, 7.069, 12.387], [-29.944, 4.786, 0], [-32.353, 7.069, -12.387], [-38.937, 13.305, -21.455], [-47.93, 21.823, -24.774], [-56.923, 30.342, -21.455], [-63.506, 36.578, -12.387], [-59.92, 33.182, 0], [-58.314, 31.66, 8.258], [-53.925, 27.503, 14.303], [-47.93, 21.823, 16.516], [-41.934, 16.144, 14.303], [-37.546, 11.987, 8.258], [-35.939, 10.465, 0], [-37.546, 11.987, -8.258], [-41.934, 16.144, -14.303], [-47.93, 21.823, -16.516], [-53.925, 27.503, -14.303], [-58.314, 31.66, -8.258]] - , [[-66.989, 37.89, 0], [-64.526, 35.64, 12.449], [-57.797, 29.493, 21.563], [-48.606, 21.096, 24.899], [-39.415, 12.7, 21.563], [-32.686, 6.553, 12.449], [-30.224, 4.303, 0], [-32.686, 6.553, -12.449], [-39.415, 12.7, -21.563], [-48.606, 21.096, -24.899], [-57.797, 29.493, -21.563], [-64.526, 35.64, -12.449], [-60.861, 32.292, 0], [-59.219, 30.792, 8.3], [-54.734, 26.694, 14.375], [-48.606, 21.096, 16.599], [-42.479, 15.499, 14.375], [-37.993, 11.401, 8.3], [-36.351, 9.901, 0], [-37.993, 11.401, -8.3], [-42.479, 15.499, -14.375], [-48.606, 21.096, -16.599], [-54.734, 26.694, -14.375], [-59.219, 30.792, -8.3]] - , [[-68.045, 36.899, 0], [-65.53, 34.682, 12.512], [-58.657, 28.628, 21.671], [-49.269, 20.357, 25.023], [-39.881, 12.087, 21.671], [-33.009, 6.032, 12.512], [-30.493, 3.816, 0], [-33.009, 6.032, -12.512], [-39.881, 12.087, -21.671], [-49.269, 20.357, -25.023], [-58.657, 28.628, -21.671], [-65.53, 34.682, -12.512], [-61.787, 31.385, 0], [-60.11, 29.907, 8.341], [-55.528, 25.871, 14.447], [-49.269, 20.357, 16.682], [-43.011, 14.844, 14.447], [-38.429, 10.807, 8.341], [-36.752, 9.33, 0], [-38.429, 10.807, -8.341], [-43.011, 14.844, -14.447], [-49.269, 20.357, -16.682], [-55.528, 25.871, -14.447], [-60.11, 29.907, -8.341]] - , [[-69.085, 35.886, 0], [-66.518, 33.705, 12.574], [-59.502, 27.746, 21.778], [-49.919, 19.606, 25.147], [-40.336, 11.466, 21.778], [-33.32, 5.507, 12.574], [-30.752, 3.326, 0], [-33.32, 5.507, -12.574], [-40.336, 11.466, -21.778], [-49.919, 19.606, -25.147], [-59.502, 27.746, -21.778], [-66.518, 33.705, -12.574], [-62.697, 30.46, 0], [-60.985, 29.006, 8.382], [-56.308, 25.033, 14.519], [-49.919, 19.606, 16.765], [-43.53, 14.18, 14.519], [-38.853, 10.207, 8.382], [-37.141, 8.753, 0], [-38.853, 10.207, -8.382], [-43.53, 14.18, -14.519], [-49.919, 19.606, -16.765], [-56.308, 25.033, -14.519], [-60.985, 29.006, -8.382]] - , [[-70.108, 34.854, 0], [-67.489, 32.709, 12.636], [-60.332, 26.849, 21.886], [-50.555, 18.844, 25.272], [-40.778, 10.839, 21.886], [-33.621, 4.978, 12.636], [-31.001, 2.833, 0], [-33.621, 4.978, -12.636], [-40.778, 10.839, -21.886], [-50.555, 18.844, -25.272], [-60.332, 26.849, -21.886], [-67.489, 32.709, -12.636], [-63.591, 29.517, 0], [-61.844, 28.087, 8.424], [-57.073, 24.18, 14.591], [-50.555, 18.844, 16.848], [-44.037, 13.507, 14.591], [-39.266, 9.6, 8.424], [-37.519, 8.17, 0], [-39.266, 9.6, -8.424], [-44.037, 13.507, -14.591], [-50.555, 18.844, -16.848], [-57.073, 24.18, -14.591], [-61.844, 28.087, -8.424]] - , [[-71.114, 33.801, 0], [-68.443, 31.694, 12.698], [-61.146, 25.936, 21.994], [-51.177, 18.07, 25.396], [-41.209, 10.204, 21.994], [-33.911, 4.446, 12.698], [-31.24, 2.338, 0], [-33.911, 4.446, -12.698], [-41.209, 10.204, -21.994], [-51.177, 18.07, -25.396], [-61.146, 25.936, -21.994], [-68.443, 31.694, -12.698], [-64.468, 28.557, 0], [-62.688, 27.152, 8.465], [-57.823, 23.314, 14.663], [-51.177, 18.07, 16.931], [-44.531, 12.826, 14.663], [-39.666, 8.987, 8.465], [-37.886, 7.582, 0], [-39.666, 8.987, -8.465], [-44.531, 12.826, -14.663], [-51.177, 18.07, -16.931], [-57.823, 23.314, -14.663], [-62.688, 27.152, -8.465]] - , [[-72.102, 32.729, 0], [-69.38, 30.66, 12.76], [-61.944, 25.007, 22.102], [-51.785, 17.285, 25.521], [-41.627, 9.562, 22.102], [-34.19, 3.909, 12.76], [-31.468, 1.84, 0], [-34.19, 3.909, -12.76], [-41.627, 9.562, -22.102], [-51.785, 17.285, -25.521], [-61.944, 25.007, -22.102], [-69.38, 30.66, -12.76], [-65.33, 27.581, 0], [-63.515, 26.201, 8.507], [-58.557, 22.433, 14.734], [-51.785, 17.285, 17.014], [-45.013, 12.136, 14.734], [-40.055, 8.368, 8.507], [-38.241, 6.988, 0], [-40.055, 8.368, -8.507], [-45.013, 12.136, -14.734], [-51.785, 17.285, -17.014], [-58.557, 22.433, -14.734], [-63.515, 26.201, -8.507]] - , [[-73.072, 31.637, 0], [-70.299, 29.608, 12.823], [-62.725, 24.063, 22.209], [-52.379, 16.489, 25.645], [-42.033, 8.914, 22.209], [-34.458, 3.37, 12.823], [-31.686, 1.34, 0], [-34.458, 3.37, -12.823], [-42.033, 8.914, -22.209], [-52.379, 16.489, -25.645], [-62.725, 24.063, -22.209], [-70.299, 29.608, -12.823], [-66.174, 26.588, 0], [-64.326, 25.235, 8.548], [-59.277, 21.538, 14.806], [-52.379, 16.489, 17.097], [-45.481, 11.439, 14.806], [-40.432, 7.743, 8.548], [-38.584, 6.39, 0], [-40.432, 7.743, -8.548], [-45.481, 11.439, -14.806], [-52.379, 16.489, -17.097], [-59.277, 21.538, -14.806], [-64.326, 25.235, -8.548]] - , [[-74.023, 30.526, 0], [-71.201, 28.538, 12.885], [-63.491, 23.104, 22.317], [-52.958, 15.682, 25.77], [-42.426, 8.26, 22.317], [-34.716, 2.827, 12.885], [-31.894, 0.838, 0], [-34.716, 2.827, -12.885], [-42.426, 8.26, -22.317], [-52.958, 15.682, -25.77], [-63.491, 23.104, -22.317], [-71.201, 28.538, -12.885], [-67.001, 25.578, 0], [-65.12, 24.252, 8.59], [-59.98, 20.63, 14.878], [-52.958, 15.682, 17.18], [-45.937, 10.734, 14.878], [-40.797, 7.112, 8.59], [-38.915, 5.786, 0], [-40.797, 7.112, -8.59], [-45.937, 10.734, -14.878], [-52.958, 15.682, -17.18], [-59.98, 20.63, -14.878], [-65.12, 24.252, -8.59]] - , [[-74.955, 29.397, 0], [-72.084, 27.45, 12.947], [-64.239, 22.131, 22.425], [-53.523, 14.865, 25.894], [-42.807, 7.6, 22.425], [-34.962, 2.281, 12.947], [-32.091, 0.334, 0], [-34.962, 2.281, -12.947], [-42.807, 7.6, -22.425], [-53.523, 14.865, -25.894], [-64.239, 22.131, -22.425], [-72.084, 27.45, -12.947], [-67.811, 24.553, 0], [-65.897, 23.255, 8.631], [-60.667, 19.709, 14.95], [-53.523, 14.865, 17.263], [-46.379, 10.021, 14.95], [-41.149, 6.476, 8.631], [-39.235, 5.178, 0], [-41.149, 6.476, -8.631], [-46.379, 10.021, -14.95], [-53.523, 14.865, -17.263], [-60.667, 19.709, -14.95], [-65.897, 23.255, -8.631]] - , [[-75.868, 28.248, 0], [-72.948, 26.345, 13.009], [-64.97, 21.143, 22.533], [-54.073, 14.038, 26.018], [-43.175, 6.933, 22.533], [-35.197, 1.732, 13.009], [-32.277, -0.172, 0], [-35.197, 1.732, -13.009], [-43.175, 6.933, -22.533], [-54.073, 14.038, -26.018], [-64.97, 21.143, -22.533], [-72.948, 26.345, -13.009], [-68.603, 23.512, 0], [-66.656, 22.243, 8.673], [-61.338, 18.775, 15.022], [-54.073, 14.038, 17.346], [-46.808, 9.302, 15.022], [-41.489, 5.834, 8.673], [-39.543, 4.565, 0], [-41.489, 5.834, -8.673], [-46.808, 9.302, -15.022], [-54.073, 14.038, -17.346], [-61.338, 18.775, -15.022], [-66.656, 22.243, -8.673]] - , [[-76.761, 27.082, 0], [-73.793, 25.222, 13.071], [-65.684, 20.142, 22.64], [-54.608, 13.202, 26.143], [-43.531, 6.262, 22.64], [-35.422, 1.181, 13.071], [-32.454, -0.679, 0], [-35.422, 1.181, -13.071], [-43.531, 6.262, -22.64], [-54.608, 13.202, -26.143], [-65.684, 20.142, -22.64], [-73.793, 25.222, -13.071], [-69.377, 22.455, 0], [-67.398, 21.215, 8.714], [-61.992, 17.828, 15.094], [-54.608, 13.202, 17.429], [-47.223, 8.575, 15.094], [-41.817, 5.188, 8.714], [-39.838, 3.948, 0], [-41.817, 5.188, -8.714], [-47.223, 8.575, -15.094], [-54.608, 13.202, -17.429], [-61.992, 17.828, -15.094], [-67.398, 21.215, -8.714]] - , [[-77.634, 25.898, 0], [-74.619, 24.083, 13.134], [-66.381, 19.127, 22.748], [-55.127, 12.355, 26.267], [-43.873, 5.584, 22.748], [-35.635, 0.628, 13.134], [-32.62, -1.187, 0], [-35.635, 0.628, -13.134], [-43.873, 5.584, -22.748], [-55.127, 12.355, -26.267], [-66.381, 19.127, -22.748], [-74.619, 24.083, -13.134], [-70.132, 21.384, 0], [-68.122, 20.174, 8.756], [-62.63, 16.87, 15.165], [-55.127, 12.355, 17.512], [-47.625, 7.841, 15.165], [-42.133, 4.537, 8.756], [-40.122, 3.327, 0], [-42.133, 4.537, -8.756], [-47.625, 7.841, -15.165], [-55.127, 12.355, -17.512], [-62.63, 16.87, -15.165], [-68.122, 20.174, -8.756]] - , [[-78.487, 24.696, 0], [-75.425, 22.928, 13.196], [-67.059, 18.098, 22.856], [-55.631, 11.5, 26.392], [-44.203, 4.902, 22.856], [-35.838, 0.072, 13.196], [-32.776, -1.696, 0], [-35.838, 0.072, -13.196], [-44.203, 4.902, -22.856], [-55.631, 11.5, -26.392], [-67.059, 18.098, -22.856], [-75.425, 22.928, -13.196], [-70.869, 20.297, 0], [-68.827, 19.119, 8.797], [-63.25, 15.899, 15.237], [-55.631, 11.5, 17.594], [-48.013, 7.101, 15.237], [-42.436, 3.881, 8.797], [-40.394, 2.703, 0], [-42.436, 3.881, -8.797], [-48.013, 7.101, -15.237], [-55.631, 11.5, -17.594], [-63.25, 15.899, -15.237], [-68.827, 19.119, -8.797]] - , [[-79.319, 23.477, 0], [-76.211, 21.756, 13.258], [-67.72, 17.056, 22.964], [-56.12, 10.636, 26.516], [-44.52, 4.215, 22.964], [-36.029, -0.485, 13.258], [-32.921, -2.206, 0], [-36.029, -0.485, -13.258], [-44.52, 4.215, -22.964], [-56.12, 10.636, -26.516], [-67.72, 17.056, -22.964], [-76.211, 21.756, -13.258], [-71.586, 19.196, 0], [-69.514, 18.05, 8.839], [-63.853, 14.916, 15.309], [-56.12, 10.636, 17.677], [-48.387, 6.355, 15.309], [-42.726, 3.222, 8.839], [-40.654, 2.075, 0], [-42.726, 3.222, -8.839], [-48.387, 6.355, -15.309], [-56.12, 10.636, -17.677], [-63.853, 14.916, -15.309], [-69.514, 18.05, -8.839]] - , [[-80.13, 22.241, 0], [-76.977, 20.569, 13.32], [-68.362, 16.002, 23.071], [-56.593, 9.762, 26.641], [-44.825, 3.523, 23.071], [-36.209, -1.044, 13.32], [-33.056, -2.716, 0], [-36.209, -1.044, -13.32], [-44.825, 3.523, -23.071], [-56.593, 9.762, -26.641], [-68.362, 16.002, -23.071], [-76.977, 20.569, -13.32], [-72.285, 18.082, 0], [-70.182, 16.967, 8.88], [-64.439, 13.922, 15.381], [-56.593, 9.762, 17.76], [-48.747, 5.603, 15.381], [-43.004, 2.558, 8.88], [-40.902, 1.443, 0], [-43.004, 2.558, -8.88], [-48.747, 5.603, -15.381], [-56.593, 9.762, -17.76], [-64.439, 13.922, -15.381], [-70.182, 16.967, -8.88]] - , [[-80.92, 20.989, 0], [-77.722, 19.367, 13.382], [-68.985, 14.935, 23.179], [-57.05, 8.881, 26.765], [-45.116, 2.827, 23.179], [-36.379, -1.605, 13.382], [-33.181, -3.227, 0], [-36.379, -1.605, -13.382], [-45.116, 2.827, -23.179], [-57.05, 8.881, -26.765], [-68.985, 14.935, -23.179], [-77.722, 19.367, -13.382], [-72.963, 16.953, 0], [-70.832, 15.871, 8.922], [-65.007, 12.917, 15.453], [-57.05, 8.881, 17.843], [-49.094, 4.845, 15.453], [-43.269, 1.89, 8.922], [-41.137, 0.809, 0], [-43.269, 1.89, -8.922], [-49.094, 4.845, -15.453], [-57.05, 8.881, -17.843], [-65.007, 12.917, -15.453], [-70.832, 15.871, -8.922]] - , [[-81.688, 19.721, 0], [-78.446, 18.149, 13.445], [-69.59, 13.856, 23.287], [-57.492, 7.991, 26.889], [-45.393, 2.127, 23.287], [-36.537, -2.167, 13.445], [-33.295, -3.738, 0], [-36.537, -2.167, -13.445], [-45.393, 2.127, -23.287], [-57.492, 7.991, -26.889], [-69.59, 13.856, -23.287], [-78.446, 18.149, -13.445], [-73.622, 15.811, 0], [-71.461, 14.763, 8.963], [-65.557, 11.901, 15.525], [-57.492, 7.991, 17.926], [-49.426, 4.082, 15.525], [-43.522, 1.219, 8.963], [-41.361, 0.172, 0], [-43.522, 1.219, -8.963], [-49.426, 4.082, -15.525], [-57.492, 7.991, -17.926], [-65.557, 11.901, -15.525], [-71.461, 14.763, -8.963]] - , [[-82.434, 18.437, 0], [-79.149, 16.917, 13.507], [-70.175, 12.765, 23.395], [-57.917, 7.094, 27.014], [-45.658, 1.422, 23.395], [-36.684, -2.729, 13.507], [-33.4, -4.249, 0], [-36.684, -2.729, -13.507], [-45.658, 1.422, -23.395], [-57.917, 7.094, -27.014], [-70.175, 12.765, -23.395], [-79.149, 16.917, -13.507], [-74.261, 14.656, 0], [-72.072, 13.643, 9.005], [-66.089, 10.875, 15.596], [-57.917, 7.094, 18.009], [-49.744, 3.313, 15.596], [-43.762, 0.545, 9.005], [-41.572, -0.468, 0], [-43.762, 0.545, -9.005], [-49.744, 3.313, -15.596], [-57.917, 7.094, -18.009], [-66.089, 10.875, -15.596], [-72.072, 13.643, -9.005]] - , [[-83.157, 17.137, 0], [-79.83, 15.671, 13.569], [-70.741, 11.663, 23.502], [-58.325, 6.189, 27.138], [-45.91, 0.715, 23.502], [-36.821, -3.293, 13.569], [-33.494, -4.76, 0], [-36.821, -3.293, -13.569], [-45.91, 0.715, -23.502], [-58.325, 6.189, -27.138], [-70.741, 11.663, -23.502], [-79.83, 15.671, -13.569], [-74.88, 13.488, 0], [-72.662, 12.51, 9.046], [-66.603, 9.838, 15.668], [-58.325, 6.189, 18.092], [-50.048, 2.539, 15.668], [-43.989, -0.132, 9.046], [-41.771, -1.11, 0], [-43.989, -0.132, -9.046], [-50.048, 2.539, -15.668], [-58.325, 6.189, -18.092], [-66.603, 9.838, -15.668], [-72.662, 12.51, -9.046]] - , [[-83.858, 15.823, 0], [-80.49, 14.41, 13.631], [-71.288, 10.55, 23.61], [-58.718, 5.277, 27.263], [-46.148, 0.003, 23.61], [-36.946, -3.857, 13.631], [-33.578, -5.27, 0], [-36.946, -3.857, -13.631], [-46.148, 0.003, -23.61], [-58.718, 5.277, -27.263], [-71.288, 10.55, -23.61], [-80.49, 14.41, -13.631], [-75.478, 12.308, 0], [-73.232, 11.366, 9.088], [-67.098, 8.792, 15.74], [-58.718, 5.277, 18.175], [-50.338, 1.761, 15.74], [-44.203, -0.812, 9.088], [-41.958, -1.754, 0], [-44.203, -0.812, -9.088], [-50.338, 1.761, -15.74], [-58.718, 5.277, -18.175], [-67.098, 8.792, -15.74], [-73.232, 11.366, -9.088]] - , [[-84.536, 14.495, 0], [-81.127, 13.137, 13.694], [-71.815, 9.426, 23.718], [-59.094, 4.358, 27.387], [-46.373, -0.711, 23.718], [-37.06, -4.421, 13.694], [-33.652, -5.779, 0], [-37.06, -4.421, -13.694], [-46.373, -0.711, -23.718], [-59.094, 4.358, -27.387], [-71.815, 9.426, -23.718], [-81.127, 13.137, -13.694], [-76.055, 11.116, 0], [-73.783, 10.21, 9.129], [-67.574, 7.737, 15.812], [-59.094, 4.358, 18.258], [-50.613, 0.979, 15.812], [-44.405, -1.495, 9.129], [-42.132, -2.4, 0], [-44.405, -1.495, -9.129], [-50.613, 0.979, -15.812], [-59.094, 4.358, -18.258], [-67.574, 7.737, -15.812], [-73.783, 10.21, -9.129]] - , [[-85.19, 13.152, 0], [-81.742, 11.85, 13.756], [-72.322, 8.292, 23.826], [-59.453, 3.432, 27.512], [-46.584, -1.428, 23.826], [-37.164, -4.986, 13.756], [-33.716, -6.288, 0], [-37.164, -4.986, -13.756], [-46.584, -1.428, -23.826], [-59.453, 3.432, -27.512], [-72.322, 8.292, -23.826], [-81.742, 11.85, -13.756], [-76.611, 9.912, 0], [-74.312, 9.044, 9.171], [-68.032, 6.672, 15.884], [-59.453, 3.432, 18.341], [-50.874, 0.192, 15.884], [-44.594, -2.18, 9.171], [-42.295, -3.048, 0], [-44.594, -2.18, -9.171], [-50.874, 0.192, -15.884], [-59.453, 3.432, -18.341], [-68.032, 6.672, -15.884], [-74.312, 9.044, -9.171]] - , [[-85.821, 11.795, 0], [-82.334, 10.55, 13.818], [-72.808, 7.148, 23.933], [-59.795, 2.5, 27.636], [-46.783, -2.148, 23.933], [-37.256, -5.55, 13.818], [-33.77, -6.796, 0], [-37.256, -5.55, -13.818], [-46.783, -2.148, -23.933], [-59.795, 2.5, -27.636], [-72.808, 7.148, -23.933], [-82.334, 10.55, -13.818], [-77.146, 8.697, 0], [-74.821, 7.867, 9.212], [-68.471, 5.598, 15.956], [-59.795, 2.5, 18.424], [-51.12, -0.599, 15.956], [-44.769, -2.867, 9.212], [-42.445, -3.697, 0], [-44.769, -2.867, -9.212], [-51.12, -0.599, -15.956], [-59.795, 2.5, -18.424], [-68.471, 5.598, -15.956], [-74.821, 7.867, -9.212]] - , [[-86.428, 10.426, 0], [-82.904, 9.238, 13.88], [-73.275, 5.994, 24.041], [-60.121, 1.562, 27.76], [-46.967, -2.87, 24.041], [-37.338, -6.115, 13.88], [-33.814, -7.302, 0], [-37.338, -6.115, -13.88], [-46.967, -2.87, -24.041], [-60.121, 1.562, -27.76], [-73.275, 5.994, -24.041], [-82.904, 9.238, -13.88], [-77.659, 7.471, 0], [-75.309, 6.679, 9.253], [-68.89, 4.516, 16.027], [-60.121, 1.562, 18.507], [-51.352, -1.393, 16.027], [-44.932, -3.556, 9.253], [-42.583, -4.348, 0], [-44.932, -3.556, -9.253], [-51.352, -1.393, -16.027], [-60.121, 1.562, -18.507], [-68.89, 4.516, -16.027], [-75.309, 6.679, -9.253]] - , [[-87.011, 9.043, 0], [-83.45, 7.914, 13.942], [-73.72, 4.83, 24.149], [-60.429, 0.618, 27.885], [-47.139, -3.595, 24.149], [-37.409, -6.679, 13.942], [-33.848, -7.807, 0], [-37.409, -6.679, -13.942], [-47.139, -3.595, -24.149], [-60.429, 0.618, -27.885], [-73.72, 4.83, -24.149], [-83.45, 7.914, -13.942], [-78.151, 6.234, 0], [-75.776, 5.482, 9.295], [-69.29, 3.426, 16.099], [-60.429, 0.618, 18.59], [-51.569, -2.191, 16.099], [-45.083, -4.247, 9.295], [-42.708, -4.999, 0], [-45.083, -4.247, -9.295], [-51.569, -2.191, -16.099], [-60.429, 0.618, -18.59], [-69.29, 3.426, -16.099], [-75.776, 5.482, -9.295]] - , [[-87.57, 7.648, 0], [-83.973, 6.579, 14.005], [-74.145, 3.658, 24.257], [-60.721, -0.332, 28.009], [-47.297, -4.321, 24.257], [-37.469, -7.242, 14.005], [-33.872, -8.311, 0], [-37.469, -7.242, -14.005], [-47.297, -4.321, -24.257], [-60.721, -0.332, -28.009], [-74.145, 3.658, -24.257], [-83.973, 6.579, -14.005], [-78.62, 4.988, 0], [-76.222, 4.275, 9.336], [-69.67, 2.328, 16.171], [-60.721, -0.332, 18.673], [-51.771, -2.991, 16.171], [-45.22, -4.938, 9.336], [-42.822, -5.651, 0], [-45.22, -4.938, -9.336], [-51.771, -2.991, -16.171], [-60.721, -0.332, -18.673], [-69.67, 2.328, -16.171], [-76.222, 4.275, -9.336]] - , [[-88.103, 6.241, 0], [-84.472, 5.232, 14.067], [-74.549, 2.477, 24.364], [-60.995, -1.286, 28.134], [-47.441, -5.049, 24.364], [-37.519, -7.804, 14.067], [-33.887, -8.812, 0], [-37.519, -7.804, -14.067], [-47.441, -5.049, -24.364], [-60.995, -1.286, -28.134], [-74.549, 2.477, -24.364], [-84.472, 5.232, -14.067], [-79.067, 3.732, 0], [-76.646, 3.06, 9.378], [-70.031, 1.223, 16.243], [-60.995, -1.286, 18.756], [-51.959, -3.795, 16.243], [-45.344, -5.631, 9.378], [-42.923, -6.304, 0], [-45.344, -5.631, -9.378], [-51.959, -3.795, -16.243], [-60.995, -1.286, -18.756], [-70.031, 1.223, -16.243], [-76.646, 3.06, -9.378]] - , [[-88.612, 4.822, 0], [-84.947, 3.875, 14.129], [-74.932, 1.288, 24.472], [-61.252, -2.245, 28.258], [-47.572, -5.779, 24.472], [-37.558, -8.365, 14.129], [-33.892, -9.312, 0], [-37.558, -8.365, -14.129], [-47.572, -5.779, -24.472], [-61.252, -2.245, -28.258], [-74.932, 1.288, -24.472], [-84.947, 3.875, -14.129], [-79.492, 2.466, 0], [-77.049, 1.835, 9.419], [-70.372, 0.111, 16.315], [-61.252, -2.245, 18.839], [-52.132, -4.601, 16.315], [-45.456, -6.325, 9.419], [-43.012, -6.956, 0], [-45.456, -6.325, -9.419], [-52.132, -4.601, -16.315], [-61.252, -2.245, -18.839], [-70.372, 0.111, -16.315], [-77.049, 1.835, -9.419]] - , [[-89.096, 3.392, 0], [-85.398, 2.508, 14.191], [-75.294, 0.092, 24.58], [-61.492, -3.209, 28.382], [-47.69, -6.509, 24.58], [-37.586, -8.925, 14.191], [-33.888, -9.81, 0], [-37.586, -8.925, -14.191], [-47.69, -6.509, -24.58], [-61.492, -3.209, -28.382], [-75.294, 0.092, -24.58], [-85.398, 2.508, -14.191], [-79.895, 1.192, 0], [-77.429, 0.602, 9.461], [-70.693, -1.009, 16.387], [-61.492, -3.209, 18.922], [-52.29, -5.409, 16.387], [-45.555, -7.02, 9.461], [-43.089, -7.609, 0], [-45.555, -7.02, -9.461], [-52.29, -5.409, -16.387], [-61.492, -3.209, -18.922], [-70.693, -1.009, -16.387], [-77.429, 0.602, -9.461]] - , [[-89.555, 1.952, 0], [-85.825, 1.131, 14.253], [-75.634, -1.113, 24.688], [-61.714, -4.177, 28.507], [-47.794, -7.241, 24.688], [-37.604, -9.484, 14.253], [-33.874, -10.305, 0], [-37.604, -9.484, -14.253], [-47.794, -7.241, -24.688], [-61.714, -4.177, -28.507], [-75.634, -1.113, -24.688], [-85.825, 1.131, -14.253], [-80.274, -0.091, 0], [-77.788, -0.639, 9.502], [-70.994, -2.134, 16.458], [-61.714, -4.177, 19.005], [-52.434, -6.219, 16.458], [-45.64, -7.715, 9.502], [-43.154, -8.262, 0], [-45.64, -7.715, -9.502], [-52.434, -6.219, -16.458], [-61.714, -4.177, -19.005], [-70.994, -2.134, -16.458], [-77.788, -0.639, -9.502]] - , [[-89.987, 0.501, 0], [-86.227, -0.256, 14.316], [-75.953, -2.324, 24.795], [-61.919, -5.148, 28.631], [-47.885, -7.973, 24.795], [-37.611, -10.041, 14.316], [-33.85, -10.797, 0], [-37.611, -10.041, -14.316], [-47.885, -7.973, -24.795], [-61.919, -5.148, -28.631], [-75.953, -2.324, -24.795], [-86.227, -0.256, -14.316], [-80.631, -1.382, 0], [-78.124, -1.887, 9.544], [-71.275, -3.265, 16.53], [-61.919, -5.148, 19.088], [-52.563, -7.031, 16.53], [-45.713, -8.41, 9.544], [-43.206, -8.914, 0], [-45.713, -8.41, -9.544], [-52.563, -7.031, -16.53], [-61.919, -5.148, -19.088], [-71.275, -3.265, -16.53], [-78.124, -1.887, -9.544]] - , [[-90.394, -0.96, 0], [-86.604, -1.652, 14.378], [-76.25, -3.542, 24.903], [-62.106, -6.124, 28.756], [-47.962, -8.705, 24.903], [-37.608, -10.595, 14.378], [-33.818, -11.287, 0], [-37.608, -10.595, -14.378], [-47.962, -8.705, -24.903], [-62.106, -6.124, -28.756], [-76.25, -3.542, -24.903], [-86.604, -1.652, -14.378], [-80.965, -2.681, 0], [-78.438, -3.142, 9.585], [-71.535, -4.402, 16.602], [-62.106, -6.124, 19.171], [-52.677, -7.845, 16.602], [-45.774, -9.105, 9.585], [-43.247, -9.566, 0], [-45.774, -9.105, -9.585], [-52.677, -7.845, -16.602], [-62.106, -6.124, -19.171], [-71.535, -4.402, -16.602], [-78.438, -3.142, -9.585]] - , [[-90.775, -2.43, 0], [-86.957, -3.056, 14.44], [-76.525, -4.766, 25.011], [-62.275, -7.102, 28.88], [-48.026, -9.438, 25.011], [-37.594, -11.148, 14.44], [-33.776, -11.774, 0], [-37.594, -11.148, -14.44], [-48.026, -9.438, -25.011], [-62.275, -7.102, -28.88], [-76.525, -4.766, -25.011], [-86.957, -3.056, -14.44], [-81.275, -3.987, 0], [-78.73, -4.404, 9.627], [-71.775, -5.545, 16.674], [-62.275, -7.102, 19.253], [-52.776, -8.659, 16.674], [-45.821, -9.8, 9.627], [-43.276, -10.217, 0], [-45.821, -9.8, -9.627], [-52.776, -8.659, -16.674], [-62.275, -7.102, -19.253], [-71.775, -5.545, -16.674], [-78.73, -4.404, -9.627]] - , [[-91.13, -3.908, 0], [-87.284, -4.468, 14.502], [-76.779, -5.996, 25.119], [-62.427, -8.083, 29.005], [-48.076, -10.171, 25.119], [-37.57, -11.699, 14.502], [-33.725, -12.258, 0], [-37.57, -11.699, -14.502], [-48.076, -10.171, -25.119], [-62.427, -8.083, -29.005], [-76.779, -5.996, -25.119], [-87.284, -4.468, -14.502], [-81.562, -5.3, 0], [-78.999, -5.673, 9.668], [-71.995, -6.692, 16.746], [-62.427, -8.083, 19.336], [-52.86, -9.475, 16.746], [-45.856, -10.494, 9.668], [-43.292, -10.867, 0], [-45.856, -10.494, -9.668], [-52.86, -9.475, -16.746], [-62.427, -8.083, -19.336], [-71.995, -6.692, -16.746], [-78.999, -5.673, -9.668]] - , [[-91.458, -5.396, 0], [-87.587, -5.887, 14.565], [-77.01, -7.231, 25.226], [-62.561, -9.067, 29.129], [-48.113, -10.903, 25.226], [-37.536, -12.247, 14.565], [-33.665, -12.739, 0], [-37.536, -12.247, -14.565], [-48.113, -10.903, -25.226], [-62.561, -9.067, -29.129], [-77.01, -7.231, -25.226], [-87.587, -5.887, -14.565], [-81.826, -6.619, 0], [-79.245, -6.947, 9.71], [-72.194, -7.843, 16.818], [-62.561, -9.067, 19.419], [-52.929, -10.291, 16.818], [-45.878, -11.187, 9.71], [-43.297, -11.515, 0], [-45.878, -11.187, -9.71], [-52.929, -10.291, -16.818], [-62.561, -9.067, -19.419], [-72.194, -7.843, -16.818], [-79.245, -6.947, -9.71]] - , [[-91.76, -6.891, 0], [-87.863, -7.314, 14.627], [-77.219, -8.472, 25.334], [-62.678, -10.053, 29.253], [-48.137, -11.635, 25.334], [-37.492, -12.793, 14.627], [-33.596, -13.216, 0], [-37.492, -12.793, -14.627], [-48.137, -11.635, -25.334], [-62.678, -10.053, -29.253], [-77.219, -8.472, -25.334], [-87.863, -7.314, -14.627], [-82.066, -7.945, 0], [-79.468, -8.227, 9.751], [-72.372, -8.999, 16.889], [-62.678, -10.053, 19.502], [-52.984, -11.108, 16.889], [-45.887, -11.88, 9.751], [-43.29, -12.162, 0], [-45.887, -11.88, -9.751], [-52.984, -11.108, -16.889], [-62.678, -10.053, -19.502], [-72.372, -8.999, -16.889], [-79.468, -8.227, -9.751]] - , [[-92.034, -8.393, 0], [-88.114, -8.748, 14.689], [-77.405, -9.717, 25.442], [-62.776, -11.042, 29.378], [-48.147, -12.366, 25.442], [-37.438, -13.335, 14.689], [-33.518, -13.69, 0], [-37.438, -13.335, -14.689], [-48.147, -12.366, -25.442], [-62.776, -11.042, -29.378], [-77.405, -9.717, -25.442], [-88.114, -8.748, -14.689], [-82.282, -9.276, 0], [-79.668, -9.512, 9.793], [-72.529, -10.159, 16.961], [-62.776, -11.042, 19.585], [-53.023, -11.924, 16.961], [-45.884, -12.571, 9.793], [-43.271, -12.807, 0], [-45.884, -12.571, -9.793], [-53.023, -11.924, -16.961], [-62.776, -11.042, -19.585], [-72.529, -10.159, -16.961], [-79.668, -9.512, -9.793]] - , [[-92.282, -9.903, 0], [-88.34, -10.188, 14.751], [-77.569, -10.967, 25.55], [-62.857, -12.031, 29.502], [-48.144, -13.096, 25.55], [-37.373, -13.875, 14.751], [-33.431, -14.16, 0], [-37.373, -13.875, -14.751], [-48.144, -13.096, -25.55], [-62.857, -12.031, -29.502], [-77.569, -10.967, -25.55], [-88.34, -10.188, -14.751], [-82.474, -10.612, 0], [-79.845, -10.802, 9.834], [-72.665, -11.322, 17.033], [-62.857, -12.031, 19.668], [-53.048, -12.741, 17.033], [-45.868, -13.26, 9.834], [-43.24, -13.451, 0], [-45.868, -13.26, -9.834], [-53.048, -12.741, -17.033], [-62.857, -12.031, -19.668], [-72.665, -11.322, -17.033], [-79.845, -10.802, -9.834]] - , [[-92.503, -11.418, 0], [-88.539, -11.633, 14.813], [-77.711, -12.22, 25.657], [-62.919, -13.022, 29.627], [-48.128, -13.824, 25.657], [-37.299, -14.411, 14.813], [-33.336, -14.626, 0], [-37.299, -14.411, -14.813], [-48.128, -13.824, -25.657], [-62.919, -13.022, -29.627], [-77.711, -12.22, -25.657], [-88.539, -11.633, -14.813], [-82.642, -11.953, 0], [-79.999, -12.096, 9.876], [-72.78, -12.488, 17.105], [-62.919, -13.022, 19.751], [-53.058, -13.557, 17.105], [-45.839, -13.948, 9.876], [-43.197, -14.092, 0], [-45.839, -13.948, -9.876], [-53.058, -13.557, -17.105], [-62.919, -13.022, -19.751], [-72.78, -12.488, -17.105], [-79.999, -12.096, -9.876]] - , [[-92.696, -12.94, 0], [-88.713, -13.084, 14.876], [-77.83, -13.477, 25.765], [-62.964, -14.014, 29.751], [-48.098, -14.551, 25.765], [-37.216, -14.945, 14.876], [-33.232, -15.088, 0], [-37.216, -14.945, -14.876], [-48.098, -14.551, -25.765], [-62.964, -14.014, -29.751], [-77.83, -13.477, -25.765], [-88.713, -13.084, -14.876], [-82.785, -13.298, 0], [-80.13, -13.394, 9.917], [-72.875, -13.656, 17.177], [-62.964, -14.014, 19.834], [-53.054, -14.372, 17.177], [-45.799, -14.634, 9.917], [-43.143, -14.73, 0], [-45.799, -14.634, -9.917], [-53.054, -14.372, -17.177], [-62.964, -14.014, -19.834], [-72.875, -13.656, -17.177], [-80.13, -13.394, -9.917]] - , [[-92.862, -14.468, 0], [-88.86, -14.54, 14.938], [-77.926, -14.737, 25.873], [-62.991, -15.007, 29.876], [-48.056, -15.277, 25.873], [-37.122, -15.474, 14.938], [-33.12, -15.546, 0], [-37.122, -15.474, -14.938], [-48.056, -15.277, -25.873], [-62.991, -15.007, -29.876], [-77.926, -14.737, -25.873], [-88.86, -14.54, -14.938], [-82.905, -14.647, 0], [-80.237, -14.696, 9.959], [-72.948, -14.827, 17.249], [-62.991, -15.007, 19.917], [-53.034, -15.187, 17.249], [-45.745, -15.318, 9.959], [-43.077, -15.367, 0], [-45.745, -15.318, -9.959], [-53.034, -15.187, -17.249], [-62.991, -15.007, -19.917], [-72.948, -14.827, -17.249], [-80.237, -14.696, -9.959]] - , [[-93, -16, 0], [-88.981, -16, 15], [-78, -16, 25.981], [-63, -16, 30], [-48, -16, 25.981], [-37.019, -16, 15], [-33, -16, 0], [-37.019, -16, -15], [-48, -16, -25.981], [-63, -16, -30], [-78, -16, -25.981], [-88.981, -16, -15], [-83, -16, 0], [-80.321, -16, 10], [-73, -16, 17.321], [-63, -16, 20], [-53, -16, 17.321], [-45.679, -16, 10], [-43, -16, 0], [-45.679, -16, -10], [-53, -16, -17.321], [-63, -16, -20], [-73, -16, -17.321], [-80.321, -16, -10]] - ]; + expected = [[[8, 0, 0], [7.59808, 0, 1.5], [6.5, 0, 2.59808], [5, 0, 3], [3.5, 0, 2.59808], [2.40192, 0, 1.5], [2, 0, 0], [2.40192, 0, -1.5], [3.5, 0, -2.59808], [5, 0, -3], [6.5, 0, -2.59808], [7.59808, 0, -1.5], [7, 0, 0], [6.73205, 0, 1], [6, 0, 1.73205], [5, 0, 2], [4, 0, 1.73205], [3.26795, 0, 1], [3, 0, 0], [3.26795, 0, -1], [4, 0, -1.73205], [5, 0, -2], [6, 0, -1.73205], [6.73205, 0, -1]], [[7.96832, 1.585, 0], [7.55777, 1.50333, 1.56221], [6.43612, 1.28022, 2.70583], [4.90393, 0.975452, 3.12442], [3.37173, 0.670679, 2.70583], [2.25009, 0.44757, 1.56221], [1.83954, 0.365907, 0], [2.25009, 0.44757, -1.56221], [3.37173, 0.670679, -2.70583], [4.90393, 0.975452, -3.12442], [6.43612, 1.28022, -2.70583], [7.55777, 1.50333, -1.56221], [6.94685, 1.38181, 0], [6.67315, 1.32737, 1.04147], [5.92539, 1.17863, 1.80389], [4.90393, 0.975452, 2.08295], [3.88246, 0.77227, 1.80389], [3.1347, 0.623531, 1.04147], [2.861, 0.569088, 0], [3.1347, 0.623531, -1.04147], [3.88246, 0.77227, -1.80389], [4.90393, 0.975452, -2.08295], [5.92539, 1.17863, -1.80389], [6.67315, 1.32737, -1.04147]], [[7.62094, 3.1567, 0], [7.21881, 2.99013, 1.62442], [6.12017, 2.53506, 2.81358], [4.6194, 1.91342, 3.24885], [3.11863, 1.29178, 2.81358], [2.01998, 0.836705, 1.62442], [1.61785, 0.670137, 0], [2.01998, 0.836705, -1.62442], [3.11863, 1.29178, -2.81358], [4.6194, 1.91342, -3.24885], [6.12017, 2.53506, -2.81358], [7.21881, 2.99013, -1.62442], [6.62043, 2.74227, 0], [6.35234, 2.63123, 1.08295], [5.61991, 2.32784, 1.87572], [4.6194, 1.91342, 2.1659], [3.61888, 1.49899, 1.87572], [2.88646, 1.19561, 1.08295], [2.61837, 1.08456, 0], [2.88646, 1.19561, -1.08295], [3.61888, 1.49899, -1.87572], [4.6194, 1.91342, -2.1659], [5.61991, 2.32784, -1.87572], [6.35234, 2.63123, -1.08295]], [[6.96212, 4.65194, 0], [6.58635, 4.40086, 1.68664], [5.55973, 3.7149, 2.92134], [4.15735, 2.77785, 3.37327], [2.75496, 1.84081, 2.92134], [1.72834, 1.15484, 1.68664], [1.35257, 0.903762, 0], [1.72834, 1.15484, -1.68664], [2.75496, 1.84081, -2.92134], [4.15735, 2.77785, -3.37327], [5.55973, 3.7149, -2.92134], [6.58635, 4.40086, -1.68664], [6.0272, 4.02724, 0], [5.77668, 3.85986, 1.12442], [5.09227, 3.40255, 1.94756], [4.15735, 2.77785, 2.24885], [3.22242, 2.15315, 1.94756], [2.53801, 1.69585, 1.12442], [2.2875, 1.52846, 0], [2.53801, 1.69585, -1.12442], [3.22242, 2.15315, -1.94756], [4.15735, 2.77785, -2.24885], [5.09227, 3.40255, -1.94756], [5.77668, 3.85986, -1.12442]], [[6.00878, 6.00878, 0], [5.67743, 5.67743, 1.74885], [4.77216, 4.77216, 3.02909], [3.53553, 3.53553, 3.4977], [2.29891, 2.29891, 3.02909], [1.39364, 1.39364, 1.74885], [1.06229, 1.06229, 0], [1.39364, 1.39364, -1.74885], [2.29891, 2.29891, -3.02909], [3.53553, 3.53553, -3.4977], [4.77216, 4.77216, -3.02909], [5.67743, 5.67743, -1.74885], [5.18436, 5.18436, 0], [4.96346, 4.96346, 1.1659], [4.35995, 4.35995, 2.0194], [3.53553, 3.53553, 2.3318], [2.71112, 2.71112, 2.0194], [2.10761, 2.10761, 1.1659], [1.8867, 1.8867, 0], [2.10761, 2.10761, -1.1659], [2.71112, 2.71112, -2.0194], [3.53553, 3.53553, -2.3318], [4.35995, 4.35995, -2.0194], [4.96346, 4.96346, -1.1659]], [[4.79019, 7.16903, 0], [4.52059, 6.76554, 1.81106], [3.78402, 5.66319, 3.13685], [2.77785, 4.15735, 3.62212], [1.77168, 2.65151, 3.13685], [1.03511, 1.54915, 1.81106], [0.765509, 1.14567, 0], [1.03511, 1.54915, -1.81106], [1.77168, 2.65151, -3.13685], [2.77785, 4.15735, -3.62212], [3.78402, 5.66319, -3.13685], [4.52059, 6.76554, -1.81106], [4.11941, 6.16514, 0], [3.93968, 5.89614, 1.20737], [3.44863, 5.16124, 2.09123], [2.77785, 4.15735, 2.41475], [2.10707, 3.15345, 2.09123], [1.61602, 2.41855, 1.20737], [1.43629, 2.14956, 0], [1.61602, 2.41855, -1.20737], [2.10707, 3.15345, -2.09123], [2.77785, 4.15735, -2.41475], [3.44863, 5.16124, -2.09123], [3.93968, 5.89614, -1.20737]], [[3.34716, 8.08075, 0], [3.15507, 7.61702, 1.87327], [2.63029, 6.35008, 3.2446], [1.91342, 4.6194, 3.74654], [1.19655, 2.88872, 3.2446], [0.671762, 1.62178, 1.87327], [0.479677, 1.15804, 0], [0.671762, 1.62178, -1.87327], [1.19655, 2.88872, -3.2446], [1.91342, 4.6194, -3.74654], [2.63029, 6.35008, -3.2446], [3.15507, 7.61702, -1.87327], [2.86924, 6.92697, 0], [2.74119, 6.61781, 1.24885], [2.39133, 5.77318, 2.16307], [1.91342, 4.6194, 2.4977], [1.4355, 3.46561, 2.16307], [1.08565, 2.62098, 1.24885], [0.95759, 2.31183, 0], [1.08565, 2.62098, -1.24885], [1.4355, 3.46561, -2.16307], [1.91342, 4.6194, -2.4977], [2.39133, 5.77318, -2.16307], [2.74119, 6.61781, -1.24885]], [[1.73064, 8.70051, 0], [1.62946, 8.19187, 1.93548], [1.35305, 6.80222, 3.35236], [0.975452, 4.90393, 3.87097], [0.597857, 3.00563, 3.35236], [0.321439, 1.61598, 1.93548], [0.220263, 1.10734, 0], [0.321439, 1.61598, -1.93548], [0.597857, 3.00563, -3.35236], [0.975452, 4.90393, -3.87097], [1.35305, 6.80222, -3.35236], [1.62946, 8.19187, -1.93548], [1.47891, 7.43499, 0], [1.41146, 7.09589, 1.29032], [1.22718, 6.16946, 2.2349], [0.975452, 4.90393, 2.58065], [0.723722, 3.6384, 2.2349], [0.539443, 2.71197, 1.29032], [0.471993, 2.37287, 0], [0.539443, 2.71197, -1.29032], [0.723722, 3.6384, -2.2349], [0.975452, 4.90393, -2.58065], [1.22718, 6.16946, -2.2349], [1.41146, 7.09589, -1.29032]], [[0, 8.99539, 0], [0, 8.46011, 1.9977], [0, 6.9977, 3.46011], [0, 5, 3.99539], [0, 3.0023, 3.46011], [0, 1.53989, 1.9977], [0, 1.00461, 0], [0, 1.53989, -1.9977], [0, 3.0023, -3.46011], [0, 5, -3.99539], [0, 6.9977, -3.46011], [0, 8.46011, -1.9977], [0, 7.66359, 0], [0, 7.30674, 1.3318], [0, 6.3318, 2.30674], [0, 5, 2.66359], [0, 3.6682, 2.30674], [0, 2.69326, 1.3318], [0, 2.33641, 0], [0, 2.69326, -1.3318], [0, 3.6682, -2.30674], [0, 5, -2.66359], [0, 6.3318, -2.30674], [0, 7.30674, -1.3318]], [[-1.46088, 9.03145, 0], [-1.39435, 8.48352, 2.05991], [-1.21259, 6.98656, 3.56787], [-0.964293, 4.94167, 4.11982], [-0.715999, 2.89678, 3.56787], [-0.534235, 1.39982, 2.05991], [-0.467705, 0.851893, 0], [-0.534235, 1.39982, -2.05991], [-0.715999, 2.89678, -3.56787], [-0.964293, 4.94167, -4.11982], [-1.21259, 6.98656, -3.56787], [-1.39435, 8.48352, -2.05991], [-1.29535, 7.66819, 0], [-1.251, 7.30291, 1.37327], [-1.12982, 6.30493, 2.37858], [-0.964293, 4.94167, 2.74654], [-0.798764, 3.57841, 2.37858], [-0.677588, 2.58044, 1.37327], [-0.633234, 2.21515, 0], [-0.677588, 2.58044, -1.37327], [-0.798764, 3.57841, -2.37858], [-0.964293, 4.94167, -2.74654], [-1.12982, 6.30493, -2.37858], [-1.251, 7.30291, -1.37327]], [[-2.93024, 8.88844, 0], [-2.79416, 8.33635, 2.12212], [-2.42238, 6.82799, 3.67562], [-1.91453, 4.76753, 4.24424], [-1.40667, 2.70708, 3.67562], [-1.03489, 1.19872, 2.12212], [-0.898812, 0.646625, 0], [-1.03489, 1.19872, -2.12212], [-1.40667, 2.70708, -3.67562], [-1.91453, 4.76753, -4.24424], [-2.42238, 6.82799, -3.67562], [-2.79416, 8.33635, -2.12212], [-2.59167, 7.51481, 0], [-2.50095, 7.14674, 1.41475], [-2.2531, 6.14117, 2.45041], [-1.91453, 4.76753, 2.82949], [-1.57595, 3.3939, 2.45041], [-1.3281, 2.38833, 1.41475], [-1.23738, 2.02026, 0], [-1.3281, 2.38833, -1.41475], [-1.57595, 3.3939, -2.45041], [-1.91453, 4.76753, -2.82949], [-2.2531, 6.14117, -2.45041], [-2.50095, 7.14674, -1.41475]], [[-4.38599, 8.5649, 0], [-4.17844, 8.01765, 2.18433], [-3.61141, 6.52252, 3.78337], [-2.83684, 4.48013, 4.36866], [-2.06226, 2.43774, 3.78337], [-1.49524, 0.942614, 2.18433], [-1.28769, 0.395359, 0], [-1.49524, 0.942614, -2.18433], [-2.06226, 2.43774, -3.78337], [-2.83684, 4.48013, -4.36866], [-3.61141, 6.52252, -3.78337], [-4.17844, 8.01765, -2.18433], [-3.86961, 7.20331, 0], [-3.73124, 6.83847, 1.45622], [-3.35322, 5.84172, 2.52225], [-2.83684, 4.48013, 2.91244], [-2.32046, 3.11854, 2.52225], [-1.94244, 2.12179, 1.45622], [-1.80407, 1.75695, 0], [-1.94244, 2.12179, -1.45622], [-2.32046, 3.11854, -2.52225], [-2.83684, 4.48013, -2.91244], [-3.35322, 5.84172, -2.52225], [-3.73124, 6.83847, -1.45622]], [[-5.80583, 8.06208, 0], [-5.52608, 7.52907, 2.24654], [-4.76181, 6.07286, 3.89113], [-3.71779, 4.08365, 4.49309], [-2.67376, 2.09443, 3.89113], [-1.90949, 0.638226, 2.24654], [-1.62974, 0.105217, 0], [-1.90949, 0.638226, -2.24654], [-2.67376, 2.09443, -3.89113], [-3.71779, 4.08365, -4.49309], [-4.76181, 6.07286, -3.89113], [-5.52608, 7.52907, -2.24654], [-5.10981, 6.73594, 0], [-4.92332, 6.3806, 1.4977], [-4.4138, 5.40979, 2.59409], [-3.71779, 4.08365, 2.99539], [-3.02177, 2.7575, 2.59409], [-2.51225, 1.7867, 1.4977], [-2.32576, 1.43136, 0], [-2.51225, 1.7867, -1.4977], [-3.02177, 2.7575, -2.59409], [-3.71779, 4.08365, -2.99539], [-4.4138, 5.40979, -2.59409], [-4.92332, 6.3806, -1.4977]], [[-7.16756, 7.38401, 0], [-6.81614, 6.87489, 2.30876], [-5.85604, 5.48394, 3.99888], [-4.54452, 3.58387, 4.61751], [-3.233, 1.6838, 3.99888], [-2.27289, 0.292855, 2.30876], [-1.92147, -0.216267, 0], [-2.27289, 0.292855, -2.30876], [-3.233, 1.6838, -3.99888], [-4.54452, 3.58387, -4.61751], [-5.85604, 5.48394, -3.99888], [-6.81614, 6.87489, -2.30876], [-6.29321, 6.1173, 0], [-6.05893, 5.77788, 1.53917], [-5.41887, 4.85058, 2.66592], [-4.54452, 3.58387, 3.07834], [-3.67017, 2.31716, 2.66592], [-3.0301, 1.38986, 1.53917], [-2.79582, 1.05045, 0], [-3.0301, 1.38986, -1.53917], [-3.67017, 2.31716, -2.66592], [-4.54452, 3.58387, -3.07834], [-5.41887, 4.85058, -2.66592], [-6.05893, 5.77788, -1.53917]], [[-8.44947, 6.53748, 0], [-8.02819, 6.06195, 2.37097], [-6.87722, 4.76278, 4.10664], [-5.30498, 2.98809, 4.74194], [-3.73274, 1.21339, 4.10664], [-2.58178, -0.0857756, 2.37097], [-2.1605, -0.561304, 0], [-2.58178, -0.0857756, -2.37097], [-3.73274, 1.21339, -4.10664], [-5.30498, 2.98809, -4.74194], [-6.87722, 4.76278, -4.10664], [-8.02819, 6.06195, -2.37097], [-7.4013, 5.35435, 0], [-7.12045, 5.03733, 1.58065], [-6.35314, 4.17122, 2.73776], [-5.30498, 2.98809, 3.16129], [-4.25682, 1.80496, 2.73776], [-3.48951, 0.938845, 1.58065], [-3.20866, 0.621826, 0], [-3.48951, 0.938845, -1.58065], [-4.25682, 1.80496, -2.73776], [-5.30498, 2.98809, -3.16129], [-6.35314, 4.17122, -2.73776], [-7.12045, 5.03733, -1.58065]], [[-9.63061, 5.53197, 0], [-9.1426, 5.09964, 2.43318], [-7.80935, 3.91848, 4.21439], [-5.98809, 2.30498, 4.86636], [-4.16682, 0.691485, 4.21439], [-2.83357, -0.489677, 2.43318], [-2.34556, -0.922012, 0], [-2.83357, -0.489677, -2.43318], [-4.16682, 0.691485, -4.21439], [-5.98809, 2.30498, -4.86636], [-7.80935, 3.91848, -4.21439], [-9.1426, 5.09964, -2.43318], [-8.41643, 4.45631, 0], [-8.0911, 4.16809, 1.62212], [-7.20226, 3.38065, 2.80959], [-5.98809, 2.30498, 3.24424], [-4.77391, 1.22932, 2.80959], [-3.88507, 0.441876, 1.62212], [-3.55974, 0.153652, 0], [-3.88507, 0.441876, -1.62212], [-4.77391, 1.22932, -2.80959], [-5.98809, 2.30498, -3.24424], [-7.20226, 3.38065, -2.80959], [-8.0911, 4.16809, -1.62212]], [[-10.6912, 4.37961, 0], [-10.1409, 3.99978, 2.49539], [-8.63754, 2.96206, 4.32215], [-6.58387, 1.54452, 4.99078], [-4.5302, 0.126974, 4.32215], [-3.02682, -0.91074, 2.49539], [-2.47654, -1.29057, 0], [-3.02682, -0.91074, -2.49539], [-4.5302, 0.126974, -4.32215], [-6.58387, 1.54452, -4.99078], [-8.63754, 2.96206, -4.32215], [-10.1409, 3.99978, -2.49539], [-9.32209, 3.43458, 0], [-8.95524, 3.18136, 1.66359], [-7.95298, 2.48955, 2.88143], [-6.58387, 1.54452, 3.32719], [-5.21476, 0.599489, 2.88143], [-4.2125, -0.0923209, 1.66359], [-3.84565, -0.345541, 0], [-4.2125, -0.0923209, -1.66359], [-5.21476, 0.599489, -2.88143], [-6.58387, 1.54452, -3.32719], [-7.95298, 2.48955, -2.88143], [-8.95524, 3.18136, -1.66359]], [[-11.6129, 3.09494, 0], [-11.0061, 2.77646, 2.5576], [-9.34829, 1.90636, 4.4299], [-7.08365, 0.717785, 5.11521], [-4.819, -0.470792, 4.4299], [-3.16117, -1.34089, 2.5576], [-2.55436, -1.65937, 0], [-3.16117, -1.34089, -2.5576], [-4.819, -0.470792, -4.4299], [-7.08365, 0.717785, -5.11521], [-9.34829, 1.90636, -4.4299], [-11.0061, 2.77646, -2.5576], [-10.1032, 2.30256, 0], [-9.69864, 2.09024, 1.70507], [-8.59341, 1.51017, 2.95327], [-7.08365, 0.717785, 3.41014], [-5.57388, -0.0745998, 2.95327], [-4.46866, -0.654666, 1.70507], [-4.06412, -0.866985, 0], [-4.46866, -0.654666, -1.70507], [-5.57388, -0.0745998, -2.95327], [-7.08365, 0.717785, -3.41014], [-8.59341, 1.51017, -2.95327], [-9.69864, 2.09024, -1.70507]], [[-12.3793, 1.69484, 0], [-11.7229, 1.44591, 2.61982], [-9.9297, 0.765839, 4.53765], [-7.48013, -0.163161, 5.23963], [-5.03056, -1.09216, 4.53765], [-3.23735, -1.77224, 2.61982], [-2.58099, -2.02116, 0], [-3.23735, -1.77224, -2.61982], [-5.03056, -1.09216, -4.53765], [-7.48013, -0.163161, -5.23963], [-9.9297, 0.765839, -4.53765], [-11.7229, 1.44591, -2.61982], [-10.7462, 1.07551, 0], [-10.3086, 0.909555, 1.74654], [-9.11318, 0.456172, 3.0251], [-7.48013, -0.163161, 3.49309], [-5.84708, -0.782494, 3.0251], [-4.65161, -1.23588, 1.74654], [-4.21404, -1.40183, 0], [-4.65161, -1.23588, -1.74654], [-5.84708, -0.782494, -3.0251], [-7.48013, -0.163161, -3.49309], [-9.11318, 0.456172, -3.0251], [-10.3086, 0.909555, -1.74654]], [[-12.9757, 0.198228, 0], [-12.278, 0.0262443, 2.68203], [-10.3716, -0.443623, 4.64541], [-7.76753, -1.08547, 5.36406], [-5.16344, -1.72733, 4.64541], [-3.25711, -2.19719, 2.68203], [-2.55935, -2.36918, 0], [-3.25711, -2.19719, -2.68203], [-5.16344, -1.72733, -4.64541], [-7.76753, -1.08547, -5.36406], [-10.3716, -0.443623, -4.64541], [-12.278, 0.0262443, -2.68203], [-11.2397, -0.229673, 0], [-10.7745, -0.344329, 1.78802], [-9.5036, -0.657574, 3.09694], [-7.76753, -1.08547, 3.57604], [-6.03147, -1.51338, 3.09694], [-4.76059, -1.82662, 1.78802], [-4.29541, -1.94128, 0], [-4.76059, -1.82662, -1.78802], [-6.03147, -1.51338, -3.09694], [-7.76753, -1.08547, -3.57604], [-9.5036, -0.657574, -3.09694], [-10.7745, -0.344329, -1.78802]], [[-13.3901, -1.37414, 0], [-12.6602, -1.46278, 2.74424], [-10.6659, -1.70493, 4.75316], [-7.94167, -2.03571, 5.48848], [-5.21744, -2.36649, 4.75316], [-3.22316, -2.60864, 2.74424], [-2.49321, -2.69727, 0], [-3.22316, -2.60864, -2.74424], [-5.21744, -2.36649, -4.75316], [-7.94167, -2.03571, -5.48848], [-10.6659, -1.70493, -4.75316], [-12.6602, -1.46278, -2.74424], [-11.574, -1.59466, 0], [-11.0873, -1.65375, 1.82949], [-9.75783, -1.81519, 3.16877], [-7.94167, -2.03571, 3.65899], [-6.12552, -2.25623, 3.16877], [-4.796, -2.41766, 1.82949], [-4.30936, -2.47675, 0], [-4.796, -2.41766, -1.82949], [-6.12552, -2.25623, -3.16877], [-7.94167, -2.03571, -3.65899], [-9.75783, -1.81519, -3.16877], [-11.0873, -1.65375, -1.82949]], [[-13.6129, -3, 0], [-12.8609, -3, 2.80645], [-10.8065, -3, 4.86092], [-8, -3, 5.6129], [-5.19355, -3, 4.86092], [-3.13908, -3, 2.80645], [-2.3871, -3, 0], [-3.13908, -3, -2.80645], [-5.19355, -3, -4.86092], [-8, -3, -5.6129], [-10.8065, -3, -4.86092], [-12.8609, -3, -2.80645], [-11.7419, -3, 0], [-11.2406, -3, 1.87097], [-9.87097, -3, 3.24061], [-8, -3, 3.74194], [-6.12903, -3, 3.24061], [-4.75939, -3, 1.87097], [-4.25806, -3, 0], [-4.75939, -3, -1.87097], [-6.12903, -3, -3.24061], [-8, -3, -3.74194], [-9.87097, -3, -3.24061], [-11.2406, -3, -1.87097]], [[-13.7373, -3, 0], [-12.9687, -3, 2.86866], [-10.8687, -3, 4.96867], [-8, -3, 5.73733], [-5.13134, -3, 4.96867], [-3.03133, -3, 2.86866], [-2.26267, -3, 0], [-3.03133, -3, -2.86866], [-5.13134, -3, -4.96867], [-8, -3, -5.73733], [-10.8687, -3, -4.96867], [-12.9687, -3, -2.86866], [-11.8249, -3, 0], [-11.3124, -3, 1.91244], [-9.91244, -3, 3.31245], [-8, -3, 3.82488], [-6.08756, -3, 3.31245], [-4.68755, -3, 1.91244], [-4.17512, -3, 0], [-4.68755, -3, -1.91244], [-6.08756, -3, -3.31245], [-8, -3, -3.82488], [-9.91244, -3, -3.31245], [-11.3124, -3, -1.91244]], [[-13.809, -4.40954, 0], [-13.0259, -4.35085, 2.93088], [-10.8863, -4.19052, 5.07643], [-7.96365, -3.97149, 5.86175], [-5.04097, -3.75247, 5.07643], [-2.90142, -3.59213, 2.93088], [-2.11829, -3.53344, 0], [-2.90142, -3.59213, -2.93088], [-5.04097, -3.75247, -5.07643], [-7.96365, -3.97149, -5.86175], [-10.8863, -4.19052, -5.07643], [-13.0259, -4.35085, -2.93088], [-11.8606, -4.26352, 0], [-11.3385, -4.2244, 1.95392], [-9.9121, -4.11751, 3.38428], [-7.96365, -3.97149, 3.90783], [-6.0152, -3.82547, 3.38428], [-4.58883, -3.71858, 1.95392], [-4.06674, -3.67946, 0], [-4.58883, -3.71858, -1.95392], [-6.0152, -3.82547, -3.38428], [-7.96365, -3.97149, -3.90783], [-9.9121, -4.11751, -3.38428], [-11.3385, -4.2244, -1.95392]], [[-13.7741, -5.82974, 0], [-12.9811, -5.71021, 2.99309], [-10.8145, -5.38365, 5.18418], [-7.8548, -4.93755, 5.98618], [-4.89514, -4.49145, 5.18418], [-2.72852, -4.16489, 2.99309], [-1.93549, -4.04536, 0], [-2.72852, -4.16489, -2.99309], [-4.89514, -4.49145, -5.18418], [-7.8548, -4.93755, -5.98618], [-10.8145, -5.38365, -5.18418], [-12.9811, -5.71021, -2.99309], [-11.801, -5.53234, 0], [-11.2723, -5.45266, 1.99539], [-9.82791, -5.23495, 3.45612], [-7.8548, -4.93755, 3.99078], [-5.8817, -4.64015, 3.45612], [-4.43728, -4.42244, 1.99539], [-3.90859, -4.34275, 0], [-4.43728, -4.42244, -1.99539], [-5.8817, -4.64015, -3.45612], [-7.8548, -4.93755, -3.99078], [-9.82791, -5.23495, -3.45612], [-11.2723, -5.45266, -1.99539]], [[-13.6315, -7.25251, 0], [-12.8333, -7.07034, 3.0553], [-10.6528, -6.57264, 5.29193], [-7.67406, -5.89277, 6.1106], [-4.69537, -5.2129, 5.29193], [-2.51481, -4.71521, 3.0553], [-1.71667, -4.53304, 0], [-2.51481, -4.71521, -3.0553], [-4.69537, -5.2129, -5.29193], [-7.67406, -5.89277, -6.1106], [-10.6528, -6.57264, -5.29193], [-12.8333, -7.07034, -3.0553], [-11.6457, -6.79926, 0], [-11.1136, -6.67782, 2.03687], [-9.65986, -6.34602, 3.52796], [-7.67406, -5.89277, 4.07373], [-5.68826, -5.43953, 3.52796], [-4.23456, -5.10773, 2.03687], [-3.70247, -4.98628, 0], [-4.23456, -5.10773, -2.03687], [-5.68826, -5.43953, -3.52796], [-7.67406, -5.89277, -4.07373], [-9.65986, -6.34602, -3.52796], [-11.1136, -6.67782, -2.03687]], [[-13.3805, -8.66962, 0], [-12.5822, -8.4234, 3.11751], [-10.4015, -7.75072, 5.39969], [-7.42245, -6.83182, 6.23502], [-4.44344, -5.91291, 5.39969], [-2.26265, -5.24023, 3.11751], [-1.46443, -4.99401, 0], [-2.26265, -5.24023, -3.11751], [-4.44344, -5.91291, -5.39969], [-7.42245, -6.83182, -6.23502], [-10.4015, -7.75072, -5.39969], [-12.5822, -8.4234, -3.11751], [-11.3945, -8.05702, 0], [-10.8623, -7.89287, 2.07834], [-9.40845, -7.44442, 3.59979], [-7.42245, -6.83182, 4.15668], [-5.43644, -6.21922, 3.59979], [-3.98258, -5.77076, 2.07834], [-3.45043, -5.60661, 0], [-3.98258, -5.77076, -2.07834], [-5.43644, -6.21922, -3.59979], [-7.42245, -6.83182, -4.15668], [-9.40845, -7.44442, -3.59979], [-10.8623, -7.89287, -2.07834]], [[-13.0212, -10.0728, 0], [-12.2281, -9.76153, 3.17972], [-10.0613, -8.91112, 5.50744], [-7.10136, -7.74943, 6.35945], [-4.14144, -6.58775, 5.50744], [-1.97462, -5.73734, 3.17972], [-1.18152, -5.42607, 0], [-1.97462, -5.73734, -3.17972], [-4.14144, -6.58775, -5.50744], [-7.10136, -7.74943, -6.35945], [-10.0613, -8.91112, -5.50744], [-12.2281, -9.76153, -3.17972], [-11.0479, -9.29834, 0], [-10.5192, -9.09083, 2.11982], [-9.07464, -8.52389, 3.67163], [-7.10136, -7.74943, 4.23963], [-5.12808, -6.97498, 3.67163], [-3.68354, -6.40804, 2.11982], [-3.1548, -6.20052, 0], [-3.68354, -6.40804, -2.11982], [-5.12808, -6.97498, -3.67163], [-7.10136, -7.74943, -4.23963], [-9.07464, -8.52389, -3.67163], [-10.5192, -9.09083, -2.11982]], [[-12.5544, -11.4537, 0], [-11.7717, -11.0768, 3.24194], [-9.63348, -10.0471, 5.6152], [-6.7126, -8.64049, 6.48387], [-3.79171, -7.23387, 5.6152], [-1.65348, -6.20415, 3.24194], [-0.870829, -5.82724, 0], [-1.65348, -6.20415, -3.24194], [-3.79171, -7.23387, -5.6152], [-6.7126, -8.64049, -6.48387], [-9.63348, -10.0471, -5.6152], [-11.7717, -11.0768, -3.24194], [-10.6071, -10.516, 0], [-10.0853, -10.2647, 2.16129], [-8.65985, -9.57824, 3.74346], [-6.7126, -8.64049, 4.32258], [-4.76534, -7.70274, 3.74346], [-3.33985, -7.01626, 2.16129], [-2.81808, -6.76499, 0], [-3.33985, -7.01626, -2.16129], [-4.76534, -7.70274, -3.74346], [-6.7126, -8.64049, -4.32258], [-8.65985, -9.57824, -3.74346], [-10.0853, -10.2647, -2.16129]], [[-11.9813, -12.8041, 0], [-11.2146, -12.3615, 3.30415], [-9.11981, -11.1521, 5.72295], [-6.25833, -9.5, 6.60829], [-3.39685, -7.84793, 5.72295], [-1.30211, -6.63852, 3.30415], [-0.535379, -6.19585, 0], [-1.30211, -6.63852, -3.30415], [-3.39685, -7.84793, -5.72295], [-6.25833, -9.5, -6.60829], [-9.11981, -11.1521, -5.72295], [-11.2146, -12.3615, -3.30415], [-10.0736, -11.7028, 0], [-9.56248, -11.4077, 2.20276], [-8.16598, -10.6014, 3.8153], [-6.25833, -9.5, 4.40553], [-4.35068, -8.39862, 3.8153], [-2.95418, -7.59235, 2.20276], [-2.44303, -7.29724, 0], [-2.95418, -7.59235, -2.20276], [-4.35068, -8.39862, -3.8153], [-6.25833, -9.5, -4.40553], [-8.16598, -10.6014, -3.8153], [-9.56248, -11.4077, -2.20276]], [[-11.3039, -14.1158, 0], [-10.5587, -13.6077, 3.36636], [-8.52252, -12.2195, 5.83071], [-5.7411, -10.3232, 6.73272], [-2.95969, -8.42682, 5.83071], [-0.923549, -7.03861, 3.36636], [-0.178271, -6.53049, 0], [-0.923549, -7.03861, -3.36636], [-2.95969, -8.42682, -5.83071], [-5.7411, -10.3232, -6.73272], [-8.52252, -12.2195, -5.83071], [-10.5587, -13.6077, -3.36636], [-9.44966, -12.8516, 0], [-8.95281, -12.5129, 2.24424], [-7.59538, -11.5874, 3.88714], [-5.7411, -10.3232, 4.48848], [-3.88683, -9.05894, 3.88714], [-2.5294, -8.13346, 2.24424], [-2.03255, -7.79471, 0], [-2.5294, -8.13346, -2.24424], [-3.88683, -9.05894, -3.88714], [-5.7411, -10.3232, -4.48848], [-7.59538, -11.5874, -3.88714], [-8.95281, -12.5129, -2.24424]], [[-10.5249, -15.3807, 0], [-9.80668, -14.8079, 3.42857], [-7.84437, -13.243, 5.93846], [-5.16381, -11.1054, 6.85714], [-2.48324, -8.96769, 5.93846], [-0.520934, -7.4028, 3.42857], [0.197321, -6.83001, 0], [-0.520934, -7.4028, -3.42857], [-2.48324, -8.96769, -5.93846], [-5.16381, -11.1054, -6.85714], [-7.84437, -13.243, -5.93846], [-9.80668, -14.8079, -3.42857], [-8.7379, -13.9556, 0], [-8.25906, -13.5737, 2.28571], [-6.95085, -12.5305, 3.95897], [-5.16381, -11.1054, 4.57143], [-3.37677, -9.68025, 3.95897], [-2.06856, -8.63699, 2.28571], [-1.58972, -8.25513, 0], [-2.06856, -8.63699, -2.28571], [-3.37677, -9.68025, -3.95897], [-5.16381, -11.1054, -4.57143], [-6.95085, -12.5305, -3.95897], [-8.25906, -13.5737, -2.28571]], [[-9.64752, -16.5909, 0], [-8.96186, -15.9547, 3.49078], [-7.0886, -14.2166, 6.04621], [-4.52967, -11.8422, 6.98157], [-1.97075, -9.46791, 6.04621], [-0.0974857, -7.72978, 3.49078], [0.588176, -7.09357, 0], [-0.0974857, -7.72978, -3.49078], [-1.97075, -9.46791, -6.04621], [-4.52967, -11.8422, -6.98157], [-7.0886, -14.2166, -6.04621], [-8.96186, -15.9547, -3.49078], [-7.94157, -15.008, 0], [-7.48447, -14.5839, 2.32719], [-6.23562, -13.4251, 4.03081], [-4.52967, -11.8422, 4.65438], [-2.82372, -10.2594, 4.03081], [-1.57488, -9.1006, 2.32719], [-1.11777, -8.67646, 0], [-1.57488, -9.1006, -2.32719], [-2.82372, -10.2594, -4.03081], [-4.52967, -11.8422, -4.65438], [-6.23562, -13.4251, -4.03081], [-7.48447, -14.5839, -2.32719]], [[-8.67555, -17.7387, 0], [-8.02801, -17.0409, 3.553], [-6.2589, -15.1342, 6.15397], [-3.84225, -12.5297, 7.10599], [-1.42559, -9.92514, 6.15397], [0.343516, -8.0185, 3.553], [0.991056, -7.32061, 0], [0.343516, -8.0185, -3.553], [-1.42559, -9.92514, -6.15397], [-3.84225, -12.5297, -7.10599], [-6.2589, -15.1342, -6.15397], [-8.02801, -17.0409, -3.553], [-7.06445, -16.0024, 0], [-6.63275, -15.5371, 2.36866], [-5.45335, -14.266, 4.10265], [-3.84225, -12.5297, 4.73733], [-2.23115, -10.7933, 4.10265], [-1.05174, -9.52222, 2.36866], [-0.620045, -9.05697, 0], [-1.05174, -9.52222, -2.36866], [-2.23115, -10.7933, -4.10265], [-3.84225, -12.5297, -4.73733], [-5.45335, -14.266, -4.10265], [-6.63275, -15.5371, -2.36866]], [[-7.61346, -18.8168, 0], [-7.00949, -18.0594, 3.61521], [-5.35941, -15.9903, 6.26172], [-3.10537, -13.1638, 7.23041], [-0.851322, -10.3373, 6.26172], [0.798753, -8.2682, 3.61521], [1.40272, -7.51084, 0], [0.798753, -8.2682, -3.61521], [-0.851322, -10.3373, -6.26172], [-3.10537, -13.1638, -7.23041], [-5.35941, -15.9903, -6.26172], [-7.00949, -18.0594, -3.61521], [-6.11076, -16.9325, 0], [-5.70811, -16.4276, 2.41014], [-4.60806, -15.0481, 4.17448], [-3.10537, -13.1638, 4.82028], [-1.60267, -11.2795, 4.17448], [-0.502621, -9.90007, 2.41014], [-0.0999742, -9.39517, 0], [-0.502621, -9.90007, -2.41014], [-1.60267, -11.2795, -4.17448], [-3.10537, -13.1638, -4.82028], [-4.60806, -15.0481, -4.17448], [-5.70811, -16.4276, -2.41014]], [[-6.46629, -19.818, 0], [-5.91122, -19.0038, 3.67742], [-4.39472, -16.7795, 6.36948], [-2.32316, -13.7411, 7.35484], [-0.251597, -10.7027, 6.36948], [1.26489, -8.4784, 3.67742], [1.81997, -7.66425, 0], [1.26489, -8.4784, -3.67742], [-0.251597, -10.7027, -6.36948], [-2.32316, -13.7411, -7.35484], [-4.39472, -16.7795, -6.36948], [-5.91122, -19.0038, -3.67742], [-5.08525, -17.7923, 0], [-4.7152, -17.2496, 2.45161], [-3.7042, -15.7667, 4.24632], [-2.32316, -13.7411, 4.90323], [-0.942118, -11.7155, 4.24632], [0.0688754, -10.2326, 2.45161], [0.438925, -9.68987, 0], [0.0688754, -10.2326, -2.45161], [-0.942118, -11.7155, -4.24632], [-2.32316, -13.7411, -4.90323], [-3.7042, -15.7667, -4.24632], [-4.7152, -17.2496, -2.45161]], [[-5.23963, -20.7356, 0], [-4.73862, -19.8678, 3.73963], [-3.36982, -17.4969, 6.47723], [-1.5, -14.2583, 7.47926], [0.369816, -11.0197, 6.47723], [1.73862, -8.64888, 3.73963], [2.23963, -7.7811, 0], [1.73862, -8.64888, -3.73963], [0.369816, -11.0197, -6.47723], [-1.5, -14.2583, -7.47926], [-3.36982, -17.4969, -6.47723], [-4.73862, -19.8678, -3.73963], [-3.99309, -18.5765, 0], [-3.65908, -17.998, 2.49309], [-2.74654, -16.4174, 4.31815], [-1.5, -14.2583, 4.98618], [-0.253456, -12.0993, 4.31815], [0.659077, -10.5187, 2.49309], [0.993088, -9.94018, 0], [0.659077, -10.5187, -2.49309], [-0.253456, -12.0993, -4.31815], [-1.5, -14.2583, -4.98618], [-2.74654, -16.4174, -4.31815], [-3.65908, -17.998, -2.49309]], [[-3.9396, -21.5633, 0], [-3.49761, -20.6455, 3.80184], [-2.29005, -18.1379, 6.58499], [-0.640489, -14.7126, 7.60369], [1.00907, -11.2873, 6.58499], [2.21663, -8.77973, 3.80184], [2.65863, -7.86191, 0], [2.21663, -8.77973, -3.80184], [1.00907, -11.2873, -6.58499], [-0.640489, -14.7126, -7.60369], [-2.29005, -18.1379, -6.58499], [-3.49761, -20.6455, -3.80184], [-2.8399, -19.2797, 0], [-2.54523, -18.6678, 2.53456], [-1.74019, -16.9962, 4.38999], [-0.640489, -14.7126, 5.06912], [0.459217, -12.429, 4.38999], [1.26426, -10.7574, 2.53456], [1.55892, -10.1455, 0], [1.26426, -10.7574, -2.53456], [0.459217, -12.429, -4.38999], [-0.640489, -14.7126, -5.06912], [-1.74019, -16.9962, -4.38999], [-2.54523, -18.6678, -2.53456]], [[-2.57283, -22.2953, 0], [-2.19457, -21.3315, 3.86406], [-1.16113, -18.6983, 6.69274], [0.250567, -15.1014, 7.72811], [1.66226, -11.5044, 6.69274], [2.6957, -8.87126, 3.86406], [3.07396, -7.90746, 0], [2.6957, -8.87126, -3.86406], [1.66226, -11.5044, -6.69274], [0.250567, -15.1014, -7.72811], [-1.16113, -18.6983, -6.69274], [-2.19457, -21.3315, -3.86406], [-1.6317, -19.8973, 0], [-1.37952, -19.2548, 2.57604], [-0.690565, -17.4993, 4.46183], [0.250567, -15.1014, 5.15207], [1.1917, -12.7034, 4.46183], [1.88066, -10.948, 2.57604], [2.13283, -10.3054, 0], [1.88066, -10.948, -2.57604], [1.1917, -12.7034, -4.46183], [0.250567, -15.1014, -5.15207], [-0.690565, -17.4993, -4.46183], [-1.37952, -19.2548, -2.57604]], [[-1.14639, -22.9261, 0], [-0.836298, -21.9208, 3.92627], [0.0108951, -19.1743, 6.80049], [1.16818, -15.4224, 7.85253], [2.32547, -11.6706, 6.80049], [3.17266, -8.92408, 3.92627], [3.48276, -7.91878, 0], [3.17266, -8.92408, -3.92627], [2.32547, -11.6706, -6.80049], [1.16818, -15.4224, -7.85253], [0.0108951, -19.1743, -6.80049], [-0.836298, -21.9208, -3.92627], [-0.374867, -20.4249, 0], [-0.168138, -19.7547, 2.61751], [0.396658, -17.9237, 4.53366], [1.16818, -15.4224, 5.23502], [1.93971, -12.9212, 4.53366], [2.5045, -11.0902, 2.61751], [2.71123, -10.42, 0], [2.5045, -11.0902, -2.61751], [1.93971, -12.9212, -4.53366], [1.16818, -15.4224, -5.23502], [0.396658, -17.9237, -4.53366], [-0.168138, -19.7547, -2.61751]], [[0.332188, -23.451, 0], [0.569998, -22.4091, 3.98848], [1.21971, -19.5625, 6.90825], [2.10723, -15.6741, 7.97696], [2.99475, -11.7856, 6.90825], [3.64446, -8.93902, 3.98848], [3.88227, -7.8971, 0], [3.64446, -8.93902, -3.98848], [2.99475, -11.7856, -6.90825], [2.10723, -15.6741, -7.97696], [1.21971, -19.5625, -6.90825], [0.569998, -22.4091, -3.98848], [0.923868, -20.8587, 0], [1.08241, -20.1641, 2.65899], [1.51555, -18.2664, 4.6055], [2.10723, -15.6741, 5.31797], [2.69891, -13.0817, 4.6055], [3.13205, -11.184, 2.65899], [3.29059, -10.4894, 0], [3.13205, -11.184, -2.65899], [2.69891, -13.0817, -4.6055], [2.10723, -15.6741, -5.31797], [1.51555, -18.2664, -4.6055], [1.08241, -20.1641, -2.65899]], [[1.855, -23.8657, 0], [2.01677, -22.7924, 4.05069], [2.45873, -19.8602, 7.016], [3.06245, -15.8548, 8.10138], [3.66617, -11.8494, 7.016], [4.10813, -8.91716, 4.05069], [4.2699, -7.8439, 0], [4.10813, -8.91716, -4.05069], [3.66617, -11.8494, -7.016], [3.06245, -15.8548, -8.10138], [2.45873, -19.8602, -7.016], [2.01677, -22.7924, -4.05069], [2.25748, -21.1954, 0], [2.36533, -20.4799, 2.70046], [2.65997, -18.5251, 4.67734], [3.06245, -15.8548, 5.40092], [3.46493, -13.1845, 4.67734], [3.75957, -11.2297, 2.70046], [3.86742, -10.5142, 0], [3.75957, -11.2297, -2.70046], [3.46493, -13.1845, -4.67734], [3.06245, -15.8548, -5.40092], [2.65997, -18.5251, -4.67734], [2.36533, -20.4799, -2.70046]], [[3.41379, -24.1665, 0], [3.49615, -23.0675, 4.1129], [3.72115, -20.0651, 7.12376], [4.02851, -15.9636, 8.22581], [4.33587, -11.8622, 7.12376], [4.56087, -8.85981, 4.1129], [4.64322, -7.76084, 0], [4.56087, -8.85981, -4.1129], [4.33587, -11.8622, -7.12376], [4.02851, -15.9636, -8.22581], [3.72115, -20.0651, -7.12376], [3.49615, -23.0675, -4.1129], [3.6187, -21.4322, 0], [3.6736, -20.6995, 2.74194], [3.8236, -18.6979, 4.74917], [4.02851, -15.9636, 5.48387], [4.23341, -13.2294, 4.74917], [4.38341, -11.2278, 2.74194], [4.43832, -10.4951, 0], [4.38341, -11.2278, -2.74194], [4.23341, -13.2294, -4.74917], [4.02851, -15.9636, -5.48387], [3.8236, -18.6979, -4.74917], [3.6736, -20.6995, -2.74194]], [[5, -24.3502, 0], [5, -23.2315, 4.17512], [5, -20.1751, 7.23151], [5, -16, 8.35023], [5, -11.8249, 7.23151], [5, -8.76849, 4.17512], [5, -7.64977, 0], [5, -8.76849, -4.17512], [5, -11.8249, -7.23151], [5, -16, -8.35023], [5, -20.1751, -7.23151], [5, -23.2315, -4.17512], [5, -21.5668, 0], [5, -20.821, 2.78341], [5, -18.7834, 4.82101], [5, -16, 5.56682], [5, -13.2166, 4.82101], [5, -11.179, 2.78341], [5, -10.4332, 0], [5, -11.179, -2.78341], [5, -13.2166, -4.82101], [5, -16, -5.56682], [5, -18.7834, -4.82101], [5, -20.821, -2.78341]], [[6.40246, -24.4413, 0], [6.34844, -23.3072, 4.23733], [6.20084, -20.2087, 7.33927], [5.99922, -15.9762, 8.47465], [5.7976, -11.7437, 7.33927], [5.65, -8.64526, 4.23733], [5.59598, -7.51116, 0], [5.65, -8.64526, -4.23733], [5.7976, -11.7437, -7.33927], [5.99922, -15.9762, -8.47465], [6.20084, -20.2087, -7.33927], [6.34844, -23.3072, -4.23733], [6.26805, -21.6196, 0], [6.23203, -20.8635, 2.82488], [6.13363, -18.7979, 4.89284], [5.99922, -15.9762, 5.64977], [5.86481, -13.1545, 4.89284], [5.76641, -11.0889, 2.82488], [5.73039, -10.3328, 0], [5.76641, -11.0889, -2.82488], [5.86481, -13.1545, -4.89284], [5.99922, -15.9762, -5.64977], [6.13363, -18.7979, -4.89284], [6.23203, -20.8635, -2.82488]], [[7.81357, -24.4651, 0], [7.70406, -23.3182, 4.29954], [7.40487, -20.185, 7.44702], [6.99618, -15.9049, 8.59908], [6.58748, -11.6248, 7.44702], [6.28829, -8.49161, 4.29954], [6.17878, -7.34477, 0], [6.28829, -8.49161, -4.29954], [6.58748, -11.6248, -7.44702], [6.99618, -15.9049, -8.59908], [7.40487, -20.185, -7.44702], [7.70406, -23.3182, -4.29954], [7.54111, -21.6117, 0], [7.4681, -20.8471, 2.86636], [7.26864, -18.7583, 4.96468], [6.99618, -15.9049, 5.73272], [6.72371, -13.0515, 4.96468], [6.52425, -10.9627, 2.86636], [6.45125, -10.1981, 0], [6.52425, -10.9627, -2.86636], [6.72371, -13.0515, -4.96468], [6.99618, -15.9049, -5.73272], [7.26864, -18.7583, -4.96468], [7.4681, -20.8471, -2.86636]], [[9.2301, -24.421, 0], [9.06377, -23.2641, 4.36175], [8.60935, -20.1036, 7.55477], [7.98861, -15.7863, 8.7235], [7.36787, -11.4689, 7.55477], [6.91346, -8.30837, 4.36175], [6.74713, -7.15154, 0], [6.91346, -8.30837, -4.36175], [7.36787, -11.4689, -7.55477], [7.98861, -15.7863, -8.7235], [8.60935, -20.1036, -7.55477], [9.06377, -23.2641, -4.36175], [8.81627, -21.5427, 0], [8.70538, -20.7715, 2.90783], [8.40244, -18.6645, 5.03652], [7.98861, -15.7863, 5.81567], [7.57478, -12.908, 5.03652], [7.27184, -10.801, 2.90783], [7.16096, -10.0298, 0], [7.27184, -10.801, -2.90783], [7.57478, -12.908, -5.03652], [7.98861, -15.7863, -5.81567], [8.40244, -18.6645, -5.03652], [8.70538, -20.7715, -2.90783]], [[10.6488, -24.3085, 0], [10.4244, -23.1446, 4.42396], [9.81152, -19.9645, 7.66253], [8.97428, -15.6205, 8.84793], [8.13704, -11.2765, 7.66253], [7.52413, -8.09645, 4.42396], [7.2998, -6.93247, 0], [7.52413, -8.09645, -4.42396], [8.13704, -11.2765, -7.66253], [8.97428, -15.6205, -8.84793], [9.81152, -19.9645, -7.66253], [10.4244, -23.1446, -4.42396], [10.0906, -21.4125, 0], [9.94104, -20.6365, 2.94931], [9.53244, -18.5165, 5.10835], [8.97428, -15.6205, 5.89862], [8.41612, -12.7245, 5.10835], [8.00751, -10.6045, 2.94931], [7.85796, -9.82848, 0], [8.00751, -10.6045, -2.94931], [8.41612, -12.7245, -5.10835], [8.97428, -15.6205, -5.89862], [9.53244, -18.5165, -5.10835], [9.94104, -20.6365, -2.94931]], [[12.0662, -24.1275, 0], [11.7829, -22.9593, 4.48618], [11.0086, -19.7678, 7.77028], [9.95094, -15.408, 8.97235], [8.89328, -11.0483, 7.77028], [8.11902, -7.85679, 4.48618], [7.83563, -6.68861, 0], [8.11902, -7.85679, -4.48618], [8.89328, -11.0483, -7.77028], [9.95094, -15.408, -8.97235], [11.0086, -19.7678, -7.77028], [11.7829, -22.9593, -4.48618], [11.3611, -21.221, 0], [11.1722, -20.4422, 2.99078], [10.656, -18.3145, 5.18019], [9.95094, -15.408, 5.98157], [9.24583, -12.5016, 5.18019], [8.72966, -10.3739, 2.99078], [8.54073, -9.59509, 0], [8.72966, -10.3739, -2.99078], [9.24583, -12.5016, -5.18019], [9.95094, -15.408, -5.98157], [10.656, -18.3145, -5.18019], [11.1722, -20.4422, -2.99078]], [[13.4792, -23.8776, 0], [13.1359, -22.7083, 4.54839], [12.1978, -19.5135, 7.87804], [10.9164, -15.1494, 9.09677], [9.63495, -10.7852, 7.87804], [8.69688, -7.59043, 4.54839], [8.35353, -6.42106, 0], [8.69688, -7.59043, -4.54839], [9.63495, -10.7852, -7.87804], [10.9164, -15.1494, -9.09677], [12.1978, -19.5135, -7.87804], [13.1359, -22.7083, -4.54839], [12.625, -20.9682, 0], [12.3961, -20.1886, 3.03226], [11.7707, -18.0588, 5.25203], [10.9164, -15.1494, 6.06452], [10.0621, -12.2399, 5.25203], [9.43672, -10.1101, 3.03226], [9.20781, -9.33049, 0], [9.43672, -10.1101, -3.03226], [10.0621, -12.2399, -5.25203], [10.9164, -15.1494, -6.06452], [11.7707, -18.0588, -5.25203], [12.3961, -20.1886, -3.03226]], [[14.8844, -23.5591, 0], [14.4803, -22.3916, 4.6106], [13.3764, -19.202, 7.98579], [11.8684, -14.845, 9.2212], [10.3604, -10.488, 7.98579], [9.25653, -7.29844, 4.6106], [8.85247, -6.13098, 0], [9.25653, -7.29844, -4.6106], [10.3604, -10.488, -7.98579], [11.8684, -14.845, -9.2212], [13.3764, -19.202, -7.98579], [14.4803, -22.3916, -4.6106], [13.8791, -20.6544, 0], [13.6097, -19.8761, 3.07373], [12.8737, -17.7497, 5.32386], [11.8684, -14.845, 6.14747], [10.8631, -11.9403, 5.32386], [10.1272, -9.81396, 3.07373], [9.85779, -9.03566, 0], [10.1272, -9.81396, -3.07373], [10.8631, -11.9403, -5.32386], [11.8684, -14.845, -6.14747], [12.8737, -17.7497, -5.32386], [13.6097, -19.8761, -3.07373]], [[16.2783, -23.1719, 0], [15.813, -22.0095, 4.67281], [14.5416, -18.8338, 8.09355], [12.8049, -14.4957, 9.34562], [11.0682, -10.1576, 8.09355], [9.79684, -6.98194, 4.67281], [9.33149, -5.81955, 0], [9.79684, -6.98194, -4.67281], [11.0682, -10.1576, -8.09355], [12.8049, -14.4957, -9.34562], [14.5416, -18.8338, -8.09355], [15.813, -22.0095, -4.67281], [15.1205, -20.2798, 0], [14.8103, -19.5049, 3.11521], [13.9627, -17.3878, 5.3957], [12.8049, -14.4957, 6.23041], [11.6471, -11.6037, 5.3957], [10.7995, -9.48653, 3.11521], [10.4893, -8.71161, 0], [10.7995, -9.48653, -3.11521], [11.6471, -11.6037, -5.3957], [12.8049, -14.4957, -6.23041], [13.9627, -17.3878, -5.3957], [14.8103, -19.5049, -3.11521]], [[17.6577, -22.7165, 0], [17.1307, -21.5624, 4.73502], [15.6907, -18.4094, 8.2013], [13.7237, -14.1023, 9.47005], [11.7567, -9.79514, 8.2013], [10.3168, -6.64211, 4.73502], [9.78972, -5.48801, 0], [10.3168, -6.64211, -4.73502], [11.7567, -9.79514, -8.2013], [13.7237, -14.1023, -9.47005], [15.6907, -18.4094, -8.2013], [17.1307, -21.5624, -4.73502], [16.3464, -19.8451, 0], [15.995, -19.0757, 3.15668], [15.035, -16.9737, 5.46753], [13.7237, -14.1023, 6.31336], [12.4124, -11.2309, 5.46753], [11.4524, -9.12883, 3.15668], [11.101, -8.35943, 0], [11.4524, -9.12883, -3.15668], [12.4124, -11.2309, -5.46753], [13.7237, -14.1023, -6.31336], [15.035, -16.9737, -5.46753], [15.995, -19.0757, -3.15668]], [[19.0192, -22.1934, 0], [18.4302, -21.0509, 4.79724], [16.821, -17.9295, 8.30905], [14.6228, -13.6655, 9.59447], [12.4245, -9.40159, 8.30905], [10.8153, -6.28016, 4.79724], [10.2263, -5.13764, 0], [10.8153, -6.28016, -4.79724], [12.4245, -9.40159, -8.30905], [14.6228, -13.6655, -9.59447], [16.821, -17.9295, -8.30905], [18.4302, -21.0509, -4.79724], [17.5537, -19.3508, 0], [17.161, -18.5891, 3.19816], [16.0882, -16.5082, 5.53937], [14.6228, -13.6655, 6.39631], [13.1573, -10.8229, 5.53937], [12.0845, -8.74196, 3.19816], [11.6918, -7.98027, 0], [12.0845, -8.74196, -3.19816], [13.1573, -10.8229, -5.53937], [14.6228, -13.6655, -6.39631], [16.0882, -16.5082, -5.53937], [17.161, -18.5891, -3.19816]], [[20.3594, -21.6033, 0], [19.7084, -20.4757, 4.85945], [17.9297, -17.3949, 8.41681], [15.5, -13.1865, 9.71889], [13.0703, -8.97813, 8.41681], [11.2916, -5.89736, 4.85945], [10.6406, -4.76972, 0], [11.2916, -5.89736, -4.85945], [13.0703, -8.97813, -8.41681], [15.5, -13.1865, -9.71889], [17.9297, -17.3949, -8.41681], [19.7084, -20.4757, -4.85945], [18.7396, -18.7977, 0], [18.3056, -18.046, 3.23963], [17.1198, -15.9921, 5.61121], [15.5, -13.1865, 6.47926], [13.8802, -10.3809, 5.61121], [12.6944, -8.32709, 3.23963], [12.2604, -7.57533, 0], [12.6944, -8.32709, -3.23963], [13.8802, -10.3809, -5.61121], [15.5, -13.1865, -6.47926], [17.1198, -15.9921, -5.61121], [18.3056, -18.046, -3.23963]], [[21.6752, -20.9471, 0], [20.9622, -19.8376, 4.92166], [19.0143, -16.8067, 8.52456], [16.3535, -12.6663, 9.84332], [13.6926, -8.52596, 8.52456], [11.7447, -5.49501, 4.92166], [11.0318, -4.3856, 0], [11.7447, -5.49501, -4.92166], [13.6926, -8.52596, -8.52456], [16.3535, -12.6663, -9.84332], [19.0143, -16.8067, -8.52456], [20.9622, -19.8376, -4.92166], [19.9013, -18.1868, 0], [19.4259, -17.4472, 3.28111], [18.1274, -15.4266, 5.68304], [16.3535, -12.6663, 6.56221], [14.5796, -9.90608, 5.68304], [13.281, -7.88544, 3.28111], [12.8057, -7.14584, 0], [13.281, -7.88544, -3.28111], [14.5796, -9.90608, -5.68304], [16.3535, -12.6663, -6.56221], [18.1274, -15.4266, -5.68304], [19.4259, -17.4472, -3.28111]], [[22.9631, -20.2256, 0], [22.1884, -19.1378, 4.98387], [20.0721, -16.1658, 8.63232], [17.1812, -12.1061, 9.96774], [14.2903, -8.04635, 8.63232], [12.174, -5.07442, 4.98387], [11.3993, -3.98661, 0], [12.174, -5.07442, -4.98387], [14.2903, -8.04635, -8.63232], [17.1812, -12.1061, -9.96774], [20.0721, -16.1658, -8.63232], [22.1884, -19.1378, -4.98387], [21.0358, -17.5191, 0], [20.5194, -16.7939, 3.32258], [19.1085, -14.8126, 5.75488], [17.1812, -12.1061, 6.64516], [15.2539, -9.3996, 5.75488], [13.843, -7.41831, 3.32258], [13.3266, -6.69311, 0], [13.843, -7.41831, -3.32258], [15.2539, -9.3996, -5.75488], [17.1812, -12.1061, -6.64516], [19.1085, -14.8126, -5.75488], [20.5194, -16.7939, -3.32258]], [[24.2199, -19.4401, 0], [23.3841, -18.3773, 5.04608], [21.1006, -15.4736, 8.74007], [17.9813, -11.5071, 10.0922], [14.8621, -7.54063, 8.74007], [12.5786, -4.63695, 5.04608], [11.7428, -3.57414, 0], [12.5786, -4.63695, -5.04608], [14.8621, -7.54063, -8.74007], [17.9813, -11.5071, -10.0922], [21.1006, -15.4736, -8.74007], [23.3841, -18.3773, -5.04608], [22.1404, -16.7958, 0], [21.5832, -16.0872, 3.36406], [20.0609, -14.1514, 5.82671], [17.9813, -11.5071, 6.72811], [15.9018, -8.86279, 5.82671], [14.3795, -6.92701, 3.36406], [13.8223, -6.21846, 0], [14.3795, -6.92701, -3.36406], [15.9018, -8.86279, -5.82671], [17.9813, -11.5071, -6.72811], [20.0609, -14.1514, -5.82671], [21.5832, -16.0872, -3.36406]], [[25.4425, -18.5919, 0], [24.5462, -17.5575, 5.10829], [22.0973, -14.7313, 8.84783], [18.7521, -10.8707, 10.2166], [15.4069, -7.01015, 8.84783], [12.958, -4.184, 5.10829], [12.0616, -3.14956, 0], [12.958, -4.184, -5.10829], [15.4069, -7.01015, -8.84783], [18.7521, -10.8707, -10.2166], [22.0973, -14.7313, -8.84783], [24.5462, -17.5575, -5.10829], [23.2124, -16.0182, 0], [22.6148, -15.3286, 3.40553], [20.9822, -13.4445, 5.89855], [18.7521, -10.8707, 6.81106], [16.5219, -8.29701, 5.89855], [14.8893, -6.41291, 3.40553], [14.2918, -5.72329, 0], [14.8893, -6.41291, -3.40553], [16.5219, -8.29701, -5.89855], [18.7521, -10.8707, -6.81106], [20.9822, -13.4445, -5.89855], [22.6148, -15.3286, -3.40553]], [[26.6278, -17.6826, 0], [25.6717, -16.6799, 5.17051], [23.0597, -13.9405, 8.95558], [19.4917, -10.1984, 10.341], [15.9236, -6.45634, 8.95558], [13.3116, -3.71696, 5.17051], [12.3555, -2.71427, 0], [13.3116, -3.71696, -5.17051], [15.9236, -6.45634, -8.95558], [19.4917, -10.1984, -10.341], [23.0597, -13.9405, -8.95558], [25.6717, -16.6799, -5.17051], [24.2491, -15.1878, 0], [23.6117, -14.5194, 3.447], [21.8704, -12.6931, 5.97039], [19.4917, -10.1984, 6.89401], [17.113, -7.7037, 5.97039], [15.3716, -5.87744, 3.447], [14.7342, -5.20899, 0], [15.3716, -5.87744, -3.447], [17.113, -7.7037, -5.97039], [19.4917, -10.1984, -6.89401], [21.8704, -12.6931, -5.97039], [23.6117, -14.5194, -3.447]], [[27.7726, -16.7136, 0], [26.7579, -15.7461, 5.23272], [23.9855, -13.1026, 9.06333], [20.1984, -9.49166, 10.4654], [16.4113, -5.88067, 9.06333], [13.639, -3.23724, 5.23272], [12.6242, -2.26968, 0], [13.639, -3.23724, -5.23272], [16.4113, -5.88067, -9.06333], [20.1984, -9.49166, -10.4654], [23.9855, -13.1026, -9.06333], [26.7579, -15.7461, -5.23272], [25.2479, -14.3063, 0], [24.5714, -13.6613, 3.48848], [22.7231, -11.899, 6.04222], [20.1984, -9.49166, 6.97696], [17.6737, -7.08433, 6.04222], [15.8255, -5.32205, 3.48848], [15.149, -4.67701, 0], [15.8255, -5.32205, -3.48848], [17.6737, -7.08433, -6.04222], [20.1984, -9.49166, -6.97696], [22.7231, -11.899, -6.04222], [24.5714, -13.6613, -3.48848]], [[28.874, -15.687, 0], [27.8018, -14.7579, 5.29493], [24.8724, -12.2195, 9.17109], [20.8707, -8.75208, 10.5899], [16.8691, -5.28463, 9.17109], [13.9397, -2.74629, 5.29493], [12.8675, -1.81719, 0], [13.9397, -2.74629, -5.29493], [16.8691, -5.28463, -9.17109], [20.8707, -8.75208, -10.5899], [24.8724, -12.2195, -9.17109], [27.8018, -14.7579, -5.29493], [26.2063, -13.3753, 0], [25.4914, -12.7559, 3.52995], [23.5385, -11.0637, 6.11406], [20.8707, -8.75208, 7.05991], [18.203, -6.44045, 6.11406], [16.25, -4.74822, 3.52995], [15.5352, -4.12882, 0], [16.25, -4.74822, -3.52995], [18.203, -6.44045, -6.11406], [20.8707, -8.75208, -7.05991], [23.5385, -11.0637, -6.11406], [25.4914, -12.7559, -3.52995]], [[29.9291, -14.6045, 0], [28.8008, -13.7171, 5.35714], [25.7181, -11.2929, 9.27884], [21.5071, -7.98134, 10.7143], [17.2961, -4.66977, 9.27884], [14.2135, -2.24554, 5.35714], [13.0851, -1.35821, 0], [14.2135, -2.24554, -5.35714], [17.2961, -4.66977, -9.27884], [21.5071, -7.98134, -10.7143], [25.7181, -11.2929, -9.27884], [28.8008, -13.7171, -5.35714], [27.1218, -12.3968, 0], [26.3696, -11.8052, 3.57143], [24.3144, -10.189, 6.1859], [21.5071, -7.98134, 7.14286], [18.6998, -5.77363, 6.1859], [16.6447, -4.15747, 3.57143], [15.8925, -3.56592, 0], [16.6447, -4.15747, -3.57143], [18.6998, -5.77363, -6.1859], [21.5071, -7.98134, -7.14286], [24.3144, -10.189, -6.1859], [26.3696, -11.8052, -3.57143]], [[30.935, -13.4683, 0], [29.7522, -12.626, 5.41935], [26.5206, -10.3247, 9.3866], [22.1061, -7.1812, 10.8387], [17.6916, -4.03766, 9.3866], [14.46, -1.73643, 5.41935], [13.2771, -0.894127, 0], [14.46, -1.73643, -5.41935], [17.6916, -4.03766, -9.3866], [22.1061, -7.1812, -10.8387], [26.5206, -10.3247, -9.3866], [29.7522, -12.626, -5.41935], [27.9921, -11.3726, 0], [27.2035, -10.811, 3.6129], [25.0491, -9.27688, 6.25773], [22.1061, -7.1812, 7.22581], [19.1631, -5.08551, 6.25773], [17.0087, -3.55135, 3.6129], [16.2201, -2.98982, 0], [17.0087, -3.55135, -3.6129], [19.1631, -5.08551, -6.25773], [22.1061, -7.1812, -7.22581], [25.0491, -9.27688, -6.25773], [27.2035, -10.811, -3.6129]], [[31.8891, -12.2806, 0], [30.6535, -11.4865, 5.48157], [27.2777, -9.31702, 9.49435], [22.6663, -6.35346, 10.9631], [18.0549, -3.3899, 9.49435], [14.6792, -1.22042, 5.48157], [13.4435, -0.42634, 0], [14.6792, -1.22042, -5.48157], [18.0549, -3.3899, -9.49435], [22.6663, -6.35346, -10.9631], [27.2777, -9.31702, -9.49435], [30.6535, -11.4865, -5.48157], [28.8148, -10.3049, 0], [27.9911, -9.77548, 3.65438], [25.7406, -8.32916, 6.32957], [22.6663, -6.35346, 7.30876], [19.5921, -4.37775, 6.32957], [17.3416, -2.93143, 3.65438], [16.5178, -2.40205, 0], [17.3416, -2.93143, -3.65438], [19.5921, -4.37775, -6.32957], [22.6663, -6.35346, -7.30876], [25.7406, -8.32916, -6.32957], [27.9911, -9.77548, -3.65438]], [[32.7886, -11.0438, 0], [31.5022, -10.3011, 5.54378], [27.9876, -8.27189, 9.60211], [23.1865, -5.5, 11.0876], [18.3855, -2.72811, 9.60211], [14.8709, -0.698947, 5.54378], [13.5844, 0.0437788, 0], [14.8709, -0.698947, -5.54378], [18.3855, -2.72811, -9.60211], [23.1865, -5.5, -11.0876], [27.9876, -8.27189, -9.60211], [31.5022, -10.3011, -5.54378], [29.5879, -9.19585, 0], [28.7303, -8.7007, 3.69585], [26.3872, -7.34793, 6.4014], [23.1865, -5.5, 7.39171], [19.9858, -3.65207, 6.4014], [17.6428, -2.2993, 3.69585], [16.7851, -1.80415, 0], [17.6428, -2.2993, -3.69585], [19.9858, -3.65207, -6.4014], [23.1865, -5.5, -7.39171], [26.3872, -7.34793, -6.4014], [28.7303, -8.7007, -3.69585]], [[33.6312, -9.76038, 0], [32.296, -9.07207, 5.60599], [28.6483, -7.19157, 9.70986], [23.6655, -4.62276, 11.212], [18.6827, -2.05394, 9.70986], [15.0351, -0.173441, 5.60599], [13.6999, 0.51487, 0], [15.0351, -0.173441, -5.60599], [18.6827, -2.05394, -9.70986], [23.6655, -4.62276, -11.212], [28.6483, -7.19157, -9.70986], [32.296, -9.07207, -5.60599], [30.3093, -8.04784, 0], [29.4192, -7.58897, 3.73733], [26.9874, -6.3353, 6.47324], [23.6655, -4.62276, 7.47465], [20.3437, -2.91021, 6.47324], [17.9119, -1.65655, 3.73733], [17.0218, -1.19767, 0], [17.9119, -1.65655, -3.73733], [20.3437, -2.91021, -6.47324], [23.6655, -4.62276, -7.47465], [26.9874, -6.3353, -6.47324], [29.4192, -7.58897, -3.73733]], [[34.4142, -8.43303, 0], [33.0327, -7.8021, 5.6682], [29.2583, -6.07837, 9.81762], [24.1023, -3.72372, 11.3364], [18.9463, -1.36906, 9.81762], [15.1719, 0.354669, 5.6682], [13.7903, 0.985598, 0], [15.1719, 0.354669, -5.6682], [18.9463, -1.36906, -9.81762], [24.1023, -3.72372, -11.3364], [29.2583, -6.07837, -9.81762], [33.0327, -7.8021, -5.6682], [30.9769, -6.86326, 0], [30.0559, -6.44264, 3.7788], [27.5396, -5.29349, 6.54508], [24.1023, -3.72372, 7.5576], [20.665, -2.15394, 6.54508], [18.1487, -1.00479, 3.7788], [17.2276, -0.584173, 0], [18.1487, -1.00479, -3.7788], [20.665, -2.15394, -6.54508], [24.1023, -3.72372, -7.5576], [27.5396, -5.29349, -6.54508], [30.0559, -6.44264, -3.7788]], [[35.1356, -7.06447, 0], [33.7101, -6.4938, 5.73041], [29.8157, -4.93469, 9.92537], [24.4957, -2.80491, 11.4608], [19.1758, -0.675132, 9.92537], [15.2813, 0.883976, 5.73041], [13.8559, 1.45465, 0], [15.2813, 0.883976, -5.73041], [19.1758, -0.675132, -9.92537], [24.4957, -2.80491, -11.4608], [29.8157, -4.93469, -9.92537], [33.7101, -6.4938, -5.73041], [31.589, -5.64462, 0], [30.6387, -5.26417, 3.82028], [28.0423, -4.22476, 6.61691], [24.4957, -2.80491, 7.64055], [20.9491, -1.38506, 6.61691], [18.3528, -0.345653, 3.82028], [17.4025, 0.0347951, 0], [18.3528, -0.345653, -3.82028], [20.9491, -1.38506, -6.61691], [24.4957, -2.80491, -7.64055], [28.0423, -4.22476, -6.61691], [30.6387, -5.26417, -3.82028]], [[35.7931, -5.65759, 0], [34.3263, -5.14994, 5.79263], [30.3191, -3.76301, 10.0331], [24.845, -1.86843, 11.5853], [19.371, 0.0261554, 10.0331], [15.3637, 1.41309, 5.79263], [13.8969, 1.92074, 0], [15.3637, 1.41309, -5.79263], [19.371, 0.0261554, -10.0331], [24.845, -1.86843, -11.5853], [30.3191, -3.76301, -10.0331], [34.3263, -5.14994, -5.79263], [32.1437, -4.39454, 0], [31.1659, -4.0561, 3.86175], [28.4944, -3.13148, 6.68875], [24.845, -1.86843, 7.7235], [21.1957, -0.605372, 6.68875], [18.5241, 0.319248, 3.86175], [17.5463, 0.657683, 0], [18.5241, 0.319248, -3.86175], [21.1957, -0.605372, -6.68875], [24.845, -1.86843, -7.7235], [28.4944, -3.13148, -6.68875], [31.1659, -4.0561, -3.86175]], [[36.3847, -4.21538, 0], [34.8795, -3.7734, 5.85484], [30.767, -2.56588, 10.1409], [25.1494, -0.916384, 11.7097], [19.5317, 0.733115, 10.1409], [15.4193, 1.94063, 5.85484], [13.914, 2.38261, 0], [15.4193, 1.94063, -5.85484], [19.5317, 0.733115, -10.1409], [25.1494, -0.916384, -11.7097], [30.767, -2.56588, -10.1409], [34.8795, -3.7734, -5.85484], [32.6396, -3.11572, 0], [31.6361, -2.82106, 3.90323], [28.8945, -2.01605, 6.76059], [25.1494, -0.916384, 7.80645], [21.4042, 0.183282, 6.76059], [18.6626, 0.988293, 3.90323], [17.6591, 1.28295, 0], [18.6626, 0.988293, -3.90323], [21.4042, 0.183282, -6.76059], [25.1494, -0.916384, -7.80645], [28.8945, -2.01605, -6.76059], [31.6361, -2.82106, -3.90323]], [[36.9086, -2.74093, 0], [35.3678, -2.36714, 5.91705], [31.1583, -1.34594, 10.2486], [25.408, 0.0490624, 11.8341], [19.6578, 1.44406, 10.2486], [15.4483, 2.46527, 5.91705], [13.9075, 2.83906, 0], [15.4483, 2.46527, -5.91705], [19.6578, 1.44406, -10.2486], [25.408, 0.0490624, -11.8341], [31.1583, -1.34594, -10.2486], [35.3678, -2.36714, -5.91705], [33.0751, -1.81093, 0], [32.0479, -1.56174, 3.9447], [29.2415, -0.880936, 6.83242], [25.408, 0.0490624, 7.8894], [21.5745, 0.979061, 6.83242], [18.7682, 1.65987, 3.9447], [17.741, 1.90906, 0], [18.7682, 1.65987, -3.9447], [21.5745, 0.979061, -6.83242], [25.408, 0.0490624, -7.8894], [29.2415, -0.880936, -6.83242], [32.0479, -1.56174, -3.9447]], [[37.3629, -1.23744, 0], [35.7897, -0.934235, 5.97926], [31.4917, -0.105859, 10.3564], [25.6205, 1.02572, 11.9585], [19.7493, 2.15731, 10.3564], [15.4513, 2.98568, 5.97926], [13.8781, 3.28889, 0], [15.4513, 2.98568, -5.97926], [19.7493, 2.15731, -10.3564], [25.6205, 1.02572, -11.9585], [31.4917, -0.105859, -10.3564], [35.7897, -0.934235, -5.97926], [33.4488, -0.483053, 0], [32.4, -0.280916, 3.98618], [29.5346, 0.271335, 6.90426], [25.6205, 1.02572, 7.97235], [21.7064, 1.78011, 6.90426], [18.841, 2.33236, 3.98618], [17.7922, 2.5345, 0], [18.841, 2.33236, -3.98618], [21.7064, 1.78011, -6.90426], [25.6205, 1.02572, -7.97235], [29.5346, 0.271335, -6.90426], [32.4, -0.280916, -3.98618]], [[37.7462, 0.291805, 0], [36.1439, 0.522186, 6.04147], [31.7662, 1.1516, 10.4641], [25.7863, 2.01139, 12.0829], [19.8063, 2.87118, 10.4641], [15.4286, 3.50059, 6.04147], [13.8263, 3.73097, 0], [15.4286, 3.50059, -6.04147], [19.8063, 2.87118, -10.4641], [25.7863, 2.01139, -12.0829], [31.7662, 1.1516, -10.4641], [36.1439, 0.522186, -6.04147], [33.7596, 0.865, 0], [32.6913, 1.01859, 4.02765], [29.7729, 1.43819, 6.97609], [25.7863, 2.01139, 8.0553], [21.7996, 2.58458, 6.97609], [18.8812, 3.00419, 4.02765], [17.8129, 3.15778, 0], [18.8812, 3.00419, -4.02765], [21.7996, 2.58458, -6.97609], [25.7863, 2.01139, -8.0553], [29.7729, 1.43819, -6.97609], [32.6913, 1.01859, -4.02765]], [[38.057, 1.84344, 0], [36.4289, 1.9989, 6.10369], [31.981, 2.42363, 10.5719], [25.9049, 3.00382, 12.2074], [19.8289, 3.58402, 10.5719], [15.3809, 4.00875, 6.10369], [13.7528, 4.16421, 0], [15.3809, 4.00875, -6.10369], [19.8289, 3.58402, -10.5719], [25.9049, 3.00382, -12.2074], [31.981, 2.42363, -10.5719], [36.4289, 1.9989, -6.10369], [34.0063, 2.23023, 0], [32.9209, 2.33387, 4.06912], [29.9556, 2.61703, 7.04793], [25.9049, 3.00382, 8.13825], [21.8542, 3.39062, 7.04793], [18.8889, 3.67377, 4.06912], [17.8035, 3.77741, 0], [18.8889, 3.67377, -4.06912], [21.8542, 3.39062, -7.04793], [25.9049, 3.00382, -8.13825], [29.9556, 2.61703, -7.04793], [32.9209, 2.33387, -4.06912]], [[38.294, 3.41401, 0], [36.6438, 3.49262, 6.1659], [32.1351, 3.70739, 10.6796], [25.9762, 4.00078, 12.3318], [19.8173, 4.29417, 10.6796], [15.3087, 4.50894, 6.1659], [13.6584, 4.58755, 0], [15.3087, 4.50894, -6.1659], [19.8173, 4.29417, -10.6796], [25.9762, 4.00078, -12.3318], [32.1351, 3.70739, -10.6796], [36.6438, 3.49262, -6.1659], [34.1881, 3.6096, 0], [33.0879, 3.66201, 4.1106], [30.0822, 3.80519, 7.11977], [25.9762, 4.00078, 8.2212], [21.8703, 4.19637, 7.11977], [18.8645, 4.33955, 4.1106], [17.7643, 4.39196, 0], [18.8645, 4.33955, -4.1106], [21.8703, 4.19637, -7.11977], [25.9762, 4.00078, -8.2212], [30.0822, 3.80519, -7.11977], [33.0879, 3.66201, -4.1106]], [[38.4562, 5, 0], [36.7874, 5, 6.22811], [32.2281, 5, 10.7874], [26, 5, 12.4562], [19.7719, 5, 10.7874], [15.2126, 5, 6.22811], [13.5438, 5, 0], [15.2126, 5, -6.22811], [19.7719, 5, -10.7874], [26, 5, -12.4562], [32.2281, 5, -10.7874], [36.7874, 5, -6.22811], [34.3041, 5, 0], [33.1916, 5, 4.15207], [30.1521, 5, 7.1916], [26, 5, 8.30415], [21.8479, 5, 7.1916], [18.8084, 5, 4.15207], [17.6959, 5, 0], [18.8084, 5, -4.15207], [21.8479, 5, -7.1916], [26, 5, -8.30415], [30.1521, 5, -7.1916], [33.1916, 5, -4.15207]], [[38.5609, 6.35478, 0], [36.8762, 6.30576, 6.29032], [32.2733, 6.17183, 10.8952], [25.9856, 5.98888, 12.5806], [19.698, 5.80593, 10.8952], [15.0951, 5.672, 6.29032], [13.4103, 5.62298, 0], [15.0951, 5.672, -6.29032], [19.698, 5.80593, -10.8952], [25.9856, 5.98888, -12.5806], [32.2733, 6.17183, -10.8952], [36.8762, 6.30576, -6.29032], [34.3692, 6.23282, 0], [33.246, 6.20014, 4.19355], [30.1774, 6.11085, 7.26344], [25.9856, 5.98888, 8.3871], [21.7938, 5.86691, 7.26344], [18.7253, 5.77763, 4.19355], [17.6021, 5.74494, 0], [18.7253, 5.77763, -4.19355], [21.7938, 5.86691, -7.26344], [25.9856, 5.98888, -8.3871], [30.1774, 6.11085, -7.26344], [33.246, 6.20014, -4.19355]], [[38.6261, 7.71566, 0], [36.9268, 7.61669, 6.35253], [32.2843, 7.34629, 11.0029], [25.9425, 6.97692, 12.7051], [19.6007, 6.60756, 11.0029], [14.9582, 6.33716, 6.35253], [13.2589, 6.23819, 0], [14.9582, 6.33716, -6.35253], [19.6007, 6.60756, -11.0029], [25.9425, 6.97692, -12.7051], [32.2843, 7.34629, -11.0029], [36.9268, 7.61669, -6.35253], [34.3982, 7.46941, 0], [33.2653, 7.40343, 4.23502], [30.1703, 7.22317, 7.33528], [25.9425, 6.97692, 8.47005], [21.7146, 6.73068, 7.33528], [18.6196, 6.55042, 4.23502], [17.4868, 6.48443, 0], [18.6196, 6.55042, -4.23502], [21.7146, 6.73068, -7.33528], [25.9425, 6.97692, -8.47005], [30.1703, 7.22317, -7.33528], [33.2653, 7.40343, -4.23502]], [[38.6513, 9.08146, 0], [36.939, 8.93165, 6.41475], [32.261, 8.52238, 11.1107], [25.8706, 7.9633, 12.8295], [19.4803, 7.40421, 11.1107], [14.8022, 6.99494, 6.41475], [13.0899, 6.84513, 0], [14.8022, 6.99494, -6.41475], [19.4803, 7.40421, -11.1107], [25.8706, 7.9633, -12.8295], [32.261, 8.52238, -11.1107], [36.939, 8.93165, -6.41475], [34.3911, 8.70874, 0], [33.2495, 8.60887, 4.2765], [30.1308, 8.33602, 7.40711], [25.8706, 7.9633, 8.553], [21.6104, 7.59057, 7.40711], [18.4917, 7.31772, 4.2765], [17.3502, 7.21785, 0], [18.4917, 7.31772, -4.2765], [21.6104, 7.59057, -7.40711], [25.8706, 7.9633, -8.553], [30.1308, 8.33602, -7.40711], [33.2495, 8.60887, -4.2765]], [[38.6364, 10.451, 0], [36.9127, 10.2495, 6.47696], [32.2033, 9.69909, 11.2184], [25.7701, 8.94716, 12.9539], [19.3369, 8.19523, 11.2184], [14.6275, 7.64478, 6.47696], [12.9038, 7.4433, 0], [14.6275, 7.64478, -6.47696], [19.3369, 8.19523, -11.2184], [25.7701, 8.94716, -12.9539], [32.2033, 9.69909, -11.2184], [36.9127, 10.2495, -6.47696], [34.3477, 9.94973, 0], [33.1985, 9.81541, 4.31797], [30.0589, 9.44845, 7.47895], [25.7701, 8.94716, 8.63594], [21.4813, 8.44587, 7.47895], [18.3417, 8.07891, 4.31797], [17.1926, 7.94459, 0], [18.3417, 8.07891, -4.31797], [21.4813, 8.44587, -7.47895], [25.7701, 8.94716, -8.63594], [30.0589, 9.44845, -7.47895], [33.1985, 9.81541, -4.31797]], [[38.5813, 11.8232, 0], [36.8476, 11.5692, 6.53917], [32.1111, 10.8754, 11.3262], [25.641, 9.92768, 13.0783], [19.1709, 8.97995, 11.3262], [14.4344, 8.28616, 6.53917], [12.7008, 8.03221, 0], [14.4344, 8.28616, -6.53917], [19.1709, 8.97995, -11.3262], [25.641, 9.92768, -13.0783], [32.1111, 10.8754, -11.3262], [36.8476, 11.5692, -6.53917], [34.2679, 11.1913, 0], [33.1121, 11.022, 4.35945], [29.9544, 10.5595, 7.55078], [25.641, 9.92768, 8.71889], [21.3276, 9.29586, 7.55078], [18.17, 8.83333, 4.35945], [17.0142, 8.66404, 0], [18.17, 8.83333, -4.35945], [21.3276, 9.29586, -7.55078], [25.641, 9.92768, -8.71889], [29.9544, 10.5595, -7.55078], [33.1121, 11.022, -4.35945]], [[38.4856, 13.1967, 0], [36.7437, 12.8895, 6.60138], [31.9846, 12.0504, 11.4339], [25.4835, 10.904, 13.2028], [18.9824, 9.75772, 11.4339], [14.2232, 8.91856, 6.60138], [12.4813, 8.6114, 0], [14.2232, 8.91856, -6.60138], [18.9824, 9.75772, -11.4339], [25.4835, 10.904, -13.2028], [31.9846, 12.0504, -11.4339], [36.7437, 12.8895, -6.60138], [34.1516, 12.4325, 0], [32.9903, 12.2277, 4.40092], [29.8175, 11.6683, 7.62262], [25.4835, 10.904, 8.80184], [21.1494, 10.1398, 7.62262], [17.9766, 9.58038, 4.40092], [16.8153, 9.37561, 0], [17.9766, 9.58038, -4.40092], [21.1494, 10.1398, -7.62262], [25.4835, 10.904, -8.80184], [29.8175, 11.6683, -7.62262], [32.9903, 12.2277, -4.40092]], [[38.3494, 14.5704, 0], [36.6008, 14.2093, 6.66359], [31.8235, 13.2229, 11.5417], [25.2976, 11.8754, 13.3272], [18.7717, 10.5279, 11.5417], [13.9943, 9.54147, 6.66359], [12.2457, 9.18041, 0], [13.9943, 9.54147, -6.66359], [18.7717, 10.5279, -11.5417], [25.2976, 11.8754, -13.3272], [31.8235, 13.2229, -11.5417], [36.6008, 14.2093, -6.66359], [33.9988, 13.6721, 0], [32.8331, 13.4314, 4.4424], [29.6482, 12.7737, 7.69446], [25.2976, 11.8754, 8.88479], [20.947, 10.9771, 7.69446], [17.7621, 10.3194, 4.4424], [16.5963, 10.0787, 0], [17.7621, 10.3194, -4.4424], [20.947, 10.9771, -7.69446], [25.2976, 11.8754, -8.88479], [29.6482, 12.7737, -7.69446], [32.8331, 13.4314, -4.4424]], [[38.1725, 15.9431, 0], [36.419, 15.5275, 6.72581], [31.628, 14.392, 11.6494], [25.0835, 12.8409, 13.4516], [18.539, 11.2899, 11.6494], [13.7481, 10.1544, 6.72581], [11.9945, 9.73878, 0], [13.7481, 10.1544, -6.72581], [18.539, 11.2899, -11.6494], [25.0835, 12.8409, -13.4516], [31.628, 14.392, -11.6494], [36.419, 15.5275, -6.72581], [33.8095, 14.909, 0], [32.6405, 14.632, 4.48387], [29.4465, 13.875, 7.76629], [25.0835, 12.8409, 8.96774], [20.7205, 11.8069, 7.76629], [17.5266, 11.0499, 4.48387], [16.3575, 10.7728, 0], [17.5266, 11.0499, -4.48387], [20.7205, 11.8069, -7.76629], [25.0835, 12.8409, -8.96774], [29.4465, 13.875, -7.76629], [32.6405, 14.632, -4.48387]], [[37.9549, 17.3136, 0], [36.1981, 16.8428, 6.78802], [31.3982, 15.5567, 11.7572], [24.8415, 13.7998, 13.576], [18.2848, 12.043, 11.7572], [13.4849, 10.7569, 6.78802], [11.728, 10.2861, 0], [13.4849, 10.7569, -6.78802], [18.2848, 12.043, -11.7572], [24.8415, 13.7998, -13.576], [31.3982, 15.5567, -11.7572], [36.1981, 16.8428, -6.78802], [33.5838, 16.1423, 0], [32.4125, 15.8285, 4.52535], [29.2126, 14.9711, 7.83813], [24.8415, 13.7998, 9.05069], [20.4703, 12.6286, 7.83813], [17.2704, 11.7712, 4.52535], [16.0992, 11.4574, 0], [17.2704, 11.7712, -4.52535], [20.4703, 12.6286, -7.83813], [24.8415, 13.7998, -9.05069], [29.2126, 14.9711, -7.83813], [32.4125, 15.8285, -4.52535]], [[37.6965, 18.6806, 0], [35.9381, 18.1542, 6.85023], [31.1341, 16.716, 11.8649], [24.5716, 14.7513, 13.7005], [18.0092, 12.7866, 11.8649], [13.2051, 11.3484, 6.85023], [11.4467, 10.822, 0], [13.2051, 11.3484, -6.85023], [18.0092, 12.7866, -11.8649], [24.5716, 14.7513, -13.7005], [31.1341, 16.716, -11.8649], [35.9381, 18.1542, -6.85023], [33.3216, 17.3709, 0], [32.1493, 17.0199, 4.56682], [28.9466, 16.0611, 7.90996], [24.5716, 14.7513, 9.13364], [20.1967, 13.4415, 7.90996], [16.994, 12.4827, 4.56682], [15.8217, 12.1318, 0], [16.994, 12.4827, -4.56682], [20.1967, 13.4415, -7.90996], [24.5716, 14.7513, -9.13364], [28.9466, 16.0611, -7.90996], [32.1493, 17.0199, -4.56682]], [[37.3974, 20.0431, 0], [35.6392, 19.4605, 6.91244], [30.8358, 17.8688, 11.9727], [24.2742, 15.6945, 13.8249], [17.7127, 13.5202, 11.9727], [12.9093, 11.9286, 6.91244], [11.1511, 11.346, 0], [12.9093, 11.9286, -6.91244], [17.7127, 13.5202, -11.9727], [24.2742, 15.6945, -13.8249], [30.8358, 17.8688, -11.9727], [35.6392, 19.4605, -6.91244], [33.023, 18.5936, 0], [31.8509, 18.2052, 4.60829], [28.6486, 17.144, 7.9818], [24.2742, 15.6945, 9.21659], [19.8999, 14.245, 7.9818], [16.6976, 13.1839, 4.60829], [15.5255, 12.7955, 0], [16.6976, 13.1839, -4.60829], [19.8999, 14.245, -7.9818], [24.2742, 15.6945, -9.21659], [28.6486, 17.144, -7.9818], [31.8509, 18.2052, -4.60829]], [[37.0576, 21.3996, 0], [35.3015, 20.7604, 6.97465], [30.5036, 19.0142, 12.0805], [23.9495, 16.6287, 13.9493], [17.3955, 14.2432, 12.0805], [12.5976, 12.4969, 6.97465], [10.8415, 11.8577, 0], [12.5976, 12.4969, -6.97465], [17.3955, 14.2432, -12.0805], [23.9495, 16.6287, -13.9493], [30.5036, 19.0142, -12.0805], [35.3015, 20.7604, -6.97465], [32.6883, 19.8093, 0], [31.5175, 19.3832, 4.64977], [28.3189, 18.219, 8.05364], [23.9495, 16.6287, 9.29954], [19.5802, 15.0384, 8.05364], [16.3816, 13.8742, 4.64977], [15.2108, 13.4481, 0], [16.3816, 13.8742, -4.64977], [19.5802, 15.0384, -8.05364], [23.9495, 16.6287, -9.29954], [28.3189, 18.219, -8.05364], [31.5175, 19.3832, -4.64977]], [[36.6772, 22.7491, 0], [34.9249, 22.053, 7.03687], [30.1375, 20.1511, 12.1882], [23.5978, 17.553, 14.0737], [17.0581, 14.955, 12.1882], [12.2707, 13.053, 7.03687], [10.5184, 12.3569, 0], [12.2707, 13.053, -7.03687], [17.0581, 14.955, -12.1882], [23.5978, 17.553, -14.0737], [30.1375, 20.1511, -12.1882], [34.9249, 22.053, -7.03687], [32.3174, 21.0171, 0], [31.1492, 20.553, 4.69124], [27.9576, 19.285, 8.12547], [23.5978, 17.553, 9.38249], [19.238, 15.821, 8.12547], [16.0464, 14.553, 4.69124], [14.8782, 14.0889, 0], [16.0464, 14.553, -4.69124], [19.238, 15.821, -8.12547], [23.5978, 17.553, -9.38249], [27.9576, 19.285, -8.12547], [31.1492, 20.553, -4.69124]], [[36.2563, 24.0903, 0], [34.5097, 23.3369, 7.09908], [29.7378, 21.2785, 12.296], [23.2193, 18.4667, 14.1982], [16.7009, 15.6549, 12.296], [11.929, 13.5965, 7.09908], [10.1824, 12.8431, 0], [11.929, 13.5965, -7.09908], [16.7009, 15.6549, -12.296], [23.2193, 18.4667, -14.1982], [29.7378, 21.2785, -12.296], [34.5097, 23.3369, -7.09908], [31.9107, 22.2158, 0], [30.7462, 21.7135, 4.73272], [27.565, 20.3412, 8.19731], [23.2193, 18.4667, 9.46544], [18.8737, 16.5922, 8.19731], [15.6924, 15.2199, 4.73272], [14.528, 14.7176, 0], [15.6924, 15.2199, -4.73272], [18.8737, 16.5922, -8.19731], [23.2193, 18.4667, -9.46544], [27.565, 20.3412, -8.19731], [30.7462, 21.7135, -4.73272]], [[35.7951, 25.422, 0], [34.0561, 24.6111, 7.16129], [29.3048, 22.3955, 12.4037], [22.8145, 19.369, 14.3226], [16.3241, 16.3425, 12.4037], [11.5729, 14.127, 7.16129], [9.8338, 13.316, 0], [11.5729, 14.127, -7.16129], [16.3241, 16.3425, -12.4037], [22.8145, 19.369, -14.3226], [29.3048, 22.3955, -12.4037], [34.0561, 24.6111, -7.16129], [31.4682, 23.4043, 0], [30.3089, 22.8637, 4.77419], [27.1414, 21.3867, 8.26915], [22.8145, 19.369, 9.54839], [18.4876, 17.3514, 8.26915], [15.3201, 15.8743, 4.77419], [14.1607, 15.3337, 0], [15.3201, 15.8743, -4.77419], [18.4876, 17.3514, -8.26915], [22.8145, 19.369, -9.54839], [27.1414, 21.3867, -8.26915], [30.3089, 22.8637, -4.77419]], [[35.2938, 26.743, 0], [33.5642, 25.8743, 7.2235], [28.8387, 23.5011, 12.5115], [22.3835, 20.2592, 14.447], [15.9284, 17.0173, 12.5115], [11.2028, 14.644, 7.2235], [9.47319, 13.7754, 0], [11.2028, 14.644, -7.2235], [15.9284, 17.0173, -12.5115], [22.3835, 20.2592, -14.447], [28.8387, 23.5011, -12.5115], [33.5642, 25.8743, -7.2235], [30.9904, 24.5817, 0], [29.8373, 24.0026, 4.81567], [26.6869, 22.4204, 8.34098], [22.3835, 20.2592, 9.63134], [18.0801, 18.0979, 8.34098], [14.9297, 16.5157, 4.81567], [13.7766, 15.9366, 0], [14.9297, 16.5157, -4.81567], [18.0801, 18.0979, -8.34098], [22.3835, 20.2592, -9.63134], [26.6869, 22.4204, -8.34098], [29.8373, 24.0026, -4.81567]], [[34.7526, 28.052, 0], [33.0343, 27.1255, 7.28571], [28.3397, 24.5942, 12.6192], [21.9268, 21.1364, 14.5714], [15.514, 17.6786, 12.6192], [10.8194, 15.1473, 7.28571], [9.10106, 14.2208, 0], [10.8194, 15.1473, -7.28571], [15.514, 17.6786, -12.6192], [21.9268, 21.1364, -14.5714], [28.3397, 24.5942, -12.6192], [33.0343, 27.1255, -7.28571], [30.4774, 25.7468, 0], [29.3318, 25.1291, 4.85714], [26.2021, 23.4416, 8.41282], [21.9268, 21.1364, 9.71429], [17.6516, 18.8312, 8.41282], [14.5219, 17.1437, 4.85714], [13.3763, 16.526, 0], [14.5219, 17.1437, -4.85714], [17.6516, 18.8312, -8.41282], [21.9268, 21.1364, -9.71429], [26.2021, 23.4416, -8.41282], [29.3318, 25.1291, -4.85714]], [[34.1718, 29.3479, 0], [32.4668, 28.3635, 7.34793], [27.8084, 25.674, 12.727], [21.4449, 22, 14.6959], [15.0814, 18.326, 12.727], [10.423, 15.6365, 7.34793], [8.71788, 14.6521, 0], [10.423, 15.6365, -7.34793], [15.0814, 18.326, -12.727], [21.4449, 22, -14.6959], [27.8084, 25.674, -12.727], [32.4668, 28.3635, -7.34793], [29.9295, 26.8986, 0], [28.7928, 26.2423, 4.89862], [25.6872, 24.4493, 8.48465], [21.4449, 22, 9.79724], [17.2025, 19.5507, 8.48465], [14.0969, 17.7577, 4.89862], [12.9602, 17.1014, 0], [14.0969, 17.7577, -4.89862], [17.2025, 19.5507, -8.48465], [21.4449, 22, -9.79724], [25.6872, 24.4493, -8.48465], [28.7928, 26.2423, -4.89862]], [[33.5518, 30.6295, 0], [31.8618, 29.5871, 7.41014], [27.2449, 26.7394, 12.8347], [20.938, 22.8492, 14.8203], [14.6311, 18.9591, 12.8347], [10.0141, 16.1113, 7.41014], [8.32418, 15.0689, 0], [10.0141, 16.1113, -7.41014], [14.6311, 18.9591, -12.8347], [20.938, 22.8492, -14.8203], [27.2449, 26.7394, -12.8347], [31.8618, 29.5871, -7.41014], [29.3472, 28.0361, 0], [28.2205, 27.3412, 4.94009], [25.1426, 25.4426, 8.55649], [20.938, 22.8492, 9.88018], [16.7334, 20.2558, 8.55649], [13.6554, 18.3572, 4.94009], [12.5288, 17.6623, 0], [13.6554, 18.3572, -4.94009], [16.7334, 20.2558, -8.55649], [20.938, 22.8492, -9.88018], [25.1426, 25.4426, -8.55649], [28.2205, 27.3412, -4.94009]], [[32.8927, 31.8956, 0], [31.2199, 30.7953, 7.47235], [26.6496, 27.7894, 12.9425], [20.4066, 23.6833, 14.9447], [14.1635, 19.5772, 12.9425], [9.59329, 16.5713, 7.47235], [7.92047, 15.4711, 0], [9.59329, 16.5713, -7.47235], [14.1635, 19.5772, -12.9425], [20.4066, 23.6833, -14.9447], [26.6496, 27.7894, -12.9425], [31.2199, 30.7953, -7.47235], [28.7307, 29.1581, 0], [27.6154, 28.4246, 4.98157], [24.5686, 26.4207, 8.62833], [20.4066, 23.6833, 9.96313], [16.2445, 20.9459, 8.62833], [13.1977, 18.942, 4.98157], [12.0825, 18.2085, 0], [13.1977, 18.942, -4.98157], [16.2445, 20.9459, -8.62833], [20.4066, 23.6833, -9.96313], [24.5686, 26.4207, -8.62833], [27.6154, 28.4246, -4.98157]], [[32.1951, 33.1449, 0], [30.5413, 31.9869, 7.53456], [26.0231, 28.8232, 13.0502], [19.8512, 24.5016, 15.0691], [13.6792, 20.18, 13.0502], [9.16103, 17.0163, 7.53456], [7.50727, 15.8583, 0], [9.16103, 17.0163, -7.53456], [13.6792, 20.18, -13.0502], [19.8512, 24.5016, -15.0691], [26.0231, 28.8232, -13.0502], [30.5413, 31.9869, -7.53456], [28.0804, 30.2638, 0], [26.9779, 29.4918, 5.02304], [23.9658, 27.3827, 8.70016], [19.8512, 24.5016, 10.0461], [15.7365, 21.6205, 8.70016], [12.7244, 19.5114, 5.02304], [11.6219, 18.7394, 0], [12.7244, 19.5114, -5.02304], [15.7365, 21.6205, -8.70016], [19.8512, 24.5016, -10.0461], [23.9658, 27.3827, -8.70016], [26.9779, 29.4918, -5.02304]], [[31.4593, 34.3764, 0], [29.8265, 33.1608, 7.59677], [25.3657, 29.8399, 13.158], [19.2722, 25.3034, 15.1935], [13.1786, 20.7669, 13.158], [8.71785, 17.446, 7.59677], [7.08509, 16.2304, 0], [8.71785, 17.446, -7.59677], [13.1786, 20.7669, -13.158], [19.2722, 25.3034, -15.1935], [25.3657, 29.8399, -13.158], [29.8265, 33.1608, -7.59677], [27.3969, 31.352, 0], [26.3084, 30.5417, 5.06452], [23.3346, 28.3277, 8.772], [19.2722, 25.3034, 10.129], [15.2098, 22.2791, 8.772], [12.236, 20.0651, 5.06452], [11.1475, 19.2548, 0], [12.236, 20.0651, -5.06452], [15.2098, 22.2791, -8.772], [19.2722, 25.3034, -10.129], [23.3346, 28.3277, -8.772], [26.3084, 30.5417, -5.06452]], [[30.6858, 35.5888, 0], [29.076, 34.3159, 7.65899], [24.678, 30.8384, 13.2658], [18.6701, 26.088, 15.318], [12.6623, 21.3376, 13.2658], [8.26427, 17.8601, 7.65899], [6.65448, 16.5873, 0], [8.26427, 17.8601, -7.65899], [12.6623, 21.3376, -13.2658], [18.6701, 26.088, -15.318], [24.678, 30.8384, -13.2658], [29.076, 34.3159, -7.65899], [26.6806, 32.4218, 0], [25.6074, 31.5733, 5.10599], [22.6754, 29.2549, 8.84384], [18.6701, 26.088, 10.212], [14.6649, 22.9211, 8.84384], [11.7329, 20.6027, 5.10599], [10.6597, 19.7542, 0], [11.7329, 20.6027, -5.10599], [14.6649, 22.9211, -8.84384], [18.6701, 26.088, -10.212], [22.6754, 29.2549, -8.84384], [25.6074, 31.5733, -5.10599]], [[29.8751, 36.781, 0], [28.2902, 35.4511, 7.7212], [23.9603, 31.8179, 13.3735], [18.0455, 26.8548, 15.4424], [12.1307, 21.8917, 13.3735], [7.80081, 18.2585, 7.7212], [6.21595, 16.9286, 0], [7.80081, 18.2585, -7.7212], [12.1307, 21.8917, -13.3735], [18.0455, 26.8548, -15.4424], [23.9603, 31.8179, -13.3735], [28.2902, 35.4511, -7.7212], [25.9319, 33.4722, 0], [24.8753, 32.5857, 5.14747], [21.9887, 30.1635, 8.91567], [18.0455, 26.8548, 10.2949], [14.1023, 23.5461, 8.91567], [11.2157, 21.1239, 5.14747], [10.1591, 20.2373, 0], [11.2157, 21.1239, -5.14747], [14.1023, 23.5461, -8.91567], [18.0455, 26.8548, -10.2949], [21.9887, 30.1635, -8.91567], [24.8753, 32.5857, -5.14747]], [[29.0277, 37.9518, 0], [27.4697, 36.5653, 7.78341], [23.2133, 32.7774, 13.4813], [17.3989, 27.6031, 15.5668], [11.5844, 22.4287, 13.4813], [7.32801, 18.6408, 7.78341], [5.77005, 17.2543, 0], [7.32801, 18.6408, -7.78341], [11.5844, 22.4287, -13.4813], [17.3989, 27.6031, -15.5668], [23.2133, 32.7774, -13.4813], [27.4697, 36.5653, -7.78341], [25.1514, 34.5022, 0], [24.1127, 33.5779, 5.18894], [21.2751, 31.0526, 8.98751], [17.3989, 27.6031, 10.3779], [13.5226, 24.1535, 8.98751], [10.685, 21.6282, 5.18894], [9.64632, 20.7039, 0], [10.685, 21.6282, -5.18894], [13.5226, 24.1535, -8.98751], [17.3989, 27.6031, -10.3779], [21.2751, 31.0526, -8.98751], [24.1127, 33.5779, -5.18894]], [[28.1441, 39.1002, 0], [26.615, 37.6576, 7.84562], [22.4374, 33.7162, 13.589], [16.7307, 28.3322, 15.6912], [11.024, 22.9482, 13.589], [6.84641, 19.0069, 7.84562], [5.31731, 17.5642, 0], [6.84641, 19.0069, -7.84562], [11.024, 22.9482, -13.589], [16.7307, 28.3322, -15.6912], [22.4374, 33.7162, -13.589], [26.615, 37.6576, -7.84562], [24.3396, 35.5109, 0], [23.3202, 34.5491, 5.23041], [20.5352, 31.9215, 9.05934], [16.7307, 28.3322, 10.4608], [12.9262, 24.7429, 9.05934], [10.1412, 22.1153, 5.23041], [9.12177, 21.1536, 0], [10.1412, 22.1153, -5.23041], [12.9262, 24.7429, -9.05934], [16.7307, 28.3322, -10.4608], [20.5352, 31.9215, -9.05934], [23.3202, 34.5491, -5.23041]], [[27.225, 40.225, 0], [25.7267, 38.7267, 7.90783], [21.6333, 34.6333, 13.6968], [16.0416, 29.0416, 15.8157], [10.4499, 23.4499, 13.6968], [6.35655, 19.3566, 7.90783], [4.85826, 17.8583, 0], [6.35655, 19.3566, -7.90783], [10.4499, 23.4499, -13.6968], [16.0416, 29.0416, -15.8157], [21.6333, 34.6333, -13.6968], [25.7267, 38.7267, -7.90783], [23.4972, 36.4972, 0], [22.4984, 35.4984, 5.27189], [19.7694, 32.7694, 9.13118], [16.0416, 29.0416, 10.5438], [12.3138, 25.3138, 9.13118], [9.58491, 22.5849, 5.27189], [8.58605, 21.5861, 0], [9.58491, 22.5849, -5.27189], [12.3138, 25.3138, -9.13118], [16.0416, 29.0416, -10.5438], [19.7694, 32.7694, -9.13118], [22.4984, 35.4984, -5.27189]], [[26.271, 41.3251, 0], [24.8055, 39.7718, 7.97005], [20.8016, 35.5279, 13.8045], [15.3322, 29.7307, 15.9401], [9.86284, 23.9335, 13.8045], [5.85898, 19.6897, 7.97005], [4.39346, 18.1363, 0], [5.85898, 19.6897, -7.97005], [9.86284, 23.9335, -13.8045], [15.3322, 29.7307, -15.9401], [20.8016, 35.5279, -13.8045], [24.8055, 39.7718, -7.97005], [22.6247, 37.4603, 0], [21.6477, 36.4247, 5.31336], [18.9785, 33.5955, 9.20302], [15.3322, 29.7307, 10.6267], [11.686, 25.8659, 9.20302], [9.01672, 23.0367, 5.31336], [8.03971, 22.0011, 0], [9.01672, 23.0367, -5.31336], [11.686, 25.8659, -9.20302], [15.3322, 29.7307, -10.6267], [18.9785, 33.5955, -9.20302], [21.6477, 36.4247, -5.31336]], [[25.2827, 42.3994, 0], [23.8519, 40.7917, 8.03226], [19.9429, 36.3992, 13.9123], [14.6031, 30.3989, 16.0645], [9.26325, 24.3986, 13.9123], [5.35423, 20.006, 8.03226], [3.92344, 18.3983, 0], [5.35423, 20.006, -8.03226], [9.26325, 24.3986, -13.9123], [14.6031, 30.3989, -16.0645], [19.9429, 36.3992, -13.9123], [23.8519, 40.7917, -8.03226], [21.7228, 38.3992, 0], [20.7689, 37.3274, 5.35484], [18.1629, 34.3991, 9.27485], [14.6031, 30.3989, 10.7097], [11.0432, 26.3987, 9.27485], [8.43718, 23.4703, 5.35484], [7.48331, 22.3985, 0], [8.43718, 23.4703, -5.35484], [11.0432, 26.3987, -9.27485], [14.6031, 30.3989, -10.7097], [18.1629, 34.3991, -9.27485], [20.7689, 37.3274, -5.35484]], [[24.2608, 43.447, 0], [22.8667, 41.7855, 8.09447], [19.0578, 37.2462, 14.02], [13.8548, 31.0455, 16.1889], [8.65175, 24.8448, 14.02], [4.84287, 20.3055, 8.09447], [3.44873, 18.6441, 0], [4.84287, 20.3055, -8.09447], [8.65175, 24.8448, -14.02], [13.8548, 31.0455, -16.1889], [19.0578, 37.2462, -14.02], [22.8667, 41.7855, -8.09447], [20.7921, 39.3131, 0], [19.8627, 38.2055, 5.39631], [17.3235, 35.1793, 9.34669], [13.8548, 31.0455, 10.7926], [10.3861, 26.9117, 9.34669], [7.84684, 23.8855, 5.39631], [6.91741, 22.7779, 0], [7.84684, 23.8855, -5.39631], [10.3861, 26.9117, -9.34669], [13.8548, 31.0455, -10.7926], [17.3235, 35.1793, -9.34669], [19.8627, 38.2055, -5.39631]], [[23.2061, 44.4666, 0], [21.8506, 42.7522, 8.15668], [18.1471, 38.0684, 14.1278], [13.088, 31.6701, 16.3134], [8.02894, 25.2719, 14.1278], [4.32545, 20.5881, 8.15668], [2.96988, 18.8737, 0], [4.32545, 20.5881, -8.15668], [8.02894, 25.2719, -14.1278], [13.088, 31.6701, -16.3134], [18.1471, 38.0684, -14.1278], [21.8506, 42.7522, -8.15668], [19.8334, 40.2011, 0], [18.9297, 39.0582, 5.43779], [16.4607, 35.9356, 9.41853], [13.088, 31.6701, 10.8756], [9.7153, 27.4046, 9.41853], [7.2463, 24.2821, 5.43779], [6.34259, 23.1392, 0], [7.2463, 24.2821, -5.43779], [9.7153, 27.4046, -9.41853], [13.088, 31.6701, -10.8756], [16.4607, 35.9356, -9.41853], [18.9297, 39.0582, -5.43779]], [[22.1194, 45.4573, 0], [20.8043, 43.6908, 8.21889], [17.2114, 38.8648, 14.2355], [12.3034, 32.2722, 16.4378], [7.39541, 25.6796, 14.2355], [3.80252, 20.8535, 8.21889], [2.48743, 19.0871, 0], [3.80252, 20.8535, -8.21889], [7.39541, 25.6796, -14.2355], [12.3034, 32.2722, -16.4378], [17.2114, 38.8648, -14.2355], [20.8043, 43.6908, -8.21889], [18.8474, 41.0623, 0], [17.9706, 39.8846, 5.47926], [15.5754, 36.6672, 9.49036], [12.3034, 32.2722, 10.9585], [9.0314, 27.8771, 9.49036], [6.63614, 24.6597, 5.47926], [5.75941, 23.4821, 0], [6.63614, 24.6597, -5.47926], [9.0314, 27.8771, -9.49036], [12.3034, 32.2722, -10.9585], [15.5754, 36.6672, -9.49036], [17.9706, 39.8846, -5.47926]], [[21.0013, 46.4181, 0], [19.7286, 44.6005, 8.28111], [16.2514, 39.6347, 14.3433], [11.5016, 32.8512, 16.5622], [6.75175, 26.0677, 14.3433], [3.27462, 21.1018, 8.28111], [2.0019, 19.2842, 0], [3.27462, 21.1018, -8.28111], [6.75175, 26.0677, -14.3433], [11.5016, 32.8512, -16.5622], [16.2514, 39.6347, -14.3433], [19.7286, 44.6005, -8.28111], [17.8347, 41.8958, 0], [16.9863, 40.6841, 5.52074], [14.6682, 37.3735, 9.5622], [11.5016, 32.8512, 11.0415], [8.33503, 28.3288, 9.5622], [6.01695, 25.0183, 5.52074], [5.16847, 23.8065, 0], [6.01695, 25.0183, -5.52074], [8.33503, 28.3288, -9.5622], [11.5016, 32.8512, -11.0415], [14.6682, 37.3735, -9.5622], [16.9863, 40.6841, -5.52074]], [[19.8528, 47.3481, 0], [18.6243, 45.4803, 8.34332], [15.268, 40.3773, 14.4511], [10.6833, 33.4066, 16.6866], [6.09858, 26.4358, 14.4511], [2.74232, 21.3329, 8.34332], [1.51385, 19.4651, 0], [2.74232, 21.3329, -8.34332], [6.09858, 26.4358, -14.4511], [10.6833, 33.4066, -16.6866], [15.268, 40.3773, -14.4511], [18.6243, 45.4803, -8.34332], [16.7963, 42.7009, 0], [15.9773, 41.4557, 5.56221], [13.7398, 38.0537, 9.63403], [10.6833, 33.4066, 11.1244], [7.62682, 28.7594, 9.63403], [5.38932, 25.3575, 5.56221], [4.57033, 24.1123, 0], [5.38932, 25.3575, -5.56221], [7.62682, 28.7594, -9.63403], [10.6833, 33.4066, -11.1244], [13.7398, 38.0537, -9.63403], [15.9773, 41.4557, -5.56221]], [[18.6746, 48.2461, 0], [17.4922, 46.3292, 8.40553], [14.2619, 41.0921, 14.5588], [9.8492, 33.938, 16.8111], [5.4365, 26.7839, 14.5588], [2.20617, 21.5467, 8.40553], [1.02379, 19.6298, 0], [2.20617, 21.5467, -8.40553], [5.4365, 26.7839, -14.5588], [9.8492, 33.938, -16.8111], [14.2619, 41.0921, -14.5588], [17.4922, 46.3292, -8.40553], [15.7328, 43.4767, 0], [14.9446, 42.1988, 5.60369], [12.791, 38.7074, 9.70587], [9.8492, 33.938, 11.2074], [6.9074, 29.1686, 9.70587], [4.75385, 25.6771, 5.60369], [3.9656, 24.3992, 0], [4.75385, 25.6771, -5.60369], [6.9074, 29.1686, -9.70587], [9.8492, 33.938, -11.2074], [12.791, 38.7074, -9.70587], [14.9446, 42.1988, -5.60369]], [[17.4677, 49.1114, 0], [16.3333, 47.1465, 8.46774], [13.2339, 41.7781, 14.6666], [9, 34.4449, 16.9355], [4.76613, 27.1116, 14.6666], [1.66672, 21.7433, 8.46774], [0.532258, 19.7783, 0], [1.66672, 21.7433, -8.46774], [4.76613, 27.1116, -14.6666], [9, 34.4449, -16.9355], [13.2339, 41.7781, -14.6666], [16.3333, 47.1465, -8.46774], [14.6452, 44.2226, 0], [13.8889, 42.9126, 5.64516], [11.8226, 39.3337, 9.77771], [9, 34.4449, 11.2903], [6.17742, 29.556, 9.77771], [4.11115, 25.9771, 5.64516], [3.35484, 24.6672, 0], [4.11115, 25.9771, -5.64516], [6.17742, 29.556, -9.77771], [9, 34.4449, -11.2903], [11.8226, 39.3337, -9.77771], [13.8889, 42.9126, -5.64516]], [[16.2331, 49.943, 0], [15.1483, 47.9312, 8.52995], [12.1847, 42.4349, 14.7743], [8.13641, 34.9268, 17.0599], [4.08809, 27.4188, 14.7743], [1.12452, 21.9225, 8.52995], [0.039774, 19.9107, 0], [1.12452, 21.9225, -8.52995], [4.08809, 27.4188, -14.7743], [8.13641, 34.9268, -17.0599], [12.1847, 42.4349, -14.7743], [15.1483, 47.9312, -8.52995], [13.5342, 44.9376, 0], [12.811, 43.5964, 5.68664], [10.8353, 39.9322, 9.84954], [8.13641, 34.9268, 11.3733], [5.43753, 29.9215, 9.84954], [3.46182, 26.2573, 5.68664], [2.73865, 24.9161, 0], [3.46182, 26.2573, -5.68664], [5.43753, 29.9215, -9.84954], [8.13641, 34.9268, -11.3733], [10.8353, 39.9322, -9.84954], [12.811, 43.5964, -5.68664]], [[14.9715, 50.74, 0], [13.9382, 48.6826, 8.59217], [11.1153, 43.0617, 14.8821], [7.25917, 35.3835, 17.1843], [3.40302, 27.7053, 14.8821], [0.580112, 22.0844, 8.59217], [-0.453142, 20.027, 0], [0.580112, 22.0844, -8.59217], [3.40302, 27.7053, -14.8821], [7.25917, 35.3835, -17.1843], [11.1153, 43.0617, -14.8821], [13.9382, 48.6826, -8.59217], [12.4007, 45.6212, 0], [11.7119, 44.2496, 5.72811], [9.82994, 40.5023, 9.92138], [7.25917, 35.3835, 11.4562], [4.6884, 30.2647, 9.92138], [2.80647, 26.5174, 5.72811], [2.11763, 25.1459, 0], [2.80647, 26.5174, -5.72811], [4.6884, 30.2647, -9.92138], [7.25917, 35.3835, -11.4562], [9.82994, 40.5023, -9.92138], [11.7119, 44.2496, -5.72811]], [[13.684, 51.5015, 0], [12.704, 49.3999, 8.65438], [10.0265, 43.658, 14.9898], [6.36902, 35.8145, 17.3088], [2.71152, 27.9709, 14.9898], [0.0340483, 22.2291, 8.65438], [-0.945975, 20.1274, 0], [0.0340483, 22.2291, -8.65438], [2.71152, 27.9709, -14.9898], [6.36902, 35.8145, -17.3088], [10.0265, 43.658, -14.9898], [12.704, 49.3999, -8.65438], [11.2457, 46.2725, 0], [10.5923, 44.8714, 5.76959], [8.80735, 41.0435, 9.99321], [6.36902, 35.8145, 11.5392], [3.93069, 30.5854, 9.99321], [2.14571, 26.7575, 5.76959], [1.49236, 25.3564, 0], [2.14571, 26.7575, -5.76959], [3.93069, 30.5854, -9.99321], [6.36902, 35.8145, -11.5392], [8.80735, 41.0435, -9.99321], [10.5923, 44.8714, -5.76959]], [[12.3716, 52.2268, 0], [11.4466, 50.0822, 8.71659], [8.91918, 44.2231, 15.0976], [5.46671, 36.2193, 17.4332], [2.01425, 28.2156, 15.0976], [-0.513133, 22.3565, 8.71659], [-1.43822, 20.2119, 0], [-0.513133, 22.3565, -8.71659], [2.01425, 28.2156, -15.0976], [5.46671, 36.2193, -17.4332], [8.91918, 44.2231, -15.0976], [11.4466, 50.0822, -8.71659], [10.07, 46.891, 0], [9.45328, 45.4612, 5.81106], [7.76836, 41.5552, 10.0651], [5.46671, 36.2193, 11.6221], [3.16507, 30.8835, 10.0651], [1.48015, 26.9775, 5.81106], [0.863426, 25.5477, 0], [1.48015, 26.9775, -5.81106], [3.16507, 30.8835, -10.0651], [5.46671, 36.2193, -11.6221], [7.76836, 41.5552, -10.0651], [9.45328, 45.4612, -5.81106]], [[11.0354, 52.9149, 0], [10.1669, 50.7289, 8.7788], [7.7942, 44.7564, 15.2053], [4.55301, 36.5978, 17.5576], [1.31182, 28.4393, 15.2053], [-1.06089, 22.4668, 8.7788], [-1.92937, 20.2807, 0], [-1.06089, 22.4668, -8.7788], [1.31182, 28.4393, -15.2053], [4.55301, 36.5978, -17.5576], [7.7942, 44.7564, -15.2053], [10.1669, 50.7289, -8.7788], [8.87459, 47.4759, 0], [8.29561, 46.0185, 5.85253], [6.7138, 42.0369, 10.1369], [4.55301, 36.5978, 11.7051], [2.39222, 31.1588, 10.1369], [0.810408, 27.1771, 5.85253], [0.231426, 25.7197, 0], [0.810408, 27.1771, -5.85253], [2.39222, 31.1588, -10.1369], [4.55301, 36.5978, -11.7051], [6.7138, 42.0369, -10.1369], [8.29561, 46.0185, -5.85253]], [[9.67629, 53.5652, 0], [8.86607, 51.3391, 8.84101], [6.65249, 45.2574, 15.3131], [3.62868, 36.9495, 17.682], [0.60488, 28.6417, 15.3131], [-1.6087, 22.56, 8.84101], [-2.41892, 20.3339, 0], [-1.6087, 22.56, -8.84101], [0.60488, 28.6417, -15.3131], [3.62868, 36.9495, -17.682], [6.65249, 45.2574, -15.3131], [8.86607, 51.3391, -8.84101], [7.66042, 48.0267, 0], [7.12027, 46.5426, 5.89401], [5.64455, 42.4881, 10.2087], [3.62868, 36.9495, 11.788], [1.61281, 31.411, 10.2087], [0.137096, 27.3565, 5.89401], [-0.403055, 25.8724, 0], [0.137096, 27.3565, -5.89401], [1.61281, 31.411, -10.2087], [3.62868, 36.9495, -11.788], [5.64455, 42.4881, -10.2087], [7.12027, 46.5426, -5.89401]], [[8.29545, 54.1769, 0], [7.54507, 51.9124, 8.90323], [5.49498, 45.7256, 15.4208], [2.69452, 37.2742, 17.8065], [-0.105941, 28.8229, 15.4208], [-2.15602, 22.6361, 8.90323], [-2.9064, 20.3716, 0], [-2.15602, 22.6361, -8.90323], [-0.105941, 28.8229, -15.4208], [2.69452, 37.2742, -17.8065], [5.49498, 45.7256, -15.4208], [7.54507, 51.9124, -8.90323], [6.42847, 48.5427, 0], [5.92822, 47.033, 5.93548], [4.5615, 42.9085, 10.2806], [2.69452, 37.2742, 11.871], [0.827546, 31.64, 10.2806], [-0.539174, 27.5155, 5.93548], [-1.03943, 26.0058, 0], [-0.539174, 27.5155, -5.93548], [0.827546, 31.64, -10.2806], [2.69452, 37.2742, -11.871], [4.5615, 42.9085, -10.2806], [5.92822, 47.033, -5.93548]], [[6.89394, 54.7492, 0], [6.20496, 52.4479, 8.96544], [4.32263, 46.1604, 15.5286], [1.75131, 37.5716, 17.9309], [-0.820007, 28.9828, 15.5286], [-2.70234, 22.6954, 8.96544], [-3.39132, 20.3941, 0], [-2.70234, 22.6954, -8.96544], [-0.820007, 28.9828, -15.5286], [1.75131, 37.5716, -17.9309], [4.32263, 46.1604, -15.5286], [6.20496, 52.4479, -8.96544], [5.17973, 49.0234, 0], [4.72041, 47.4891, 5.97696], [3.46552, 43.2975, 10.3524], [1.75131, 37.5716, 11.9539], [0.0370989, 31.8458, 10.3524], [-1.21779, 27.6542, 5.97696], [-1.67711, 26.1199, 0], [-1.21779, 27.6542, -5.97696], [0.0370989, 31.8458, -10.3524], [1.75131, 37.5716, -11.9539], [3.46552, 43.2975, -10.3524], [4.72041, 47.4891, -5.97696]], [[5.4729, 55.2816, 0], [4.84683, 52.945, 9.02765], [3.13638, 46.5615, 15.6363], [0.799848, 37.8415, 18.0553], [-1.53668, 29.1214, 15.6363], [-3.24714, 22.7379, 9.02765], [-3.87321, 20.4014, 0], [-3.24714, 22.7379, -9.02765], [-1.53668, 29.1214, -15.6363], [0.799848, 37.8415, -18.0553], [3.13638, 46.5615, -15.6363], [4.84683, 52.945, -9.02765], [3.91522, 49.4682, 0], [3.49784, 47.9105, 6.01843], [2.35753, 43.6548, 10.4242], [0.799848, 37.8415, 12.0369], [-0.757838, 32.0281, 10.4242], [-1.89814, 27.7724, 6.01843], [-2.31552, 26.2148, 0], [-1.89814, 27.7724, -6.01843], [-0.757838, 32.0281, -10.4242], [0.799848, 37.8415, -12.0369], [2.35753, 43.6548, -10.4242], [3.49784, 47.9105, -6.01843]], [[4.03347, 55.7732, 0], [3.47178, 53.4032, 9.08986], [1.93721, 46.9284, 15.7441], [-0.15906, 38.0835, 18.1797], [-2.25533, 29.2387, 15.7441], [-3.7899, 22.7638, 9.08986], [-4.35159, 20.3938, 0], [-3.7899, 22.7638, -9.08986], [-2.25533, 29.2387, -15.7441], [-0.15906, 38.0835, -18.1797], [1.93721, 46.9284, -15.7441], [3.47178, 53.4032, -9.08986], [2.63596, 49.8767, 0], [2.2615, 48.2967, 6.05991], [1.23845, 43.9801, 10.4961], [-0.15906, 38.0835, 12.1198], [-1.55657, 32.187, 10.4961], [-2.57962, 27.8704, 6.05991], [-2.95408, 26.2904, 0], [-2.57962, 27.8704, -6.05991], [-1.55657, 32.187, -10.4961], [-0.15906, 38.0835, -12.1198], [1.23845, 43.9801, -10.4961], [2.2615, 48.2967, -6.05991]], [[2.57682, 56.2236, 0], [2.08092, 53.8219, 9.15207], [0.726108, 47.2606, 15.8519], [-1.1246, 38.2976, 18.3041], [-2.97531, 29.3346, 15.8519], [-4.33013, 22.7732, 9.15207], [-4.82602, 20.3716, 0], [-4.33013, 22.7732, -9.15207], [-2.97531, 29.3346, -15.8519], [-1.1246, 38.2976, -18.3041], [0.726108, 47.2606, -15.8519], [2.08092, 53.8219, -9.15207], [1.34301, 50.2482, 0], [1.01241, 48.6472, 6.10138], [0.109204, 44.2729, 10.5679], [-1.1246, 38.2976, 12.2028], [-2.35841, 32.3222, 10.5679], [-3.26162, 27.948, 6.10138], [-3.59222, 26.3469, 0], [-3.26162, 27.948, -6.10138], [-2.35841, 32.3222, -10.5679], [-1.1246, 38.2976, -12.2028], [0.109204, 44.2729, -10.5679], [1.01241, 48.6472, -6.10138]], [[1.10413, 56.6321, 0], [0.675395, 54.2006, 9.21429], [-0.495918, 47.5578, 15.9596], [-2.09596, 38.4835, 18.4286], [-3.69601, 29.4092, 15.9596], [-4.86732, 22.7663, 9.21429], [-5.29605, 20.3349, 0], [-4.86732, 22.7663, -9.21429], [-3.69601, 29.4092, -15.9596], [-2.09596, 38.4835, -18.4286], [-0.495918, 47.5578, -15.9596], [0.675395, 54.2006, -9.21429], [0.0374299, 50.5825, 0], [-0.24839, 48.9616, 6.14286], [-1.02927, 44.533, 10.6397], [-2.09596, 38.4835, 12.2857], [-3.16266, 32.4339, 10.6397], [-3.94353, 28.0054, 6.14286], [-4.22935, 26.3844, 0], [-3.94353, 28.0054, -6.14286], [-3.16266, 32.4339, -10.6397], [-2.09596, 38.4835, -12.2857], [-1.02927, 44.533, -10.6397], [-0.24839, 48.9616, -6.14286]], [[-0.383397, 56.9981, 0], [-0.743644, 54.5387, 9.2765], [-1.72786, 47.8196, 16.0674], [-3.07232, 38.641, 18.553], [-4.41678, 29.4625, 16.0674], [-5.40099, 22.7433, 9.2765], [-5.76124, 20.2839, 0], [-5.40099, 22.7433, -9.2765], [-4.41678, 29.4625, -16.0674], [-3.07232, 38.641, -18.553], [-1.72786, 47.8196, -16.0674], [-0.743644, 54.5387, -9.2765], [-1.2797, 50.8791, 0], [-1.51987, 49.2395, 6.18433], [-2.17601, 44.7601, 10.7116], [-3.07232, 38.641, 12.3687], [-3.96862, 32.522, 10.7116], [-4.62477, 28.0425, 6.18433], [-4.86493, 26.4029, 0], [-4.62477, 28.0425, -6.18433], [-3.96862, 32.522, -10.7116], [-3.07232, 38.641, -12.3687], [-2.17601, 44.7601, -10.7116], [-1.51987, 49.2395, -6.18433]], [[-1.88452, 57.3212, 0], [-2.17502, 54.8359, 9.33871], [-2.96868, 48.0457, 16.1751], [-4.05284, 38.7701, 18.6774], [-5.137, 29.4945, 16.1751], [-5.93066, 22.7044, 9.33871], [-6.22116, 20.219, 0], [-5.93066, 22.7044, -9.33871], [-5.137, 29.4945, -16.1751], [-4.05284, 38.7701, -18.6774], [-2.96868, 48.0457, -16.1751], [-2.17502, 54.8359, -9.33871], [-2.6073, 51.1375, 0], [-2.80096, 49.4806, 6.22581], [-3.33007, 44.9538, 10.7834], [-4.05284, 38.7701, 12.4516], [-4.77561, 32.5864, 10.7834], [-5.30472, 28.0596, 6.22581], [-5.49838, 26.4027, 0], [-5.30472, 28.0596, -6.22581], [-4.77561, 32.5864, -10.7834], [-4.05284, 38.7701, -12.4516], [-3.33007, 44.9538, -10.7834], [-2.80096, 49.4806, -6.22581]], [[-3.39802, 57.6009, 0], [-3.61756, 55.0915, 9.40092], [-4.21736, 48.2358, 16.2829], [-5.0367, 38.8706, 18.8018], [-5.85605, 29.5055, 16.2829], [-6.45585, 22.6497, 9.40092], [-6.67539, 20.1403, 0], [-6.45585, 22.6497, -9.40092], [-5.85605, 29.5055, -16.2829], [-5.0367, 38.8706, -18.8018], [-4.21736, 48.2358, -16.2829], [-3.61756, 55.0915, -9.40092], [-3.94425, 51.3575, 0], [-4.09061, 49.6846, 6.26728], [-4.49048, 45.1141, 10.8552], [-5.0367, 38.8706, 12.5346], [-5.58293, 32.6272, 10.8552], [-5.9828, 28.0567, 6.26728], [-6.12916, 26.3838, 0], [-5.9828, 28.0567, -6.26728], [-5.58293, 32.6272, -10.8552], [-5.0367, 38.8706, -12.5346], [-4.49048, 45.1141, -10.8552], [-4.09061, 49.6846, -6.26728]], [[-4.92261, 57.8367, 0], [-5.07005, 55.3054, 9.46313], [-5.47284, 48.3896, 16.3906], [-6.02308, 38.9425, 18.9263], [-6.57331, 29.4954, 16.3906], [-6.97611, 22.5796, 9.46313], [-7.12354, 20.0482, 0], [-6.97611, 22.5796, -9.46313], [-6.57331, 29.4954, -16.3906], [-6.02308, 38.9425, -18.9263], [-5.47284, 48.3896, -16.3906], [-5.07005, 55.3054, -9.46313], [-5.28943, 51.5386, 0], [-5.38772, 49.8511, 6.30876], [-5.65625, 45.2406, 10.9271], [-6.02308, 38.9425, 12.6175], [-6.3899, 32.6444, 10.9271], [-6.65843, 28.0339, 6.30876], [-6.75672, 26.3463, 0], [-6.65843, 28.0339, -6.30876], [-6.3899, 32.6444, -10.9271], [-6.02308, 38.9425, -12.6175], [-5.65625, 45.2406, -10.9271], [-5.38772, 49.8511, -6.30876]], [[-6.45704, 58.0282, 0], [-6.53127, 55.477, 9.52535], [-6.73408, 48.5069, 16.4984], [-7.01112, 38.9856, 19.0507], [-7.28816, 29.4643, 16.4984], [-7.49097, 22.4942, 9.52535], [-7.5652, 19.943, 0], [-7.49097, 22.4942, -9.52535], [-7.28816, 29.4643, -16.4984], [-7.01112, 38.9856, -19.0507], [-6.73408, 48.5069, -16.4984], [-6.53127, 55.477, -9.52535], [-6.64173, 51.6807, 0], [-6.69122, 49.9799, 6.35023], [-6.82642, 45.3332, 10.9989], [-7.01112, 38.9856, 12.7005], [-7.19581, 32.6381, 10.9989], [-7.33102, 27.9913, 6.35023], [-7.38051, 26.2905, 0], [-7.33102, 27.9913, -6.35023], [-7.19581, 32.6381, -10.9989], [-7.01112, 38.9856, -12.7005], [-6.82642, 45.3332, -10.9989], [-6.69122, 49.9799, -6.35023]], [[-8, 58.1751, 0], [-8, 55.6061, 9.58756], [-8, 48.5876, 16.6061], [-8, 39, 19.1751], [-8, 29.4124, 16.6061], [-8, 22.3939, 9.58756], [-8, 19.8249, 0], [-8, 22.3939, -9.58756], [-8, 29.4124, -16.6061], [-8, 39, -19.1751], [-8, 48.5876, -16.6061], [-8, 55.6061, -9.58756], [-8, 51.7834, 0], [-8, 50.0708, 6.39171], [-8, 45.3917, 11.0708], [-8, 39, 12.7834], [-8, 32.6083, 11.0708], [-8, 27.9292, 6.39171], [-8, 26.2166, 0], [-8, 27.9292, -6.39171], [-8, 32.6083, -11.0708], [-8, 39, -12.7834], [-8, 45.3917, -11.0708], [-8, 50.0708, -6.39171]], [[-9.34141, 58.2874, 0], [-9.29473, 55.7022, 9.64977], [-9.1672, 48.6392, 16.7139], [-8.99298, 38.991, 19.2995], [-8.81876, 29.3428, 16.7139], [-8.69122, 22.2799, 9.64977], [-8.64454, 19.6946, 0], [-8.69122, 22.2799, -9.64977], [-8.81876, 29.3428, -16.7139], [-8.99298, 38.991, -19.2995], [-9.1672, 48.6392, -16.7139], [-9.29473, 55.7022, -9.64977], [-9.22527, 51.8553, 0], [-9.19415, 50.1318, 6.43318], [-9.10912, 45.4232, 11.1426], [-8.99298, 38.991, 12.8664], [-8.87683, 32.5589, 11.1426], [-8.79181, 27.8503, 6.43318], [-8.76069, 26.1268, 0], [-8.79181, 27.8503, -6.43318], [-8.87683, 32.5589, -11.1426], [-8.99298, 38.991, -12.8664], [-9.10912, 45.4232, -11.1426], [-9.19415, 50.1318, -6.43318]], [[-10.6869, 58.3754, 0], [-10.5929, 55.7748, 9.71198], [-10.3363, 48.6698, 16.8216], [-9.98563, 38.9641, 19.424], [-9.63501, 29.2585, 16.8216], [-9.37833, 22.1535, 9.71198], [-9.28438, 19.5528, 0], [-9.37833, 22.1535, -9.71198], [-9.63501, 29.2585, -16.8216], [-9.98563, 38.9641, -19.424], [-10.3363, 48.6698, -16.8216], [-10.5929, 55.7748, -9.71198], [-10.4531, 51.905, 0], [-10.3905, 50.1713, 6.47465], [-10.2194, 45.4346, 11.2144], [-9.98563, 38.9641, 12.9493], [-9.75188, 32.4937, 11.2144], [-9.58076, 27.757, 6.47465], [-9.51813, 26.0233, 0], [-9.58076, 27.757, -6.47465], [-9.75188, 32.4937, -11.2144], [-9.98563, 38.9641, -12.9493], [-10.2194, 45.4346, -11.2144], [-10.3905, 50.1713, -6.47465]], [[-12.036, 58.4391, 0], [-11.8942, 55.8239, 9.77419], [-11.5068, 48.6792, 16.9294], [-10.9776, 38.9193, 19.5484], [-10.4485, 29.1595, 16.9294], [-10.0611, 22.0148, 9.77419], [-9.91931, 19.3996, 0], [-10.0611, 22.0148, -9.77419], [-10.4485, 29.1595, -16.9294], [-10.9776, 38.9193, -19.5484], [-11.5068, 48.6792, -16.9294], [-11.8942, 55.8239, -9.77419], [-11.6832, 51.9325, 0], [-11.5887, 50.1891, 6.51613], [-11.3304, 45.4259, 11.2863], [-10.9776, 38.9193, 13.0323], [-10.6249, 32.4128, 11.2863], [-10.3666, 27.6496, 6.51613], [-10.2721, 25.9062, 0], [-10.3666, 27.6496, -6.51613], [-10.6249, 32.4128, -11.2863], [-10.9776, 38.9193, -13.0323], [-11.3304, 45.4259, -11.2863], [-11.5887, 50.1891, -6.51613]], [[-13.3882, 58.4782, 0], [-13.198, 55.8494, 9.83641], [-12.6784, 48.6674, 17.0372], [-11.9687, 38.8566, 19.6728], [-11.2589, 29.0459, 17.0372], [-10.7393, 21.8639, 9.83641], [-10.5491, 19.2351, 0], [-10.7393, 21.8639, -9.83641], [-11.2589, 29.0459, -17.0372], [-11.9687, 38.8566, -19.6728], [-12.6784, 48.6674, -17.0372], [-13.198, 55.8494, -9.83641], [-12.915, 51.9376, 0], [-12.7883, 50.1851, 6.5576], [-12.4419, 45.3971, 11.3581], [-11.9687, 38.8566, 13.1152], [-11.4955, 32.3161, 11.3581], [-11.1491, 27.5281, 6.5576], [-11.0223, 25.7756, 0], [-11.1491, 27.5281, -6.5576], [-11.4955, 32.3161, -11.3581], [-11.9687, 38.8566, -13.1152], [-12.4419, 45.3971, -11.3581], [-12.7883, 50.1851, -6.5576]], [[-14.7432, 58.4927, 0], [-14.5041, 55.8511, 9.89862], [-13.8508, 48.6343, 17.1449], [-12.9584, 38.776, 19.7972], [-12.066, 28.9177, 17.1449], [-11.4128, 21.7009, 9.89862], [-11.1736, 19.0594, 0], [-11.4128, 21.7009, -9.89862], [-12.066, 28.9177, -17.1449], [-12.9584, 38.776, -19.7972], [-13.8508, 48.6343, -17.1449], [-14.5041, 55.8511, -9.89862], [-14.1483, 51.9204, 0], [-13.9889, 50.1594, 6.59908], [-13.5533, 45.3482, 11.4299], [-12.9584, 38.776, 13.1982], [-12.3635, 32.2038, 11.4299], [-11.928, 27.3926, 6.59908], [-11.7686, 25.6316, 0], [-11.928, 27.3926, -6.59908], [-12.3635, 32.2038, -11.4299], [-12.9584, 38.776, -13.1982], [-13.5533, 45.3482, -11.4299], [-13.9889, 50.1594, -6.59908]], [[-16.1005, 58.4825, 0], [-15.8119, 55.8291, 9.96083], [-15.0235, 48.58, 17.2527], [-13.9465, 38.6776, 19.9217], [-12.8696, 28.7751, 17.2527], [-12.0812, 21.5261, 9.96083], [-11.7926, 18.8727, 0], [-12.0812, 21.5261, -9.96083], [-12.8696, 28.7751, -17.2527], [-13.9465, 38.6776, -19.9217], [-15.0235, 48.58, -17.2527], [-15.8119, 55.8291, -9.96083], [-15.3825, 51.8808, 0], [-15.1901, 50.1119, 6.64055], [-14.6645, 45.2792, 11.5018], [-13.9465, 38.6776, 13.2811], [-13.2286, 32.076, 11.5018], [-12.703, 27.2432, 6.64055], [-12.5106, 25.4743, 0], [-12.703, 27.2432, -6.64055], [-13.2286, 32.076, -11.5018], [-13.9465, 38.6776, -13.2811], [-14.6645, 45.2792, -11.5018], [-15.1901, 50.1119, -6.64055]], [[-17.4595, 58.4475, 0], [-17.121, 55.7833, 10.023], [-16.1961, 48.5044, 17.3604], [-14.9327, 38.5613, 20.0461], [-13.6693, 28.6182, 17.3604], [-12.7445, 21.3394, 10.023], [-12.4059, 18.6751, 0], [-12.7445, 21.3394, -10.023], [-13.6693, 28.6182, -17.3604], [-14.9327, 38.5613, -20.0461], [-16.1961, 48.5044, -17.3604], [-17.121, 55.7833, -10.023], [-16.6173, 51.8188, 0], [-16.3916, 50.0426, 6.68203], [-15.775, 45.19, 11.5736], [-14.9327, 38.5613, 13.3641], [-14.0905, 31.9326, 11.5736], [-13.4739, 27.08, 6.68203], [-13.2482, 25.3039, 0], [-13.4739, 27.08, -6.68203], [-14.0905, 31.9326, -11.5736], [-14.9327, 38.5613, -13.3641], [-15.775, 45.19, -11.5736], [-16.3916, 50.0426, -6.68203]], [[-18.82, 58.3877, 0], [-18.431, 55.7135, 10.0853], [-17.3683, 48.4075, 17.4682], [-15.9167, 38.4273, 20.1705], [-14.465, 28.447, 17.4682], [-13.4023, 21.141, 10.0853], [-13.0133, 18.4668, 0], [-13.4023, 21.141, -10.0853], [-14.465, 28.447, -17.4682], [-15.9167, 38.4273, -20.1705], [-17.3683, 48.4075, -17.4682], [-18.431, 55.7135, -10.0853], [-17.8522, 51.7342, 0], [-17.5929, 49.9514, 6.7235], [-16.8844, 45.0807, 11.6454], [-15.9167, 38.4273, 13.447], [-14.9489, 31.7738, 11.6454], [-14.2404, 26.9031, 6.7235], [-13.9811, 25.1203, 0], [-14.2404, 26.9031, -6.7235], [-14.9489, 31.7738, -11.6454], [-15.9167, 38.4273, -13.447], [-16.8844, 45.0807, -11.6454], [-17.5929, 49.9514, -6.7235]], [[-20.1814, 58.303, 0], [-19.7415, 55.6198, 10.1475], [-18.5397, 48.2892, 17.5759], [-16.898, 38.2755, 20.2949], [-15.2563, 28.2617, 17.5759], [-14.0545, 20.9311, 10.1475], [-13.6147, 18.2479, 0], [-14.0545, 20.9311, -10.1475], [-15.2563, 28.2617, -17.5759], [-16.898, 38.2755, -20.2949], [-18.5397, 48.2892, -17.5759], [-19.7415, 55.6198, -10.1475], [-19.0869, 51.6272, 0], [-18.7937, 49.8384, 6.76498], [-17.9925, 44.9513, 11.7173], [-16.898, 38.2755, 13.53], [-15.8036, 31.5996, 11.7173], [-15.0024, 26.7125, 6.76498], [-14.7091, 24.9237, 0], [-15.0024, 26.7125, -6.76498], [-15.8036, 31.5996, -11.7173], [-16.898, 38.2755, -13.53], [-17.9925, 44.9513, -11.7173], [-18.7937, 49.8384, -6.76498]], [[-21.5432, 58.1934, 0], [-21.0519, 55.5022, 10.2097], [-19.7098, 48.1497, 17.6837], [-17.8765, 38.106, 20.4194], [-16.0431, 28.0622, 17.6837], [-14.701, 20.7097, 10.2097], [-14.2097, 18.0185, 0], [-14.701, 20.7097, -10.2097], [-16.0431, 28.0622, -17.6837], [-17.8765, 38.106, -20.4194], [-19.7098, 48.1497, -17.6837], [-21.0519, 55.5022, -10.2097], [-20.321, 51.4976, 0], [-19.9935, 49.7035, 6.80645], [-19.0987, 44.8018, 11.7891], [-17.8765, 38.106, 13.6129], [-16.6542, 31.4102, 11.7891], [-15.7595, 26.5085, 6.80645], [-15.432, 24.7143, 0], [-15.7595, 26.5085, -6.80645], [-16.6542, 31.4102, -11.7891], [-17.8765, 38.106, -13.6129], [-19.0987, 44.8018, -11.7891], [-19.9935, 49.7035, -6.80645]], [[-22.905, 58.0588, 0], [-22.362, 55.3605, 10.2719], [-20.8784, 47.9888, 17.7914], [-18.8517, 37.9188, 20.5438], [-16.825, 27.8489, 17.7914], [-15.3414, 20.4771, 10.2719], [-14.7983, 17.7789, 0], [-15.3414, 20.4771, -10.2719], [-16.825, 27.8489, -17.7914], [-18.8517, 37.9188, -20.5438], [-20.8784, 47.9888, -17.7914], [-22.362, 55.3605, -10.2719], [-21.5539, 51.3455, 0], [-21.1919, 49.5466, 6.84793], [-20.2028, 44.6321, 11.861], [-18.8517, 37.9188, 13.6959], [-17.5006, 31.2055, 11.861], [-16.5115, 26.291, 6.84793], [-16.1494, 24.4922, 0], [-16.5115, 26.291, -6.84793], [-17.5006, 31.2055, -11.861], [-18.8517, 37.9188, -13.6959], [-20.2028, 44.6321, -11.861], [-21.1919, 49.5466, -6.84793]], [[-24.2664, 57.8991, 0], [-23.6712, 55.1948, 10.3341], [-22.0449, 47.8066, 17.8992], [-19.8234, 37.7141, 20.6682], [-17.6018, 27.6216, 17.8992], [-15.9756, 20.2334, 10.3341], [-15.3803, 17.5291, 0], [-15.9756, 20.2334, -10.3341], [-17.6018, 27.6216, -17.8992], [-19.8234, 37.7141, -20.6682], [-22.0449, 47.8066, -17.8992], [-23.6712, 55.1948, -10.3341], [-22.7854, 51.1708, 0], [-22.3886, 49.3679, 6.8894], [-21.3044, 44.4425, 11.9328], [-19.8234, 37.7141, 13.7788], [-18.3424, 30.9858, 11.9328], [-17.2582, 26.0603, 6.8894], [-16.8613, 24.2575, 0], [-17.2582, 26.0603, -6.8894], [-18.3424, 30.9858, -11.9328], [-19.8234, 37.7141, -13.7788], [-21.3044, 44.4425, -11.9328], [-22.3886, 49.3679, -6.8894]], [[-25.6269, 57.7144, 0], [-24.979, 55.0051, 10.3963], [-23.2091, 47.6032, 18.0069], [-20.7912, 37.4919, 20.7926], [-18.3734, 27.3807, 18.0069], [-16.6034, 19.9787, 10.3963], [-15.9555, 17.2694, 0], [-16.6034, 19.9787, -10.3963], [-18.3734, 27.3807, -18.0069], [-20.7912, 37.4919, -20.7926], [-23.2091, 47.6032, -18.0069], [-24.979, 55.0051, -10.3963], [-24.015, 50.9736, 0], [-23.5831, 49.1674, 6.93088], [-22.4031, 44.2327, 12.0046], [-20.7912, 37.4919, 13.8618], [-19.1793, 30.7511, 12.0046], [-17.9993, 25.8164, 6.93088], [-17.5674, 24.0102, 0], [-17.9993, 25.8164, -6.93088], [-19.1793, 30.7511, -12.0046], [-20.7912, 37.4919, -13.8618], [-22.4031, 44.2327, -12.0046], [-23.5831, 49.1674, -6.93088]], [[-26.986, 57.5046, 0], [-26.2852, 54.7913, 10.4585], [-24.3704, 47.3784, 18.1147], [-21.7549, 37.2523, 20.9171], [-19.1393, 27.1261, 18.1147], [-17.2246, 19.7132, 10.4585], [-16.5238, 16.9999, 0], [-17.2246, 19.7132, -10.4585], [-19.1393, 27.1261, -18.1147], [-21.7549, 37.2523, -20.9171], [-24.3704, 47.3784, -18.1147], [-26.2852, 54.7913, -10.4585], [-25.2423, 50.7538, 0], [-24.7751, 48.945, 6.97235], [-23.4986, 44.0031, 12.0765], [-21.7549, 37.2523, 13.9447], [-20.0112, 30.5015, 12.0765], [-18.7347, 25.5596, 6.97235], [-18.2675, 23.7507, 0], [-18.7347, 25.5596, -6.97235], [-20.0112, 30.5015, -12.0765], [-21.7549, 37.2523, -13.9447], [-23.4986, 44.0031, -12.0765], [-24.7751, 48.945, -6.97235]], [[-28.3432, 57.2698, 0], [-27.5891, 54.5535, 10.5207], [-25.5287, 47.1325, 18.2225], [-22.7141, 36.9952, 21.0415], [-19.8995, 26.858, 18.2225], [-17.839, 19.437, 10.5207], [-17.0849, 16.7207, 0], [-17.839, 19.437, -10.5207], [-19.8995, 26.858, -18.2225], [-22.7141, 36.9952, -21.0415], [-25.5287, 47.1325, -18.2225], [-27.5891, 54.5535, -10.5207], [-26.4669, 50.5116, 0], [-25.9641, 48.7007, 7.01382], [-24.5905, 43.7534, 12.1483], [-22.7141, 36.9952, 14.0276], [-20.8377, 30.2371, 12.1483], [-19.464, 25.2898, 7.01382], [-18.9613, 23.4789, 0], [-19.464, 25.2898, -7.01382], [-20.8377, 30.2371, -12.1483], [-22.7141, 36.9952, -14.0276], [-24.5905, 43.7534, -12.1483], [-25.9641, 48.7007, -7.01382]], [[-29.6982, 57.0098, 0], [-28.8904, 54.2916, 10.5829], [-26.6833, 46.8654, 18.3302], [-23.6684, 36.721, 21.1659], [-20.6536, 26.5765, 18.3302], [-18.4465, 19.1503, 10.5829], [-17.6387, 16.4321, 0], [-18.4465, 19.1503, -10.5829], [-20.6536, 26.5765, -18.3302], [-23.6684, 36.721, -21.1659], [-26.6833, 46.8654, -18.3302], [-28.8904, 54.2916, -10.5829], [-27.6883, 50.2469, 0], [-27.1497, 48.4347, 7.0553], [-25.6784, 43.4839, 12.2201], [-23.6684, 36.721, 14.1106], [-21.6585, 29.958, 12.2201], [-20.1872, 25.0072, 7.0553], [-19.6486, 23.1951, 0], [-20.1872, 25.0072, -7.0553], [-21.6585, 29.958, -12.2201], [-23.6684, 36.721, -14.1106], [-25.6784, 43.4839, -12.2201], [-27.1497, 48.4347, -7.0553]], [[-31.0504, 56.7248, 0], [-30.1886, 54.0057, 10.6452], [-27.8341, 46.5771, 18.438], [-24.6177, 36.4295, 21.2903], [-21.4014, 26.2818, 18.438], [-19.0469, 18.8533, 10.6452], [-18.1851, 16.1342, 0], [-19.0469, 18.8533, -10.6452], [-21.4014, 26.2818, -18.438], [-24.6177, 36.4295, -21.2903], [-27.8341, 46.5771, -18.438], [-30.1886, 54.0057, -10.6452], [-28.9062, 49.9597, 0], [-28.3316, 48.147, 7.09677], [-26.7619, 43.1946, 12.292], [-24.6177, 36.4295, 14.1935], [-22.4735, 29.6644, 12.292], [-20.9038, 24.712, 7.09677], [-20.3293, 22.8993, 0], [-20.9038, 24.712, -7.09677], [-22.4735, 29.6644, -12.292], [-24.6177, 36.4295, -14.1935], [-26.7619, 43.1946, -12.292], [-28.3316, 48.147, -7.09677]], [[-32.3993, 56.4147, 0], [-31.4833, 53.6958, 10.7074], [-28.9805, 46.2678, 18.5457], [-25.5616, 36.1209, 21.4147], [-22.1427, 25.974, 18.5457], [-19.6399, 18.546, 10.7074], [-18.7238, 15.8272, 0], [-19.6399, 18.546, -10.7074], [-22.1427, 25.974, -18.5457], [-25.5616, 36.1209, -21.4147], [-28.9805, 46.2678, -18.5457], [-31.4833, 53.6958, -10.7074], [-30.1201, 49.6501, 0], [-29.5094, 47.8375, 7.13825], [-27.8408, 42.8855, 12.3638], [-25.5616, 36.1209, 14.2765], [-23.2823, 29.3563, 12.3638], [-21.6138, 24.4043, 7.13825], [-21.0031, 22.5918, 0], [-21.6138, 24.4043, -7.13825], [-23.2823, 29.3563, -12.3638], [-25.5616, 36.1209, -14.2765], [-27.8408, 42.8855, -12.3638], [-29.5094, 47.8375, -7.13825]], [[-33.7446, 56.0795, 0], [-32.774, 53.362, 10.7696], [-30.1222, 45.9375, 18.6535], [-26.4997, 35.7954, 21.5392], [-22.8773, 25.6533, 18.6535], [-20.2255, 18.2288, 10.7696], [-19.2548, 15.5112, 0], [-20.2255, 18.2288, -10.7696], [-22.8773, 25.6533, -18.6535], [-26.4997, 35.7954, -21.5392], [-30.1222, 45.9375, -18.6535], [-32.774, 53.362, -10.7696], [-31.3296, 49.3181, 0], [-30.6826, 47.5064, 7.17972], [-28.9147, 42.5568, 12.4356], [-26.4997, 35.7954, 14.3594], [-24.0848, 29.034, 12.4356], [-22.3169, 24.0843, 7.17972], [-21.6698, 22.2726, 0], [-22.3169, 24.0843, -7.17972], [-24.0848, 29.034, -12.4356], [-26.4997, 35.7954, -14.3594], [-28.9147, 42.5568, -12.4356], [-30.6826, 47.5064, -7.17972]], [[-35.0857, 55.7194, 0], [-34.0603, 53.0042, 10.8318], [-31.2588, 45.5862, 18.7612], [-27.4318, 35.4529, 21.6636], [-23.6049, 25.3197, 18.7612], [-20.8034, 17.9017, 10.8318], [-19.778, 15.1865, 0], [-20.8034, 17.9017, -10.8318], [-23.6049, 25.3197, -18.7612], [-27.4318, 35.4529, -21.6636], [-31.2588, 45.5862, -18.7612], [-34.0603, 53.0042, -10.8318], [-32.5344, 48.9639, 0], [-31.8508, 47.1538, 7.2212], [-29.9831, 42.2084, 12.5075], [-27.4318, 35.4529, 14.4424], [-24.8805, 28.6974, 12.5075], [-23.0129, 23.7521, 7.2212], [-22.3292, 21.942, 0], [-23.0129, 23.7521, -7.2212], [-24.8805, 28.6974, -12.5075], [-27.4318, 35.4529, -14.4424], [-29.9831, 42.2084, -12.5075], [-31.8508, 47.1538, -7.2212]], [[-36.4222, 55.3343, 0], [-35.3417, 52.6226, 10.894], [-32.3899, 45.214, 18.869], [-28.3576, 35.0937, 21.788], [-24.3253, 24.9734, 18.869], [-21.3735, 17.5649, 10.894], [-20.293, 14.8532, 0], [-21.3735, 17.5649, -10.894], [-24.3253, 24.9734, -18.869], [-28.3576, 35.0937, -21.788], [-32.3899, 45.214, -18.869], [-35.3417, 52.6226, -10.894], [-33.734, 48.5874, 0], [-33.0137, 46.7796, 7.26267], [-31.0458, 41.8406, 12.5793], [-28.3576, 35.0937, 14.5253], [-25.6694, 28.3469, 12.5793], [-23.7015, 23.4078, 7.26267], [-22.9812, 21.6, 0], [-23.7015, 23.4078, -7.26267], [-25.6694, 28.3469, -12.5793], [-28.3576, 35.0937, -14.5253], [-31.0458, 41.8406, -12.5793], [-33.0137, 46.7796, -7.26267]], [[-37.7536, 54.9243, 0], [-36.6179, 52.2171, 10.9562], [-33.5151, 44.8211, 18.9767], [-29.2767, 34.7179, 21.9124], [-25.0383, 24.6147, 18.9767], [-21.9356, 17.2186, 10.9562], [-20.7999, 14.5115, 0], [-21.9356, 17.2186, -10.9562], [-25.0383, 24.6147, -18.9767], [-29.2767, 34.7179, -21.9124], [-33.5151, 44.8211, -18.9767], [-36.6179, 52.2171, -10.9562], [-34.9279, 48.1888, 0], [-34.1708, 46.384, 7.30415], [-32.1023, 41.4533, 12.6512], [-29.2767, 34.7179, 14.6083], [-26.4511, 27.9824, 12.6512], [-24.3826, 23.0517, 7.30415], [-23.6255, 21.2469, 0], [-24.3826, 23.0517, -7.30415], [-26.4511, 27.9824, -12.6512], [-29.2767, 34.7179, -14.6083], [-32.1023, 41.4533, -12.6512], [-34.1708, 46.384, -7.30415]], [[-39.0794, 54.4894, 0], [-37.8883, 51.7879, 11.0184], [-34.6342, 44.4074, 19.0845], [-30.1889, 34.3255, 22.0369], [-25.7437, 24.2435, 19.0845], [-22.4896, 16.863, 11.0184], [-21.2985, 14.1615, 0], [-22.4896, 16.863, -11.0184], [-25.7437, 24.2435, -19.0845], [-30.1889, 34.3255, -22.0369], [-34.6342, 44.4074, -19.0845], [-37.8883, 51.7879, -11.0184], [-36.1159, 47.7681, 0], [-35.3218, 45.9671, 7.34562], [-33.1524, 41.0468, 12.723], [-30.1889, 34.3255, 14.6912], [-27.2255, 27.6041, 12.723], [-25.056, 22.6838, 7.34562], [-24.262, 20.8828, 0], [-25.056, 22.6838, -7.34562], [-27.2255, 27.6041, -12.723], [-30.1889, 34.3255, -14.6912], [-33.1524, 41.0468, -12.723], [-35.3218, 45.9671, -7.34562]], [[-40.3992, 54.0297, 0], [-39.1525, 51.3351, 11.0806], [-35.7465, 43.9732, 19.1922], [-31.0939, 33.9166, 22.1613], [-26.4413, 23.8601, 19.1922], [-23.0353, 16.4982, 11.0806], [-21.7886, 13.8036, 0], [-23.0353, 16.4982, -11.0806], [-26.4413, 23.8601, -19.1922], [-31.0939, 33.9166, -22.1613], [-35.7465, 43.9732, -19.1922], [-39.1525, 51.3351, -11.0806], [-37.2974, 47.3253, 0], [-36.4663, 45.5289, 7.3871], [-34.1957, 40.621, 12.7948], [-31.0939, 33.9166, 14.7742], [-27.9921, 27.2123, 12.7948], [-25.7215, 22.3044, 7.3871], [-24.8904, 20.508, 0], [-25.7215, 22.3044, -7.3871], [-27.9921, 27.2123, -12.7948], [-31.0939, 33.9166, -14.7742], [-34.1957, 40.621, -12.7948], [-36.4663, 45.5289, -7.3871]], [[-41.7125, 53.5453, 0], [-40.4101, 50.8586, 11.1429], [-36.8519, 43.5184, 19.3], [-31.9913, 33.4916, 22.2857], [-27.1308, 23.4647, 19.3], [-23.5726, 16.1245, 11.1429], [-22.2702, 13.4378, 0], [-23.5726, 16.1245, -11.1429], [-27.1308, 23.4647, -19.3], [-31.9913, 33.4916, -22.2857], [-36.8519, 43.5184, -19.3], [-40.4101, 50.8586, -11.1429], [-38.4721, 46.8607, 0], [-37.6039, 45.0696, 7.42857], [-35.2317, 40.1761, 12.8667], [-31.9913, 33.4916, 14.8571], [-28.751, 26.807, 12.8667], [-26.3788, 21.9135, 7.42857], [-25.5106, 20.1224, 0], [-26.3788, 21.9135, -7.42857], [-28.751, 26.807, -12.8667], [-31.9913, 33.4916, -14.8571], [-35.2317, 40.1761, -12.8667], [-37.6039, 45.0696, -7.42857]], [[-43.0189, 53.0363, 0], [-41.6607, 50.3587, 11.2051], [-37.9499, 43.0433, 19.4077], [-32.881, 33.0504, 22.4101], [-27.812, 23.0574, 19.4077], [-24.1013, 15.7421, 11.2051], [-22.743, 13.0644, 0], [-24.1013, 15.7421, -11.2051], [-27.812, 23.0574, -19.4077], [-32.881, 33.0504, -22.4101], [-37.9499, 43.0433, -19.4077], [-41.6607, 50.3587, -11.2051], [-39.6396, 46.3743, 0], [-38.7341, 44.5892, 7.47005], [-36.2603, 39.7123, 12.9385], [-32.881, 33.0504, 14.9401], [-29.5016, 26.3884, 12.9385], [-27.0278, 21.5115, 7.47005], [-26.1223, 19.7264, 0], [-27.0278, 21.5115, -7.47005], [-29.5016, 26.3884, -12.9385], [-32.881, 33.0504, -14.9401], [-36.2603, 39.7123, -12.9385], [-38.7341, 44.5892, -7.47005]], [[-44.3178, 52.5027, 0], [-42.9037, 49.8353, 11.2673], [-39.0402, 42.5479, 19.5155], [-33.7625, 32.5932, 22.5346], [-28.4848, 22.6384, 19.5155], [-24.6212, 15.351, 11.2673], [-23.2071, 12.6836, 0], [-24.6212, 15.351, -11.2673], [-28.4848, 22.6384, -19.5155], [-33.7625, 32.5932, -22.5346], [-39.0402, 42.5479, -19.5155], [-42.9037, 49.8353, -11.2673], [-40.7994, 45.8662, 0], [-39.8566, 44.088, 7.51152], [-37.2809, 39.2297, 13.0103], [-33.7625, 32.5932, 15.023], [-30.244, 25.9566, 13.0103], [-27.6683, 21.0984, 7.51152], [-26.7255, 19.3201, 0], [-27.6683, 21.0984, -7.51152], [-30.244, 25.9566, -13.0103], [-33.7625, 32.5932, -15.023], [-37.2809, 39.2297, -13.0103], [-39.8566, 44.088, -7.51152]], [[-45.6089, 51.9447, 0], [-44.1388, 49.2887, 11.3295], [-40.1223, 42.0324, 19.6233], [-34.6356, 32.1201, 22.659], [-29.1489, 22.2078, 19.6233], [-25.1324, 14.9515, 11.3295], [-23.6622, 12.2955, 0], [-25.1324, 14.9515, -11.3295], [-29.1489, 22.2078, -19.6233], [-34.6356, 32.1201, -22.659], [-40.1223, 42.0324, -19.6233], [-44.1388, 49.2887, -11.3295], [-41.9512, 45.3365, 0], [-40.971, 43.5659, 7.553], [-38.2934, 38.7283, 13.0822], [-34.6356, 32.1201, 15.106], [-30.9778, 25.5119, 13.0822], [-28.3001, 20.6744, 7.553], [-27.32, 18.9037, 0], [-28.3001, 20.6744, -7.553], [-30.9778, 25.5119, -13.0822], [-34.6356, 32.1201, -15.106], [-38.2934, 38.7283, -13.0822], [-40.971, 43.5659, -7.553]], [[-46.8917, 51.3624, 0], [-45.3655, 48.719, 11.3917], [-41.1959, 41.4969, 19.731], [-35.5, 31.6314, 22.7834], [-29.8041, 21.7659, 19.731], [-25.6345, 14.5438, 11.3917], [-24.1083, 11.9004, 0], [-25.6345, 14.5438, -11.3917], [-29.8041, 21.7659, -19.731], [-35.5, 31.6314, -22.7834], [-41.1959, 41.4969, -19.731], [-45.3655, 48.719, -11.3917], [-43.0945, 44.7854, 0], [-42.077, 43.0231, 7.59447], [-39.2972, 38.2084, 13.154], [-35.5, 31.6314, 15.1889], [-31.7028, 25.0544, 13.154], [-28.923, 20.2397, 7.59447], [-27.9055, 18.4774, 0], [-28.923, 20.2397, -7.59447], [-31.7028, 25.0544, -13.154], [-35.5, 31.6314, -15.1889], [-39.2972, 38.2084, -13.154], [-42.077, 43.0231, -7.59447]], [[-48.1657, 50.7559, 0], [-46.5834, 48.1261, 11.4539], [-42.2606, 40.9415, 19.8388], [-36.3555, 31.1271, 22.9078], [-30.4504, 21.3128, 19.8388], [-26.1275, 14.1282, 11.4539], [-24.5452, 11.4984, 0], [-26.1275, 14.1282, -11.4539], [-30.4504, 21.3128, -19.8388], [-36.3555, 31.1271, -22.9078], [-42.2606, 40.9415, -19.8388], [-46.5834, 48.1261, -11.4539], [-44.2289, 44.213, 0], [-43.1741, 42.4598, 7.63594], [-40.2922, 37.6701, 13.2258], [-36.3555, 31.1271, 15.2719], [-32.4187, 24.5842, 13.2258], [-29.5368, 19.7945, 7.63594], [-28.482, 18.0413, 0], [-29.5368, 19.7945, -7.63594], [-32.4187, 24.5842, -13.2258], [-36.3555, 31.1271, -15.2719], [-40.2922, 37.6701, -13.2258], [-43.1741, 42.4598, -7.63594]], [[-49.4304, 50.1253, 0], [-47.7921, 47.5104, 11.5161], [-43.3161, 40.3664, 19.9465], [-37.2017, 30.6075, 23.0323], [-31.0873, 20.8487, 19.9465], [-26.6113, 13.7047, 11.5161], [-24.9729, 11.0898, 0], [-26.6113, 13.7047, -11.5161], [-31.0873, 20.8487, -19.9465], [-37.2017, 30.6075, -23.0323], [-43.3161, 40.3664, -19.9465], [-47.7921, 47.5104, -11.5161], [-45.3542, 43.6194, 0], [-44.2619, 41.8761, 7.67742], [-41.2779, 37.1134, 13.2977], [-37.2017, 30.6075, 15.3548], [-33.1254, 24.1016, 13.2977], [-30.1414, 19.3389, 7.67742], [-29.0492, 17.5957, 0], [-30.1414, 19.3389, -7.67742], [-33.1254, 24.1016, -13.2977], [-37.2017, 30.6075, -15.3548], [-41.2779, 37.1134, -13.2977], [-44.2619, 41.8761, -7.67742]], [[-50.6855, 49.4707, 0], [-48.9911, 46.8719, 11.5783], [-44.3619, 39.7717, 20.0543], [-38.0384, 30.0727, 23.1567], [-31.7148, 20.3737, 20.0543], [-27.0857, 13.2735, 11.5783], [-25.3913, 10.6747, 0], [-27.0857, 13.2735, -11.5783], [-31.7148, 20.3737, -20.0543], [-38.0384, 30.0727, -23.1567], [-44.3619, 39.7717, -20.0543], [-48.9911, 46.8719, -11.5783], [-46.4698, 43.0047, 0], [-45.3402, 41.2722, 7.71889], [-42.2541, 36.5387, 13.3695], [-38.0384, 30.0727, 15.4378], [-33.8227, 23.6067, 13.3695], [-30.7366, 18.8733, 7.71889], [-29.607, 17.1407, 0], [-30.7366, 18.8733, -7.71889], [-33.8227, 23.6067, -13.3695], [-38.0384, 30.0727, -15.4378], [-42.2541, 36.5387, -13.3695], [-45.3402, 41.2722, -7.71889]], [[-51.9303, 48.7924, 0], [-50.18, 46.2108, 11.6406], [-45.3978, 39.1577, 20.162], [-38.8653, 29.5229, 23.2811], [-32.3328, 19.8881, 20.162], [-27.5506, 12.835, 11.6406], [-25.8002, 10.2534, 0], [-27.5506, 12.835, -11.6406], [-32.3328, 19.8881, -20.162], [-38.8653, 29.5229, -23.2811], [-45.3978, 39.1577, -20.162], [-50.18, 46.2108, -11.6406], [-47.5753, 42.3692, 0], [-46.4084, 40.6482, 7.76037], [-43.2203, 35.9461, 13.4414], [-38.8653, 29.5229, 15.5207], [-34.5103, 23.0997, 13.4414], [-31.3222, 18.3976, 7.76037], [-30.1553, 16.6766, 0], [-31.3222, 18.3976, -7.76037], [-34.5103, 23.0997, -13.4414], [-38.8653, 29.5229, -15.5207], [-43.2203, 35.9461, -13.4414], [-46.4084, 40.6482, -7.76037]], [[-53.1646, 48.0904, 0], [-51.3583, 45.5272, 11.7028], [-46.4234, 38.5243, 20.2698], [-39.6821, 28.9582, 23.4055], [-32.9409, 19.3921, 20.2698], [-28.006, 12.3893, 11.7028], [-26.1996, 9.82603, 0], [-28.006, 12.3893, -11.7028], [-32.9409, 19.3921, -20.2698], [-39.6821, 28.9582, -23.4055], [-46.4234, 38.5243, -20.2698], [-51.3583, 45.5272, -11.7028], [-48.6705, 41.713, 0], [-47.4663, 40.0042, 7.80184], [-44.1763, 35.3356, 13.5132], [-39.6821, 28.9582, 15.6037], [-35.188, 22.5808, 13.5132], [-31.898, 17.9122, 7.80184], [-30.6938, 16.2034, 0], [-31.898, 17.9122, -7.80184], [-35.188, 22.5808, -13.5132], [-39.6821, 28.9582, -15.6037], [-44.1763, 35.3356, -13.5132], [-47.4663, 40.0042, -7.80184]], [[-54.3879, 47.365, 0], [-52.5257, 44.8213, 11.765], [-47.4383, 37.8719, 20.3775], [-40.4887, 28.3789, 23.53], [-33.539, 18.8859, 20.3775], [-28.4516, 11.9365, 11.765], [-26.5894, 9.39284, 0], [-28.4516, 11.9365, -11.765], [-33.539, 18.8859, -20.3775], [-40.4887, 28.3789, -23.53], [-47.4383, 37.8719, -20.3775], [-52.5257, 44.8213, -11.765], [-49.7548, 41.0363, 0], [-48.5134, 39.3405, 7.84332], [-45.1217, 34.7076, 13.585], [-40.4887, 28.3789, 15.6866], [-35.8556, 22.0502, 13.585], [-32.4639, 17.4173, 7.84332], [-31.2225, 15.7215, 0], [-32.4639, 17.4173, -7.84332], [-35.8556, 22.0502, -13.585], [-40.4887, 28.3789, -15.6866], [-45.1217, 34.7076, -13.585], [-48.5134, 39.3405, -7.84332]], [[-55.5996, 46.6162, 0], [-53.6818, 44.0933, 11.8272], [-48.4421, 37.2007, 20.4853], [-41.2846, 27.7851, 23.6544], [-34.1271, 18.3696, 20.4853], [-28.8874, 11.4769, 11.8272], [-26.9696, 8.95403, 0], [-28.8874, 11.4769, -11.8272], [-34.1271, 18.3696, -20.4853], [-41.2846, 27.7851, -23.6544], [-48.4421, 37.2007, -20.4853], [-53.6818, 44.0933, -11.8272], [-50.8279, 40.3392, 0], [-49.5494, 38.6573, 7.88479], [-46.0563, 34.0621, 13.6569], [-41.2846, 27.7851, 15.7696], [-36.5129, 21.5081, 13.6569], [-33.0198, 16.913, 7.88479], [-31.7412, 15.2311, 0], [-33.0198, 16.913, -7.88479], [-36.5129, 21.5081, -13.6569], [-41.2846, 27.7851, -15.7696], [-46.0563, 34.0621, -13.6569], [-49.5494, 38.6573, -7.88479]], [[-56.7994, 45.8443, 0], [-54.826, 43.3434, 11.8894], [-49.4345, 36.5107, 20.593], [-42.0697, 27.1771, 23.7788], [-34.7048, 17.8434, 20.593], [-29.3133, 11.0107, 11.8894], [-27.3399, 8.50981, 0], [-29.3133, 11.0107, -11.8894], [-34.7048, 17.8434, -20.593], [-42.0697, 27.1771, -23.7788], [-49.4345, 36.5107, -20.593], [-54.826, 43.3434, -11.8894], [-51.8895, 39.6219, 0], [-50.5739, 37.9546, 7.92627], [-46.9796, 33.3995, 13.7287], [-42.0697, 27.1771, 15.8525], [-37.1597, 20.9546, 13.7287], [-33.5654, 16.3995, 7.92627], [-32.2498, 14.7322, 0], [-33.5654, 16.3995, -7.92627], [-37.1597, 20.9546, -13.7287], [-42.0697, 27.1771, -15.8525], [-46.9796, 33.3995, -13.7287], [-50.5739, 37.9546, -7.92627]], [[-57.9868, 45.0495, 0], [-55.958, 42.5717, 11.9516], [-50.4152, 35.8022, 20.7008], [-42.8436, 26.5549, 23.9032], [-35.272, 17.3076, 20.7008], [-29.7292, 10.5382, 11.9516], [-27.7004, 8.06038, 0], [-29.7292, 10.5382, -11.9516], [-35.272, 17.3076, -20.7008], [-42.8436, 26.5549, -23.9032], [-50.4152, 35.8022, -20.7008], [-55.958, 42.5717, -11.9516], [-52.9391, 38.8846, 0], [-51.5866, 37.2328, 7.96774], [-47.8914, 32.7198, 13.8005], [-42.8436, 26.5549, 15.9355], [-37.7959, 20.3901, 13.8005], [-34.1007, 15.8771, 7.96774], [-32.7482, 14.2252, 0], [-34.1007, 15.8771, -7.96774], [-37.7959, 20.3901, -13.8005], [-42.8436, 26.5549, -15.9355], [-47.8914, 32.7198, -13.8005], [-51.5866, 37.2328, -7.96774]], [[-59.1614, 44.2319, 0], [-57.0774, 41.7784, 12.0138], [-51.3838, 35.0754, 20.8086], [-43.6062, 25.9189, 24.0276], [-35.8287, 16.7624, 20.8086], [-30.1351, 10.0594, 12.0138], [-28.0511, 7.60595, 0], [-30.1351, 10.0594, -12.0138], [-35.8287, 16.7624, -20.8086], [-43.6062, 25.9189, -24.0276], [-51.3838, 35.0754, -20.8086], [-57.0774, 41.7784, -12.0138], [-53.9764, 38.1276, 0], [-52.587, 36.4919, 8.00922], [-48.7913, 32.0232, 13.8724], [-43.6062, 25.9189, 16.0184], [-38.4212, 19.8146, 13.8724], [-34.6255, 15.3459, 8.00922], [-33.2361, 13.7103, 0], [-34.6255, 15.3459, -8.00922], [-38.4212, 19.8146, -13.8724], [-43.6062, 25.9189, -16.0184], [-48.7913, 32.0232, -13.8724], [-52.587, 36.4919, -8.00922]], [[-60.3228, 43.3917, 0], [-58.1838, 40.9638, 12.076], [-52.34, 34.3305, 20.9163], [-44.3573, 25.2692, 24.1521], [-36.3745, 16.208, 20.9163], [-30.5307, 9.57469, 12.076], [-28.3917, 7.14674, 0], [-30.5307, 9.57469, -12.076], [-36.3745, 16.208, -20.9163], [-44.3573, 25.2692, -24.1521], [-52.34, 34.3305, -20.9163], [-58.1838, 40.9638, -12.076], [-55.0009, 37.3509, 0], [-53.5749, 35.7323, 8.05069], [-49.6791, 31.3101, 13.9442], [-44.3573, 25.2692, 16.1014], [-39.0354, 19.2284, 13.9442], [-35.1396, 14.8062, 8.05069], [-33.7136, 13.1876, 0], [-35.1396, 14.8062, -8.05069], [-39.0354, 19.2284, -13.9442], [-44.3573, 25.2692, -16.1014], [-49.6791, 31.3101, -13.9442], [-53.5749, 35.7323, -8.05069]], [[-61.4704, 42.5293, 0], [-59.2767, 40.128, 12.1382], [-53.2834, 33.5677, 21.0241], [-45.0964, 24.6061, 24.2765], [-36.9094, 15.6445, 21.0241], [-30.9161, 9.0842, 12.1382], [-28.7224, 6.68295, 0], [-30.9161, 9.0842, -12.1382], [-36.9094, 15.6445, -21.0241], [-45.0964, 24.6061, -24.2765], [-53.2834, 33.5677, -21.0241], [-59.2767, 40.128, -12.1382], [-56.0124, 36.5549, 0], [-54.55, 34.9541, 8.09217], [-50.5544, 30.5805, 14.016], [-45.0964, 24.6061, 16.1843], [-39.6384, 18.6317, 14.016], [-35.6429, 14.2582, 8.09217], [-34.1804, 12.6573, 0], [-35.6429, 14.2582, -8.09217], [-39.6384, 18.6317, -14.016], [-45.0964, 24.6061, -16.1843], [-50.5544, 30.5805, -14.016], [-54.55, 34.9541, -8.09217]], [[-62.604, 41.6447, 0], [-60.3558, 39.2714, 12.2005], [-54.2137, 32.7872, 21.1318], [-45.8235, 23.9298, 24.4009], [-37.4332, 15.0723, 21.1318], [-31.2911, 8.58815, 12.2005], [-29.043, 6.21479, 0], [-31.2911, 8.58815, -12.2005], [-37.4332, 15.0723, -21.1318], [-45.8235, 23.9298, -24.4009], [-54.2137, 32.7872, -21.1318], [-60.3558, 39.2714, -12.2005], [-57.0105, 35.7397, 0], [-55.5117, 34.1575, 8.13364], [-51.417, 29.8347, 14.0879], [-45.8235, 23.9298, 16.2673], [-40.23, 18.0248, 14.0879], [-36.1352, 13.702, 8.13364], [-34.6365, 12.1198, 0], [-36.1352, 13.702, -8.13364], [-40.23, 18.0248, -14.0879], [-45.8235, 23.9298, -16.2673], [-51.417, 29.8347, -14.0879], [-55.5117, 34.1575, -8.13364]], [[-63.723, 40.7383, 0], [-61.4207, 38.394, 12.2627], [-55.1306, 31.9893, 21.2396], [-46.5382, 23.2404, 24.5253], [-37.9458, 14.4914, 21.2396], [-31.6557, 8.08676, 12.2627], [-29.3534, 5.74249, 0], [-31.6557, 8.08676, -12.2627], [-37.9458, 14.4914, -21.2396], [-46.5382, 23.2404, -24.5253], [-55.1306, 31.9893, -21.2396], [-61.4207, 38.394, -12.2627], [-57.9947, 34.9056, 0], [-56.4598, 33.3428, 8.17512], [-52.2665, 29.073, 14.1597], [-46.5382, 23.2404, 16.3502], [-40.8099, 17.4077, 14.1597], [-36.6166, 13.138, 8.17512], [-35.0817, 11.5751, 0], [-36.6166, 13.138, -8.17512], [-40.8099, 17.4077, -14.1597], [-46.5382, 23.2404, -16.3502], [-52.2665, 29.073, -14.1597], [-56.4598, 33.3428, -8.17512]], [[-64.827, 39.8102, 0], [-62.4709, 37.4962, 12.3249], [-56.0337, 31.1742, 21.3473], [-47.2404, 22.5382, 24.6498], [-38.447, 13.9022, 21.3473], [-32.0099, 7.58025, 12.3249], [-29.6537, 5.26624, 0], [-32.0099, 7.58025, -12.3249], [-38.447, 13.9022, -21.3473], [-47.2404, 22.5382, -24.6498], [-56.0337, 31.1742, -21.3473], [-62.4709, 37.4962, -12.3249], [-58.9648, 34.0528, 0], [-57.394, 32.5102, 8.21659], [-53.1026, 28.2955, 14.2316], [-47.2404, 22.5382, 16.4332], [-41.3782, 16.7809, 14.2316], [-37.0867, 12.5662, 8.21659], [-35.5159, 11.0236, 0], [-37.0867, 12.5662, -8.21659], [-41.3782, 16.7809, -14.2316], [-47.2404, 22.5382, -16.4332], [-53.1026, 28.2955, -14.2316], [-57.394, 32.5102, -8.21659]], [[-65.9157, 38.8607, 0], [-63.506, 36.5781, 12.3871], [-56.9227, 30.3421, 21.4551], [-47.9298, 21.8235, 24.7742], [-38.9368, 13.3049, 21.4551], [-32.3535, 7.06882, 12.3871], [-29.9438, 4.78627, 0], [-32.3535, 7.06882, -12.3871], [-38.9368, 13.3049, -21.4551], [-47.9298, 21.8235, -24.7742], [-56.9227, 30.3421, -21.4551], [-63.506, 36.5781, -12.3871], [-59.9204, 33.1816, 0], [-58.3139, 31.6599, 8.25806], [-53.9251, 27.5025, 14.3034], [-47.9298, 21.8235, 16.5161], [-41.9344, 16.1444, 14.3034], [-37.5456, 11.987, 8.25806], [-35.9391, 10.4653, 0], [-37.5456, 11.987, -8.25806], [-41.9344, 16.1444, -14.3034], [-47.9298, 21.8235, -16.5161], [-53.9251, 27.5025, -14.3034], [-58.3139, 31.6599, -8.25806]], [[-66.9886, 37.89, 0], [-64.5258, 35.6401, 12.4493], [-57.7974, 29.4932, 21.5628], [-48.6061, 21.0964, 24.8986], [-39.4149, 12.6996, 21.5628], [-32.6864, 6.5527, 12.4493], [-30.2236, 4.30278, 0], [-32.6864, 6.5527, -12.4493], [-39.4149, 12.6996, -21.5628], [-48.6061, 21.0964, -24.8986], [-57.7974, 29.4932, -21.5628], [-64.5258, 35.6401, -12.4493], [-60.8611, 32.2922, 0], [-59.2192, 30.7922, 8.29954], [-54.7336, 26.6943, 14.3752], [-48.6061, 21.0964, 16.5991], [-42.4786, 15.4985, 14.3752], [-37.993, 11.4006, 8.29954], [-36.3511, 9.90066, 0], [-37.993, 11.4006, -8.29954], [-42.4786, 15.4985, -14.3752], [-48.6061, 21.0964, -16.5991], [-54.7336, 26.6943, -14.3752], [-59.2192, 30.7922, -8.29954]], [[-68.0453, 36.8985, 0], [-65.5298, 34.6824, 12.5115], [-58.6573, 28.6279, 21.6706], [-49.2692, 20.3573, 25.023], [-39.8812, 12.0866, 21.6706], [-33.0087, 6.03211, 12.5115], [-30.4932, 3.816, 0], [-33.0087, 6.03211, -12.5115], [-39.8812, 12.0866, -21.6706], [-49.2692, 20.3573, -25.023], [-58.6573, 28.6279, -21.6706], [-65.5298, 34.6824, -12.5115], [-61.7866, 31.3848, 0], [-60.1096, 29.9074, 8.34101], [-55.5279, 25.871, 14.4471], [-49.2692, 20.3573, 16.682], [-43.0106, 14.8435, 14.4471], [-38.4289, 10.8072, 8.34101], [-36.7519, 9.32975, 0], [-38.4289, 10.8072, -8.34101], [-43.0106, 14.8435, -14.4471], [-49.2692, 20.3573, -16.682], [-55.5279, 25.871, -14.4471], [-60.1096, 29.9074, -8.34101]], [[-69.0854, 35.8864, 0], [-66.5175, 33.7052, 12.5737], [-59.5021, 27.7463, 21.7783], [-49.9189, 19.6062, 25.1475], [-40.3357, 11.4662, 21.7783], [-33.3203, 5.50724, 12.5737], [-30.7525, 3.32612, 0], [-33.3203, 5.50724, -12.5737], [-40.3357, 11.4662, -21.7783], [-49.9189, 19.6062, -25.1475], [-59.5021, 27.7463, -21.7783], [-66.5175, 33.7052, -12.5737], [-62.6965, 30.4597, 0], [-60.9847, 29.0056, 8.38249], [-56.3077, 25.033, 14.5189], [-49.9189, 19.6062, 16.765], [-43.5301, 14.1795, 14.5189], [-38.8532, 10.2069, 8.38249], [-37.1413, 8.75283, 0], [-38.8532, 10.2069, -8.38249], [-43.5301, 14.1795, -14.5189], [-49.9189, 19.6062, -16.765], [-56.3077, 25.033, -14.5189], [-60.9847, 29.0056, -8.38249]], [[-70.1084, 34.8539, 0], [-67.4888, 32.7089, 12.6359], [-60.3317, 26.8488, 21.8861], [-50.5549, 18.8436, 25.2719], [-40.7782, 10.8385, 21.8861], [-33.6211, 4.97834, 12.6359], [-31.0014, 2.83337, 0], [-33.6211, 4.97834, -12.6359], [-40.7782, 10.8385, -21.8861], [-50.5549, 18.8436, -25.2719], [-60.3317, 26.8488, -21.8861], [-67.4888, 32.7089, -12.6359], [-63.5906, 29.5171, 0], [-61.8441, 28.0872, 8.42396], [-57.0728, 24.1804, 14.5907], [-50.5549, 18.8436, 16.8479], [-44.0371, 13.5069, 14.5907], [-39.2657, 9.6001, 8.42396], [-37.5192, 8.17012, 0], [-39.2657, 9.6001, -8.42396], [-44.0371, 13.5069, -14.5907], [-50.5549, 18.8436, -16.8479], [-57.0728, 24.1804, -14.5907], [-61.8441, 28.0872, -8.42396]], [[-71.1141, 33.8014, 0], [-68.4431, 31.6937, 12.6982], [-61.1456, 25.9355, 21.9939], [-51.1771, 18.0697, 25.3963], [-41.2085, 10.2038, 21.9939], [-33.9111, 4.4456, 12.6982], [-31.24, 2.33796, 0], [-33.9111, 4.4456, -12.6982], [-41.2085, 10.2038, -21.9939], [-51.1771, 18.0697, -25.3963], [-61.1456, 25.9355, -21.9939], [-68.4431, 31.6937, -12.6982], [-64.4684, 28.5575, 0], [-62.6877, 27.1524, 8.46544], [-57.8227, 23.3136, 14.6626], [-51.1771, 18.0697, 16.9309], [-44.5314, 12.8258, 14.6626], [-39.6664, 8.98696, 8.46544], [-37.8857, 7.58186, 0], [-39.6664, 8.98696, -8.46544], [-44.5314, 12.8258, -14.6626], [-51.1771, 18.0697, -16.9309], [-57.8227, 23.3136, -14.6626], [-62.6877, 27.1524, -8.46544]], [[-72.102, 32.7291, 0], [-69.3801, 30.6599, 12.7604], [-61.9436, 25.0068, 22.1016], [-51.7851, 17.2846, 25.5207], [-41.6267, 9.56234, 22.1016], [-34.1902, 3.90926, 12.7604], [-31.4682, 1.84009, 0], [-34.1902, 3.90926, -12.7604], [-41.6267, 9.56234, -22.1016], [-51.7851, 17.2846, -25.5207], [-61.9436, 25.0068, -22.1016], [-69.3801, 30.6599, -12.7604], [-65.3297, 27.5809, 0], [-63.5151, 26.2015, 8.50691], [-58.5574, 22.4327, 14.7344], [-51.7851, 17.2846, 17.0138], [-45.0128, 12.1364, 14.7344], [-40.0552, 8.3677, 8.50691], [-38.2405, 6.98825, 0], [-40.0552, 8.3677, -8.50691], [-45.0128, 12.1364, -14.7344], [-51.7851, 17.2846, -17.0138], [-58.5574, 22.4327, -14.7344], [-63.5151, 26.2015, -8.50691]], [[-73.0717, 31.6373, 0], [-70.2994, 29.6078, 12.8226], [-62.7253, 24.063, 22.2094], [-52.3789, 16.4887, 25.6452], [-42.0325, 8.91432, 22.2094], [-34.4584, 3.36952, 12.8226], [-31.6861, 1.33999, 0], [-34.4584, 3.36952, -12.8226], [-42.0325, 8.91432, -22.2094], [-52.3789, 16.4887, -25.6452], [-62.7253, 24.063, -22.2094], [-70.2994, 29.6078, -12.8226], [-66.1741, 26.5878, 0], [-64.3259, 25.2347, 8.54839], [-59.2765, 21.5382, 14.8062], [-52.3789, 16.4887, 17.0968], [-45.4813, 11.4391, 14.8062], [-40.4319, 7.74257, 8.54839], [-38.5837, 6.38954, 0], [-40.4319, 7.74257, -8.54839], [-45.4813, 11.4391, -14.8062], [-52.3789, 16.4887, -17.0968], [-59.2765, 21.5382, -14.8062], [-64.3259, 25.2347, -8.54839]], [[-74.0229, 30.5264, 0], [-71.2007, 28.5377, 12.8848], [-63.4905, 23.1043, 22.3171], [-52.9582, 15.6821, 25.7696], [-42.4259, 8.25999, 22.3171], [-34.7157, 2.82661, 12.8848], [-31.8936, 0.837854, 0], [-34.7157, 2.82661, -12.8848], [-42.4259, 8.25999, -22.3171], [-52.9582, 15.6821, -25.7696], [-63.4905, 23.1043, -22.3171], [-71.2007, 28.5377, -12.8848], [-67.0013, 25.5783, 0], [-65.1199, 24.2525, 8.58986], [-59.9798, 20.6302, 14.8781], [-52.9582, 15.6821, 17.1797], [-45.9367, 10.734, 14.8781], [-40.7966, 7.11179, 8.58986], [-38.9151, 5.78595, 0], [-40.7966, 7.11179, -8.58986], [-45.9367, 10.734, -14.8781], [-52.9582, 15.6821, -17.1797], [-59.9798, 20.6302, -14.8781], [-65.1199, 24.2525, -8.58986]], [[-74.9551, 29.3967, 0], [-72.0837, 27.4498, 12.947], [-64.239, 22.131, 22.4249], [-53.5229, 14.8653, 25.894], [-42.8068, 7.5996, 22.4249], [-34.9621, 2.28074, 12.947], [-32.0907, 0.333906, 0], [-34.9621, 2.28074, -12.947], [-42.8068, 7.5996, -22.4249], [-53.5229, 14.8653, -25.894], [-64.239, 22.131, -22.4249], [-72.0837, 27.4498, -12.947], [-67.811, 24.5529, 0], [-65.8968, 23.255, 8.63134], [-60.667, 19.7091, 14.9499], [-53.5229, 14.8653, 17.2627], [-46.3788, 10.0215, 14.9499], [-41.149, 6.47559, 8.63134], [-39.2348, 5.1777, 0], [-41.149, 6.47559, -8.63134], [-46.3788, 10.0215, -14.9499], [-53.5229, 14.8653, -17.2627], [-60.667, 19.7091, -14.9499], [-65.8968, 23.255, -8.63134]], [[-75.868, 28.2484, 0], [-72.948, 26.3446, 13.0092], [-64.9704, 21.1434, 22.5326], [-54.0727, 14.0384, 26.0184], [-43.1751, 6.93337, 22.5326], [-35.1975, 1.73213, 13.0092], [-32.2774, -0.171648, 0], [-35.1975, 1.73213, -13.0092], [-43.1751, 6.93337, -22.5326], [-54.0727, 14.0384, -26.0184], [-64.9704, 21.1434, -22.5326], [-72.948, 26.3446, -13.0092], [-68.6029, 23.5117, 0], [-66.6562, 22.2425, 8.67281], [-61.3378, 18.7751, 15.0217], [-54.0727, 14.0384, 17.3456], [-46.8076, 9.3017, 15.0217], [-41.4892, 5.83422, 8.67281], [-39.5425, 4.56503, 0], [-41.4892, 5.83422, -8.67281], [-46.8076, 9.3017, -15.0217], [-54.0727, 14.0384, -17.3456], [-61.3378, 18.7751, -15.0217], [-66.6562, 22.2425, -8.67281]], [[-76.7612, 27.082, 0], [-73.7932, 25.2224, 13.0714], [-65.6844, 20.1418, 22.6404], [-54.6075, 13.2017, 26.1429], [-43.5307, 6.26154, 22.6404], [-35.4219, 1.18101, 13.0714], [-32.4538, -0.678599, 0], [-35.4219, 1.18101, -13.0714], [-43.5307, 6.26154, -22.6404], [-54.6075, 13.2017, -26.1429], [-65.6844, 20.1418, -22.6404], [-73.7932, 25.2224, -13.0714], [-69.3767, 22.4552, 0], [-67.398, 21.2155, 8.71429], [-61.9921, 17.8284, 15.0936], [-54.6075, 13.2017, 17.4286], [-47.223, 8.57492, 15.0936], [-41.8171, 5.1879, 8.71429], [-39.8384, 3.94816, 0], [-41.8171, 5.1879, -8.71429], [-47.223, 8.57492, -15.0936], [-54.6075, 13.2017, -17.4286], [-61.9921, 17.8284, -15.0936], [-67.398, 21.2155, -8.71429]], [[-77.6345, 25.8977, 0], [-74.619, 24.0833, 13.1336], [-66.3808, 19.1266, 22.7481], [-55.1271, 12.3555, 26.2673], [-43.8735, 5.58436, 22.7481], [-35.6352, 0.627575, 13.1336], [-32.6198, -1.18674, 0], [-35.6352, 0.627575, -13.1336], [-43.8735, 5.58436, -22.7481], [-55.1271, 12.3555, -26.2673], [-66.3808, 19.1266, -22.7481], [-74.619, 24.0833, -13.1336], [-70.132, 21.3836, 0], [-68.1217, 20.1741, 8.75576], [-62.6296, 16.8695, 15.1654], [-55.1271, 12.3555, 17.5115], [-47.6247, 7.8414, 15.1654], [-42.1325, 4.53687, 8.75576], [-40.1223, 3.32733, 0], [-42.1325, 4.53687, -8.75576], [-47.6247, 7.8414, -15.1654], [-55.1271, 12.3555, -17.5115], [-62.6296, 16.8695, -15.1654], [-68.1217, 20.1741, -8.75576]], [[-78.4873, 24.6959, 0], [-75.4252, 22.9279, 13.1959], [-67.0593, 18.0979, 22.8559], [-55.6314, 11.5, 26.3917], [-44.2035, 4.90207, 22.8559], [-35.8376, 0.0720565, 13.1959], [-32.7755, -1.69585, 0], [-35.8376, 0.0720565, -13.1959], [-44.2035, 4.90207, -22.8559], [-55.6314, 11.5, -26.3917], [-67.0593, 18.0979, -22.8559], [-75.4252, 22.9279, -13.1959], [-70.8687, 20.2972, 0], [-68.8272, 19.1186, 8.79724], [-63.25, 15.8986, 15.2373], [-55.6314, 11.5, 17.5945], [-48.0128, 7.10138, 15.2373], [-42.4355, 3.88137, 8.79724], [-40.3941, 2.70276, 0], [-42.4355, 3.88137, -8.79724], [-48.0128, 7.10138, -15.2373], [-55.6314, 11.5, -17.5945], [-63.25, 15.8986, -15.2373], [-68.8272, 19.1186, -8.79724]], [[-79.3194, 23.4769, 0], [-76.2113, 21.7565, 13.2581], [-67.7198, 17.0562, 22.9636], [-56.1201, 10.6356, 26.5161], [-44.5205, 4.21492, 22.9636], [-36.029, -0.485331, 13.2581], [-32.9209, -2.20574, 0], [-36.029, -0.485331, -13.2581], [-44.5205, 4.21492, -22.9636], [-56.1201, 10.6356, -26.5161], [-67.7198, 17.0562, -22.9636], [-76.2113, 21.7565, -13.2581], [-71.5863, 19.1964, 0], [-69.5142, 18.0495, 8.83871], [-63.8532, 14.916, 15.3091], [-56.1201, 10.6356, 17.6774], [-48.387, 6.35514, 15.3091], [-42.726, 3.22164, 8.83871], [-40.6539, 2.0747, 0], [-42.726, 3.22164, -8.83871], [-48.387, 6.35514, -15.3091], [-56.1201, 10.6356, -17.6774], [-63.8532, 14.916, -15.3091], [-69.5142, 18.0495, -8.83871]], [[-80.1304, 22.2411, 0], [-76.977, 20.5693, 13.3203], [-68.3618, 16.0018, 23.0714], [-56.5932, 9.76246, 26.6406], [-44.8245, 3.52313, 23.0714], [-36.2093, -1.04437, 13.3203], [-33.0559, -2.7162, 0], [-36.2093, -1.04437, -13.3203], [-44.8245, 3.52313, -23.0714], [-56.5932, 9.76246, -26.6406], [-68.3618, 16.0018, -23.0714], [-76.977, 20.5693, -13.3203], [-72.2847, 18.0816, 0], [-70.1824, 16.967, 8.88018], [-64.4389, 13.922, 15.3809], [-56.5932, 9.76246, 17.7604], [-48.7474, 5.60291, 15.3809], [-43.0039, 2.55791, 8.88018], [-40.9017, 1.44336, 0], [-43.0039, 2.55791, -8.88018], [-48.7474, 5.60291, -15.3809], [-56.5932, 9.76246, -17.7604], [-64.4389, 13.922, -15.3809], [-70.1824, 16.967, -8.88018]], [[-80.92, 20.9889, 0], [-77.7221, 19.3668, 13.3825], [-68.9852, 14.9349, 23.1791], [-57.0504, 8.88096, 26.765], [-45.1155, 2.82697, 23.1791], [-36.3786, -1.60485, 13.3825], [-33.1807, -3.22701, 0], [-36.3786, -1.60485, -13.3825], [-45.1155, 2.82697, -23.1791], [-57.0504, 8.88096, -26.765], [-68.9852, 14.9349, -23.1791], [-77.7221, 19.3668, -13.3825], [-72.9635, 16.9529, 0], [-70.8315, 15.8715, 8.92166], [-65.0069, 12.9169, 15.4528], [-57.0504, 8.88096, 17.8433], [-49.0938, 4.84497, 15.4528], [-43.2692, 1.89042, 8.92166], [-41.1372, 0.808978, 0], [-43.2692, 1.89042, -8.92166], [-49.0938, 4.84497, -15.4528], [-57.0504, 8.88096, -17.8433], [-65.0069, 12.9169, -15.4528], [-70.8315, 15.8715, -8.92166]], [[-81.6879, 19.7207, 0], [-78.4462, 18.1492, 13.4447], [-69.5897, 13.856, 23.2869], [-57.4916, 7.99134, 26.8894], [-45.3934, 2.12668, 23.2869], [-36.5369, -2.16655, 13.4447], [-33.2952, -3.73798, 0], [-36.5369, -2.16655, -13.4447], [-45.3934, 2.12668, -23.2869], [-57.4916, 7.99134, -26.8894], [-69.5897, 13.856, -23.2869], [-78.4462, 18.1492, -13.4447], [-73.6225, 15.8109, 0], [-71.4613, 14.7633, 8.96313], [-65.557, 11.9011, 15.5246], [-57.4916, 7.99134, 17.9263], [-49.4261, 4.08156, 15.5246], [-43.5218, 1.21941, 8.96313], [-41.3607, 0.171791, 0], [-43.5218, 1.21941, -8.96313], [-49.4261, 4.08156, -15.5246], [-57.4916, 7.99134, -17.9263], [-65.557, 11.9011, -15.5246], [-71.4613, 14.7633, -8.96313]], [[-82.4337, 18.4367, 0], [-79.1491, 16.9171, 13.5069], [-70.1752, 12.7653, 23.3947], [-57.9166, 7.0939, 27.0138], [-45.6581, 1.4225, 23.3947], [-36.6842, -2.72926, 13.5069], [-33.3996, -4.24891, 0], [-36.6842, -2.72926, -13.5069], [-45.6581, 1.4225, -23.3947], [-57.9166, 7.0939, -27.0138], [-70.1752, 12.7653, -23.3947], [-79.1491, 16.9171, -13.5069], [-74.2614, 14.6558, 0], [-72.0716, 13.6427, 9.00461], [-66.089, 10.8748, 15.5964], [-57.9166, 7.0939, 18.0092], [-49.7443, 3.31296, 15.5964], [-43.7617, 0.545126, 9.00461], [-41.5719, -0.467973, 0], [-43.7617, 0.545126, -9.00461], [-49.7443, 3.31296, -15.5964], [-57.9166, 7.0939, -18.0092], [-66.089, 10.8748, -15.5964], [-72.0716, 13.6427, -9.00461]], [[-83.1572, 17.1375, 0], [-79.8304, 15.6706, 13.5691], [-70.7413, 11.6632, 23.5024], [-58.3255, 6.18893, 27.1382], [-45.9096, 0.714672, 23.5024], [-36.8206, -3.29277, 13.5691], [-33.4937, -4.75959, 0], [-36.8206, -3.29277, -13.5691], [-45.9096, 0.714672, -23.5024], [-58.3255, 6.18893, -27.1382], [-70.7413, 11.6632, -23.5024], [-79.8304, 15.6706, -13.5691], [-74.8799, 13.4879, 0], [-72.6621, 12.5101, 9.04608], [-66.6027, 9.83844, 15.6683], [-58.3255, 6.18893, 18.0922], [-50.0482, 2.53943, 15.6683], [-43.9889, -0.132199, 9.04608], [-41.771, -1.11008, 0], [-43.9889, -0.132199, -9.04608], [-50.0482, 2.53943, -15.6683], [-58.3255, 6.18893, -18.0922], [-66.6027, 9.83844, -15.6683], [-72.6621, 12.5101, -9.04608]], [[-83.8579, 15.8233, 0], [-80.4898, 14.4103, 13.6313], [-71.2879, 10.55, 23.6102], [-58.7179, 5.27673, 27.2627], [-46.1478, 0.00345556, 23.6102], [-36.9459, -3.85685, 13.6313], [-33.5778, -5.26982, 0], [-36.9459, -3.85685, -13.6313], [-46.1478, 0.00345556, -23.6102], [-58.7179, 5.27673, -27.2627], [-71.2879, 10.55, -23.6102], [-80.4898, 14.4103, -13.6313], [-75.4779, 12.3078, 0], [-73.2325, 11.3658, 9.08756], [-67.0979, 8.79225, 15.7401], [-58.7179, 5.27673, 18.1751], [-50.3378, 1.76122, 15.7401], [-44.2032, -0.812323, 9.08756], [-41.9578, -1.7543, 0], [-44.2032, -0.812323, -9.08756], [-50.3378, 1.76122, -15.7401], [-58.7179, 5.27673, -18.1751], [-67.0979, 8.79225, -15.7401], [-73.2325, 11.3658, -9.08756]], [[-84.5357, 14.4946, 0], [-81.1271, 13.1365, 13.6935], [-71.8147, 9.4261, 23.7179], [-59.0937, 4.3576, 27.3871], [-46.3727, -0.710906, 23.7179], [-37.0603, -4.42131, 13.6935], [-33.6517, -5.77941, 0], [-37.0603, -4.42131, -13.6935], [-46.3727, -0.710906, -23.7179], [-59.0937, 4.3576, -27.3871], [-71.8147, 9.4261, -23.7179], [-81.1271, 13.1365, -13.6935], [-76.055, 11.1156, 0], [-73.7827, 10.2102, 9.12903], [-67.5744, 7.7366, 15.8119], [-59.0937, 4.3576, 18.2581], [-50.6131, 0.978595, 15.8119], [-44.4048, -1.49501, 9.12903], [-42.1324, -2.40041, 0], [-44.4048, -1.49501, -9.12903], [-50.6131, 0.978595, -15.8119], [-59.0937, 4.3576, -18.2581], [-67.5744, 7.7366, -15.8119], [-73.7827, 10.2102, -9.12903]], [[-85.1902, 13.1518, 0], [-81.742, 11.8496, 13.7558], [-72.3216, 8.29182, 23.8257], [-59.4529, 3.43183, 27.5115], [-46.5843, -1.42817, 23.8257], [-37.1638, -4.98593, 13.7558], [-33.7157, -6.28816, 0], [-37.1638, -4.98593, -13.7558], [-46.5843, -1.42817, -23.8257], [-59.4529, 3.43183, -27.5115], [-72.3216, 8.29182, -23.8257], [-81.742, 11.8496, -13.7558], [-76.6111, 9.91182, 0], [-74.3123, 9.04366, 9.17051], [-68.032, 6.67182, 15.8838], [-59.4529, 3.43183, 18.341], [-50.8738, 0.191832, 15.8838], [-44.5935, -2.18001, 9.17051], [-42.2948, -3.04816, 0], [-44.5935, -2.18001, -9.17051], [-50.8738, 0.191832, -15.8838], [-59.4529, 3.43183, -18.341], [-68.032, 6.67182, -15.8838], [-74.3123, 9.04366, -9.17051]], [[-85.8211, 11.7953, 0], [-82.3343, 10.5499, 13.818], [-72.8082, 7.14751, 23.9334], [-59.7954, 2.49972, 27.6359], [-46.7825, -2.14807, 23.9334], [-37.2564, -5.55049, 13.818], [-33.7697, -6.79587, 0], [-37.2564, -5.55049, -13.818], [-46.7825, -2.14807, -23.9334], [-59.7954, 2.49972, -27.6359], [-72.8082, 7.14751, -23.9334], [-82.3343, 10.5499, -13.818], [-77.1458, 8.69678, 0], [-74.8213, 7.86653, 9.21198], [-68.4706, 5.59825, 15.9556], [-59.7954, 2.49972, 18.424], [-51.1201, -0.598808, 15.9556], [-44.7694, -2.86709, 9.21198], [-42.4449, -3.69734, 0], [-44.7694, -2.86709, -9.21198], [-51.1201, -0.598808, -15.9556], [-59.7954, 2.49972, -18.424], [-68.4706, 5.59825, -15.9556], [-74.8213, 7.86653, -9.21198]], [[-86.4281, 10.4255, 0], [-82.9036, 9.23797, 13.8802], [-73.2745, 5.99355, 24.0412], [-60.1209, 1.56158, 27.7604], [-46.9673, -2.87038, 24.0412], [-37.3382, -6.1148, 13.8802], [-33.8137, -7.30234, 0], [-37.3382, -6.1148, -13.8802], [-46.9673, -2.87038, -24.0412], [-60.1209, 1.56158, -27.7604], [-73.2745, 5.99355, -24.0412], [-82.9036, 9.23797, -13.8802], [-77.6591, 7.47087, 0], [-75.3094, 6.67918, 9.25346], [-68.89, 4.51623, 16.0275], [-60.1209, 1.56158, 18.5069], [-51.3519, -1.39306, 16.0275], [-44.9325, -3.55601, 9.25346], [-42.5828, -4.3477, 0], [-44.9325, -3.55601, -9.25346], [-51.3519, -1.39306, -16.0275], [-60.1209, 1.56158, -18.5069], [-68.89, 4.51623, -16.0275], [-75.3094, 6.67918, -9.25346]], [[-87.011, 9.04285, 0], [-83.4498, 7.91409, 13.9424], [-73.7203, 4.83028, 24.1489], [-60.4295, 0.617723, 27.8848], [-47.1387, -3.59484, 24.1489], [-37.4092, -6.67865, 13.9424], [-33.8479, -7.8074, 0], [-37.4092, -6.67865, -13.9424], [-47.1387, -3.59484, -24.1489], [-60.4295, 0.617723, -27.8848], [-73.7203, 4.83028, -24.1489], [-83.4498, 7.91409, -13.9424], [-78.1505, 6.23447, 0], [-75.7764, 5.48197, 9.29493], [-69.29, 3.4261, 16.0993], [-60.4295, 0.617723, 18.5899], [-51.569, -2.19065, 16.0993], [-45.0826, -4.24652, 9.29493], [-42.7085, -4.99903, 0], [-45.0826, -4.24652, -9.29493], [-51.569, -2.19065, -16.0993], [-60.4295, 0.617723, -18.5899], [-69.29, 3.4261, -16.0993], [-75.7764, 5.48197, -9.29493]], [[-87.5696, 7.64773, 0], [-83.9725, 6.57871, 14.0046], [-74.1453, 3.65809, 24.2567], [-60.721, -0.331555, 28.0092], [-47.2967, -4.3212, 24.2567], [-37.4694, -7.24182, 14.0046], [-33.8724, -8.31084, 0], [-37.4694, -7.24182, -14.0046], [-47.2967, -4.3212, -24.2567], [-60.721, -0.331555, -28.0092], [-74.1453, 3.65809, -24.2567], [-83.9725, 6.57871, -14.0046], [-78.62, 4.98797, 0], [-76.222, 4.27529, 9.33641], [-69.6705, 2.32821, 16.1711], [-60.721, -0.331555, 18.6728], [-51.7714, -2.99132, 16.1711], [-45.2199, -4.9384, 9.33641], [-42.8219, -5.65108, 0], [-45.2199, -4.9384, -9.33641], [-51.7714, -2.99132, -16.1711], [-60.721, -0.331555, -18.6728], [-69.6705, 2.32821, -16.1711], [-76.222, 4.27529, -9.33641]], [[-88.1034, 6.2406, 0], [-84.4716, 5.23224, 14.0668], [-74.5493, 2.47733, 24.3644], [-60.9952, -1.28594, 28.1336], [-47.4412, -5.04921, 24.3644], [-37.5189, -7.80412, 14.0668], [-33.8871, -8.81249, 0], [-37.5189, -7.80412, -14.0668], [-47.4412, -5.04921, -24.3644], [-60.9952, -1.28594, -28.1336], [-74.5493, 2.47733, -24.3644], [-84.4716, 5.23224, -14.0668], [-79.0674, 3.73176, 0], [-76.6462, 3.05951, 9.37788], [-70.0313, 1.22291, 16.243], [-60.9952, -1.28594, 18.7558], [-51.9592, -3.79479, 16.243], [-45.3443, -5.63139, 9.37788], [-42.9231, -6.30364, 0], [-45.3443, -5.63139, -9.37788], [-51.9592, -3.79479, -16.243], [-60.9952, -1.28594, -18.7558], [-70.0313, 1.22291, -16.243], [-76.6462, 3.05951, -9.37788]], [[-88.6124, 4.8219, 0], [-84.9468, 3.8751, 14.129], [-74.9323, 1.28839, 24.4722], [-61.2523, -2.24512, 28.2581], [-47.5722, -5.77863, 24.4722], [-37.5577, -8.36534, 14.129], [-33.8922, -9.31215, 0], [-37.5577, -8.36534, -14.129], [-47.5722, -5.77863, -24.4722], [-61.2523, -2.24512, -28.2581], [-74.9323, 1.28839, -24.4722], [-84.9468, 3.8751, -14.129], [-79.4923, 2.46622, 0], [-77.0486, 1.83502, 9.41935], [-70.3723, 0.11055, 16.3148], [-61.2523, -2.24512, 18.8387], [-52.1322, -4.6008, 16.3148], [-45.4559, -6.32527, 9.41935], [-43.0122, -6.95647, 0], [-45.4559, -6.32527, -9.41935], [-52.1322, -4.6008, -16.3148], [-61.2523, -2.24512, -18.8387], [-70.3723, 0.11055, -16.3148], [-77.0486, 1.83502, -9.41935]], [[-89.0962, 3.39205, 0], [-85.3979, 2.50771, 14.1912], [-75.294, 0.0916316, 24.58], [-61.4919, -3.20879, 28.3825], [-47.6898, -6.50921, 24.58], [-37.5859, -8.92529, 14.1912], [-33.8877, -9.80963, 0], [-37.5859, -8.92529, -14.1912], [-47.6898, -6.50921, -24.58], [-61.4919, -3.20879, -28.3825], [-75.294, 0.0916316, -24.58], [-85.3979, 2.50771, -14.1912], [-79.8947, 1.19177, 0], [-77.4292, 0.602209, 9.46083], [-70.6933, -1.00851, 16.3866], [-61.4919, -3.20879, 18.9217], [-52.2905, -5.40907, 16.3866], [-45.5546, -7.01979, 9.46083], [-43.0891, -7.60935, 0], [-45.5546, -7.01979, -9.46083], [-52.2905, -5.40907, -16.3866], [-61.4919, -3.20879, -18.9217], [-70.6933, -1.00851, -16.3866], [-77.4292, 0.602209, -9.46083]], [[-89.5546, 1.95152, 0], [-85.8247, 1.1305, 14.2535], [-75.6343, -1.11255, 24.6877], [-61.7141, -4.17663, 28.5069], [-47.7939, -7.2407, 24.6877], [-37.6036, -9.48375, 14.2535], [-33.8737, -10.3048, 0], [-37.6036, -9.48375, -14.2535], [-47.7939, -7.2407, -24.6877], [-61.7141, -4.17663, -28.5069], [-75.6343, -1.11255, -24.6877], [-85.8247, 1.1305, -14.2535], [-80.2744, -0.0911968, 0], [-77.7878, -0.63854, 9.5023], [-70.9943, -2.13391, 16.4585], [-61.7141, -4.17663, 19.0046], [-52.434, -6.21934, 16.4585], [-45.6404, -7.71471, 9.5023], [-43.1538, -8.26205, 0], [-45.6404, -7.71471, -9.5023], [-52.434, -6.21934, -16.4585], [-61.7141, -4.17663, -19.0046], [-70.9943, -2.13391, -16.4585], [-77.7878, -0.63854, -9.5023]], [[-89.9874, 0.500743, 0], [-86.2269, -0.256088, 14.3157], [-75.9531, -2.32379, 24.7955], [-61.9188, -5.14832, 28.6313], [-47.8846, -7.97285, 24.7955], [-37.6108, -10.0405, 14.3157], [-33.8503, -10.7974, 0], [-37.6108, -10.0405, -14.3157], [-47.8846, -7.97285, -24.7955], [-61.9188, -5.14832, -28.6313], [-75.9531, -2.32379, -24.7955], [-86.2269, -0.256088, -14.3157], [-80.6312, -1.38228, 0], [-78.1242, -1.88683, 9.54378], [-71.275, -3.2653, 16.5303], [-61.9188, -5.14832, 19.0876], [-52.5627, -7.03134, 16.5303], [-45.7135, -8.4098, 9.54378], [-43.2065, -8.91435, 0], [-45.7135, -8.4098, -9.54378], [-52.5627, -7.03134, -16.5303], [-61.9188, -5.14832, -19.0876], [-71.275, -3.2653, -16.5303], [-78.1242, -1.88683, -9.54378]], [[-90.3943, -0.959816, 0], [-86.6044, -1.65162, 14.3779], [-76.2501, -3.54168, 24.9032], [-62.106, -6.12354, 28.7558], [-47.9618, -8.70541, 24.9032], [-37.6076, -10.5955, 14.3779], [-33.8176, -11.2873, 0], [-37.6076, -10.5955, -14.3779], [-47.9618, -8.70541, -24.9032], [-62.106, -6.12354, -28.7558], [-76.2501, -3.54168, -24.9032], [-86.6044, -1.65162, -14.3779], [-80.9649, -2.68106, 0], [-78.4382, -3.14226, 9.58525], [-71.5354, -4.4023, 16.6021], [-62.106, -6.12354, 19.1705], [-52.6765, -7.84479, 16.6021], [-45.7737, -9.10482, 9.58525], [-43.2471, -9.56603, 0], [-45.7737, -9.10482, -9.58525], [-52.6765, -7.84479, -16.6021], [-62.106, -6.12354, -19.1705], [-71.5354, -4.4023, -16.6021], [-78.4382, -3.14226, -9.58525]], [[-90.7752, -2.4297, 0], [-86.957, -3.05566, 14.4401], [-76.5253, -4.76584, 25.011], [-62.2755, -7.10199, 28.8802], [-48.0256, -9.43814, 25.011], [-37.594, -11.1483, 14.4401], [-33.7757, -11.7743, 0], [-37.594, -11.1483, -14.4401], [-48.0256, -9.43814, -25.011], [-62.2755, -7.10199, -28.8802], [-76.5253, -4.76584, -25.011], [-86.957, -3.05566, -14.4401], [-81.2753, -3.98713, 0], [-78.7298, -4.40444, 9.62673], [-71.7754, -5.54456, 16.674], [-62.2755, -7.10199, 19.2535], [-52.7755, -8.65942, 16.674], [-45.8211, -9.79954, 9.62673], [-43.2756, -10.2169, 0], [-45.8211, -9.79954, -9.62673], [-52.7755, -8.65942, -16.674], [-62.2755, -7.10199, -19.2535], [-71.7754, -5.54456, -16.674], [-78.7298, -4.40444, -9.62673]], [[-91.1298, -3.90843, 0], [-87.2844, -4.46777, 14.5023], [-76.7785, -5.99589, 25.1187], [-62.4273, -8.08334, 29.0046], [-48.076, -10.1708, 25.1187], [-37.5701, -11.6989, 14.5023], [-33.7247, -12.2582, 0], [-37.5701, -11.6989, -14.5023], [-48.076, -10.1708, -25.1187], [-62.4273, -8.08334, -29.0046], [-76.7785, -5.99589, -25.1187], [-87.2844, -4.46777, -14.5023], [-81.5623, -5.30007, 0], [-78.9987, -5.67296, 9.6682], [-71.9948, -6.6917, 16.7458], [-62.4273, -8.08334, 19.3364], [-52.8597, -9.47497, 16.7458], [-45.8558, -10.4937, 9.6682], [-43.2922, -10.8666, 0], [-45.8558, -10.4937, -9.6682], [-52.8597, -9.47497, -16.7458], [-62.4273, -8.08334, -19.3364], [-71.9948, -6.6917, -16.7458], [-78.9987, -5.67296, -9.6682]], [[-91.458, -5.39556, 0], [-87.5866, -5.88748, 14.5645], [-77.0097, -7.23141, 25.2265], [-62.5613, -9.06727, 29.129], [-48.113, -10.9031, 25.2265], [-37.536, -12.2471, 14.5645], [-33.6646, -12.739, 0], [-37.536, -12.2471, -14.5645], [-48.113, -10.9031, -25.2265], [-62.5613, -9.06727, -29.129], [-77.0097, -7.23141, -25.2265], [-87.5866, -5.88748, -14.5645], [-81.8258, -6.61946, 0], [-79.2448, -6.94741, 9.70968], [-72.1935, -7.84336, 16.8177], [-62.5613, -9.06727, 19.4194], [-52.9291, -10.2912, 16.8177], [-45.8778, -11.1871, 9.70968], [-43.2969, -11.5151, 0], [-45.8778, -11.1871, -9.70968], [-52.9291, -10.2912, -16.8177], [-62.5613, -9.06727, -19.4194], [-72.1935, -7.84336, -16.8177], [-79.2448, -6.94741, -9.70968]], [[-91.7596, -6.8906, 0], [-87.8633, -7.31434, 14.6267], [-77.2186, -8.47203, 25.3342], [-62.6776, -10.0535, 29.2535], [-48.1366, -11.6349, 25.3342], [-37.4919, -12.7926, 14.6267], [-33.5956, -13.2163, 0], [-37.4919, -12.7926, -14.6267], [-48.1366, -11.6349, -25.3342], [-62.6776, -10.0535, -29.2535], [-77.2186, -8.47203, -25.3342], [-87.8633, -7.31434, -14.6267], [-82.0656, -7.94488, 0], [-79.4681, -8.22738, 9.75115], [-72.3716, -8.99917, 16.8895], [-62.6776, -10.0535, 19.5023], [-52.9836, -11.1077, 16.8895], [-45.8871, -11.8795, 9.75115], [-43.2896, -12.162, 0], [-45.8871, -11.8795, -9.75115], [-52.9836, -11.1077, -16.8895], [-62.6776, -10.0535, -19.5023], [-72.3716, -8.99917, -16.8895], [-79.4681, -8.22738, -9.75115]], [[-92.0343, -8.39307, 0], [-88.1144, -8.74791, 14.6889], [-77.4052, -9.71733, 25.442], [-62.776, -11.0416, 29.3779], [-48.1469, -12.3658, 25.442], [-37.4376, -13.3353, 14.6889], [-33.5178, -13.6901, 0], [-37.4376, -13.3353, -14.6889], [-48.1469, -12.3658, -25.442], [-62.776, -11.0416, -29.3779], [-77.4052, -9.71733, -25.442], [-88.1144, -8.74791, -14.6889], [-82.2815, -9.27591, 0], [-79.6683, -9.51246, 9.79263], [-72.5288, -10.1587, 16.9613], [-62.776, -11.0416, 19.5853], [-53.0233, -11.9244, 16.9613], [-45.8838, -12.5707, 9.79263], [-43.2705, -12.8073, 0], [-45.8838, -12.5707, -9.79263], [-53.0233, -11.9244, -16.9613], [-62.776, -11.0416, -19.5853], [-72.5288, -10.1587, -16.9613], [-79.6683, -9.51246, -9.79263]], [[-92.282, -9.9025, 0], [-88.3398, -10.1877, 14.7512], [-77.5693, -10.9669, 25.5497], [-62.8566, -12.0313, 29.5023], [-48.1439, -13.0957, 25.5497], [-37.3735, -13.8749, 14.7512], [-33.4312, -14.1601, 0], [-37.3735, -13.8749, -14.7512], [-48.1439, -13.0957, -25.5497], [-62.8566, -12.0313, -29.5023], [-77.5693, -10.9669, -25.5497], [-88.3398, -10.1877, -14.7512], [-82.4736, -10.6121, 0], [-79.8454, -10.8022, 9.8341], [-72.6651, -11.3217, 17.0332], [-62.8566, -12.0313, 19.6682], [-53.0482, -12.7409, 17.0332], [-45.8679, -13.2604, 9.8341], [-43.2397, -13.4505, 0], [-45.8679, -13.2604, -9.8341], [-53.0482, -12.7409, -17.0332], [-62.8566, -12.0313, -19.6682], [-72.6651, -11.3217, -17.0332], [-79.8454, -10.8022, -9.8341]], [[-92.5026, -11.4184, 0], [-88.5392, -11.6333, 14.8134], [-77.711, -12.2204, 25.6575], [-62.9193, -13.0224, 29.6267], [-48.1277, -13.8243, 25.6575], [-37.2995, -14.4114, 14.8134], [-33.3361, -14.6263, 0], [-37.2995, -14.4114, -14.8134], [-48.1277, -13.8243, -25.6575], [-62.9193, -13.0224, -29.6267], [-77.711, -12.2204, -25.6575], [-88.5392, -11.6333, -14.8134], [-82.6415, -11.9531, 0], [-79.9993, -12.0963, 9.87558], [-72.7804, -12.4877, 17.105], [-62.9193, -13.0224, 19.7512], [-53.0582, -13.557, 17.105], [-45.8394, -13.9484, 9.87558], [-43.1972, -14.0917, 0], [-45.8394, -13.9484, -9.87558], [-53.0582, -13.557, -17.105], [-62.9193, -13.0224, -19.7512], [-72.7804, -12.4877, -17.105], [-79.9993, -12.0963, -9.87558]], [[-92.6959, -12.9403, 0], [-88.7126, -13.0842, 14.8756], [-77.83, -13.4773, 25.7653], [-62.9641, -14.0144, 29.7512], [-48.0983, -14.5514, 25.7653], [-37.2157, -14.9446, 14.8756], [-33.2324, -15.0885, 0], [-37.2157, -14.9446, -14.8756], [-48.0983, -14.5514, -25.7653], [-62.9641, -14.0144, -29.7512], [-77.83, -13.4773, -25.7653], [-88.7126, -13.0842, -14.8756], [-82.7853, -13.2983, 0], [-80.1298, -13.3942, 9.91705], [-72.8747, -13.6563, 17.1768], [-62.9641, -14.0144, 19.8341], [-53.0536, -14.3724, 17.1768], [-45.7985, -14.6345, 9.91705], [-43.143, -14.7304, 0], [-45.7985, -14.6345, -9.91705], [-53.0536, -14.3724, -17.1768], [-62.9641, -14.0144, -19.8341], [-72.8747, -13.6563, -17.1768], [-80.1298, -13.3942, -9.91705]], [[-92.8617, -14.4676, 0], [-88.8598, -14.5399, 14.9378], [-77.9264, -14.7373, 25.873], [-62.991, -15.007, 29.8756], [-48.0557, -15.2767, 25.873], [-37.1222, -15.4741, 14.9378], [-33.1203, -15.5464, 0], [-37.1222, -15.4741, -14.9378], [-48.0557, -15.2767, -25.873], [-62.991, -15.007, -29.8756], [-77.9264, -14.7373, -25.873], [-88.8598, -14.5399, -14.9378], [-82.9048, -14.6474, 0], [-80.2369, -14.6956, 9.95853], [-72.9479, -14.8272, 17.2487], [-62.991, -15.007, 19.9171], [-53.0341, -15.1868, 17.2487], [-45.7452, -15.3184, 9.95853], [-43.0772, -15.3666, 0], [-45.7452, -15.3184, -9.95853], [-53.0341, -15.1868, -17.2487], [-62.991, -15.007, -19.9171], [-72.9479, -14.8272, -17.2487], [-80.2369, -14.6956, -9.95853]], [[-93, -16, 0], [-88.9808, -16, 15], [-78, -16, 25.9808], [-63, -16, 30], [-48, -16, 25.9808], [-37.0192, -16, 15], [-33, -16, 0], [-37.0192, -16, -15], [-48, -16, -25.9808], [-63, -16, -30], [-78, -16, -25.9808], [-88.9808, -16, -15], [-83, -16, 0], [-80.3205, -16, 10], [-73, -16, 17.3205], [-63, -16, 20], [-53, -16, 17.3205], [-45.6795, -16, 10], [-43, -16, 0], [-45.6795, -16, -10], [-53, -16, -17.3205], [-63, -16, -20], [-73, -16, -17.3205], [-80.3205, -16, -10]]]; for(i = [0:len(expected) - 1]) { - assertEqualPoints(expected[i], sections[i], float_digits = 3); + assertEqualPoints(expected[i], sections[i]); } } diff --git a/test/test_helix_extrude.scad b/test/test_helix_extrude.scad index fa5d1bc0..38ff076d 100644 --- a/test/test_helix_extrude.scad +++ b/test/test_helix_extrude.scad @@ -11,166 +11,10 @@ module test_helix_extrude_same_radius() { include ; module test_helix_extrude(sections) { - expected = [ - [[45, 0.08, -1.998], [45, -0.08, 1.998], [44, -0.08, 1.998], [44, 0, 0], [36, 0, 0], [36, -0.08, 1.998], [35, -0.08, 1.998], [35, 0.08, -1.998]] - ,[[44, 9.434, -1.665], [44.033, 9.278, 2.332], [43.055, 9.07, 2.332], [43.038, 9.148, 0.333], [35.213, 7.485, 0.333], [35.23, 7.407, 2.332], [34.252, 7.199, 2.332], [34.219, 7.355, -1.665]] - ,[[41.077, 18.376, -1.332], [41.142, 18.231, 2.665], [40.228, 17.824, 2.665], [40.196, 17.896, 0.667], [32.888, 14.643, 0.667], [32.92, 14.57, 2.665], [32.006, 14.163, 2.665], [31.942, 14.308, -1.332]] - ,[[36.359, 26.515, -0.998], [36.453, 26.386, 2.998], [35.643, 25.798, 2.998], [35.597, 25.863, 1], [29.125, 21.16, 1], [29.171, 21.096, 2.998], [28.362, 20.508, 2.998], [28.269, 20.637, -0.998]] - ,[[30.052, 33.495, -0.665], [30.17, 33.388, 3.332], [29.501, 32.645, 3.332], [29.442, 32.698, 1.333], [24.089, 26.753, 1.333], [24.148, 26.7, 3.332], [23.479, 25.957, 3.332], [23.36, 26.063, -0.665]] - ,[[22.431, 39.011, -0.332], [22.569, 38.931, 3.665], [22.069, 38.065, 3.665], [22, 38.105, 1.667], [18, 31.177, 1.667], [18.069, 31.137, 3.665], [17.569, 30.271, 3.665], [17.431, 30.351, -0.332]] - ,[[13.83, 42.822, 0.002], [13.981, 42.773, 3.998], [13.672, 41.822, 3.998], [13.597, 41.846, 2], [11.125, 34.238, 2], [11.2, 34.213, 3.998], [10.891, 33.262, 3.998], [10.74, 33.312, 0.002]] - ,[[4.625, 44.762, 0.335], [4.783, 44.745, 4.332], [4.678, 43.751, 4.332], [4.599, 43.759, 2.333], [3.763, 35.803, 2.333], [3.842, 35.794, 4.332], [3.738, 34.8, 4.332], [3.579, 34.817, 0.335]] - ,[[-4.783, 44.745, 0.668], [-4.625, 44.762, 4.665], [-4.52, 43.767, 4.665], [-4.599, 43.759, 2.667], [-3.763, 35.803, 2.667], [-3.684, 35.811, 4.665], [-3.579, 34.817, 4.665], [-3.738, 34.8, 0.668]] - ,[[-13.981, 42.773, 1.002], [-13.83, 42.822, 4.998], [-13.521, 41.871, 4.998], [-13.597, 41.846, 3], [-11.125, 34.238, 3], [-11.049, 34.263, 4.998], [-10.74, 33.312, 4.998], [-10.891, 33.262, 1.002]] - ,[[-22.569, 38.931, 1.335], [-22.431, 39.011, 5.332], [-21.931, 38.145, 5.332], [-22, 38.105, 3.333], [-18, 31.177, 3.333], [-17.931, 31.217, 5.332], [-17.431, 30.351, 5.332], [-17.569, 30.271, 1.335]] - ,[[-30.17, 33.388, 1.668], [-30.052, 33.495, 5.665], [-29.383, 32.752, 5.665], [-29.442, 32.698, 3.667], [-24.089, 26.753, 3.667], [-24.03, 26.806, 5.665], [-23.36, 26.063, 5.665], [-23.479, 25.957, 1.668]] - ,[[-36.453, 26.386, 2.002], [-36.359, 26.515, 5.998], [-35.55, 25.927, 5.998], [-35.597, 25.863, 4], [-29.125, 21.16, 4], [-29.078, 21.225, 5.998], [-28.269, 20.637, 5.998], [-28.362, 20.508, 2.002]] - ,[[-41.142, 18.231, 2.335], [-41.077, 18.376, 6.332], [-40.164, 17.969, 6.332], [-40.196, 17.896, 4.333], [-32.888, 14.643, 4.333], [-32.855, 14.715, 6.332], [-31.942, 14.308, 6.332], [-32.006, 14.163, 2.335]] - ,[[-44.033, 9.278, 2.668], [-44, 9.434, 6.665], [-43.022, 9.226, 6.665], [-43.038, 9.148, 4.667], [-35.213, 7.485, 4.667], [-35.197, 7.563, 6.665], [-34.219, 7.355, 6.665], [-34.252, 7.199, 2.668]] - ,[[-45, -0.08, 3.002], [-45, 0.08, 6.998], [-44, 0.08, 6.998], [-44, 0, 5], [-36, 0, 5], [-36, 0.08, 6.998], [-35, 0.08, 6.998], [-35, -0.08, 3.002]] - ,[[-44, -9.434, 3.335], [-44.033, -9.278, 7.332], [-43.055, -9.07, 7.332], [-43.038, -9.148, 5.333], [-35.213, -7.485, 5.333], [-35.23, -7.407, 7.332], [-34.252, -7.199, 7.332], [-34.219, -7.355, 3.335]] - ,[[-41.077, -18.376, 3.668], [-41.142, -18.231, 7.665], [-40.228, -17.824, 7.665], [-40.196, -17.896, 5.667], [-32.888, -14.643, 5.667], [-32.92, -14.57, 7.665], [-32.006, -14.163, 7.665], [-31.942, -14.308, 3.668]] - ,[[-36.359, -26.515, 4.002], [-36.453, -26.386, 7.998], [-35.643, -25.798, 7.998], [-35.597, -25.863, 6], [-29.125, -21.16, 6], [-29.171, -21.096, 7.998], [-28.362, -20.508, 7.998], [-28.269, -20.637, 4.002]] - ,[[-30.052, -33.495, 4.335], [-30.17, -33.388, 8.332], [-29.501, -32.645, 8.332], [-29.442, -32.698, 6.333], [-24.089, -26.753, 6.333], [-24.148, -26.7, 8.332], [-23.479, -25.957, 8.332], [-23.36, -26.063, 4.335]] - ,[[-22.431, -39.011, 4.668], [-22.569, -38.931, 8.665], [-22.069, -38.065, 8.665], [-22, -38.105, 6.667], [-18, -31.177, 6.667], [-18.069, -31.137, 8.665], [-17.569, -30.271, 8.665], [-17.431, -30.351, 4.668]] - ,[[-13.83, -42.822, 5.002], [-13.981, -42.773, 8.998], [-13.672, -41.822, 8.998], [-13.597, -41.846, 7], [-11.125, -34.238, 7], [-11.2, -34.213, 8.998], [-10.891, -33.262, 8.998], [-10.74, -33.312, 5.002]] - ,[[-4.625, -44.762, 5.335], [-4.783, -44.745, 9.332], [-4.678, -43.751, 9.332], [-4.599, -43.759, 7.333], [-3.763, -35.803, 7.333], [-3.842, -35.794, 9.332], [-3.738, -34.8, 9.332], [-3.579, -34.817, 5.335]] - ,[[4.783, -44.745, 5.668], [4.625, -44.762, 9.665], [4.52, -43.767, 9.665], [4.599, -43.759, 7.667], [3.763, -35.803, 7.667], [3.684, -35.811, 9.665], [3.579, -34.817, 9.665], [3.738, -34.8, 5.668]] - ,[[13.981, -42.773, 6.002], [13.83, -42.822, 9.998], [13.521, -41.871, 9.998], [13.597, -41.846, 8], [11.125, -34.238, 8], [11.049, -34.263, 9.998], [10.74, -33.312, 9.998], [10.891, -33.262, 6.002]] - ,[[22.569, -38.931, 6.335], [22.431, -39.011, 10.332], [21.931, -38.145, 10.332], [22, -38.105, 8.333], [18, -31.177, 8.333], [17.931, -31.217, 10.332], [17.431, -30.351, 10.332], [17.569, -30.271, 6.335]] - ,[[30.17, -33.388, 6.668], [30.052, -33.495, 10.665], [29.383, -32.752, 10.665], [29.442, -32.698, 8.667], [24.089, -26.753, 8.667], [24.03, -26.806, 10.665], [23.36, -26.063, 10.665], [23.479, -25.957, 6.668]] - ,[[36.453, -26.386, 7.002], [36.359, -26.515, 10.998], [35.55, -25.927, 10.998], [35.597, -25.863, 9], [29.125, -21.16, 9], [29.078, -21.225, 10.998], [28.269, -20.637, 10.998], [28.362, -20.508, 7.002]] - ,[[41.142, -18.231, 7.335], [41.077, -18.376, 11.332], [40.164, -17.969, 11.332], [40.196, -17.896, 9.333], [32.888, -14.643, 9.333], [32.855, -14.715, 11.332], [31.942, -14.308, 11.332], [32.006, -14.163, 7.335]] - ,[[44.033, -9.278, 7.668], [44, -9.434, 11.665], [43.022, -9.226, 11.665], [43.038, -9.148, 9.667], [35.213, -7.485, 9.667], [35.197, -7.563, 11.665], [34.219, -7.355, 11.665], [34.252, -7.199, 7.668]] - ,[[45, 0.08, 8.002], [45, -0.08, 11.998], [44, -0.08, 11.998], [44, 0, 10], [36, 0, 10], [36, -0.08, 11.998], [35, -0.08, 11.998], [35, 0.08, 8.002]] - ,[[44, 9.434, 8.335], [44.033, 9.278, 12.332], [43.055, 9.07, 12.332], [43.038, 9.148, 10.333], [35.213, 7.485, 10.333], [35.23, 7.407, 12.332], [34.252, 7.199, 12.332], [34.219, 7.355, 8.335]] - ,[[41.077, 18.376, 8.668], [41.142, 18.231, 12.665], [40.228, 17.824, 12.665], [40.196, 17.896, 10.667], [32.888, 14.643, 10.667], [32.92, 14.57, 12.665], [32.006, 14.163, 12.665], [31.942, 14.308, 8.668]] - ,[[36.359, 26.515, 9.002], [36.453, 26.386, 12.998], [35.643, 25.798, 12.998], [35.597, 25.863, 11], [29.125, 21.16, 11], [29.171, 21.096, 12.998], [28.362, 20.508, 12.998], [28.269, 20.637, 9.002]] - ,[[30.052, 33.495, 9.335], [30.17, 33.388, 13.332], [29.501, 32.645, 13.332], [29.442, 32.698, 11.333], [24.089, 26.753, 11.333], [24.148, 26.7, 13.332], [23.479, 25.957, 13.332], [23.36, 26.063, 9.335]] - ,[[22.431, 39.011, 9.668], [22.569, 38.931, 13.665], [22.069, 38.065, 13.665], [22, 38.105, 11.667], [18, 31.177, 11.667], [18.069, 31.137, 13.665], [17.569, 30.271, 13.665], [17.431, 30.351, 9.668]] - ,[[13.83, 42.822, 10.002], [13.981, 42.773, 13.998], [13.672, 41.822, 13.998], [13.597, 41.846, 12], [11.125, 34.238, 12], [11.2, 34.213, 13.998], [10.891, 33.262, 13.998], [10.74, 33.312, 10.002]] - ,[[4.625, 44.762, 10.335], [4.783, 44.745, 14.332], [4.678, 43.751, 14.332], [4.599, 43.759, 12.333], [3.763, 35.803, 12.333], [3.842, 35.794, 14.332], [3.738, 34.8, 14.332], [3.579, 34.817, 10.335]] - ,[[-4.783, 44.745, 10.668], [-4.625, 44.762, 14.665], [-4.52, 43.767, 14.665], [-4.599, 43.759, 12.667], [-3.763, 35.803, 12.667], [-3.684, 35.811, 14.665], [-3.579, 34.817, 14.665], [-3.738, 34.8, 10.668]] - ,[[-13.981, 42.773, 11.002], [-13.83, 42.822, 14.998], [-13.521, 41.871, 14.998], [-13.597, 41.846, 13], [-11.125, 34.238, 13], [-11.049, 34.263, 14.998], [-10.74, 33.312, 14.998], [-10.891, 33.262, 11.002]] - ,[[-22.569, 38.931, 11.335], [-22.431, 39.011, 15.332], [-21.931, 38.145, 15.332], [-22, 38.105, 13.333], [-18, 31.177, 13.333], [-17.931, 31.217, 15.332], [-17.431, 30.351, 15.332], [-17.569, 30.271, 11.335]] - ,[[-30.17, 33.388, 11.668], [-30.052, 33.495, 15.665], [-29.383, 32.752, 15.665], [-29.442, 32.698, 13.667], [-24.089, 26.753, 13.667], [-24.03, 26.806, 15.665], [-23.36, 26.063, 15.665], [-23.479, 25.957, 11.668]] - ,[[-36.453, 26.386, 12.002], [-36.359, 26.515, 15.998], [-35.55, 25.927, 15.998], [-35.597, 25.863, 14], [-29.125, 21.16, 14], [-29.078, 21.225, 15.998], [-28.269, 20.637, 15.998], [-28.362, 20.508, 12.002]] - ,[[-41.142, 18.231, 12.335], [-41.077, 18.376, 16.332], [-40.164, 17.969, 16.332], [-40.196, 17.896, 14.333], [-32.888, 14.643, 14.333], [-32.855, 14.715, 16.332], [-31.942, 14.308, 16.332], [-32.006, 14.163, 12.335]] - ,[[-44.033, 9.278, 12.668], [-44, 9.434, 16.665], [-43.022, 9.226, 16.665], [-43.038, 9.148, 14.667], [-35.213, 7.485, 14.667], [-35.197, 7.563, 16.665], [-34.219, 7.355, 16.665], [-34.252, 7.199, 12.668]] - ,[[-45, -0.08, 13.002], [-45, 0.08, 16.998], [-44, 0.08, 16.998], [-44, 0, 15], [-36, 0, 15], [-36, 0.08, 16.998], [-35, 0.08, 16.998], [-35, -0.08, 13.002]] - ,[[-44, -9.434, 13.335], [-44.033, -9.278, 17.332], [-43.055, -9.07, 17.332], [-43.038, -9.148, 15.333], [-35.213, -7.485, 15.333], [-35.23, -7.407, 17.332], [-34.252, -7.199, 17.332], [-34.219, -7.355, 13.335]] - ,[[-41.077, -18.376, 13.668], [-41.142, -18.231, 17.665], [-40.228, -17.824, 17.665], [-40.196, -17.896, 15.667], [-32.888, -14.643, 15.667], [-32.92, -14.57, 17.665], [-32.006, -14.163, 17.665], [-31.942, -14.308, 13.668]] - ,[[-36.359, -26.515, 14.002], [-36.453, -26.386, 17.998], [-35.643, -25.798, 17.998], [-35.597, -25.863, 16], [-29.125, -21.16, 16], [-29.171, -21.096, 17.998], [-28.362, -20.508, 17.998], [-28.269, -20.637, 14.002]] - ,[[-30.052, -33.495, 14.335], [-30.17, -33.388, 18.332], [-29.501, -32.645, 18.332], [-29.442, -32.698, 16.333], [-24.089, -26.753, 16.333], [-24.148, -26.7, 18.332], [-23.479, -25.957, 18.332], [-23.36, -26.063, 14.335]] - ,[[-22.431, -39.011, 14.668], [-22.569, -38.931, 18.665], [-22.069, -38.065, 18.665], [-22, -38.105, 16.667], [-18, -31.177, 16.667], [-18.069, -31.137, 18.665], [-17.569, -30.271, 18.665], [-17.431, -30.351, 14.668]] - ,[[-13.83, -42.822, 15.002], [-13.981, -42.773, 18.998], [-13.672, -41.822, 18.998], [-13.597, -41.846, 17], [-11.125, -34.238, 17], [-11.2, -34.213, 18.998], [-10.891, -33.262, 18.998], [-10.74, -33.312, 15.002]] - ,[[-4.625, -44.762, 15.335], [-4.783, -44.745, 19.332], [-4.678, -43.751, 19.332], [-4.599, -43.759, 17.333], [-3.763, -35.803, 17.333], [-3.842, -35.794, 19.332], [-3.738, -34.8, 19.332], [-3.579, -34.817, 15.335]] - ,[[4.783, -44.745, 15.668], [4.625, -44.762, 19.665], [4.52, -43.767, 19.665], [4.599, -43.759, 17.667], [3.763, -35.803, 17.667], [3.684, -35.811, 19.665], [3.579, -34.817, 19.665], [3.738, -34.8, 15.668]] - ,[[13.981, -42.773, 16.002], [13.83, -42.822, 19.998], [13.521, -41.871, 19.998], [13.597, -41.846, 18], [11.125, -34.238, 18], [11.049, -34.263, 19.998], [10.74, -33.312, 19.998], [10.891, -33.262, 16.002]] - ,[[22.569, -38.931, 16.335], [22.431, -39.011, 20.332], [21.931, -38.145, 20.332], [22, -38.105, 18.333], [18, -31.177, 18.333], [17.931, -31.217, 20.332], [17.431, -30.351, 20.332], [17.569, -30.271, 16.335]] - ,[[30.17, -33.388, 16.668], [30.052, -33.495, 20.665], [29.383, -32.752, 20.665], [29.442, -32.698, 18.667], [24.089, -26.753, 18.667], [24.03, -26.806, 20.665], [23.36, -26.063, 20.665], [23.479, -25.957, 16.668]] - ,[[36.453, -26.386, 17.002], [36.359, -26.515, 20.998], [35.55, -25.927, 20.998], [35.597, -25.863, 19], [29.125, -21.16, 19], [29.078, -21.225, 20.998], [28.269, -20.637, 20.998], [28.362, -20.508, 17.002]] - ,[[41.142, -18.231, 17.335], [41.077, -18.376, 21.332], [40.164, -17.969, 21.332], [40.196, -17.896, 19.333], [32.888, -14.643, 19.333], [32.855, -14.715, 21.332], [31.942, -14.308, 21.332], [32.006, -14.163, 17.335]] - ,[[44.033, -9.278, 17.668], [44, -9.434, 21.665], [43.022, -9.226, 21.665], [43.038, -9.148, 19.667], [35.213, -7.485, 19.667], [35.197, -7.563, 21.665], [34.219, -7.355, 21.665], [34.252, -7.199, 17.668]] - ,[[45, 0.08, 18.002], [45, -0.08, 21.998], [44, -0.08, 21.998], [44, 0, 20], [36, 0, 20], [36, -0.08, 21.998], [35, -0.08, 21.998], [35, 0.08, 18.002]] - ,[[44, 9.434, 18.335], [44.033, 9.278, 22.332], [43.055, 9.07, 22.332], [43.038, 9.148, 20.333], [35.213, 7.485, 20.333], [35.23, 7.407, 22.332], [34.252, 7.199, 22.332], [34.219, 7.355, 18.335]] - ,[[41.077, 18.376, 18.668], [41.142, 18.231, 22.665], [40.228, 17.824, 22.665], [40.196, 17.896, 20.667], [32.888, 14.643, 20.667], [32.92, 14.57, 22.665], [32.006, 14.163, 22.665], [31.942, 14.308, 18.668]] - ,[[36.359, 26.515, 19.002], [36.453, 26.386, 22.998], [35.643, 25.798, 22.998], [35.597, 25.863, 21], [29.125, 21.16, 21], [29.171, 21.096, 22.998], [28.362, 20.508, 22.998], [28.269, 20.637, 19.002]] - ,[[30.052, 33.495, 19.335], [30.17, 33.388, 23.332], [29.501, 32.645, 23.332], [29.442, 32.698, 21.333], [24.089, 26.753, 21.333], [24.148, 26.7, 23.332], [23.479, 25.957, 23.332], [23.36, 26.063, 19.335]] - ,[[22.431, 39.011, 19.668], [22.569, 38.931, 23.665], [22.069, 38.065, 23.665], [22, 38.105, 21.667], [18, 31.177, 21.667], [18.069, 31.137, 23.665], [17.569, 30.271, 23.665], [17.431, 30.351, 19.668]] - ,[[13.83, 42.822, 20.002], [13.981, 42.773, 23.998], [13.672, 41.822, 23.998], [13.597, 41.846, 22], [11.125, 34.238, 22], [11.2, 34.213, 23.998], [10.891, 33.262, 23.998], [10.74, 33.312, 20.002]] - ,[[4.625, 44.762, 20.335], [4.783, 44.745, 24.332], [4.678, 43.751, 24.332], [4.599, 43.759, 22.333], [3.763, 35.803, 22.333], [3.842, 35.794, 24.332], [3.738, 34.8, 24.332], [3.579, 34.817, 20.335]] - ,[[-4.783, 44.745, 20.668], [-4.625, 44.762, 24.665], [-4.52, 43.767, 24.665], [-4.599, 43.759, 22.667], [-3.763, 35.803, 22.667], [-3.684, 35.811, 24.665], [-3.579, 34.817, 24.665], [-3.738, 34.8, 20.668]] - ,[[-13.981, 42.773, 21.002], [-13.83, 42.822, 24.998], [-13.521, 41.871, 24.998], [-13.597, 41.846, 23], [-11.125, 34.238, 23], [-11.049, 34.263, 24.998], [-10.74, 33.312, 24.998], [-10.891, 33.262, 21.002]] - ,[[-22.569, 38.931, 21.335], [-22.431, 39.011, 25.332], [-21.931, 38.145, 25.332], [-22, 38.105, 23.333], [-18, 31.177, 23.333], [-17.931, 31.217, 25.332], [-17.431, 30.351, 25.332], [-17.569, 30.271, 21.335]] - ,[[-30.17, 33.388, 21.668], [-30.052, 33.495, 25.665], [-29.383, 32.752, 25.665], [-29.442, 32.698, 23.667], [-24.089, 26.753, 23.667], [-24.03, 26.806, 25.665], [-23.36, 26.063, 25.665], [-23.479, 25.957, 21.668]] - ,[[-36.453, 26.386, 22.002], [-36.359, 26.515, 25.998], [-35.55, 25.927, 25.998], [-35.597, 25.863, 24], [-29.125, 21.16, 24], [-29.078, 21.225, 25.998], [-28.269, 20.637, 25.998], [-28.362, 20.508, 22.002]] - ,[[-41.142, 18.231, 22.335], [-41.077, 18.376, 26.332], [-40.164, 17.969, 26.332], [-40.196, 17.896, 24.333], [-32.888, 14.643, 24.333], [-32.855, 14.715, 26.332], [-31.942, 14.308, 26.332], [-32.006, 14.163, 22.335]] - ,[[-44.033, 9.278, 22.668], [-44, 9.434, 26.665], [-43.022, 9.226, 26.665], [-43.038, 9.148, 24.667], [-35.213, 7.485, 24.667], [-35.197, 7.563, 26.665], [-34.219, 7.355, 26.665], [-34.252, 7.199, 22.668]] - ,[[-45, -0.08, 23.002], [-45, 0.08, 26.998], [-44, 0.08, 26.998], [-44, 0, 25], [-36, 0, 25], [-36, 0.08, 26.998], [-35, 0.08, 26.998], [-35, -0.08, 23.002]] - ,[[-44, -9.434, 23.335], [-44.033, -9.278, 27.332], [-43.055, -9.07, 27.332], [-43.038, -9.148, 25.333], [-35.213, -7.485, 25.333], [-35.23, -7.407, 27.332], [-34.252, -7.199, 27.332], [-34.219, -7.355, 23.335]] - ,[[-41.077, -18.376, 23.668], [-41.142, -18.231, 27.665], [-40.228, -17.824, 27.665], [-40.196, -17.896, 25.667], [-32.888, -14.643, 25.667], [-32.92, -14.57, 27.665], [-32.006, -14.163, 27.665], [-31.942, -14.308, 23.668]] - ,[[-36.359, -26.515, 24.002], [-36.453, -26.386, 27.998], [-35.643, -25.798, 27.998], [-35.597, -25.863, 26], [-29.125, -21.16, 26], [-29.171, -21.096, 27.998], [-28.362, -20.508, 27.998], [-28.269, -20.637, 24.002]] - ,[[-30.052, -33.495, 24.335], [-30.17, -33.388, 28.332], [-29.501, -32.645, 28.332], [-29.442, -32.698, 26.333], [-24.089, -26.753, 26.333], [-24.148, -26.7, 28.332], [-23.479, -25.957, 28.332], [-23.36, -26.063, 24.335]] - ,[[-22.431, -39.011, 24.668], [-22.569, -38.931, 28.665], [-22.069, -38.065, 28.665], [-22, -38.105, 26.667], [-18, -31.177, 26.667], [-18.069, -31.137, 28.665], [-17.569, -30.271, 28.665], [-17.431, -30.351, 24.668]] - ,[[-13.83, -42.822, 25.002], [-13.981, -42.773, 28.998], [-13.672, -41.822, 28.998], [-13.597, -41.846, 27], [-11.125, -34.238, 27], [-11.2, -34.213, 28.998], [-10.891, -33.262, 28.998], [-10.74, -33.312, 25.002]] - ,[[-4.625, -44.762, 25.335], [-4.783, -44.745, 29.332], [-4.678, -43.751, 29.332], [-4.599, -43.759, 27.333], [-3.763, -35.803, 27.333], [-3.842, -35.794, 29.332], [-3.738, -34.8, 29.332], [-3.579, -34.817, 25.335]] - ,[[4.783, -44.745, 25.668], [4.625, -44.762, 29.665], [4.52, -43.767, 29.665], [4.599, -43.759, 27.667], [3.763, -35.803, 27.667], [3.684, -35.811, 29.665], [3.579, -34.817, 29.665], [3.738, -34.8, 25.668]] - ,[[13.981, -42.773, 26.002], [13.83, -42.822, 29.998], [13.521, -41.871, 29.998], [13.597, -41.846, 28], [11.125, -34.238, 28], [11.049, -34.263, 29.998], [10.74, -33.312, 29.998], [10.891, -33.262, 26.002]] - ,[[22.569, -38.931, 26.335], [22.431, -39.011, 30.332], [21.931, -38.145, 30.332], [22, -38.105, 28.333], [18, -31.177, 28.333], [17.931, -31.217, 30.332], [17.431, -30.351, 30.332], [17.569, -30.271, 26.335]] - ,[[30.17, -33.388, 26.668], [30.052, -33.495, 30.665], [29.383, -32.752, 30.665], [29.442, -32.698, 28.667], [24.089, -26.753, 28.667], [24.03, -26.806, 30.665], [23.36, -26.063, 30.665], [23.479, -25.957, 26.668]] - ,[[36.453, -26.386, 27.002], [36.359, -26.515, 30.998], [35.55, -25.927, 30.998], [35.597, -25.863, 29], [29.125, -21.16, 29], [29.078, -21.225, 30.998], [28.269, -20.637, 30.998], [28.362, -20.508, 27.002]] - ,[[41.142, -18.231, 27.335], [41.077, -18.376, 31.332], [40.164, -17.969, 31.332], [40.196, -17.896, 29.333], [32.888, -14.643, 29.333], [32.855, -14.715, 31.332], [31.942, -14.308, 31.332], [32.006, -14.163, 27.335]] - ,[[44.033, -9.278, 27.668], [44, -9.434, 31.665], [43.022, -9.226, 31.665], [43.038, -9.148, 29.667], [35.213, -7.485, 29.667], [35.197, -7.563, 31.665], [34.219, -7.355, 31.665], [34.252, -7.199, 27.668]] - ,[[45, 0.08, 28.002], [45, -0.08, 31.998], [44, -0.08, 31.998], [44, 0, 30], [36, 0, 30], [36, -0.08, 31.998], [35, -0.08, 31.998], [35, 0.08, 28.002]] - ,[[44, 9.434, 28.335], [44.033, 9.278, 32.332], [43.055, 9.07, 32.332], [43.038, 9.148, 30.333], [35.213, 7.485, 30.333], [35.23, 7.407, 32.332], [34.252, 7.199, 32.332], [34.219, 7.355, 28.335]] - ,[[41.077, 18.376, 28.668], [41.142, 18.231, 32.665], [40.228, 17.824, 32.665], [40.196, 17.896, 30.667], [32.888, 14.643, 30.667], [32.92, 14.57, 32.665], [32.006, 14.163, 32.665], [31.942, 14.308, 28.668]] - ,[[36.359, 26.515, 29.002], [36.453, 26.386, 32.998], [35.643, 25.798, 32.998], [35.597, 25.863, 31], [29.125, 21.16, 31], [29.171, 21.096, 32.998], [28.362, 20.508, 32.998], [28.269, 20.637, 29.002]] - ,[[30.052, 33.495, 29.335], [30.17, 33.388, 33.332], [29.501, 32.645, 33.332], [29.442, 32.698, 31.333], [24.089, 26.753, 31.333], [24.148, 26.7, 33.332], [23.479, 25.957, 33.332], [23.36, 26.063, 29.335]] - ,[[22.431, 39.011, 29.668], [22.569, 38.931, 33.665], [22.069, 38.065, 33.665], [22, 38.105, 31.667], [18, 31.177, 31.667], [18.069, 31.137, 33.665], [17.569, 30.271, 33.665], [17.431, 30.351, 29.668]] - ,[[13.83, 42.822, 30.002], [13.981, 42.773, 33.998], [13.672, 41.822, 33.998], [13.597, 41.846, 32], [11.125, 34.238, 32], [11.2, 34.213, 33.998], [10.891, 33.262, 33.998], [10.74, 33.312, 30.002]] - ,[[4.625, 44.762, 30.335], [4.783, 44.745, 34.332], [4.678, 43.751, 34.332], [4.599, 43.759, 32.333], [3.763, 35.803, 32.333], [3.842, 35.794, 34.332], [3.738, 34.8, 34.332], [3.579, 34.817, 30.335]] - ,[[-4.783, 44.745, 30.668], [-4.625, 44.762, 34.665], [-4.52, 43.767, 34.665], [-4.599, 43.759, 32.667], [-3.763, 35.803, 32.667], [-3.684, 35.811, 34.665], [-3.579, 34.817, 34.665], [-3.738, 34.8, 30.668]] - ,[[-13.981, 42.773, 31.002], [-13.83, 42.822, 34.998], [-13.521, 41.871, 34.998], [-13.597, 41.846, 33], [-11.125, 34.238, 33], [-11.049, 34.263, 34.998], [-10.74, 33.312, 34.998], [-10.891, 33.262, 31.002]] - ,[[-22.569, 38.931, 31.335], [-22.431, 39.011, 35.332], [-21.931, 38.145, 35.332], [-22, 38.105, 33.333], [-18, 31.177, 33.333], [-17.931, 31.217, 35.332], [-17.431, 30.351, 35.332], [-17.569, 30.271, 31.335]] - ,[[-30.17, 33.388, 31.668], [-30.052, 33.495, 35.665], [-29.383, 32.752, 35.665], [-29.442, 32.698, 33.667], [-24.089, 26.753, 33.667], [-24.03, 26.806, 35.665], [-23.36, 26.063, 35.665], [-23.479, 25.957, 31.668]] - ,[[-36.453, 26.386, 32.002], [-36.359, 26.515, 35.998], [-35.55, 25.927, 35.998], [-35.597, 25.863, 34], [-29.125, 21.16, 34], [-29.078, 21.225, 35.998], [-28.269, 20.637, 35.998], [-28.362, 20.508, 32.002]] - ,[[-41.142, 18.231, 32.335], [-41.077, 18.376, 36.332], [-40.164, 17.969, 36.332], [-40.196, 17.896, 34.333], [-32.888, 14.643, 34.333], [-32.855, 14.715, 36.332], [-31.942, 14.308, 36.332], [-32.006, 14.163, 32.335]] - ,[[-44.033, 9.278, 32.668], [-44, 9.434, 36.665], [-43.022, 9.226, 36.665], [-43.038, 9.148, 34.667], [-35.213, 7.485, 34.667], [-35.197, 7.563, 36.665], [-34.219, 7.355, 36.665], [-34.252, 7.199, 32.668]] - ,[[-45, -0.08, 33.002], [-45, 0.08, 36.998], [-44, 0.08, 36.998], [-44, 0, 35], [-36, 0, 35], [-36, 0.08, 36.998], [-35, 0.08, 36.998], [-35, -0.08, 33.002]] - ,[[-44, -9.434, 33.335], [-44.033, -9.278, 37.332], [-43.055, -9.07, 37.332], [-43.038, -9.148, 35.333], [-35.213, -7.485, 35.333], [-35.23, -7.407, 37.332], [-34.252, -7.199, 37.332], [-34.219, -7.355, 33.335]] - ,[[-41.077, -18.376, 33.668], [-41.142, -18.231, 37.665], [-40.228, -17.824, 37.665], [-40.196, -17.896, 35.667], [-32.888, -14.643, 35.667], [-32.92, -14.57, 37.665], [-32.006, -14.163, 37.665], [-31.942, -14.308, 33.668]] - ,[[-36.359, -26.515, 34.002], [-36.453, -26.386, 37.998], [-35.643, -25.798, 37.998], [-35.597, -25.863, 36], [-29.125, -21.16, 36], [-29.171, -21.096, 37.998], [-28.362, -20.508, 37.998], [-28.269, -20.637, 34.002]] - ,[[-30.052, -33.495, 34.335], [-30.17, -33.388, 38.332], [-29.501, -32.645, 38.332], [-29.442, -32.698, 36.333], [-24.089, -26.753, 36.333], [-24.148, -26.7, 38.332], [-23.479, -25.957, 38.332], [-23.36, -26.063, 34.335]] - ,[[-22.431, -39.011, 34.668], [-22.569, -38.931, 38.665], [-22.069, -38.065, 38.665], [-22, -38.105, 36.667], [-18, -31.177, 36.667], [-18.069, -31.137, 38.665], [-17.569, -30.271, 38.665], [-17.431, -30.351, 34.668]] - ,[[-13.83, -42.822, 35.002], [-13.981, -42.773, 38.998], [-13.672, -41.822, 38.998], [-13.597, -41.846, 37], [-11.125, -34.238, 37], [-11.2, -34.213, 38.998], [-10.891, -33.262, 38.998], [-10.74, -33.312, 35.002]] - ,[[-4.625, -44.762, 35.335], [-4.783, -44.745, 39.332], [-4.678, -43.751, 39.332], [-4.599, -43.759, 37.333], [-3.763, -35.803, 37.333], [-3.842, -35.794, 39.332], [-3.738, -34.8, 39.332], [-3.579, -34.817, 35.335]] - - ,[[4.783, -44.745, 35.668], [4.625, -44.762, 39.665], [4.52, -43.767, 39.665], [4.599, -43.759, 37.667], [3.763, -35.803, 37.667], [3.684, -35.811, 39.665], [3.579, -34.817, 39.665], [3.738, -34.8, 35.668]] - , - [[13.981, -42.773, 36.002], [13.83, -42.822, 39.998], [13.521, -41.871, 39.998], [13.597, -41.846, 38], [11.125, -34.238, 38], [11.049, -34.263, 39.998], [10.74, -33.312, 39.998], [10.891, -33.262, 36.002]] - - ,[[22.569, -38.931, 36.335], [22.431, -39.011, 40.332], [21.931, -38.145, 40.332], [22, -38.105, 38.333], [18, -31.177, 38.333], [17.931, -31.217, 40.332], [17.431, -30.351, 40.332], [17.569, -30.271, 36.335]] - - ,[[30.17, -33.388, 36.668], [30.052, -33.495, 40.665], [29.383, -32.752, 40.665], [29.442, -32.698, 38.667], [24.089, -26.753, 38.667], [24.03, -26.806, 40.665], [23.36, -26.063, 40.665], [23.479, -25.957, 36.668]] - ,[[36.453, -26.386, 37.002], [36.359, -26.515, 40.998], [35.55, -25.927, 40.998], [35.597, -25.863, 39], [29.125, -21.16, 39], [29.078, -21.225, 40.998], [28.269, -20.637, 40.998], [28.362, -20.508, 37.002]] - ,[[41.142, -18.231, 37.335], [41.077, -18.376, 41.332], [40.164, -17.969, 41.332], [40.196, -17.896, 39.333], [32.888, -14.643, 39.333], [32.855, -14.715, 41.332], [31.942, -14.308, 41.332], [32.006, -14.163, 37.335]] - ,[[44.033, -9.278, 37.668], [44, -9.434, 41.665], [43.022, -9.226, 41.665], [43.038, -9.148, 39.667], [35.213, -7.485, 39.667], [35.197, -7.563, 41.665], [34.219, -7.355, 41.665], [34.252, -7.199, 37.668]] - ,[[45, 0.08, 38.002], [45, -0.08, 41.998], [44, -0.08, 41.998], [44, 0, 40], [36, 0, 40], [36, -0.08, 41.998], [35, -0.08, 41.998], [35, 0.08, 38.002]] - ,[[44, 9.434, 38.335], [44.033, 9.278, 42.332], [43.055, 9.07, 42.332], [43.038, 9.148, 40.333], [35.213, 7.485, 40.333], [35.23, 7.407, 42.332], [34.252, 7.199, 42.332], [34.219, 7.355, 38.335]] - ,[[41.077, 18.376, 38.668], [41.142, 18.231, 42.665], [40.228, 17.824, 42.665], [40.196, 17.896, 40.667], [32.888, 14.643, 40.667], [32.92, 14.57, 42.665], [32.006, 14.163, 42.665], [31.942, 14.308, 38.668]] - ,[[36.359, 26.515, 39.002], [36.453, 26.386, 42.998], [35.643, 25.798, 42.998], [35.597, 25.863, 41], [29.125, 21.16, 41], [29.171, 21.096, 42.998], [28.362, 20.508, 42.998], [28.269, 20.637, 39.002]] - ,[[30.052, 33.495, 39.335], [30.17, 33.388, 43.332], [29.501, 32.645, 43.332], [29.442, 32.698, 41.333], [24.089, 26.753, 41.333], [24.148, 26.7, 43.332], [23.479, 25.957, 43.332], [23.36, 26.063, 39.335]] - ,[[22.431, 39.011, 39.668], [22.569, 38.931, 43.665], [22.069, 38.065, 43.665], [22, 38.105, 41.667], [18, 31.177, 41.667], [18.069, 31.137, 43.665], [17.569, 30.271, 43.665], [17.431, 30.351, 39.668]] - ,[[13.83, 42.822, 40.002], [13.981, 42.773, 43.998], [13.672, 41.822, 43.998], [13.597, 41.846, 42], [11.125, 34.238, 42], [11.2, 34.213, 43.998], [10.891, 33.262, 43.998], [10.74, 33.312, 40.002]] - ,[[4.625, 44.762, 40.335], [4.783, 44.745, 44.332], [4.678, 43.751, 44.332], [4.599, 43.759, 42.333], [3.763, 35.803, 42.333], [3.842, 35.794, 44.332], [3.738, 34.8, 44.332], [3.579, 34.817, 40.335]] - ,[[-4.783, 44.745, 40.668], [-4.625, 44.762, 44.665], [-4.52, 43.767, 44.665], [-4.599, 43.759, 42.667], [-3.763, 35.803, 42.667], [-3.684, 35.811, 44.665], [-3.579, 34.817, 44.665], [-3.738, 34.8, 40.668]] - ,[[-13.981, 42.773, 41.002], [-13.83, 42.822, 44.998], [-13.521, 41.871, 44.998], [-13.597, 41.846, 43], [-11.125, 34.238, 43], [-11.049, 34.263, 44.998], [-10.74, 33.312, 44.998], [-10.891, 33.262, 41.002]] - ,[[-22.569, 38.931, 41.335], [-22.431, 39.011, 45.332], [-21.931, 38.145, 45.332], [-22, 38.105, 43.333], [-18, 31.177, 43.333], [-17.931, 31.217, 45.332], [-17.431, 30.351, 45.332], [-17.569, 30.271, 41.335]] - ,[[-30.17, 33.388, 41.668], [-30.052, 33.495, 45.665], [-29.383, 32.752, 45.665], [-29.442, 32.698, 43.667], [-24.089, 26.753, 43.667], [-24.03, 26.806, 45.665], [-23.36, 26.063, 45.665], [-23.479, 25.957, 41.668]] - ,[[-36.453, 26.386, 42.002], [-36.359, 26.515, 45.998], [-35.55, 25.927, 45.998], [-35.597, 25.863, 44], [-29.125, 21.16, 44], [-29.078, 21.225, 45.998], [-28.269, 20.637, 45.998], [-28.362, 20.508, 42.002]] - ,[[-41.142, 18.231, 42.335], [-41.077, 18.376, 46.332], [-40.164, 17.969, 46.332], [-40.196, 17.896, 44.333], [-32.888, 14.643, 44.333], [-32.855, 14.715, 46.332], [-31.942, 14.308, 46.332], [-32.006, 14.163, 42.335]] - ,[[-44.033, 9.278, 42.668], [-44, 9.434, 46.665], [-43.022, 9.226, 46.665], [-43.038, 9.148, 44.667], [-35.213, 7.485, 44.667], [-35.197, 7.563, 46.665], [-34.219, 7.355, 46.665], [-34.252, 7.199, 42.668]] - ,[[-45, -0.08, 43.002], [-45, 0.08, 46.998], [-44, 0.08, 46.998], [-44, 0, 45], [-36, 0, 45], [-36, 0.08, 46.998], [-35, 0.08, 46.998], [-35, -0.08, 43.002]] - ,[[-44, -9.434, 43.335], [-44.033, -9.278, 47.332], [-43.055, -9.07, 47.332], [-43.038, -9.148, 45.333], [-35.213, -7.485, 45.333], [-35.23, -7.407, 47.332], [-34.252, -7.199, 47.332], [-34.219, -7.355, 43.335]] - ,[[-41.077, -18.376, 43.668], [-41.142, -18.231, 47.665], [-40.228, -17.824, 47.665], [-40.196, -17.896, 45.667], [-32.888, -14.643, 45.667], [-32.92, -14.57, 47.665], [-32.006, -14.163, 47.665], [-31.942, -14.308, 43.668]] - ,[[-36.359, -26.515, 44.002], [-36.453, -26.386, 47.998], [-35.643, -25.798, 47.998], [-35.597, -25.863, 46], [-29.125, -21.16, 46], [-29.171, -21.096, 47.998], [-28.362, -20.508, 47.998], [-28.269, -20.637, 44.002]] - ,[[-30.052, -33.495, 44.335], [-30.17, -33.388, 48.332], [-29.501, -32.645, 48.332], [-29.442, -32.698, 46.333], [-24.089, -26.753, 46.333], [-24.148, -26.7, 48.332], [-23.479, -25.957, 48.332], [-23.36, -26.063, 44.335]] - ,[[-22.431, -39.011, 44.668], [-22.569, -38.931, 48.665], [-22.069, -38.065, 48.665], [-22, -38.105, 46.667], [-18, -31.177, 46.667], [-18.069, -31.137, 48.665], [-17.569, -30.271, 48.665], [-17.431, -30.351, 44.668]] - ,[[-13.83, -42.822, 45.002], [-13.981, -42.773, 48.998], [-13.672, -41.822, 48.998], [-13.597, -41.846, 47], [-11.125, -34.238, 47], [-11.2, -34.213, 48.998], [-10.891, -33.262, 48.998], [-10.74, -33.312, 45.002]] - ,[[-4.625, -44.762, 45.335], [-4.783, -44.745, 49.332], [-4.678, -43.751, 49.332], [-4.599, -43.759, 47.333], [-3.763, -35.803, 47.333], [-3.842, -35.794, 49.332], [-3.738, -34.8, 49.332], [-3.579, -34.817, 45.335]] - ,[[4.783, -44.745, 45.668], [4.625, -44.762, 49.665], [4.52, -43.767, 49.665], [4.599, -43.759, 47.667], [3.763, -35.803, 47.667], [3.684, -35.811, 49.665], [3.579, -34.817, 49.665], [3.738, -34.8, 45.668]] - ,[[13.981, -42.773, 46.002], [13.83, -42.822, 49.998], [13.521, -41.871, 49.998], [13.597, -41.846, 48], [11.125, -34.238, 48], [11.049, -34.263, 49.998], [10.74, -33.312, 49.998], [10.891, -33.262, 46.002]] - ,[[22.569, -38.931, 46.335], [22.431, -39.011, 50.332], [21.931, -38.145, 50.332], [22, -38.105, 48.333], [18, -31.177, 48.333], [17.931, -31.217, 50.332], [17.431, -30.351, 50.332], [17.569, -30.271, 46.335]] - ,[[30.17, -33.388, 46.668], [30.052, -33.495, 50.665], [29.383, -32.752, 50.665], [29.442, -32.698, 48.667], [24.089, -26.753, 48.667], [24.03, -26.806, 50.665], [23.36, -26.063, 50.665], [23.479, -25.957, 46.668]] - ,[[36.453, -26.386, 47.002], [36.359, -26.515, 50.998], [35.55, -25.927, 50.998], [35.597, -25.863, 49], [29.125, -21.16, 49], [29.078, -21.225, 50.998], [28.269, -20.637, 50.998], [28.362, -20.508, 47.002]] - ,[[41.142, -18.231, 47.335], [41.077, -18.376, 51.332], [40.164, -17.969, 51.332], [40.196, -17.896, 49.333], [32.888, -14.643, 49.333], [32.855, -14.715, 51.332], [31.942, -14.308, 51.332], [32.006, -14.163, 47.335]] - ,[[44.033, -9.278, 47.668], [44, -9.434, 51.665], [43.022, -9.226, 51.665], [43.038, -9.148, 49.667], [35.213, -7.485, 49.667], [35.197, -7.563, 51.665], [34.219, -7.355, 51.665], [34.252, -7.199, 47.668]] - ,[[45, 0.08, 48.002], [45, -0.08, 51.998], [44, -0.08, 51.998], [44, 0, 50], [36, 0, 50], [36, -0.08, 51.998], [35, -0.08, 51.998], [35, 0.08, 48.002]] - ]; + expected = [[[45, 0.0795146, -1.99842], [45, -0.0795146, 1.99842], [44, -0.0795146, 1.99842], [44, 0, 0], [36, 0, 0], [36, -0.0795146, 1.99842], [35, -0.0795146, 1.99842], [35, 0.0795146, -1.99842]], [[44.0001, 9.4338, -1.66509], [44.0332, 9.27825, 2.33175], [43.055, 9.07034, 2.33175], [43.0385, 9.14811, 0.333333], [35.2133, 7.48482, 0.333333], [35.2298, 7.40704, 2.33175], [34.2517, 7.19913, 2.33175], [34.2186, 7.35469, -1.66509]], [[41.0772, 18.3758, -1.33175], [41.1419, 18.2305, 2.66509], [40.2283, 17.8238, 2.66509], [40.196, 17.8964, 0.666667], [32.8876, 14.6425, 0.666667], [32.92, 14.5699, 2.66509], [32.0064, 14.1631, 2.66509], [31.9417, 14.3084, -1.33175]], [[36.359, 26.5147, -0.998419], [36.4525, 26.386, 2.99842], [35.6435, 25.7982, 2.99842], [35.5967, 25.8626, 1], [29.1246, 21.1603, 1], [29.1713, 21.0959, 2.99842], [28.3623, 20.5082, 2.99842], [28.2689, 20.6368, -0.998419]], [[30.0518, 33.4947, -0.665085], [30.17, 33.3883, 3.33175], [29.5008, 32.6452, 3.33175], [29.4417, 32.6984, 1.33333], [24.0887, 26.7532, 1.33333], [24.1478, 26.7, 3.33175], [23.4787, 25.9569, 3.33175], [23.3605, 26.0633, -0.665085]], [[22.4311, 39.0109, -0.331752], [22.5689, 38.9314, 3.66509], [22.0689, 38.0654, 3.66509], [22, 38.1051, 1.66667], [18, 31.1769, 1.66667], [18.0689, 31.1372, 3.66509], [17.5689, 30.2711, 3.66509], [17.4311, 30.3506, -0.331752]], [[13.8301, 42.8221, 0.00158127], [13.9814, 42.773, 3.99842], [13.6724, 41.8219, 3.99842], [13.5967, 41.8465, 2], [11.1246, 34.238, 2], [11.2002, 34.2135, 3.99842], [10.8912, 33.2624, 3.99842], [10.74, 33.3115, 0.00158127]], [[4.6247, 44.7618, 0.334915], [4.78286, 44.7452, 4.33175], [4.67833, 43.7507, 4.33175], [4.59925, 43.759, 2.33333], [3.76302, 35.8028, 2.33333], [3.8421, 35.7945, 4.33175], [3.73758, 34.8, 4.33175], [3.57942, 34.8166, 0.334915]], [[-4.78286, 44.7452, 0.668248], [-4.6247, 44.7618, 4.66509], [-4.52017, 43.7673, 4.66509], [-4.59925, 43.759, 2.66667], [-3.76302, 35.8028, 2.66667], [-3.68395, 35.8111, 4.66509], [-3.57942, 34.8166, 4.66509], [-3.73758, 34.8, 0.668248]], [[-13.9814, 42.773, 1.00158], [-13.8301, 42.8221, 4.99842], [-13.5211, 41.8711, 4.99842], [-13.5967, 41.8465, 3], [-11.1246, 34.238, 3], [-11.049, 34.2626, 4.99842], [-10.74, 33.3115, 4.99842], [-10.8912, 33.2624, 1.00158]], [[-22.5689, 38.9314, 1.33491], [-22.4311, 39.0109, 5.33175], [-21.9311, 38.1449, 5.33175], [-22, 38.1051, 3.33333], [-18, 31.1769, 3.33333], [-17.9311, 31.2167, 5.33175], [-17.4311, 30.3506, 5.33175], [-17.5689, 30.2711, 1.33491]], [[-30.17, 33.3883, 1.66825], [-30.0518, 33.4947, 5.66509], [-29.3827, 32.7516, 5.66509], [-29.4417, 32.6984, 3.66667], [-24.0887, 26.7532, 3.66667], [-24.0296, 26.8064, 5.66509], [-23.3605, 26.0633, 5.66509], [-23.4787, 25.9569, 1.66825]], [[-36.4525, 26.386, 2.00158], [-36.359, 26.5147, 5.99842], [-35.55, 25.9269, 5.99842], [-35.5967, 25.8626, 4], [-29.1246, 21.1603, 4], [-29.0779, 21.2246, 5.99842], [-28.2689, 20.6368, 5.99842], [-28.3623, 20.5082, 2.00158]], [[-41.1419, 18.2305, 2.33491], [-41.0772, 18.3758, 6.33175], [-40.1637, 17.9691, 6.33175], [-40.196, 17.8964, 4.33333], [-32.8876, 14.6425, 4.33333], [-32.8553, 14.7152, 6.33175], [-31.9417, 14.3084, 6.33175], [-32.0064, 14.1631, 2.33491]], [[-44.0332, 9.27825, 2.66825], [-44.0001, 9.4338, 6.66509], [-43.022, 9.22589, 6.66509], [-43.0385, 9.14811, 4.66667], [-35.2133, 7.48482, 4.66667], [-35.1968, 7.5626, 6.66509], [-34.2186, 7.35469, 6.66509], [-34.2517, 7.19913, 2.66825]], [[-45, -0.0795146, 3.00158], [-45, 0.0795146, 6.99842], [-44, 0.0795146, 6.99842], [-44, 0, 5], [-36, 0, 5], [-36, 0.0795146, 6.99842], [-35, 0.0795146, 6.99842], [-35, -0.0795146, 3.00158]], [[-44.0001, -9.4338, 3.33491], [-44.0332, -9.27825, 7.33175], [-43.055, -9.07034, 7.33175], [-43.0385, -9.14811, 5.33333], [-35.2133, -7.48482, 5.33333], [-35.2298, -7.40704, 7.33175], [-34.2517, -7.19913, 7.33175], [-34.2186, -7.35469, 3.33491]], [[-41.0772, -18.3758, 3.66825], [-41.1419, -18.2305, 7.66509], [-40.2283, -17.8238, 7.66509], [-40.196, -17.8964, 5.66667], [-32.8876, -14.6425, 5.66667], [-32.92, -14.5699, 7.66509], [-32.0064, -14.1631, 7.66509], [-31.9417, -14.3084, 3.66825]], [[-36.359, -26.5147, 4.00158], [-36.4525, -26.386, 7.99842], [-35.6435, -25.7982, 7.99842], [-35.5967, -25.8626, 6], [-29.1246, -21.1603, 6], [-29.1713, -21.0959, 7.99842], [-28.3623, -20.5082, 7.99842], [-28.2689, -20.6368, 4.00158]], [[-30.0518, -33.4947, 4.33491], [-30.17, -33.3883, 8.33175], [-29.5008, -32.6452, 8.33175], [-29.4417, -32.6984, 6.33333], [-24.0887, -26.7532, 6.33333], [-24.1478, -26.7, 8.33175], [-23.4787, -25.9569, 8.33175], [-23.3605, -26.0633, 4.33491]], [[-22.4311, -39.0109, 4.66825], [-22.5689, -38.9314, 8.66509], [-22.0689, -38.0654, 8.66509], [-22, -38.1051, 6.66667], [-18, -31.1769, 6.66667], [-18.0689, -31.1372, 8.66509], [-17.5689, -30.2711, 8.66509], [-17.4311, -30.3506, 4.66825]], [[-13.8301, -42.8221, 5.00158], [-13.9814, -42.773, 8.99842], [-13.6724, -41.8219, 8.99842], [-13.5967, -41.8465, 7], [-11.1246, -34.238, 7], [-11.2002, -34.2135, 8.99842], [-10.8912, -33.2624, 8.99842], [-10.74, -33.3115, 5.00158]], [[-4.6247, -44.7618, 5.33491], [-4.78286, -44.7452, 9.33175], [-4.67833, -43.7507, 9.33175], [-4.59925, -43.759, 7.33333], [-3.76302, -35.8028, 7.33333], [-3.8421, -35.7945, 9.33175], [-3.73758, -34.8, 9.33175], [-3.57942, -34.8166, 5.33491]], [[4.78286, -44.7452, 5.66825], [4.6247, -44.7618, 9.66509], [4.52017, -43.7673, 9.66509], [4.59925, -43.759, 7.66667], [3.76302, -35.8028, 7.66667], [3.68395, -35.8111, 9.66509], [3.57942, -34.8166, 9.66509], [3.73758, -34.8, 5.66825]], [[13.9814, -42.773, 6.00158], [13.8301, -42.8221, 9.99842], [13.5211, -41.8711, 9.99842], [13.5967, -41.8465, 8], [11.1246, -34.238, 8], [11.049, -34.2626, 9.99842], [10.74, -33.3115, 9.99842], [10.8912, -33.2624, 6.00158]], [[22.5689, -38.9314, 6.33491], [22.4311, -39.0109, 10.3318], [21.9311, -38.1449, 10.3318], [22, -38.1051, 8.33333], [18, -31.1769, 8.33333], [17.9311, -31.2167, 10.3318], [17.4311, -30.3506, 10.3318], [17.5689, -30.2711, 6.33491]], [[30.17, -33.3883, 6.66825], [30.0518, -33.4947, 10.6651], [29.3827, -32.7516, 10.6651], [29.4417, -32.6984, 8.66667], [24.0887, -26.7532, 8.66667], [24.0296, -26.8064, 10.6651], [23.3605, -26.0633, 10.6651], [23.4787, -25.9569, 6.66825]], [[36.4525, -26.386, 7.00158], [36.359, -26.5147, 10.9984], [35.55, -25.9269, 10.9984], [35.5967, -25.8626, 9], [29.1246, -21.1603, 9], [29.0779, -21.2246, 10.9984], [28.2689, -20.6368, 10.9984], [28.3623, -20.5082, 7.00158]], [[41.1419, -18.2305, 7.33491], [41.0772, -18.3758, 11.3318], [40.1637, -17.9691, 11.3318], [40.196, -17.8964, 9.33333], [32.8876, -14.6425, 9.33333], [32.8553, -14.7152, 11.3318], [31.9417, -14.3084, 11.3318], [32.0064, -14.1631, 7.33491]], [[44.0332, -9.27825, 7.66825], [44.0001, -9.4338, 11.6651], [43.022, -9.22589, 11.6651], [43.0385, -9.14811, 9.66667], [35.2133, -7.48482, 9.66667], [35.1968, -7.5626, 11.6651], [34.2186, -7.35469, 11.6651], [34.2517, -7.19913, 7.66825]], [[45, 0.0795146, 8.00158], [45, -0.0795146, 11.9984], [44, -0.0795146, 11.9984], [44, 0, 10], [36, 0, 10], [36, -0.0795146, 11.9984], [35, -0.0795146, 11.9984], [35, 0.0795146, 8.00158]], [[44.0001, 9.4338, 8.33491], [44.0332, 9.27825, 12.3318], [43.055, 9.07034, 12.3318], [43.0385, 9.14811, 10.3333], [35.2133, 7.48482, 10.3333], [35.2298, 7.40704, 12.3318], [34.2517, 7.19913, 12.3318], [34.2186, 7.35469, 8.33491]], [[41.0772, 18.3758, 8.66825], [41.1419, 18.2305, 12.6651], [40.2283, 17.8238, 12.6651], [40.196, 17.8964, 10.6667], [32.8876, 14.6425, 10.6667], [32.92, 14.5699, 12.6651], [32.0064, 14.1631, 12.6651], [31.9417, 14.3084, 8.66825]], [[36.359, 26.5147, 9.00158], [36.4525, 26.386, 12.9984], [35.6435, 25.7982, 12.9984], [35.5967, 25.8626, 11], [29.1246, 21.1603, 11], [29.1713, 21.0959, 12.9984], [28.3623, 20.5082, 12.9984], [28.2689, 20.6368, 9.00158]], [[30.0518, 33.4947, 9.33491], [30.17, 33.3883, 13.3318], [29.5008, 32.6452, 13.3318], [29.4417, 32.6984, 11.3333], [24.0887, 26.7532, 11.3333], [24.1478, 26.7, 13.3318], [23.4787, 25.9569, 13.3318], [23.3605, 26.0633, 9.33491]], [[22.4311, 39.0109, 9.66825], [22.5689, 38.9314, 13.6651], [22.0689, 38.0654, 13.6651], [22, 38.1051, 11.6667], [18, 31.1769, 11.6667], [18.0689, 31.1372, 13.6651], [17.5689, 30.2711, 13.6651], [17.4311, 30.3506, 9.66825]], [[13.8301, 42.8221, 10.0016], [13.9814, 42.773, 13.9984], [13.6724, 41.8219, 13.9984], [13.5967, 41.8465, 12], [11.1246, 34.238, 12], [11.2002, 34.2135, 13.9984], [10.8912, 33.2624, 13.9984], [10.74, 33.3115, 10.0016]], [[4.6247, 44.7618, 10.3349], [4.78286, 44.7452, 14.3318], [4.67833, 43.7507, 14.3318], [4.59925, 43.759, 12.3333], [3.76302, 35.8028, 12.3333], [3.8421, 35.7945, 14.3318], [3.73758, 34.8, 14.3318], [3.57942, 34.8166, 10.3349]], [[-4.78286, 44.7452, 10.6682], [-4.6247, 44.7618, 14.6651], [-4.52017, 43.7673, 14.6651], [-4.59925, 43.759, 12.6667], [-3.76302, 35.8028, 12.6667], [-3.68395, 35.8111, 14.6651], [-3.57942, 34.8166, 14.6651], [-3.73758, 34.8, 10.6682]], [[-13.9814, 42.773, 11.0016], [-13.8301, 42.8221, 14.9984], [-13.5211, 41.8711, 14.9984], [-13.5967, 41.8465, 13], [-11.1246, 34.238, 13], [-11.049, 34.2626, 14.9984], [-10.74, 33.3115, 14.9984], [-10.8912, 33.2624, 11.0016]], [[-22.5689, 38.9314, 11.3349], [-22.4311, 39.0109, 15.3318], [-21.9311, 38.1449, 15.3318], [-22, 38.1051, 13.3333], [-18, 31.1769, 13.3333], [-17.9311, 31.2167, 15.3318], [-17.4311, 30.3506, 15.3318], [-17.5689, 30.2711, 11.3349]], [[-30.17, 33.3883, 11.6682], [-30.0518, 33.4947, 15.6651], [-29.3827, 32.7516, 15.6651], [-29.4417, 32.6984, 13.6667], [-24.0887, 26.7532, 13.6667], [-24.0296, 26.8064, 15.6651], [-23.3605, 26.0633, 15.6651], [-23.4787, 25.9569, 11.6682]], [[-36.4525, 26.386, 12.0016], [-36.359, 26.5147, 15.9984], [-35.55, 25.9269, 15.9984], [-35.5967, 25.8626, 14], [-29.1246, 21.1603, 14], [-29.0779, 21.2246, 15.9984], [-28.2689, 20.6368, 15.9984], [-28.3623, 20.5082, 12.0016]], [[-41.1419, 18.2305, 12.3349], [-41.0772, 18.3758, 16.3318], [-40.1637, 17.9691, 16.3318], [-40.196, 17.8964, 14.3333], [-32.8876, 14.6425, 14.3333], [-32.8553, 14.7152, 16.3318], [-31.9417, 14.3084, 16.3318], [-32.0064, 14.1631, 12.3349]], [[-44.0332, 9.27825, 12.6682], [-44.0001, 9.4338, 16.6651], [-43.022, 9.22589, 16.6651], [-43.0385, 9.14811, 14.6667], [-35.2133, 7.48482, 14.6667], [-35.1968, 7.5626, 16.6651], [-34.2186, 7.35469, 16.6651], [-34.2517, 7.19913, 12.6682]], [[-45, -0.0795146, 13.0016], [-45, 0.0795146, 16.9984], [-44, 0.0795146, 16.9984], [-44, 0, 15], [-36, 0, 15], [-36, 0.0795146, 16.9984], [-35, 0.0795146, 16.9984], [-35, -0.0795146, 13.0016]], [[-44.0001, -9.4338, 13.3349], [-44.0332, -9.27825, 17.3318], [-43.055, -9.07034, 17.3318], [-43.0385, -9.14811, 15.3333], [-35.2133, -7.48482, 15.3333], [-35.2298, -7.40704, 17.3318], [-34.2517, -7.19913, 17.3318], [-34.2186, -7.35469, 13.3349]], [[-41.0772, -18.3758, 13.6682], [-41.1419, -18.2305, 17.6651], [-40.2283, -17.8238, 17.6651], [-40.196, -17.8964, 15.6667], [-32.8876, -14.6425, 15.6667], [-32.92, -14.5699, 17.6651], [-32.0064, -14.1631, 17.6651], [-31.9417, -14.3084, 13.6682]], [[-36.359, -26.5147, 14.0016], [-36.4525, -26.386, 17.9984], [-35.6435, -25.7982, 17.9984], [-35.5967, -25.8626, 16], [-29.1246, -21.1603, 16], [-29.1713, -21.0959, 17.9984], [-28.3623, -20.5082, 17.9984], [-28.2689, -20.6368, 14.0016]], [[-30.0518, -33.4947, 14.3349], [-30.17, -33.3883, 18.3318], [-29.5008, -32.6452, 18.3318], [-29.4417, -32.6984, 16.3333], [-24.0887, -26.7532, 16.3333], [-24.1478, -26.7, 18.3318], [-23.4787, -25.9569, 18.3318], [-23.3605, -26.0633, 14.3349]], [[-22.4311, -39.0109, 14.6682], [-22.5689, -38.9314, 18.6651], [-22.0689, -38.0654, 18.6651], [-22, -38.1051, 16.6667], [-18, -31.1769, 16.6667], [-18.0689, -31.1372, 18.6651], [-17.5689, -30.2711, 18.6651], [-17.4311, -30.3506, 14.6682]], [[-13.8301, -42.8221, 15.0016], [-13.9814, -42.773, 18.9984], [-13.6724, -41.8219, 18.9984], [-13.5967, -41.8465, 17], [-11.1246, -34.238, 17], [-11.2002, -34.2135, 18.9984], [-10.8912, -33.2624, 18.9984], [-10.74, -33.3115, 15.0016]], [[-4.6247, -44.7618, 15.3349], [-4.78286, -44.7452, 19.3318], [-4.67833, -43.7507, 19.3318], [-4.59925, -43.759, 17.3333], [-3.76302, -35.8028, 17.3333], [-3.8421, -35.7945, 19.3318], [-3.73758, -34.8, 19.3318], [-3.57942, -34.8166, 15.3349]], [[4.78286, -44.7452, 15.6682], [4.6247, -44.7618, 19.6651], [4.52017, -43.7673, 19.6651], [4.59925, -43.759, 17.6667], [3.76302, -35.8028, 17.6667], [3.68395, -35.8111, 19.6651], [3.57942, -34.8166, 19.6651], [3.73758, -34.8, 15.6682]], [[13.9814, -42.773, 16.0016], [13.8301, -42.8221, 19.9984], [13.5211, -41.8711, 19.9984], [13.5967, -41.8465, 18], [11.1246, -34.238, 18], [11.049, -34.2626, 19.9984], [10.74, -33.3115, 19.9984], [10.8912, -33.2624, 16.0016]], [[22.5689, -38.9314, 16.3349], [22.4311, -39.0109, 20.3318], [21.9311, -38.1449, 20.3318], [22, -38.1051, 18.3333], [18, -31.1769, 18.3333], [17.9311, -31.2167, 20.3318], [17.4311, -30.3506, 20.3318], [17.5689, -30.2711, 16.3349]], [[30.17, -33.3883, 16.6682], [30.0518, -33.4947, 20.6651], [29.3827, -32.7516, 20.6651], [29.4417, -32.6984, 18.6667], [24.0887, -26.7532, 18.6667], [24.0296, -26.8064, 20.6651], [23.3605, -26.0633, 20.6651], [23.4787, -25.9569, 16.6682]], [[36.4525, -26.386, 17.0016], [36.359, -26.5147, 20.9984], [35.55, -25.9269, 20.9984], [35.5967, -25.8626, 19], [29.1246, -21.1603, 19], [29.0779, -21.2246, 20.9984], [28.2689, -20.6368, 20.9984], [28.3623, -20.5082, 17.0016]], [[41.1419, -18.2305, 17.3349], [41.0772, -18.3758, 21.3318], [40.1637, -17.9691, 21.3318], [40.196, -17.8964, 19.3333], [32.8876, -14.6425, 19.3333], [32.8553, -14.7152, 21.3318], [31.9417, -14.3084, 21.3318], [32.0064, -14.1631, 17.3349]], [[44.0332, -9.27825, 17.6682], [44.0001, -9.4338, 21.6651], [43.022, -9.22589, 21.6651], [43.0385, -9.14811, 19.6667], [35.2133, -7.48482, 19.6667], [35.1968, -7.5626, 21.6651], [34.2186, -7.35469, 21.6651], [34.2517, -7.19913, 17.6682]], [[45, 0.0795146, 18.0016], [45, -0.0795146, 21.9984], [44, -0.0795146, 21.9984], [44, 0, 20], [36, 0, 20], [36, -0.0795146, 21.9984], [35, -0.0795146, 21.9984], [35, 0.0795146, 18.0016]], [[44.0001, 9.4338, 18.3349], [44.0332, 9.27825, 22.3318], [43.055, 9.07034, 22.3318], [43.0385, 9.14811, 20.3333], [35.2133, 7.48482, 20.3333], [35.2298, 7.40704, 22.3318], [34.2517, 7.19913, 22.3318], [34.2186, 7.35469, 18.3349]], [[41.0772, 18.3758, 18.6682], [41.1419, 18.2305, 22.6651], [40.2283, 17.8238, 22.6651], [40.196, 17.8964, 20.6667], [32.8876, 14.6425, 20.6667], [32.92, 14.5699, 22.6651], [32.0064, 14.1631, 22.6651], [31.9417, 14.3084, 18.6682]], [[36.359, 26.5147, 19.0016], [36.4525, 26.386, 22.9984], [35.6435, 25.7982, 22.9984], [35.5967, 25.8626, 21], [29.1246, 21.1603, 21], [29.1713, 21.0959, 22.9984], [28.3623, 20.5082, 22.9984], [28.2689, 20.6368, 19.0016]], [[30.0518, 33.4947, 19.3349], [30.17, 33.3883, 23.3318], [29.5008, 32.6452, 23.3318], [29.4417, 32.6984, 21.3333], [24.0887, 26.7532, 21.3333], [24.1478, 26.7, 23.3318], [23.4787, 25.9569, 23.3318], [23.3605, 26.0633, 19.3349]], [[22.4311, 39.0109, 19.6682], [22.5689, 38.9314, 23.6651], [22.0689, 38.0654, 23.6651], [22, 38.1051, 21.6667], [18, 31.1769, 21.6667], [18.0689, 31.1372, 23.6651], [17.5689, 30.2711, 23.6651], [17.4311, 30.3506, 19.6682]], [[13.8301, 42.8221, 20.0016], [13.9814, 42.773, 23.9984], [13.6724, 41.8219, 23.9984], [13.5967, 41.8465, 22], [11.1246, 34.238, 22], [11.2002, 34.2135, 23.9984], [10.8912, 33.2624, 23.9984], [10.74, 33.3115, 20.0016]], [[4.6247, 44.7618, 20.3349], [4.78286, 44.7452, 24.3318], [4.67833, 43.7507, 24.3318], [4.59925, 43.759, 22.3333], [3.76302, 35.8028, 22.3333], [3.8421, 35.7945, 24.3318], [3.73758, 34.8, 24.3318], [3.57942, 34.8166, 20.3349]], [[-4.78286, 44.7452, 20.6682], [-4.6247, 44.7618, 24.6651], [-4.52017, 43.7673, 24.6651], [-4.59925, 43.759, 22.6667], [-3.76302, 35.8028, 22.6667], [-3.68395, 35.8111, 24.6651], [-3.57942, 34.8166, 24.6651], [-3.73758, 34.8, 20.6682]], [[-13.9814, 42.773, 21.0016], [-13.8301, 42.8221, 24.9984], [-13.5211, 41.8711, 24.9984], [-13.5967, 41.8465, 23], [-11.1246, 34.238, 23], [-11.049, 34.2626, 24.9984], [-10.74, 33.3115, 24.9984], [-10.8912, 33.2624, 21.0016]], [[-22.5689, 38.9314, 21.3349], [-22.4311, 39.0109, 25.3318], [-21.9311, 38.1449, 25.3318], [-22, 38.1051, 23.3333], [-18, 31.1769, 23.3333], [-17.9311, 31.2167, 25.3318], [-17.4311, 30.3506, 25.3318], [-17.5689, 30.2711, 21.3349]], [[-30.17, 33.3883, 21.6682], [-30.0518, 33.4947, 25.6651], [-29.3827, 32.7516, 25.6651], [-29.4417, 32.6984, 23.6667], [-24.0887, 26.7532, 23.6667], [-24.0296, 26.8064, 25.6651], [-23.3605, 26.0633, 25.6651], [-23.4787, 25.9569, 21.6682]], [[-36.4525, 26.386, 22.0016], [-36.359, 26.5147, 25.9984], [-35.55, 25.9269, 25.9984], [-35.5967, 25.8626, 24], [-29.1246, 21.1603, 24], [-29.0779, 21.2246, 25.9984], [-28.2689, 20.6368, 25.9984], [-28.3623, 20.5082, 22.0016]], [[-41.1419, 18.2305, 22.3349], [-41.0772, 18.3758, 26.3318], [-40.1637, 17.9691, 26.3318], [-40.196, 17.8964, 24.3333], [-32.8876, 14.6425, 24.3333], [-32.8553, 14.7152, 26.3318], [-31.9417, 14.3084, 26.3318], [-32.0064, 14.1631, 22.3349]], [[-44.0332, 9.27825, 22.6682], [-44.0001, 9.4338, 26.6651], [-43.022, 9.22589, 26.6651], [-43.0385, 9.14811, 24.6667], [-35.2133, 7.48482, 24.6667], [-35.1968, 7.5626, 26.6651], [-34.2186, 7.35469, 26.6651], [-34.2517, 7.19913, 22.6682]], [[-45, -0.0795146, 23.0016], [-45, 0.0795146, 26.9984], [-44, 0.0795146, 26.9984], [-44, 0, 25], [-36, 0, 25], [-36, 0.0795146, 26.9984], [-35, 0.0795146, 26.9984], [-35, -0.0795146, 23.0016]], [[-44.0001, -9.4338, 23.3349], [-44.0332, -9.27825, 27.3318], [-43.055, -9.07034, 27.3318], [-43.0385, -9.14811, 25.3333], [-35.2133, -7.48482, 25.3333], [-35.2298, -7.40704, 27.3318], [-34.2517, -7.19913, 27.3318], [-34.2186, -7.35469, 23.3349]], [[-41.0772, -18.3758, 23.6682], [-41.1419, -18.2305, 27.6651], [-40.2283, -17.8238, 27.6651], [-40.196, -17.8964, 25.6667], [-32.8876, -14.6425, 25.6667], [-32.92, -14.5699, 27.6651], [-32.0064, -14.1631, 27.6651], [-31.9417, -14.3084, 23.6682]], [[-36.359, -26.5147, 24.0016], [-36.4525, -26.386, 27.9984], [-35.6435, -25.7982, 27.9984], [-35.5967, -25.8626, 26], [-29.1246, -21.1603, 26], [-29.1713, -21.0959, 27.9984], [-28.3623, -20.5082, 27.9984], [-28.2689, -20.6368, 24.0016]], [[-30.0518, -33.4947, 24.3349], [-30.17, -33.3883, 28.3318], [-29.5008, -32.6452, 28.3318], [-29.4417, -32.6984, 26.3333], [-24.0887, -26.7532, 26.3333], [-24.1478, -26.7, 28.3318], [-23.4787, -25.9569, 28.3318], [-23.3605, -26.0633, 24.3349]], [[-22.4311, -39.0109, 24.6682], [-22.5689, -38.9314, 28.6651], [-22.0689, -38.0654, 28.6651], [-22, -38.1051, 26.6667], [-18, -31.1769, 26.6667], [-18.0689, -31.1372, 28.6651], [-17.5689, -30.2711, 28.6651], [-17.4311, -30.3506, 24.6682]], [[-13.8301, -42.8221, 25.0016], [-13.9814, -42.773, 28.9984], [-13.6724, -41.8219, 28.9984], [-13.5967, -41.8465, 27], [-11.1246, -34.238, 27], [-11.2002, -34.2135, 28.9984], [-10.8912, -33.2624, 28.9984], [-10.74, -33.3115, 25.0016]], [[-4.6247, -44.7618, 25.3349], [-4.78286, -44.7452, 29.3318], [-4.67833, -43.7507, 29.3318], [-4.59925, -43.759, 27.3333], [-3.76302, -35.8028, 27.3333], [-3.8421, -35.7945, 29.3318], [-3.73758, -34.8, 29.3318], [-3.57942, -34.8166, 25.3349]], [[4.78286, -44.7452, 25.6682], [4.6247, -44.7618, 29.6651], [4.52017, -43.7673, 29.6651], [4.59925, -43.759, 27.6667], [3.76302, -35.8028, 27.6667], [3.68395, -35.8111, 29.6651], [3.57942, -34.8166, 29.6651], [3.73758, -34.8, 25.6682]], [[13.9814, -42.773, 26.0016], [13.8301, -42.8221, 29.9984], [13.5211, -41.8711, 29.9984], [13.5967, -41.8465, 28], [11.1246, -34.238, 28], [11.049, -34.2626, 29.9984], [10.74, -33.3115, 29.9984], [10.8912, -33.2624, 26.0016]], [[22.5689, -38.9314, 26.3349], [22.4311, -39.0109, 30.3318], [21.9311, -38.1449, 30.3318], [22, -38.1051, 28.3333], [18, -31.1769, 28.3333], [17.9311, -31.2167, 30.3318], [17.4311, -30.3506, 30.3318], [17.5689, -30.2711, 26.3349]], [[30.17, -33.3883, 26.6682], [30.0518, -33.4947, 30.6651], [29.3827, -32.7516, 30.6651], [29.4417, -32.6984, 28.6667], [24.0887, -26.7532, 28.6667], [24.0296, -26.8064, 30.6651], [23.3605, -26.0633, 30.6651], [23.4787, -25.9569, 26.6682]], [[36.4525, -26.386, 27.0016], [36.359, -26.5147, 30.9984], [35.55, -25.9269, 30.9984], [35.5967, -25.8626, 29], [29.1246, -21.1603, 29], [29.0779, -21.2246, 30.9984], [28.2689, -20.6368, 30.9984], [28.3623, -20.5082, 27.0016]], [[41.1419, -18.2305, 27.3349], [41.0772, -18.3758, 31.3318], [40.1637, -17.9691, 31.3318], [40.196, -17.8964, 29.3333], [32.8876, -14.6425, 29.3333], [32.8553, -14.7152, 31.3318], [31.9417, -14.3084, 31.3318], [32.0064, -14.1631, 27.3349]], [[44.0332, -9.27825, 27.6682], [44.0001, -9.4338, 31.6651], [43.022, -9.22589, 31.6651], [43.0385, -9.14811, 29.6667], [35.2133, -7.48482, 29.6667], [35.1968, -7.5626, 31.6651], [34.2186, -7.35469, 31.6651], [34.2517, -7.19913, 27.6682]], [[45, 0.0795146, 28.0016], [45, -0.0795146, 31.9984], [44, -0.0795146, 31.9984], [44, 0, 30], [36, 0, 30], [36, -0.0795146, 31.9984], [35, -0.0795146, 31.9984], [35, 0.0795146, 28.0016]], [[44.0001, 9.4338, 28.3349], [44.0332, 9.27825, 32.3318], [43.055, 9.07034, 32.3318], [43.0385, 9.14811, 30.3333], [35.2133, 7.48482, 30.3333], [35.2298, 7.40704, 32.3318], [34.2517, 7.19913, 32.3318], [34.2186, 7.35469, 28.3349]], [[41.0772, 18.3758, 28.6682], [41.1419, 18.2305, 32.6651], [40.2283, 17.8238, 32.6651], [40.196, 17.8964, 30.6667], [32.8876, 14.6425, 30.6667], [32.92, 14.5699, 32.6651], [32.0064, 14.1631, 32.6651], [31.9417, 14.3084, 28.6682]], [[36.359, 26.5147, 29.0016], [36.4525, 26.386, 32.9984], [35.6435, 25.7982, 32.9984], [35.5967, 25.8626, 31], [29.1246, 21.1603, 31], [29.1713, 21.0959, 32.9984], [28.3623, 20.5082, 32.9984], [28.2689, 20.6368, 29.0016]], [[30.0518, 33.4947, 29.3349], [30.17, 33.3883, 33.3318], [29.5008, 32.6452, 33.3318], [29.4417, 32.6984, 31.3333], [24.0887, 26.7532, 31.3333], [24.1478, 26.7, 33.3318], [23.4787, 25.9569, 33.3318], [23.3605, 26.0633, 29.3349]], [[22.4311, 39.0109, 29.6682], [22.5689, 38.9314, 33.6651], [22.0689, 38.0654, 33.6651], [22, 38.1051, 31.6667], [18, 31.1769, 31.6667], [18.0689, 31.1372, 33.6651], [17.5689, 30.2711, 33.6651], [17.4311, 30.3506, 29.6682]], [[13.8301, 42.8221, 30.0016], [13.9814, 42.773, 33.9984], [13.6724, 41.8219, 33.9984], [13.5967, 41.8465, 32], [11.1246, 34.238, 32], [11.2002, 34.2135, 33.9984], [10.8912, 33.2624, 33.9984], [10.74, 33.3115, 30.0016]], [[4.6247, 44.7618, 30.3349], [4.78286, 44.7452, 34.3318], [4.67833, 43.7507, 34.3318], [4.59925, 43.759, 32.3333], [3.76302, 35.8028, 32.3333], [3.8421, 35.7945, 34.3318], [3.73758, 34.8, 34.3318], [3.57942, 34.8166, 30.3349]], [[-4.78286, 44.7452, 30.6682], [-4.6247, 44.7618, 34.6651], [-4.52017, 43.7673, 34.6651], [-4.59925, 43.759, 32.6667], [-3.76302, 35.8028, 32.6667], [-3.68395, 35.8111, 34.6651], [-3.57942, 34.8166, 34.6651], [-3.73758, 34.8, 30.6682]], [[-13.9814, 42.773, 31.0016], [-13.8301, 42.8221, 34.9984], [-13.5211, 41.8711, 34.9984], [-13.5967, 41.8465, 33], [-11.1246, 34.238, 33], [-11.049, 34.2626, 34.9984], [-10.74, 33.3115, 34.9984], [-10.8912, 33.2624, 31.0016]], [[-22.5689, 38.9314, 31.3349], [-22.4311, 39.0109, 35.3318], [-21.9311, 38.1449, 35.3318], [-22, 38.1051, 33.3333], [-18, 31.1769, 33.3333], [-17.9311, 31.2167, 35.3318], [-17.4311, 30.3506, 35.3318], [-17.5689, 30.2711, 31.3349]], [[-30.17, 33.3883, 31.6682], [-30.0518, 33.4947, 35.6651], [-29.3827, 32.7516, 35.6651], [-29.4417, 32.6984, 33.6667], [-24.0887, 26.7532, 33.6667], [-24.0296, 26.8064, 35.6651], [-23.3605, 26.0633, 35.6651], [-23.4787, 25.9569, 31.6682]], [[-36.4525, 26.386, 32.0016], [-36.359, 26.5147, 35.9984], [-35.55, 25.9269, 35.9984], [-35.5967, 25.8626, 34], [-29.1246, 21.1603, 34], [-29.0779, 21.2246, 35.9984], [-28.2689, 20.6368, 35.9984], [-28.3623, 20.5082, 32.0016]], [[-41.1419, 18.2305, 32.3349], [-41.0772, 18.3758, 36.3318], [-40.1637, 17.9691, 36.3318], [-40.196, 17.8964, 34.3333], [-32.8876, 14.6425, 34.3333], [-32.8553, 14.7152, 36.3318], [-31.9417, 14.3084, 36.3318], [-32.0064, 14.1631, 32.3349]], [[-44.0332, 9.27825, 32.6682], [-44.0001, 9.4338, 36.6651], [-43.022, 9.22589, 36.6651], [-43.0385, 9.14811, 34.6667], [-35.2133, 7.48482, 34.6667], [-35.1968, 7.5626, 36.6651], [-34.2186, 7.35469, 36.6651], [-34.2517, 7.19913, 32.6682]], [[-45, -0.0795146, 33.0016], [-45, 0.0795146, 36.9984], [-44, 0.0795146, 36.9984], [-44, 0, 35], [-36, 0, 35], [-36, 0.0795146, 36.9984], [-35, 0.0795146, 36.9984], [-35, -0.0795146, 33.0016]], [[-44.0001, -9.4338, 33.3349], [-44.0332, -9.27825, 37.3318], [-43.055, -9.07034, 37.3318], [-43.0385, -9.14811, 35.3333], [-35.2133, -7.48482, 35.3333], [-35.2298, -7.40704, 37.3318], [-34.2517, -7.19913, 37.3318], [-34.2186, -7.35469, 33.3349]], [[-41.0772, -18.3758, 33.6682], [-41.1419, -18.2305, 37.6651], [-40.2283, -17.8238, 37.6651], [-40.196, -17.8964, 35.6667], [-32.8876, -14.6425, 35.6667], [-32.92, -14.5699, 37.6651], [-32.0064, -14.1631, 37.6651], [-31.9417, -14.3084, 33.6682]], [[-36.359, -26.5147, 34.0016], [-36.4525, -26.386, 37.9984], [-35.6435, -25.7982, 37.9984], [-35.5967, -25.8626, 36], [-29.1246, -21.1603, 36], [-29.1713, -21.0959, 37.9984], [-28.3623, -20.5082, 37.9984], [-28.2689, -20.6368, 34.0016]], [[-30.0518, -33.4947, 34.3349], [-30.17, -33.3883, 38.3318], [-29.5008, -32.6452, 38.3318], [-29.4417, -32.6984, 36.3333], [-24.0887, -26.7532, 36.3333], [-24.1478, -26.7, 38.3318], [-23.4787, -25.9569, 38.3318], [-23.3605, -26.0633, 34.3349]], [[-22.4311, -39.0109, 34.6682], [-22.5689, -38.9314, 38.6651], [-22.0689, -38.0654, 38.6651], [-22, -38.1051, 36.6667], [-18, -31.1769, 36.6667], [-18.0689, -31.1372, 38.6651], [-17.5689, -30.2711, 38.6651], [-17.4311, -30.3506, 34.6682]], [[-13.8301, -42.8221, 35.0016], [-13.9814, -42.773, 38.9984], [-13.6724, -41.8219, 38.9984], [-13.5967, -41.8465, 37], [-11.1246, -34.238, 37], [-11.2002, -34.2135, 38.9984], [-10.8912, -33.2624, 38.9984], [-10.74, -33.3115, 35.0016]], [[-4.6247, -44.7618, 35.3349], [-4.78286, -44.7452, 39.3318], [-4.67833, -43.7507, 39.3318], [-4.59925, -43.759, 37.3333], [-3.76302, -35.8028, 37.3333], [-3.8421, -35.7945, 39.3318], [-3.73758, -34.8, 39.3318], [-3.57942, -34.8166, 35.3349]], [[4.78286, -44.7452, 35.6682], [4.6247, -44.7618, 39.6651], [4.52017, -43.7673, 39.6651], [4.59925, -43.759, 37.6667], [3.76302, -35.8028, 37.6667], [3.68395, -35.8111, 39.6651], [3.57942, -34.8166, 39.6651], [3.73758, -34.8, 35.6682]], [[13.9814, -42.773, 36.0016], [13.8301, -42.8221, 39.9984], [13.5211, -41.8711, 39.9984], [13.5967, -41.8465, 38], [11.1246, -34.238, 38], [11.049, -34.2626, 39.9984], [10.74, -33.3115, 39.9984], [10.8912, -33.2624, 36.0016]], [[22.5689, -38.9314, 36.3349], [22.4311, -39.0109, 40.3318], [21.9311, -38.1449, 40.3318], [22, -38.1051, 38.3333], [18, -31.1769, 38.3333], [17.9311, -31.2167, 40.3318], [17.4311, -30.3506, 40.3318], [17.5689, -30.2711, 36.3349]], [[30.17, -33.3883, 36.6682], [30.0518, -33.4947, 40.6651], [29.3827, -32.7516, 40.6651], [29.4417, -32.6984, 38.6667], [24.0887, -26.7532, 38.6667], [24.0296, -26.8064, 40.6651], [23.3605, -26.0633, 40.6651], [23.4787, -25.9569, 36.6682]], [[36.4525, -26.386, 37.0016], [36.359, -26.5147, 40.9984], [35.55, -25.9269, 40.9984], [35.5967, -25.8626, 39], [29.1246, -21.1603, 39], [29.0779, -21.2246, 40.9984], [28.2689, -20.6368, 40.9984], [28.3623, -20.5082, 37.0016]], [[41.1419, -18.2305, 37.3349], [41.0772, -18.3758, 41.3318], [40.1637, -17.9691, 41.3318], [40.196, -17.8964, 39.3333], [32.8876, -14.6425, 39.3333], [32.8553, -14.7152, 41.3318], [31.9417, -14.3084, 41.3318], [32.0064, -14.1631, 37.3349]], [[44.0332, -9.27825, 37.6682], [44.0001, -9.4338, 41.6651], [43.022, -9.22589, 41.6651], [43.0385, -9.14811, 39.6667], [35.2133, -7.48482, 39.6667], [35.1968, -7.5626, 41.6651], [34.2186, -7.35469, 41.6651], [34.2517, -7.19913, 37.6682]], [[45, 0.0795146, 38.0016], [45, -0.0795146, 41.9984], [44, -0.0795146, 41.9984], [44, 0, 40], [36, 0, 40], [36, -0.0795146, 41.9984], [35, -0.0795146, 41.9984], [35, 0.0795146, 38.0016]], [[44.0001, 9.4338, 38.3349], [44.0332, 9.27825, 42.3318], [43.055, 9.07034, 42.3318], [43.0385, 9.14811, 40.3333], [35.2133, 7.48482, 40.3333], [35.2298, 7.40704, 42.3318], [34.2517, 7.19913, 42.3318], [34.2186, 7.35469, 38.3349]], [[41.0772, 18.3758, 38.6682], [41.1419, 18.2305, 42.6651], [40.2283, 17.8238, 42.6651], [40.196, 17.8964, 40.6667], [32.8876, 14.6425, 40.6667], [32.92, 14.5699, 42.6651], [32.0064, 14.1631, 42.6651], [31.9417, 14.3084, 38.6682]], [[36.359, 26.5147, 39.0016], [36.4525, 26.386, 42.9984], [35.6435, 25.7982, 42.9984], [35.5967, 25.8626, 41], [29.1246, 21.1603, 41], [29.1713, 21.0959, 42.9984], [28.3623, 20.5082, 42.9984], [28.2689, 20.6368, 39.0016]], [[30.0518, 33.4947, 39.3349], [30.17, 33.3883, 43.3318], [29.5008, 32.6452, 43.3318], [29.4417, 32.6984, 41.3333], [24.0887, 26.7532, 41.3333], [24.1478, 26.7, 43.3318], [23.4787, 25.9569, 43.3318], [23.3605, 26.0633, 39.3349]], [[22.4311, 39.0109, 39.6682], [22.5689, 38.9314, 43.6651], [22.0689, 38.0654, 43.6651], [22, 38.1051, 41.6667], [18, 31.1769, 41.6667], [18.0689, 31.1372, 43.6651], [17.5689, 30.2711, 43.6651], [17.4311, 30.3506, 39.6682]], [[13.8301, 42.8221, 40.0016], [13.9814, 42.773, 43.9984], [13.6724, 41.8219, 43.9984], [13.5967, 41.8465, 42], [11.1246, 34.238, 42], [11.2002, 34.2135, 43.9984], [10.8912, 33.2624, 43.9984], [10.74, 33.3115, 40.0016]], [[4.6247, 44.7618, 40.3349], [4.78286, 44.7452, 44.3318], [4.67833, 43.7507, 44.3318], [4.59925, 43.759, 42.3333], [3.76302, 35.8028, 42.3333], [3.8421, 35.7945, 44.3318], [3.73758, 34.8, 44.3318], [3.57942, 34.8166, 40.3349]], [[-4.78286, 44.7452, 40.6682], [-4.6247, 44.7618, 44.6651], [-4.52017, 43.7673, 44.6651], [-4.59925, 43.759, 42.6667], [-3.76302, 35.8028, 42.6667], [-3.68395, 35.8111, 44.6651], [-3.57942, 34.8166, 44.6651], [-3.73758, 34.8, 40.6682]], [[-13.9814, 42.773, 41.0016], [-13.8301, 42.8221, 44.9984], [-13.5211, 41.8711, 44.9984], [-13.5967, 41.8465, 43], [-11.1246, 34.238, 43], [-11.049, 34.2626, 44.9984], [-10.74, 33.3115, 44.9984], [-10.8912, 33.2624, 41.0016]], [[-22.5689, 38.9314, 41.3349], [-22.4311, 39.0109, 45.3318], [-21.9311, 38.1449, 45.3318], [-22, 38.1051, 43.3333], [-18, 31.1769, 43.3333], [-17.9311, 31.2167, 45.3318], [-17.4311, 30.3506, 45.3318], [-17.5689, 30.2711, 41.3349]], [[-30.17, 33.3883, 41.6682], [-30.0518, 33.4947, 45.6651], [-29.3827, 32.7516, 45.6651], [-29.4417, 32.6984, 43.6667], [-24.0887, 26.7532, 43.6667], [-24.0296, 26.8064, 45.6651], [-23.3605, 26.0633, 45.6651], [-23.4787, 25.9569, 41.6682]], [[-36.4525, 26.386, 42.0016], [-36.359, 26.5147, 45.9984], [-35.55, 25.9269, 45.9984], [-35.5967, 25.8626, 44], [-29.1246, 21.1603, 44], [-29.0779, 21.2246, 45.9984], [-28.2689, 20.6368, 45.9984], [-28.3623, 20.5082, 42.0016]], [[-41.1419, 18.2305, 42.3349], [-41.0772, 18.3758, 46.3318], [-40.1637, 17.9691, 46.3318], [-40.196, 17.8964, 44.3333], [-32.8876, 14.6425, 44.3333], [-32.8553, 14.7152, 46.3318], [-31.9417, 14.3084, 46.3318], [-32.0064, 14.1631, 42.3349]], [[-44.0332, 9.27825, 42.6682], [-44.0001, 9.4338, 46.6651], [-43.022, 9.22589, 46.6651], [-43.0385, 9.14811, 44.6667], [-35.2133, 7.48482, 44.6667], [-35.1968, 7.5626, 46.6651], [-34.2186, 7.35469, 46.6651], [-34.2517, 7.19913, 42.6682]], [[-45, -0.0795146, 43.0016], [-45, 0.0795146, 46.9984], [-44, 0.0795146, 46.9984], [-44, 0, 45], [-36, 0, 45], [-36, 0.0795146, 46.9984], [-35, 0.0795146, 46.9984], [-35, -0.0795146, 43.0016]], [[-44.0001, -9.4338, 43.3349], [-44.0332, -9.27825, 47.3318], [-43.055, -9.07034, 47.3318], [-43.0385, -9.14811, 45.3333], [-35.2133, -7.48482, 45.3333], [-35.2298, -7.40704, 47.3318], [-34.2517, -7.19913, 47.3318], [-34.2186, -7.35469, 43.3349]], [[-41.0772, -18.3758, 43.6682], [-41.1419, -18.2305, 47.6651], [-40.2283, -17.8238, 47.6651], [-40.196, -17.8964, 45.6667], [-32.8876, -14.6425, 45.6667], [-32.92, -14.5699, 47.6651], [-32.0064, -14.1631, 47.6651], [-31.9417, -14.3084, 43.6682]], [[-36.359, -26.5147, 44.0016], [-36.4525, -26.386, 47.9984], [-35.6435, -25.7982, 47.9984], [-35.5967, -25.8626, 46], [-29.1246, -21.1603, 46], [-29.1713, -21.0959, 47.9984], [-28.3623, -20.5082, 47.9984], [-28.2689, -20.6368, 44.0016]], [[-30.0518, -33.4947, 44.3349], [-30.17, -33.3883, 48.3318], [-29.5008, -32.6452, 48.3318], [-29.4417, -32.6984, 46.3333], [-24.0887, -26.7532, 46.3333], [-24.1478, -26.7, 48.3318], [-23.4787, -25.9569, 48.3318], [-23.3605, -26.0633, 44.3349]], [[-22.4311, -39.0109, 44.6682], [-22.5689, -38.9314, 48.6651], [-22.0689, -38.0654, 48.6651], [-22, -38.1051, 46.6667], [-18, -31.1769, 46.6667], [-18.0689, -31.1372, 48.6651], [-17.5689, -30.2711, 48.6651], [-17.4311, -30.3506, 44.6682]], [[-13.8301, -42.8221, 45.0016], [-13.9814, -42.773, 48.9984], [-13.6724, -41.8219, 48.9984], [-13.5967, -41.8465, 47], [-11.1246, -34.238, 47], [-11.2002, -34.2135, 48.9984], [-10.8912, -33.2624, 48.9984], [-10.74, -33.3115, 45.0016]], [[-4.6247, -44.7618, 45.3349], [-4.78286, -44.7452, 49.3318], [-4.67833, -43.7507, 49.3318], [-4.59925, -43.759, 47.3333], [-3.76302, -35.8028, 47.3333], [-3.8421, -35.7945, 49.3318], [-3.73758, -34.8, 49.3318], [-3.57942, -34.8166, 45.3349]], [[4.78286, -44.7452, 45.6682], [4.6247, -44.7618, 49.6651], [4.52017, -43.7673, 49.6651], [4.59925, -43.759, 47.6667], [3.76302, -35.8028, 47.6667], [3.68395, -35.8111, 49.6651], [3.57942, -34.8166, 49.6651], [3.73758, -34.8, 45.6682]], [[13.9814, -42.773, 46.0016], [13.8301, -42.8221, 49.9984], [13.5211, -41.8711, 49.9984], [13.5967, -41.8465, 48], [11.1246, -34.238, 48], [11.049, -34.2626, 49.9984], [10.74, -33.3115, 49.9984], [10.8912, -33.2624, 46.0016]], [[22.5689, -38.9314, 46.3349], [22.4311, -39.0109, 50.3318], [21.9311, -38.1449, 50.3318], [22, -38.1051, 48.3333], [18, -31.1769, 48.3333], [17.9311, -31.2167, 50.3318], [17.4311, -30.3506, 50.3318], [17.5689, -30.2711, 46.3349]], [[30.17, -33.3883, 46.6682], [30.0518, -33.4947, 50.6651], [29.3827, -32.7516, 50.6651], [29.4417, -32.6984, 48.6667], [24.0887, -26.7532, 48.6667], [24.0296, -26.8064, 50.6651], [23.3605, -26.0633, 50.6651], [23.4787, -25.9569, 46.6682]], [[36.4525, -26.386, 47.0016], [36.359, -26.5147, 50.9984], [35.55, -25.9269, 50.9984], [35.5967, -25.8626, 49], [29.1246, -21.1603, 49], [29.0779, -21.2246, 50.9984], [28.2689, -20.6368, 50.9984], [28.3623, -20.5082, 47.0016]], [[41.1419, -18.2305, 47.3349], [41.0772, -18.3758, 51.3318], [40.1637, -17.9691, 51.3318], [40.196, -17.8964, 49.3333], [32.8876, -14.6425, 49.3333], [32.8553, -14.7152, 51.3318], [31.9417, -14.3084, 51.3318], [32.0064, -14.1631, 47.3349]], [[44.0332, -9.27825, 47.6682], [44.0001, -9.4338, 51.6651], [43.022, -9.22589, 51.6651], [43.0385, -9.14811, 49.6667], [35.2133, -7.48482, 49.6667], [35.1968, -7.5626, 51.6651], [34.2186, -7.35469, 51.6651], [34.2517, -7.19913, 47.6682]], [[45, 0.0795146, 48.0016], [45, -0.0795146, 51.9984], [44, -0.0795146, 51.9984], [44, 0, 50], [36, 0, 50], [36, -0.0795146, 51.9984], [35, -0.0795146, 51.9984], [35, 0.0795146, 48.0016]]]; for(i = [0:len(expected) - 1]) { - assertEqualPoints(expected[i], sections[i], float_digits = 3); + assertEqualPoints(expected[i], sections[i]); } } @@ -202,162 +46,10 @@ module test_helix_extrude_diff_radius() { include ; module test_helix_extrude(sections) { - expected = [ - [[50, 0.08, -1.998], [50, -0.08, 1.998], [49, -0.08, 1.998], [49, 0, 0], [41, 0, 0], [41, -0.08, 1.998], [40, -0.08, 1.998], [40, 0.08, -1.998]] - , [[48.76, 10.446, -1.665], [48.793, 10.29, 2.332], [47.815, 10.082, 2.332], [47.799, 10.16, 0.333], [39.974, 8.497, 0.333], [39.99, 8.419, 2.332], [39.012, 8.211, 2.332], [38.979, 8.367, -1.665]] - , [[45.401, 20.301, -1.332], [45.466, 20.156, 2.665], [44.552, 19.749, 2.665], [44.52, 19.822, 0.667], [37.212, 16.568, 0.667], [37.244, 16.495, 2.665], [36.331, 16.088, 2.665], [36.266, 16.234, -1.332]] - , [[40.081, 29.218, -0.998], [40.174, 29.09, 2.998], [39.365, 28.502, 2.998], [39.318, 28.566, 1], [32.846, 23.864, 1], [32.893, 23.8, 2.998], [32.084, 23.212, 2.998], [31.99, 23.341, -0.998]] - , [[33.041, 36.814, -0.665], [33.159, 36.708, 3.332], [32.49, 35.965, 3.332], [32.431, 36.018, 1.333], [27.077, 30.073, 1.333], [27.137, 30.019, 3.332], [26.467, 29.276, 3.332], [26.349, 29.383, -0.665]] - , [[24.598, 42.764, -0.332], [24.736, 42.684, 3.665], [24.236, 41.818, 3.665], [24.167, 41.858, 1.667], [20.167, 34.93, 1.667], [20.236, 34.89, 3.665], [19.736, 34.024, 3.665], [19.598, 34.103, -0.332]] - , [[15.128, 46.817, 0.002], [15.279, 46.767, 3.998], [14.97, 45.816, 3.998], [14.895, 45.841, 2], [12.422, 38.232, 2], [12.498, 38.208, 3.998], [12.189, 37.257, 3.998], [12.038, 37.306, 0.002]] - , [[5.05, 48.806, 0.335], [5.208, 48.79, 4.332], [5.103, 47.795, 4.332], [5.024, 47.803, 2.333], [4.188, 39.847, 2.333], [4.267, 39.839, 4.332], [4.163, 38.844, 4.332], [4.004, 38.861, 0.335]] - , [[-5.194, 48.657, 0.668], [-5.036, 48.674, 4.665], [-4.931, 47.679, 4.665], [-5.01, 47.671, 2.667], [-4.174, 39.715, 2.667], [-4.095, 39.723, 4.665], [-3.991, 38.728, 4.665], [-4.149, 38.712, 0.668]] - , [[-15.156, 46.387, 1.002], [-15.004, 46.436, 4.998], [-14.695, 45.485, 4.998], [-14.771, 45.461, 3], [-12.299, 37.852, 3], [-12.223, 37.877, 4.998], [-11.914, 36.926, 4.998], [-12.065, 36.876, 1.002]] - , [[-24.402, 42.107, 1.335], [-24.264, 42.186, 5.332], [-23.764, 41.32, 5.332], [-23.833, 41.281, 3.333], [-19.833, 34.352, 3.333], [-19.764, 34.392, 5.332], [-19.264, 33.526, 5.332], [-19.402, 33.447, 1.335]] - , [[-32.534, 36.014, 1.668], [-32.416, 36.121, 5.665], [-31.747, 35.377, 5.665], [-31.806, 35.324, 3.667], [-26.453, 29.379, 3.667], [-26.394, 29.432, 5.665], [-25.725, 28.689, 5.665], [-25.843, 28.583, 1.668]] - , [[-39.203, 28.384, 2.002], [-39.11, 28.513, 5.998], [-38.301, 27.925, 5.998], [-38.347, 27.861, 4], [-31.875, 23.159, 4], [-31.829, 23.223, 5.998], [-31.02, 22.635, 5.998], [-31.113, 22.507, 2.002]] - , [[-44.126, 19.559, 2.335], [-44.061, 19.704, 6.332], [-43.148, 19.298, 6.332], [-43.18, 19.225, 4.333], [-35.872, 15.971, 4.333], [-35.84, 16.044, 6.332], [-34.926, 15.637, 6.332], [-34.991, 15.492, 2.335]] - , [[-47.098, 9.93, 2.668], [-47.065, 10.085, 6.665], [-46.087, 9.877, 6.665], [-46.103, 9.8, 4.667], [-38.278, 8.136, 4.667], [-38.262, 8.214, 6.665], [-37.283, 8.006, 6.665], [-37.317, 7.851, 2.668]] - , [[-48, -0.08, 3.002], [-48, 0.08, 6.998], [-47, 0.08, 6.998], [-47, 0, 5], [-39, 0, 5], [-39, 0.08, 6.998], [-38, 0.08, 6.998], [-38, -0.08, 3.002]] - , [[-46.804, -10.03, 3.335], [-46.837, -9.874, 7.332], [-45.859, -9.666, 7.332], [-45.843, -9.744, 5.333], [-38.017, -8.081, 5.333], [-38.034, -8.003, 7.332], [-37.056, -7.795, 7.332], [-37.023, -7.951, 3.335]] - , [[-43.574, -19.488, 3.668], [-43.639, -19.342, 7.665], [-42.725, -18.936, 7.665], [-42.693, -19.008, 5.667], [-35.385, -15.754, 5.667], [-35.417, -15.682, 7.665], [-34.503, -15.275, 7.665], [-34.439, -15.42, 3.668]] - , [[-38.462, -28.043, 4.002], [-38.556, -27.914, 7.998], [-37.747, -27.326, 7.998], [-37.7, -27.391, 6], [-31.228, -22.689, 6], [-31.275, -22.624, 7.998], [-30.466, -22.036, 7.998], [-30.372, -22.165, 4.002]] - , [[-31.702, -35.328, 4.335], [-31.82, -35.221, 8.332], [-31.151, -34.478, 8.332], [-31.092, -34.531, 6.333], [-25.739, -28.586, 6.333], [-25.798, -28.533, 8.332], [-25.129, -27.79, 8.332], [-25.011, -27.896, 4.335]] - , [[-23.598, -41.032, 4.668], [-23.736, -40.952, 8.665], [-23.236, -40.086, 8.665], [-23.167, -40.126, 6.667], [-19.167, -33.198, 6.667], [-19.236, -33.158, 8.665], [-18.736, -32.292, 8.665], [-18.598, -32.371, 4.668]] - , [[-14.51, -44.914, 5.002], [-14.661, -44.865, 8.998], [-14.352, -43.914, 8.998], [-14.277, -43.939, 7], [-11.804, -36.33, 7], [-11.88, -36.306, 8.998], [-11.571, -35.355, 8.998], [-11.42, -35.404, 5.002]] - , [[-4.841, -46.817, 5.335], [-4.999, -46.801, 9.332], [-4.894, -45.806, 9.332], [-4.815, -45.814, 7.333], [-3.979, -37.858, 7.333], [-4.058, -37.85, 9.332], [-3.954, -36.855, 9.332], [-3.795, -36.872, 5.335]] - , [[4.985, -46.668, 5.668], [4.827, -46.685, 9.665], [4.722, -45.69, 9.665], [4.801, -45.682, 7.667], [3.965, -37.726, 7.667], [3.886, -37.734, 9.665], [3.782, -36.739, 9.665], [3.94, -36.723, 5.668]] - , [[14.538, -44.485, 6.002], [14.386, -44.534, 9.998], [14.077, -43.583, 9.998], [14.153, -43.558, 8], [11.681, -35.95, 8], [11.605, -35.975, 9.998], [11.296, -35.023, 9.998], [11.447, -34.974, 6.002]] - , [[23.402, -40.375, 6.335], [23.264, -40.454, 10.332], [22.764, -39.588, 10.332], [22.833, -39.548, 8.333], [18.833, -32.62, 8.333], [18.764, -32.66, 10.332], [18.264, -31.794, 10.332], [18.402, -31.715, 6.335]] - , [[31.196, -34.528, 6.668], [31.078, -34.634, 10.665], [30.409, -33.891, 10.665], [30.468, -33.838, 8.667], [25.115, -27.893, 8.667], [25.056, -27.946, 10.665], [24.386, -27.203, 10.665], [24.505, -27.096, 6.668]] - , [[37.585, -27.209, 7.002], [37.492, -27.338, 10.998], [36.683, -26.75, 10.998], [36.729, -26.685, 9], [30.257, -21.983, 9], [30.21, -22.047, 10.998], [29.401, -21.46, 10.998], [29.495, -21.331, 7.002]] - , [[42.299, -18.746, 7.335], [42.234, -18.891, 11.332], [41.321, -18.484, 11.332], [41.353, -18.412, 9.333], [34.045, -15.158, 9.333], [34.012, -15.23, 11.332], [33.099, -14.824, 11.332], [33.164, -14.678, 7.335]] - , [[45.142, -9.514, 7.668], [45.109, -9.669, 11.665], [44.131, -9.462, 11.665], [44.147, -9.384, 9.667], [36.322, -7.72, 9.667], [36.305, -7.798, 11.665], [35.327, -7.59, 11.665], [35.36, -7.435, 7.668]] - , [[46, 0.08, 8.002], [46, -0.08, 11.998], [45, -0.08, 11.998], [45, 0, 10], [37, 0, 10], [37, -0.08, 11.998], [36, -0.08, 11.998], [36, 0.08, 8.002]] - , [[44.848, 9.614, 8.335], [44.881, 9.458, 12.332], [43.903, 9.251, 12.332], [43.886, 9.328, 10.333], [36.061, 7.665, 10.333], [36.078, 7.587, 12.332], [35.099, 7.379, 12.332], [35.066, 7.535, 8.335]] - , [[41.747, 18.674, 8.668], [41.812, 18.529, 12.665], [40.898, 18.122, 12.665], [40.866, 18.195, 10.667], [33.558, 14.941, 10.667], [33.59, 14.868, 12.665], [32.676, 14.461, 12.665], [32.612, 14.607, 8.668]] - , [[36.844, 26.867, 9.002], [36.938, 26.739, 12.998], [36.129, 26.151, 12.998], [36.082, 26.215, 11], [29.61, 21.513, 11], [29.657, 21.449, 12.998], [28.848, 20.861, 12.998], [28.754, 20.989, 9.002]] - , [[30.364, 33.842, 9.335], [30.482, 33.735, 13.332], [29.813, 32.992, 13.332], [29.754, 33.045, 11.333], [24.401, 27.1, 11.333], [24.46, 27.047, 13.332], [23.791, 26.304, 13.332], [23.673, 26.41, 9.335]] - , [[22.598, 39.3, 9.668], [22.736, 39.22, 13.665], [22.236, 38.354, 13.665], [22.167, 38.394, 11.667], [18.167, 31.466, 11.667], [18.236, 31.426, 13.665], [17.736, 30.56, 13.665], [17.598, 30.639, 9.668]] - , [[13.892, 43.012, 10.002], [14.043, 42.963, 13.998], [13.734, 42.012, 13.998], [13.659, 42.037, 12], [11.186, 34.428, 12], [11.262, 34.404, 13.998], [10.953, 33.453, 13.998], [10.802, 33.502, 10.002]] - , [[4.632, 44.828, 10.335], [4.79, 44.811, 14.332], [4.685, 43.817, 14.332], [4.606, 43.825, 12.333], [3.77, 35.869, 12.333], [3.849, 35.861, 14.332], [3.745, 34.866, 14.332], [3.586, 34.883, 10.335]] - , [[-4.776, 44.679, 10.668], [-4.618, 44.695, 14.665], [-4.513, 43.701, 14.665], [-4.592, 43.693, 12.667], [-3.756, 35.736, 12.667], [-3.677, 35.745, 14.665], [-3.572, 34.75, 14.665], [-3.731, 34.734, 10.668]] - , [[-13.92, 42.583, 11.002], [-13.768, 42.632, 14.998], [-13.459, 41.681, 14.998], [-13.535, 41.656, 13], [-11.063, 34.048, 13], [-10.987, 34.072, 14.998], [-10.678, 33.121, 14.998], [-10.829, 33.072, 11.002]] - , [[-22.402, 38.643, 11.335], [-22.264, 38.722, 15.332], [-21.764, 37.856, 15.332], [-21.833, 37.816, 13.333], [-17.833, 30.888, 13.333], [-17.764, 30.928, 15.332], [-17.264, 30.062, 15.332], [-17.402, 29.982, 11.335]] - , [[-29.858, 33.042, 11.668], [-29.74, 33.148, 15.665], [-29.07, 32.405, 15.665], [-29.129, 32.352, 13.667], [-23.776, 26.406, 13.667], [-23.717, 26.46, 15.665], [-23.048, 25.716, 15.665], [-23.166, 25.61, 11.668]] - , [[-35.967, 26.033, 12.002], [-35.874, 26.162, 15.998], [-35.065, 25.574, 15.998], [-35.111, 25.51, 14], [-28.639, 20.808, 14], [-28.592, 20.872, 15.998], [-27.783, 20.284, 15.998], [-27.877, 20.155, 12.002]] - , [[-40.472, 17.932, 12.335], [-40.407, 18.078, 16.332], [-39.494, 17.671, 16.332], [-39.526, 17.598, 14.333], [-32.218, 14.344, 14.333], [-32.185, 14.417, 16.332], [-31.272, 14.01, 16.332], [-31.336, 13.865, 12.335]] - , [[-43.185, 9.098, 12.668], [-43.152, 9.254, 16.665], [-42.174, 9.046, 16.665], [-42.191, 8.968, 14.667], [-34.366, 7.305, 14.667], [-34.349, 7.382, 16.665], [-33.371, 7.174, 16.665], [-33.404, 7.019, 12.668]] - , [[-44, -0.08, 13.002], [-44, 0.08, 16.998], [-43, 0.08, 16.998], [-43, 0, 15], [-35, 0, 15], [-35, 0.08, 16.998], [-34, 0.08, 16.998], [-34, -0.08, 13.002]] - , [[-42.892, -9.198, 13.335], [-42.925, -9.043, 17.332], [-41.946, -8.835, 17.332], [-41.93, -8.912, 15.333], [-34.105, -7.249, 15.333], [-34.121, -7.171, 17.332], [-33.143, -6.963, 17.332], [-33.11, -7.119, 13.335]] - , [[-39.92, -17.861, 13.668], [-39.985, -17.715, 17.665], [-39.071, -17.309, 17.665], [-39.039, -17.381, 15.667], [-31.73, -14.127, 15.667], [-31.763, -14.055, 17.665], [-30.849, -13.648, 17.665], [-30.785, -13.793, 13.668]] - , [[-35.226, -25.692, 14.002], [-35.32, -25.563, 17.998], [-34.511, -24.975, 17.998], [-34.464, -25.04, 16], [-27.992, -20.337, 16], [-28.039, -20.273, 17.998], [-27.23, -19.685, 17.998], [-27.136, -19.814, 14.002]] - , [[-29.026, -32.355, 14.335], [-29.144, -32.249, 18.332], [-28.475, -31.506, 18.332], [-28.416, -31.559, 16.333], [-23.063, -25.614, 16.333], [-23.122, -25.561, 18.332], [-22.453, -24.817, 18.332], [-22.334, -24.924, 14.335]] - , [[-21.598, -37.568, 14.668], [-21.736, -37.488, 18.665], [-21.236, -36.622, 18.665], [-21.167, -36.662, 16.667], [-17.167, -29.734, 16.667], [-17.236, -29.694, 18.665], [-16.736, -28.828, 18.665], [-16.598, -28.907, 14.668]] - , [[-13.274, -41.11, 15.002], [-13.425, -41.061, 18.998], [-13.116, -40.11, 18.998], [-13.041, -40.135, 17], [-10.568, -32.526, 17], [-10.644, -32.502, 18.998], [-10.335, -31.551, 18.998], [-10.184, -31.6, 15.002]] - , [[-4.423, -42.839, 15.335], [-4.581, -42.822, 19.332], [-4.476, -41.828, 19.332], [-4.397, -41.836, 17.333], [-3.561, -33.88, 17.333], [-3.64, -33.872, 19.332], [-3.535, -32.877, 19.332], [-3.377, -32.894, 15.335]] - , [[4.567, -42.69, 15.668], [4.409, -42.706, 19.665], [4.304, -41.712, 19.665], [4.383, -41.704, 17.667], [3.547, -33.747, 17.667], [3.468, -33.756, 19.665], [3.363, -32.761, 19.665], [3.522, -32.745, 15.668]] - , [[13.302, -40.681, 16.002], [13.15, -40.73, 19.998], [12.841, -39.779, 19.998], [12.917, -39.754, 18], [10.445, -32.146, 18], [10.369, -32.17, 19.998], [10.06, -31.219, 19.998], [10.211, -31.17, 16.002]] - , [[21.402, -36.911, 16.335], [21.264, -36.99, 20.332], [20.764, -36.124, 20.332], [20.833, -36.084, 18.333], [16.833, -29.156, 18.333], [16.764, -29.196, 20.332], [16.264, -28.33, 20.332], [16.402, -28.25, 16.335]] - , [[28.519, -31.555, 16.668], [28.401, -31.662, 20.665], [27.732, -30.918, 20.665], [27.791, -30.865, 18.667], [22.438, -24.92, 18.667], [22.379, -24.973, 20.665], [21.71, -24.23, 20.665], [21.828, -24.124, 16.668]] - , [[34.349, -24.858, 17.002], [34.256, -24.986, 20.998], [33.447, -24.399, 20.998], [33.493, -24.334, 19], [27.021, -19.632, 19], [26.974, -19.696, 20.998], [26.165, -19.109, 20.998], [26.259, -18.98, 17.002]] - , [[38.645, -17.119, 17.335], [38.58, -17.264, 21.332], [37.667, -16.857, 21.332], [37.699, -16.785, 19.333], [30.391, -13.531, 19.333], [30.358, -13.603, 21.332], [29.445, -13.197, 21.332], [29.509, -13.051, 17.335]] - , [[41.229, -8.682, 17.668], [41.196, -8.838, 21.665], [40.218, -8.63, 21.665], [40.234, -8.552, 19.667], [32.409, -6.889, 19.667], [32.393, -6.967, 21.665], [31.415, -6.759, 21.665], [31.448, -6.603, 17.668]] - , [[42, 0.08, 18.002], [42, -0.08, 21.998], [41, -0.08, 21.998], [41, 0, 20], [33, 0, 20], [33, -0.08, 21.998], [32, -0.08, 21.998], [32, 0.08, 18.002]] - , [[40.935, 8.782, 18.335], [40.968, 8.627, 22.332], [39.99, 8.419, 22.332], [39.974, 8.497, 20.333], [32.148, 6.833, 20.333], [32.165, 6.756, 22.332], [31.187, 6.548, 22.332], [31.154, 6.703, 18.335]] - , [[38.093, 17.047, 18.668], [38.158, 16.902, 22.665], [37.244, 16.495, 22.665], [37.212, 16.568, 20.667], [29.903, 13.314, 20.667], [29.936, 13.241, 22.665], [29.022, 12.834, 22.665], [28.958, 12.98, 18.668]] - , [[33.608, 24.516, 19.002], [33.702, 24.388, 22.998], [32.893, 23.8, 22.998], [32.846, 23.864, 21], [26.374, 19.162, 21], [26.421, 19.097, 22.998], [25.612, 18.51, 22.998], [25.518, 18.638, 19.002]] - , [[27.688, 30.869, 19.335], [27.806, 30.763, 23.332], [27.137, 30.019, 23.332], [27.077, 30.073, 21.333], [21.724, 24.127, 21.333], [21.784, 24.074, 23.332], [21.114, 23.331, 23.332], [20.996, 23.437, 19.335]] - , [[20.598, 35.835, 19.668], [20.736, 35.756, 23.665], [20.236, 34.89, 23.665], [20.167, 34.93, 21.667], [16.167, 28.001, 21.667], [16.236, 27.962, 23.665], [15.736, 27.096, 23.665], [15.598, 27.175, 19.668]] - , [[12.656, 39.208, 20.002], [12.807, 39.159, 23.998], [12.498, 38.208, 23.998], [12.422, 38.232, 22], [9.95, 30.624, 22], [10.026, 30.599, 23.998], [9.717, 29.648, 23.998], [9.566, 29.698, 20.002]] - , [[4.214, 40.85, 20.335], [4.372, 40.833, 24.332], [4.267, 39.839, 24.332], [4.188, 39.847, 22.333], [3.352, 31.891, 22.333], [3.431, 31.883, 24.332], [3.326, 30.888, 24.332], [3.168, 30.905, 20.335]] - , [[-4.358, 40.701, 20.668], [-4.2, 40.717, 24.665], [-4.095, 39.723, 24.665], [-4.174, 39.715, 22.667], [-3.338, 31.758, 22.667], [-3.259, 31.767, 24.665], [-3.154, 30.772, 24.665], [-3.312, 30.756, 20.668]] - , [[-12.684, 38.779, 21.002], [-12.532, 38.828, 24.998], [-12.223, 37.877, 24.998], [-12.299, 37.852, 23], [-9.827, 30.244, 23], [-9.751, 30.268, 24.998], [-9.442, 29.317, 24.998], [-9.593, 29.268, 21.002]] - , [[-20.402, 35.179, 21.335], [-20.264, 35.258, 25.332], [-19.764, 34.392, 25.332], [-19.833, 34.352, 23.333], [-15.833, 27.424, 23.333], [-15.764, 27.464, 25.332], [-15.264, 26.598, 25.332], [-15.402, 26.518, 21.335]] - , [[-27.181, 30.069, 21.668], [-27.063, 30.175, 25.665], [-26.394, 29.432, 25.665], [-26.453, 29.379, 23.667], [-21.1, 23.434, 23.667], [-21.041, 23.487, 25.665], [-20.372, 22.744, 25.665], [-20.49, 22.637, 21.668]] - , [[-32.731, 23.682, 22.002], [-32.638, 23.811, 25.998], [-31.829, 23.223, 25.998], [-31.875, 23.159, 24], [-25.403, 18.456, 24], [-25.356, 18.521, 25.998], [-24.547, 17.933, 25.998], [-24.641, 17.804, 22.002]] - , [[-36.818, 16.305, 22.335], [-36.753, 16.451, 26.332], [-35.84, 16.044, 26.332], [-35.872, 15.971, 24.333], [-28.564, 12.717, 24.333], [-28.531, 12.79, 26.332], [-27.618, 12.383, 26.332], [-27.682, 12.238, 22.335]] - , [[-39.273, 8.266, 22.668], [-39.24, 8.422, 26.665], [-38.262, 8.214, 26.665], [-38.278, 8.136, 24.667], [-30.453, 6.473, 24.667], [-30.436, 6.551, 26.665], [-29.458, 6.343, 26.665], [-29.491, 6.187, 22.668]] - , [[-40, -0.08, 23.002], [-40, 0.08, 26.998], [-39, 0.08, 26.998], [-39, 0, 25], [-31, 0, 25], [-31, 0.08, 26.998], [-30, 0.08, 26.998], [-30, -0.08, 23.002]] - , [[-38.979, -8.367, 23.335], [-39.012, -8.211, 27.332], [-38.034, -8.003, 27.332], [-38.017, -8.081, 25.333], [-30.192, -6.418, 25.333], [-30.209, -6.34, 27.332], [-29.231, -6.132, 27.332], [-29.197, -6.287, 23.335]] - , [[-36.266, -16.234, 23.668], [-36.331, -16.088, 27.665], [-35.417, -15.682, 27.665], [-35.385, -15.754, 25.667], [-28.076, -12.5, 25.667], [-28.109, -12.428, 27.665], [-27.195, -12.021, 27.665], [-27.13, -12.166, 23.668]] - , [[-31.99, -23.341, 24.002], [-32.084, -23.212, 27.998], [-31.275, -22.624, 27.998], [-31.228, -22.689, 26], [-24.756, -17.986, 26], [-24.803, -17.922, 27.998], [-23.994, -17.334, 27.998], [-23.9, -17.463, 24.002]] - , [[-26.349, -29.383, 24.335], [-26.467, -29.276, 28.332], [-25.798, -28.533, 28.332], [-25.739, -28.586, 26.333], [-20.386, -22.641, 26.333], [-20.445, -22.588, 28.332], [-19.776, -21.845, 28.332], [-19.658, -21.951, 24.335]] - , [[-19.598, -34.103, 24.668], [-19.736, -34.024, 28.665], [-19.236, -33.158, 28.665], [-19.167, -33.198, 26.667], [-15.167, -26.269, 26.667], [-15.236, -26.23, 28.665], [-14.736, -25.364, 28.665], [-14.598, -25.443, 24.668]] - , [[-12.038, -37.306, 25.002], [-12.189, -37.257, 28.998], [-11.88, -36.306, 28.998], [-11.804, -36.33, 27], [-9.332, -28.722, 27], [-9.408, -28.697, 28.998], [-9.099, -27.746, 28.998], [-8.948, -27.795, 25.002]] - , [[-4.004, -38.861, 25.335], [-4.163, -38.844, 29.332], [-4.058, -37.85, 29.332], [-3.979, -37.858, 27.333], [-3.143, -29.902, 27.333], [-3.222, -29.894, 29.332], [-3.117, -28.899, 29.332], [-2.959, -28.916, 25.335]] - , [[4.149, -38.712, 25.668], [3.991, -38.728, 29.665], [3.886, -37.734, 29.665], [3.965, -37.726, 27.667], [3.129, -29.769, 27.667], [3.05, -29.778, 29.665], [2.945, -28.783, 29.665], [3.103, -28.767, 25.668]] - , [[12.065, -36.876, 26.002], [11.914, -36.926, 29.998], [11.605, -35.975, 29.998], [11.681, -35.95, 28], [9.209, -28.341, 28], [9.133, -28.366, 29.998], [8.824, -27.415, 29.998], [8.975, -27.366, 26.002]] - , [[19.402, -33.447, 26.335], [19.264, -33.526, 30.332], [18.764, -32.66, 30.332], [18.833, -32.62, 28.333], [14.833, -25.692, 28.333], [14.764, -25.732, 30.332], [14.264, -24.866, 30.332], [14.402, -24.786, 26.335]] - , [[25.843, -28.583, 26.668], [25.725, -28.689, 30.665], [25.056, -27.946, 30.665], [25.115, -27.893, 28.667], [19.762, -21.948, 28.667], [19.703, -22.001, 30.665], [19.033, -21.258, 30.665], [19.152, -21.151, 26.668]] - , [[31.113, -22.507, 27.002], [31.02, -22.635, 30.998], [30.21, -22.047, 30.998], [30.257, -21.983, 29], [23.785, -17.281, 29], [23.738, -17.345, 30.998], [22.929, -16.757, 30.998], [23.023, -16.629, 27.002]] - , [[34.991, -15.492, 27.335], [34.926, -15.637, 31.332], [34.012, -15.23, 31.332], [34.045, -15.158, 29.333], [26.736, -11.904, 29.333], [26.704, -11.976, 31.332], [25.791, -11.57, 31.332], [25.855, -11.424, 27.335]] - , [[37.317, -7.851, 27.668], [37.283, -8.006, 31.665], [36.305, -7.798, 31.665], [36.322, -7.72, 29.667], [28.497, -6.057, 29.667], [28.48, -6.135, 31.665], [27.502, -5.927, 31.665], [27.535, -5.771, 27.668]] - , [[38, 0.08, 28.002], [38, -0.08, 31.998], [37, -0.08, 31.998], [37, 0, 30], [29, 0, 30], [29, -0.08, 31.998], [28, -0.08, 31.998], [28, 0.08, 28.002]] - , [[37.023, 7.951, 28.335], [37.056, 7.795, 32.332], [36.078, 7.587, 32.332], [36.061, 7.665, 30.333], [28.236, 6.002, 30.333], [28.252, 5.924, 32.332], [27.274, 5.716, 32.332], [27.241, 5.872, 28.335]] - , [[34.439, 15.42, 28.668], [34.503, 15.275, 32.665], [33.59, 14.868, 32.665], [33.558, 14.941, 30.667], [26.249, 11.687, 30.667], [26.282, 11.614, 32.665], [25.368, 11.208, 32.665], [25.303, 11.353, 28.668]] - , [[30.372, 22.165, 29.002], [30.466, 22.036, 32.998], [29.657, 21.449, 32.998], [29.61, 21.513, 31], [23.138, 16.811, 31], [23.185, 16.746, 32.998], [22.376, 16.159, 32.998], [22.282, 16.287, 29.002]] - , [[25.011, 27.896, 29.335], [25.129, 27.79, 33.332], [24.46, 27.047, 33.332], [24.401, 27.1, 31.333], [19.048, 21.155, 31.333], [19.107, 21.102, 33.332], [18.438, 20.359, 33.332], [18.32, 20.465, 29.335]] - , [[18.598, 32.371, 29.668], [18.736, 32.292, 33.665], [18.236, 31.426, 33.665], [18.167, 31.466, 31.667], [14.167, 24.537, 31.667], [14.236, 24.498, 33.665], [13.736, 23.632, 33.665], [13.598, 23.711, 29.668]] - , [[11.42, 35.404, 30.002], [11.571, 35.355, 33.998], [11.262, 34.404, 33.998], [11.186, 34.428, 32], [8.714, 26.82, 32], [8.79, 26.795, 33.998], [8.481, 25.844, 33.998], [8.33, 25.893, 30.002]] - , [[3.795, 36.872, 30.335], [3.954, 36.855, 34.332], [3.849, 35.861, 34.332], [3.77, 35.869, 32.333], [2.934, 27.913, 32.333], [3.013, 27.905, 34.332], [2.908, 26.91, 34.332], [2.75, 26.927, 30.335]] - , [[-3.94, 36.723, 30.668], [-3.782, 36.739, 34.665], [-3.677, 35.745, 34.665], [-3.756, 35.736, 32.667], [-2.92, 27.78, 32.667], [-2.841, 27.789, 34.665], [-2.736, 26.794, 34.665], [-2.894, 26.777, 30.668]] - , [[-11.447, 34.974, 31.002], [-11.296, 35.023, 34.998], [-10.987, 34.072, 34.998], [-11.063, 34.048, 33], [-8.591, 26.439, 33], [-8.515, 26.464, 34.998], [-8.206, 25.513, 34.998], [-8.357, 25.464, 31.002]] - , [[-18.402, 31.715, 31.335], [-18.264, 31.794, 35.332], [-17.764, 30.928, 35.332], [-17.833, 30.888, 33.333], [-13.833, 23.96, 33.333], [-13.764, 24, 35.332], [-13.264, 23.134, 35.332], [-13.402, 23.054, 31.335]] - , [[-24.505, 27.096, 31.668], [-24.386, 27.203, 35.665], [-23.717, 26.46, 35.665], [-23.776, 26.406, 33.667], [-18.423, 20.461, 33.667], [-18.364, 20.514, 35.665], [-17.695, 19.771, 35.665], [-17.813, 19.665, 31.668]] - , [[-29.495, 21.331, 32.002], [-29.401, 21.46, 35.998], [-28.592, 20.872, 35.998], [-28.639, 20.808, 34], [-22.167, 16.105, 34], [-22.12, 16.17, 35.998], [-21.311, 15.582, 35.998], [-21.405, 15.453, 32.002]] - , [[-33.164, 14.678, 32.335], [-33.099, 14.824, 36.332], [-32.185, 14.417, 36.332], [-32.218, 14.344, 34.333], [-24.909, 11.09, 34.333], [-24.877, 11.163, 36.332], [-23.963, 10.756, 36.332], [-24.028, 10.611, 32.335]] - , [[-35.36, 7.435, 32.668], [-35.327, 7.59, 36.665], [-34.349, 7.382, 36.665], [-34.366, 7.305, 34.667], [-26.54, 5.641, 34.667], [-26.524, 5.719, 36.665], [-25.546, 5.511, 36.665], [-25.579, 5.356, 32.668]] - , [[-36, -0.08, 33.002], [-36, 0.08, 36.998], [-35, 0.08, 36.998], [-35, 0, 35], [-27, 0, 35], [-27, 0.08, 36.998], [-26, 0.08, 36.998], [-26, -0.08, 33.002]] - , [[-35.066, -7.535, 33.335], [-35.099, -7.379, 37.332], [-34.121, -7.171, 37.332], [-34.105, -7.249, 35.333], [-26.28, -5.586, 35.333], [-26.296, -5.508, 37.332], [-25.318, -5.3, 37.332], [-25.285, -5.456, 33.335]] - , [[-32.612, -14.607, 33.668], [-32.676, -14.461, 37.665], [-31.763, -14.055, 37.665], [-31.73, -14.127, 35.667], [-24.422, -10.873, 35.667], [-24.454, -10.801, 37.665], [-23.541, -10.394, 37.665], [-23.476, -10.539, 33.668]] - , [[-28.754, -20.989, 34.002], [-28.848, -20.861, 37.998], [-28.039, -20.273, 37.998], [-27.992, -20.337, 36], [-21.52, -15.635, 36], [-21.567, -15.571, 37.998], [-20.758, -14.983, 37.998], [-20.664, -15.112, 34.002]] - , [[-23.673, -26.41, 34.335], [-23.791, -26.304, 38.332], [-23.122, -25.561, 38.332], [-23.063, -25.614, 36.333], [-17.71, -19.669, 36.333], [-17.769, -19.615, 38.332], [-17.1, -18.872, 38.332], [-16.981, -18.979, 34.335]] - , [[-17.598, -30.639, 34.668], [-17.736, -30.56, 38.665], [-17.236, -29.694, 38.665], [-17.167, -29.734, 36.667], [-13.167, -22.805, 36.667], [-13.236, -22.766, 38.665], [-12.736, -21.9, 38.665], [-12.598, -21.979, 34.668]] - , [[-10.802, -33.502, 35.002], [-10.953, -33.453, 38.998], [-10.644, -32.502, 38.998], [-10.568, -32.526, 37], [-8.096, -24.918, 37], [-8.172, -24.893, 38.998], [-7.863, -23.942, 38.998], [-7.712, -23.991, 35.002]] - , [[-3.586, -34.883, 35.335], [-3.745, -34.866, 39.332], [-3.64, -33.872, 39.332], [-3.561, -33.88, 37.333], [-2.725, -25.924, 37.333], [-2.804, -25.916, 39.332], [-2.699, -24.921, 39.332], [-2.541, -24.938, 35.335]] - , [[3.731, -34.734, 35.668], [3.572, -34.75, 39.665], [3.468, -33.756, 39.665], [3.547, -33.747, 37.667], [2.711, -25.791, 37.667], [2.632, -25.8, 39.665], [2.527, -24.805, 39.665], [2.685, -24.788, 35.668]] - , [[10.829, -33.072, 36.002], [10.678, -33.121, 39.998], [10.369, -32.17, 39.998], [10.445, -32.146, 38], [7.973, -24.537, 38], [7.897, -24.562, 39.998], [7.588, -23.611, 39.998], [7.739, -23.562, 36.002]] - , [[17.402, -29.982, 36.335], [17.264, -30.062, 40.332], [16.764, -29.196, 40.332], [16.833, -29.156, 38.333], [12.833, -22.228, 38.333], [12.764, -22.268, 40.332], [12.264, -21.402, 40.332], [12.402, -21.322, 36.335]] - , [[23.166, -25.61, 36.668], [23.048, -25.716, 40.665], [22.379, -24.973, 40.665], [22.438, -24.92, 38.667], [17.085, -18.975, 38.667], [17.026, -19.028, 40.665], [16.357, -18.285, 40.665], [16.475, -18.179, 36.668]] - , [[27.877, -20.155, 37.002], [27.783, -20.284, 40.998], [26.974, -19.696, 40.998], [27.021, -19.632, 39], [20.549, -14.93, 39], [20.502, -14.994, 40.998], [19.693, -14.406, 40.998], [19.787, -14.278, 37.002]] - , [[31.336, -13.865, 37.335], [31.272, -14.01, 41.332], [30.358, -13.603, 41.332], [30.391, -13.531, 39.333], [23.082, -10.277, 39.333], [23.05, -10.35, 41.332], [22.136, -9.943, 41.332], [22.201, -9.798, 37.335]] - , [[33.404, -7.019, 37.668], [33.371, -7.174, 41.665], [32.393, -6.967, 41.665], [32.409, -6.889, 39.667], [24.584, -5.226, 39.667], [24.568, -5.303, 41.665], [23.589, -5.095, 41.665], [23.622, -4.94, 37.668]] - , [[34, 0.08, 38.002], [34, -0.08, 41.998], [33, -0.08, 41.998], [33, 0, 40], [25, 0, 40], [25, -0.08, 41.998], [24, -0.08, 41.998], [24, 0.08, 38.002]] - , [[33.11, 7.119, 38.335], [33.143, 6.963, 42.332], [32.165, 6.756, 42.332], [32.148, 6.833, 40.333], [24.323, 5.17, 40.333], [24.34, 5.092, 42.332], [23.362, 4.884, 42.332], [23.329, 5.04, 38.335]] - , [[30.785, 13.793, 38.668], [30.849, 13.648, 42.665], [29.936, 13.241, 42.665], [29.903, 13.314, 40.667], [22.595, 10.06, 40.667], [22.627, 9.987, 42.665], [21.714, 9.581, 42.665], [21.649, 9.726, 38.668]] - , [[27.136, 19.814, 39.002], [27.23, 19.685, 42.998], [26.421, 19.097, 42.998], [26.374, 19.162, 41], [19.902, 14.46, 41], [19.949, 14.395, 42.998], [19.14, 13.807, 42.998], [19.046, 13.936, 39.002]] - , [[22.334, 24.924, 39.335], [22.453, 24.817, 43.332], [21.784, 24.074, 43.332], [21.724, 24.127, 41.333], [16.371, 18.182, 41.333], [16.43, 18.129, 43.332], [15.761, 17.386, 43.332], [15.643, 17.492, 39.335]] - , [[16.598, 28.907, 39.668], [16.736, 28.828, 43.665], [16.236, 27.962, 43.665], [16.167, 28.001, 41.667], [12.167, 21.073, 41.667], [12.236, 21.034, 43.665], [11.736, 20.168, 43.665], [11.598, 20.247, 39.668]] - , [[10.184, 31.6, 40.002], [10.335, 31.551, 43.998], [10.026, 30.599, 43.998], [9.95, 30.624, 42], [7.478, 23.016, 42], [7.554, 22.991, 43.998], [7.245, 22.04, 43.998], [7.094, 22.089, 40.002]] - , [[3.377, 32.894, 40.335], [3.535, 32.877, 44.332], [3.431, 31.883, 44.332], [3.352, 31.891, 42.333], [2.516, 23.935, 42.333], [2.595, 23.927, 44.332], [2.49, 22.932, 44.332], [2.332, 22.949, 40.335]] - , [[-3.522, 32.745, 40.668], [-3.363, 32.761, 44.665], [-3.259, 31.767, 44.665], [-3.338, 31.758, 42.667], [-2.502, 23.802, 42.667], [-2.423, 23.811, 44.665], [-2.318, 22.816, 44.665], [-2.476, 22.799, 40.668]] - , [[-10.211, 31.17, 41.002], [-10.06, 31.219, 44.998], [-9.751, 30.268, 44.998], [-9.827, 30.244, 43], [-7.355, 22.635, 43], [-7.279, 22.66, 44.998], [-6.97, 21.709, 44.998], [-7.121, 21.66, 41.002]] - , [[-16.402, 28.25, 41.335], [-16.264, 28.33, 45.332], [-15.764, 27.464, 45.332], [-15.833, 27.424, 43.333], [-11.833, 20.496, 43.333], [-11.764, 20.536, 45.332], [-11.264, 19.67, 45.332], [-11.402, 19.59, 41.335]] - , [[-21.828, 24.124, 41.668], [-21.71, 24.23, 45.665], [-21.041, 23.487, 45.665], [-21.1, 23.434, 43.667], [-15.747, 17.489, 43.667], [-15.688, 17.542, 45.665], [-15.019, 16.799, 45.665], [-15.137, 16.692, 41.668]] - , [[-26.259, 18.98, 42.002], [-26.165, 19.109, 45.998], [-25.356, 18.521, 45.998], [-25.403, 18.456, 44], [-18.931, 13.754, 44], [-18.884, 13.819, 45.998], [-18.075, 13.231, 45.998], [-18.169, 13.102, 42.002]] - , [[-29.509, 13.051, 42.335], [-29.445, 13.197, 46.332], [-28.531, 12.79, 46.332], [-28.564, 12.717, 44.333], [-21.255, 9.463, 44.333], [-21.223, 9.536, 46.332], [-20.309, 9.129, 46.332], [-20.374, 8.984, 42.335]] - , [[-31.448, 6.603, 42.668], [-31.415, 6.759, 46.665], [-30.436, 6.551, 46.665], [-30.453, 6.473, 44.667], [-22.628, 4.81, 44.667], [-22.611, 4.887, 46.665], [-21.633, 4.68, 46.665], [-21.666, 4.524, 42.668]] - , [[-32, -0.08, 43.002], [-32, 0.08, 46.998], [-31, 0.08, 46.998], [-31, 0, 45], [-23, 0, 45], [-23, 0.08, 46.998], [-22, 0.08, 46.998], [-22, -0.08, 43.002]] - , [[-31.154, -6.703, 43.335], [-31.187, -6.548, 47.332], [-30.209, -6.34, 47.332], [-30.192, -6.418, 45.333], [-22.367, -4.754, 45.333], [-22.384, -4.676, 47.332], [-21.405, -4.469, 47.332], [-21.372, -4.624, 43.335]] - , [[-28.958, -12.98, 43.668], [-29.022, -12.834, 47.665], [-28.109, -12.428, 47.665], [-28.076, -12.5, 45.667], [-20.768, -9.246, 45.667], [-20.8, -9.174, 47.665], [-19.887, -8.767, 47.665], [-19.822, -8.912, 43.668]] - , [[-25.518, -18.638, 44.002], [-25.612, -18.51, 47.998], [-24.803, -17.922, 47.998], [-24.756, -17.986, 46], [-18.284, -13.284, 46], [-18.331, -13.22, 47.998], [-17.522, -12.632, 47.998], [-17.428, -12.76, 44.002]] - , [[-20.996, -23.437, 44.335], [-21.114, -23.331, 48.332], [-20.445, -22.588, 48.332], [-20.386, -22.641, 46.333], [-15.033, -16.696, 46.333], [-15.092, -16.643, 48.332], [-14.423, -15.9, 48.332], [-14.305, -16.006, 44.335]] - , [[-15.598, -27.175, 44.668], [-15.736, -27.096, 48.665], [-15.236, -26.23, 48.665], [-15.167, -26.269, 46.667], [-11.167, -19.341, 46.667], [-11.236, -19.301, 48.665], [-10.736, -18.435, 48.665], [-10.598, -18.515, 44.668]] - , [[-9.566, -29.698, 45.002], [-9.717, -29.648, 48.998], [-9.408, -28.697, 48.998], [-9.332, -28.722, 47], [-6.86, -21.113, 47], [-6.936, -21.089, 48.998], [-6.627, -20.138, 48.998], [-6.476, -20.187, 45.002]] - , [[-3.168, -30.905, 45.335], [-3.326, -30.888, 49.332], [-3.222, -29.894, 49.332], [-3.143, -29.902, 47.333], [-2.307, -21.946, 47.333], [-2.386, -21.937, 49.332], [-2.281, -20.943, 49.332], [-2.123, -20.96, 45.335]] - , [[3.312, -30.756, 45.668], [3.154, -30.772, 49.665], [3.05, -29.778, 49.665], [3.129, -29.769, 47.667], [2.293, -21.813, 47.667], [2.214, -21.821, 49.665], [2.109, -20.827, 49.665], [2.267, -20.81, 45.668]] - , [[9.593, -29.268, 46.002], [9.442, -29.317, 49.998], [9.133, -28.366, 49.998], [9.209, -28.341, 48], [6.737, -20.733, 48], [6.661, -20.758, 49.998], [6.352, -19.807, 49.998], [6.503, -19.757, 46.002]] - , [[15.402, -26.518, 46.335], [15.264, -26.598, 50.332], [14.764, -25.732, 50.332], [14.833, -25.692, 48.333], [10.833, -18.764, 48.333], [10.764, -18.804, 50.332], [10.264, -17.938, 50.332], [10.402, -17.858, 46.335]] - , [[20.49, -22.637, 46.668], [20.372, -22.744, 50.665], [19.703, -22.001, 50.665], [19.762, -21.948, 48.667], [14.409, -16.002, 48.667], [14.35, -16.056, 50.665], [13.68, -15.312, 50.665], [13.799, -15.206, 46.668]] - , [[24.641, -17.804, 47.002], [24.547, -17.933, 50.998], [23.738, -17.345, 50.998], [23.785, -17.281, 49], [17.313, -12.579, 49], [17.266, -12.643, 50.998], [16.457, -12.055, 50.998], [16.551, -11.926, 47.002]] - , [[27.682, -12.238, 47.335], [27.618, -12.383, 51.332], [26.704, -11.976, 51.332], [26.736, -11.904, 49.333], [19.428, -8.65, 49.333], [19.396, -8.723, 51.332], [18.482, -8.316, 51.332], [18.547, -8.171, 47.335]] - , [[29.491, -6.187, 47.668], [29.458, -6.343, 51.665], [28.48, -6.135, 51.665], [28.497, -6.057, 49.667], [20.672, -4.394, 49.667], [20.655, -4.472, 51.665], [19.677, -4.264, 51.665], [19.71, -4.108, 47.668]] - , [[30, 0.08, 48.002], [30, -0.08, 51.998], [29, -0.08, 51.998], [29, 0, 50], [21, 0, 50], [21, -0.08, 51.998], [20, -0.08, 51.998], [20, 0.08, 48.002]] - ]; + expected = [[[50, 0.0795146, -1.99842], [50, -0.0795146, 1.99842], [49, -0.0795146, 1.99842], [49, 0, 0], [41, 0, 0], [41, -0.0795146, 1.99842], [40, -0.0795146, 1.99842], [40, 0.0795146, -1.99842]], [[48.7604, 10.4456, -1.66509], [48.7935, 10.2901, 2.33175], [47.8153, 10.0822, 2.33175], [47.7988, 10.16, 0.333333], [39.9736, 8.49666, 0.333333], [39.9902, 8.41888, 2.33175], [39.012, 8.21097, 2.33175], [38.979, 8.36652, -1.66509]], [[45.4013, 20.301, -1.33175], [45.466, 20.1557, 2.66509], [44.5525, 19.749, 2.66509], [44.5201, 19.8216, 0.666667], [37.2118, 16.5677, 0.666667], [37.2441, 16.4951, 2.66509], [36.3305, 16.0884, 2.66509], [36.2659, 16.2336, -1.33175]], [[40.0805, 29.2185, -0.998419], [40.174, 29.0898, 2.99842], [39.365, 28.502, 2.99842], [39.3182, 28.5664, 1], [32.8461, 23.8641, 1], [32.8928, 23.7998, 2.99842], [32.0838, 23.212, 2.99842], [31.9903, 23.3406, -0.998419]], [[33.0406, 36.8141, -0.665085], [33.1588, 36.7077, 3.33175], [32.4896, 35.9645, 3.33175], [32.4305, 36.0178, 1.33333], [27.0775, 30.0726, 1.33333], [27.1366, 30.0194, 3.33175], [26.4674, 29.2762, 3.33175], [26.3493, 29.3827, -0.665085]], [[24.5978, 42.7637, -0.331752], [24.7355, 42.6842, 3.66509], [24.2355, 41.8181, 3.66509], [24.1667, 41.8579, 1.66667], [20.1667, 34.9297, 1.66667], [20.2355, 34.8899, 3.66509], [19.7355, 34.0239, 3.66509], [19.5978, 34.1034, -0.331752]], [[15.128, 46.8166, 0.00158127], [15.2793, 46.7674, 3.99842], [14.9702, 45.8164, 3.99842], [14.8946, 45.8409, 2], [12.4225, 38.2325, 2], [12.4981, 38.2079, 3.99842], [12.1891, 37.2568, 3.99842], [12.0378, 37.306, 0.00158127]], [[5.04978, 48.8062, 0.334915], [5.20794, 48.7896, 4.33175], [5.10341, 47.795, 4.33175], [5.02433, 47.8034, 2.33333], [4.18811, 39.8472, 2.33333], [4.26719, 39.8389, 4.33175], [4.16266, 38.8443, 4.33175], [4.0045, 38.861, 0.334915]], [[-5.19401, 48.657, 0.668248], [-5.03585, 48.6736, 4.66509], [-4.93132, 47.6791, 4.66509], [-5.0104, 47.6707, 2.66667], [-4.17417, 39.7146, 2.66667], [-4.09509, 39.7229, 4.66509], [-3.99056, 38.7284, 4.66509], [-4.14872, 38.7117, 0.668248]], [[-15.1557, 46.387, 1.00158], [-15.0044, 46.4361, 4.99842], [-14.6954, 45.4851, 4.99842], [-14.771, 45.4605, 3], [-12.2989, 37.852, 3], [-12.2233, 37.8766, 4.99842], [-11.9142, 36.9256, 4.99842], [-12.0655, 36.8764, 1.00158]], [[-24.4022, 42.1068, 1.33491], [-24.2645, 42.1863, 5.33175], [-23.7645, 41.3203, 5.33175], [-23.8333, 41.2805, 3.33333], [-19.8333, 34.3523, 3.33333], [-19.7645, 34.3921, 5.33175], [-19.2645, 33.5261, 5.33175], [-19.4022, 33.4466, 1.33491]], [[-32.5342, 36.0141, 1.66825], [-32.416, 36.1205, 5.66509], [-31.7469, 35.3774, 5.66509], [-31.806, 35.3242, 3.66667], [-26.453, 29.379, 3.66667], [-26.3939, 29.4322, 5.66509], [-25.7247, 28.6891, 5.66509], [-25.8429, 28.5826, 1.66825]], [[-39.2032, 28.3845, 2.00158], [-39.1097, 28.5131, 5.99842], [-38.3007, 27.9253, 5.99842], [-38.3474, 27.861, 4], [-31.8753, 23.1587, 4], [-31.8285, 23.2231, 5.99842], [-31.0195, 22.6353, 5.99842], [-31.113, 22.5066, 2.00158]], [[-44.1261, 19.5592, 2.33491], [-44.0615, 19.7045, 6.33175], [-43.1479, 19.2977, 6.33175], [-43.1802, 19.2251, 4.33333], [-35.8719, 15.9712, 4.33333], [-35.8395, 16.0438, 6.33175], [-34.926, 15.6371, 6.33175], [-34.9907, 15.4918, 2.33491]], [[-47.098, 9.92971, 2.66825], [-47.065, 10.0853, 6.66509], [-46.0868, 9.87735, 6.66509], [-46.1034, 9.79957, 4.66667], [-38.2782, 8.13628, 4.66667], [-38.2616, 8.21405, 6.66509], [-37.2835, 8.00614, 6.66509], [-37.3166, 7.85059, 2.66825]], [[-48, -0.0795146, 3.00158], [-48, 0.0795146, 6.99842], [-47, 0.0795146, 6.99842], [-47, 0, 5], [-39, 0, 5], [-39, 0.0795146, 6.99842], [-38, 0.0795146, 6.99842], [-38, -0.0795146, 3.00158]], [[-46.8041, -10.0298, 3.33491], [-46.8372, -9.87426, 7.33175], [-45.859, -9.66635, 7.33175], [-45.8425, -9.74413, 5.33333], [-38.0173, -8.08083, 5.33333], [-38.0339, -8.00306, 7.33175], [-37.0557, -7.79515, 7.33175], [-37.0227, -7.9507, 3.33491]], [[-43.5742, -19.4875, 3.66825], [-43.6389, -19.3423, 7.66509], [-42.7254, -18.9355, 7.66509], [-42.693, -19.0082, 5.66667], [-35.3847, -15.7543, 5.66667], [-35.417, -15.6816, 7.66509], [-34.5035, -15.2749, 7.66509], [-34.4388, -15.4202, 3.66825]], [[-38.4625, -28.0429, 4.00158], [-38.5559, -27.9142, 7.99842], [-37.7469, -27.3265, 7.99842], [-37.7002, -27.3908, 6], [-31.2281, -22.6885, 6], [-31.2748, -22.6242, 7.99842], [-30.4658, -22.0364, 7.99842], [-30.3723, -22.1651, 4.00158]], [[-31.7023, -35.3278, 4.33491], [-31.8205, -35.2214, 8.33175], [-31.1514, -34.4783, 8.33175], [-31.0923, -34.5315, 6.33333], [-25.7392, -28.5863, 6.33333], [-25.7983, -28.5331, 8.33175], [-25.1292, -27.79, 8.33175], [-25.011, -27.8964, 4.33491]], [[-23.5978, -41.0316, 4.66825], [-23.7355, -40.9521, 8.66509], [-23.2355, -40.0861, 8.66509], [-23.1667, -40.1258, 6.66667], [-19.1667, -33.1976, 6.66667], [-19.2355, -33.1579, 8.66509], [-18.7355, -32.2919, 8.66509], [-18.5978, -32.3714, 4.66825]], [[-14.51, -44.9144, 5.00158], [-14.6612, -44.8653, 8.99842], [-14.3522, -43.9142, 8.99842], [-14.2766, -43.9388, 7], [-11.8044, -36.3304, 7], [-11.8801, -36.3058, 8.99842], [-11.5711, -35.3547, 8.99842], [-11.4198, -35.4039, 5.00158]], [[-4.84073, -46.8171, 5.33491], [-4.99889, -46.8005, 9.33175], [-4.89436, -45.806, 9.33175], [-4.81528, -45.8143, 7.33333], [-3.97905, -37.8581, 7.33333], [-4.05813, -37.8498, 9.33175], [-3.9536, -36.8553, 9.33175], [-3.79544, -36.8719, 5.33491]], [[4.98495, -46.6679, 5.66825], [4.82679, -46.6845, 9.66509], [4.72226, -45.69, 9.66509], [4.80134, -45.6817, 7.66667], [3.96511, -37.7255, 7.66667], [3.88603, -37.7338, 9.66509], [3.78151, -36.7393, 9.66509], [3.93966, -36.7227, 5.66825]], [[14.5376, -44.4849, 6.00158], [14.3864, -44.534, 9.99842], [14.0774, -43.583, 9.99842], [14.153, -43.5584, 8], [11.6808, -35.9499, 8], [11.6052, -35.9745, 9.99842], [11.2962, -35.0235, 9.99842], [11.4474, -34.9743, 6.00158]], [[23.4022, -40.3748, 6.33491], [23.2645, -40.4543, 10.3318], [22.7645, -39.5883, 10.3318], [22.8333, -39.5485, 8.33333], [18.8333, -32.6203, 8.33333], [18.7645, -32.66, 10.3318], [18.2645, -31.794, 10.3318], [18.4022, -31.7145, 6.33491]], [[31.196, -34.5278, 6.66825], [31.0778, -34.6342, 10.6651], [30.4087, -33.8911, 10.6651], [30.4677, -33.8379, 8.66667], [25.1147, -27.8927, 8.66667], [25.0556, -27.9459, 10.6651], [24.3865, -27.2028, 10.6651], [24.5047, -27.0964, 6.66825]], [[37.5851, -27.2089, 7.00158], [37.4917, -27.3376, 10.9984], [36.6826, -26.7498, 10.9984], [36.7294, -26.6855, 9], [30.2572, -21.9832, 9], [30.2105, -22.0475, 10.9984], [29.4015, -21.4597, 10.9984], [29.495, -21.3311, 7.00158]], [[42.299, -18.7457, 7.33491], [42.2344, -18.891, 11.3318], [41.3208, -18.4843, 11.3318], [41.3532, -18.4116, 9.33333], [34.0448, -15.1577, 9.33333], [34.0125, -15.2304, 11.3318], [33.0989, -14.8236, 11.3318], [33.1636, -14.6783, 7.33491]], [[45.1417, -9.51388, 7.66825], [45.1087, -9.66944, 11.6651], [44.1305, -9.46152, 11.6651], [44.1471, -9.38375, 9.66667], [36.3219, -7.72045, 9.66667], [36.3053, -7.79823, 11.6651], [35.3272, -7.59032, 11.6651], [35.3603, -7.43477, 7.66825]], [[46, 0.0795146, 8.00158], [46, -0.0795146, 11.9984], [45, -0.0795146, 11.9984], [45, 0, 10], [37, 0, 10], [37, -0.0795146, 11.9984], [36, -0.0795146, 11.9984], [36, 0.0795146, 8.00158]], [[44.8478, 9.61399, 8.33491], [44.8809, 9.45844, 12.3318], [43.9028, 9.25053, 12.3318], [43.8862, 9.3283, 10.3333], [36.061, 7.66501, 10.3333], [36.0776, 7.58723, 12.3318], [35.0994, 7.37932, 12.3318], [35.0664, 7.53488, 8.33491]], [[41.7471, 18.6741, 8.66825], [41.8118, 18.5288, 12.6651], [40.8983, 18.122, 12.6651], [40.8659, 18.1947, 10.6667], [33.5576, 14.9408, 10.6667], [33.5899, 14.8682, 12.6651], [32.6764, 14.4614, 12.6651], [32.6117, 14.6067, 8.66825]], [[36.8444, 26.8673, 9.00158], [36.9379, 26.7387, 12.9984], [36.1289, 26.1509, 12.9984], [36.0822, 26.2152, 11], [29.61, 21.5129, 11], [29.6568, 21.4486, 12.9984], [28.8477, 20.8608, 12.9984], [28.7543, 20.9895, 9.00158]], [[30.364, 33.8415, 9.33491], [30.4822, 33.7351, 13.3318], [29.8131, 32.992, 13.3318], [29.754, 33.0452, 11.3333], [24.401, 27.1, 11.3333], [24.4601, 27.0468, 13.3318], [23.7909, 26.3037, 13.3318], [23.6727, 26.4101, 9.33491]], [[22.5978, 39.2996, 9.66825], [22.7355, 39.2201, 13.6651], [22.2355, 38.354, 13.6651], [22.1667, 38.3938, 11.6667], [18.1667, 31.4656, 11.6667], [18.2355, 31.4258, 13.6651], [17.7355, 30.5598, 13.6651], [17.5978, 30.6393, 9.66825]], [[13.8919, 43.0123, 10.0016], [14.0432, 42.9632, 13.9984], [13.7342, 42.0121, 13.9984], [13.6586, 42.0367, 12], [11.1864, 34.4282, 12], [11.262, 34.4037, 13.9984], [10.953, 33.4526, 13.9984], [10.8018, 33.5018, 10.0016]], [[4.63167, 44.8281, 10.3349], [4.78983, 44.8115, 14.3318], [4.6853, 43.817, 14.3318], [4.60622, 43.8253, 12.3333], [3.76999, 35.8691, 12.3333], [3.84907, 35.8608, 14.3318], [3.74454, 34.8663, 14.3318], [3.58639, 34.8829, 10.3349]], [[-4.77589, 44.6789, 10.6682], [-4.61773, 44.6955, 14.6651], [-4.5132, 43.701, 14.6651], [-4.59228, 43.6927, 12.6667], [-3.75606, 35.7365, 12.6667], [-3.67698, 35.7448, 14.6651], [-3.57245, 34.7503, 14.6651], [-3.73061, 34.7337, 10.6682]], [[-13.9196, 42.5828, 11.0016], [-13.7683, 42.6319, 14.9984], [-13.4593, 41.6808, 14.9984], [-13.5349, 41.6563, 13], [-11.0628, 34.0478, 13], [-10.9872, 34.0724, 14.9984], [-10.6782, 33.1213, 14.9984], [-10.8294, 33.0722, 11.0016]], [[-22.4022, 38.6427, 11.3349], [-22.2645, 38.7222, 15.3318], [-21.7645, 37.8562, 15.3318], [-21.8333, 37.8164, 13.3333], [-17.8333, 30.8882, 13.3333], [-17.7645, 30.928, 15.3318], [-17.2645, 30.062, 15.3318], [-17.4022, 29.9825, 11.3349]], [[-29.8577, 33.0415, 11.6682], [-29.7395, 33.1479, 15.6651], [-29.0704, 32.4048, 15.6651], [-29.1295, 32.3516, 13.6667], [-23.7764, 26.4064, 13.6667], [-23.7174, 26.4596, 15.6651], [-23.0482, 25.7165, 15.6651], [-23.1664, 25.6101, 11.6682]], [[-35.9671, 26.0333, 12.0016], [-35.8736, 26.162, 15.9984], [-35.0646, 25.5742, 15.9984], [-35.1113, 25.5099, 14], [-28.6392, 20.8076, 14], [-28.5925, 20.8719, 15.9984], [-27.7834, 20.2841, 15.9984], [-27.8769, 20.1555, 12.0016]], [[-40.472, 17.9322, 12.3349], [-40.4073, 18.0775, 16.3318], [-39.4937, 17.6708, 16.3318], [-39.5261, 17.5981, 14.3333], [-32.2177, 14.3442, 14.3333], [-32.1854, 14.4169, 16.3318], [-31.2718, 14.0101, 16.3318], [-31.3365, 13.8649, 12.3349]], [[-43.1854, 9.09806, 12.6682], [-43.1524, 9.25361, 16.6651], [-42.1742, 9.0457, 16.6651], [-42.1908, 8.96792, 14.6667], [-34.3656, 7.30463, 14.6667], [-34.3491, 7.38241, 16.6651], [-33.3709, 7.1745, 16.6651], [-33.404, 7.01894, 12.6682]], [[-44, -0.0795146, 13.0016], [-44, 0.0795146, 16.9984], [-43, 0.0795146, 16.9984], [-43, 0, 15], [-35, 0, 15], [-35, 0.0795146, 16.9984], [-34, 0.0795146, 16.9984], [-34, -0.0795146, 13.0016]], [[-42.8915, -9.19817, 13.3349], [-42.9246, -9.04262, 17.3318], [-41.9465, -8.8347, 17.3318], [-41.9299, -8.91248, 15.3333], [-34.1047, -7.24919, 15.3333], [-34.1213, -7.17141, 17.3318], [-33.1431, -6.9635, 17.3318], [-33.1101, -7.11905, 13.3349]], [[-39.92, -17.8606, 13.6682], [-39.9847, -17.7153, 17.6651], [-39.0712, -17.3086, 17.6651], [-39.0388, -17.3812, 15.6667], [-31.7305, -14.1273, 15.6667], [-31.7628, -14.0547, 17.6651], [-30.8493, -13.6479, 17.6651], [-30.7846, -13.7932, 13.6682]], [[-35.2264, -25.6918, 14.0016], [-35.3199, -25.5631, 17.9984], [-34.5109, -24.9753, 17.9984], [-34.4641, -25.0397, 16], [-27.992, -20.3374, 16], [-28.0387, -20.273, 17.9984], [-27.2297, -19.6853, 17.9984], [-27.1362, -19.8139, 14.0016]], [[-29.0258, -32.3552, 14.3349], [-29.144, -32.2488, 18.3318], [-28.4748, -31.5057, 18.3318], [-28.4157, -31.5589, 16.3333], [-23.0627, -25.6137, 16.3333], [-23.1218, -25.5605, 18.3318], [-22.4527, -24.8174, 18.3318], [-22.3345, -24.9238, 14.3349]], [[-21.5978, -37.5675, 14.6682], [-21.7355, -37.488, 18.6651], [-21.2355, -36.622, 18.6651], [-21.1667, -36.6617, 16.6667], [-17.1667, -29.7335, 16.6667], [-17.2355, -29.6938, 18.6651], [-16.7355, -28.8278, 18.6651], [-16.5978, -28.9073, 14.6682]], [[-13.2739, -41.1102, 15.0016], [-13.4252, -41.0611, 18.9984], [-13.1161, -40.11, 18.9984], [-13.0405, -40.1346, 17], [-10.5684, -32.5261, 17], [-10.644, -32.5016, 18.9984], [-10.335, -31.5505, 18.9984], [-10.1837, -31.5996, 15.0016]], [[-4.42261, -42.8391, 15.3349], [-4.58077, -42.8224, 19.3318], [-4.47624, -41.8279, 19.3318], [-4.39716, -41.8362, 17.3333], [-3.56094, -33.88, 17.3333], [-3.64002, -33.8717, 19.3318], [-3.53549, -32.8772, 19.3318], [-3.37733, -32.8938, 15.3349]], [[4.56683, -42.6898, 15.6682], [4.40868, -42.7065, 19.6651], [4.30415, -41.7119, 19.6651], [4.38323, -41.7036, 17.6667], [3.547, -33.7474, 17.6667], [3.46792, -33.7558, 19.6651], [3.36339, -32.7612, 19.6651], [3.52155, -32.7446, 15.6682]], [[13.3016, -40.6806, 16.0016], [13.1503, -40.7298, 19.9984], [12.8413, -39.7787, 19.9984], [12.9169, -39.7542, 18], [10.4448, -32.1457, 18], [10.3692, -32.1703, 19.9984], [10.0601, -31.2192, 19.9984], [10.2114, -31.1701, 16.0016]], [[21.4022, -36.9107, 16.3349], [21.2645, -36.9902, 20.3318], [20.7645, -36.1241, 20.3318], [20.8333, -36.0844, 18.3333], [16.8333, -29.1562, 18.3333], [16.7645, -29.1959, 20.3318], [16.2645, -28.3299, 20.3318], [16.4022, -28.2504, 16.3349]], [[28.5194, -31.5552, 16.6682], [28.4013, -31.6616, 20.6651], [27.7321, -30.9185, 20.6651], [27.7912, -30.8653, 18.6667], [22.4382, -24.9201, 18.6667], [22.3791, -24.9733, 20.6651], [21.71, -24.2302, 20.6651], [21.8281, -24.1238, 16.6682]], [[34.3491, -24.8578, 17.0016], [34.2556, -24.9864, 20.9984], [33.4466, -24.3986, 20.9984], [33.4933, -24.3343, 19], [27.0212, -19.632, 19], [26.9744, -19.6964, 20.9984], [26.1654, -19.1086, 20.9984], [26.2589, -18.9799, 17.0016]], [[38.6449, -17.1188, 17.3349], [38.5802, -17.264, 21.3318], [37.6666, -16.8573, 21.3318], [37.699, -16.7847, 19.3333], [30.3906, -13.5308, 19.3333], [30.3583, -13.6034, 21.3318], [29.4447, -13.1967, 21.3318], [29.5094, -13.0514, 17.3349]], [[41.2292, -8.68224, 17.6682], [41.1961, -8.83779, 21.6651], [40.2179, -8.62988, 21.6651], [40.2345, -8.5521, 19.6667], [32.4093, -6.88881, 19.6667], [32.3928, -6.96658, 21.6651], [31.4146, -6.75867, 21.6651], [31.4477, -6.60312, 17.6682]], [[42, 0.0795146, 18.0016], [42, -0.0795146, 21.9984], [41, -0.0795146, 21.9984], [41, 0, 20], [33, 0, 20], [33, -0.0795146, 21.9984], [32, -0.0795146, 21.9984], [32, 0.0795146, 18.0016]], [[40.9352, 8.78235, 18.3349], [40.9683, 8.62679, 22.3318], [39.9902, 8.41888, 22.3318], [39.9736, 8.49666, 20.3333], [32.1485, 6.83336, 20.3333], [32.165, 6.75559, 22.3318], [31.1868, 6.54768, 22.3318], [31.1538, 6.70323, 18.3349]], [[38.093, 17.0471, 18.6682], [38.1576, 16.9018, 22.6651], [37.2441, 16.4951, 22.6651], [37.2118, 16.5677, 20.6667], [29.9034, 13.3138, 20.6667], [29.9357, 13.2412, 22.6651], [29.0222, 12.8345, 22.6651], [28.9575, 12.9797, 18.6682]], [[33.6084, 24.5162, 19.0016], [33.7018, 24.3875, 22.9984], [32.8928, 23.7998, 22.9984], [32.8461, 23.8641, 21], [26.374, 19.1618, 21], [26.4207, 19.0975, 22.9984], [25.6117, 18.5097, 22.9984], [25.5182, 18.6383, 19.0016]], [[27.6875, 30.8689, 19.3349], [27.8057, 30.7625, 23.3318], [27.1366, 30.0194, 23.3318], [27.0775, 30.0726, 21.3333], [21.7244, 24.1274, 21.3333], [21.7835, 24.0742, 23.3318], [21.1144, 23.3311, 23.3318], [20.9962, 23.4375, 19.3349]], [[20.5978, 35.8355, 19.6682], [20.7355, 35.756, 23.6651], [20.2355, 34.8899, 23.6651], [20.1667, 34.9297, 21.6667], [16.1667, 28.0015, 21.6667], [16.2355, 27.9617, 23.6651], [15.7355, 27.0957, 23.6651], [15.5978, 27.1752, 19.6682]], [[12.6559, 39.2081, 20.0016], [12.8071, 39.159, 23.9984], [12.4981, 38.2079, 23.9984], [12.4225, 38.2325, 22], [9.95035, 30.624, 22], [10.026, 30.5994, 23.9984], [9.71695, 29.6484, 23.9984], [9.56571, 29.6975, 20.0016]], [[4.21356, 40.85, 20.3349], [4.37171, 40.8334, 24.3318], [4.26719, 39.8389, 24.3318], [4.18811, 39.8472, 22.3333], [3.35188, 31.891, 22.3333], [3.43096, 31.8827, 24.3318], [3.32643, 30.8882, 24.3318], [3.16827, 30.9048, 20.3349]], [[-4.35778, 40.7008, 20.6682], [-4.19962, 40.7174, 24.6651], [-4.09509, 39.7229, 24.6651], [-4.17417, 39.7146, 22.6667], [-3.33794, 31.7584, 22.6667], [-3.25886, 31.7667, 24.6651], [-3.15433, 30.7722, 24.6651], [-3.31249, 30.7556, 20.6682]], [[-12.6835, 38.7785, 21.0016], [-12.5323, 38.8277, 24.9984], [-12.2233, 37.8766, 24.9984], [-12.2989, 37.852, 23], [-9.82674, 30.2436, 23], [-9.75112, 30.2682, 24.9984], [-9.4421, 29.3171, 24.9984], [-9.59335, 29.268, 21.0016]], [[-20.4022, 35.1786, 21.3349], [-20.2645, 35.2581, 25.3318], [-19.7645, 34.3921, 25.3318], [-19.8333, 34.3523, 23.3333], [-15.8333, 27.4241, 23.3333], [-15.7645, 27.4639, 25.3318], [-15.2645, 26.5979, 25.3318], [-15.4022, 26.5184, 21.3349]], [[-27.1812, 30.0689, 21.6682], [-27.063, 30.1753, 25.6651], [-26.3939, 29.4322, 25.6651], [-26.453, 29.379, 23.6667], [-21.0999, 23.4338, 23.6667], [-21.0408, 23.487, 25.6651], [-20.3717, 22.7439, 25.6651], [-20.4899, 22.6375, 21.6682]], [[-32.731, 23.6822, 22.0016], [-32.6375, 23.8109, 25.9984], [-31.8285, 23.2231, 25.9984], [-31.8753, 23.1587, 24], [-25.4031, 18.4565, 24], [-25.3564, 18.5208, 25.9984], [-24.5474, 17.933, 25.9984], [-24.6409, 17.8043, 22.0016]], [[-36.8178, 16.3053, 22.3349], [-36.7531, 16.4506, 26.3318], [-35.8395, 16.0438, 26.3318], [-35.8719, 15.9712, 24.3333], [-28.5635, 12.7173, 24.3333], [-28.5312, 12.7899, 26.3318], [-27.6176, 12.3832, 26.3318], [-27.6823, 12.2379, 22.3349]], [[-39.2729, 8.26641, 22.6682], [-39.2398, 8.42197, 26.6651], [-38.2616, 8.21405, 26.6651], [-38.2782, 8.13628, 24.6667], [-30.453, 6.47298, 24.6667], [-30.4365, 6.55076, 26.6651], [-29.4583, 6.34285, 26.6651], [-29.4914, 6.1873, 22.6682]], [[-40, -0.0795146, 23.0016], [-40, 0.0795146, 26.9984], [-39, 0.0795146, 26.9984], [-39, 0, 25], [-31, 0, 25], [-31, 0.0795146, 26.9984], [-30, 0.0795146, 26.9984], [-30, -0.0795146, 23.0016]], [[-38.979, -8.36652, 23.3349], [-39.012, -8.21097, 27.3318], [-38.0339, -8.00306, 27.3318], [-38.0173, -8.08083, 25.3333], [-30.1922, -6.41754, 25.3333], [-30.2087, -6.33976, 27.3318], [-29.2305, -6.13185, 27.3318], [-29.1975, -6.28741, 23.3349]], [[-36.2659, -16.2336, 23.6682], [-36.3305, -16.0884, 27.6651], [-35.417, -15.6816, 27.6651], [-35.3847, -15.7543, 25.6667], [-28.0763, -12.5004, 25.6667], [-28.1086, -12.4277, 27.6651], [-27.1951, -12.021, 27.6651], [-27.1304, -12.1663, 23.6682]], [[-31.9903, -23.3406, 24.0016], [-32.0838, -23.212, 27.9984], [-31.2748, -22.6242, 27.9984], [-31.2281, -22.6885, 26], [-24.7559, -17.9862, 26], [-24.8027, -17.9219, 27.9984], [-23.9936, -17.3341, 27.9984], [-23.9002, -17.4628, 24.0016]], [[-26.3493, -29.3827, 24.3349], [-26.4674, -29.2762, 28.3318], [-25.7983, -28.5331, 28.3318], [-25.7392, -28.5863, 26.3333], [-20.3862, -22.6411, 26.3333], [-20.4453, -22.5879, 28.3318], [-19.7761, -21.8448, 28.3318], [-19.658, -21.9512, 24.3349]], [[-19.5978, -34.1034, 24.6682], [-19.7355, -34.0239, 28.6651], [-19.2355, -33.1579, 28.6651], [-19.1667, -33.1976, 26.6667], [-15.1667, -26.2694, 26.6667], [-15.2355, -26.2297, 28.6651], [-14.7355, -25.3637, 28.6651], [-14.5978, -25.4432, 24.6682]], [[-12.0378, -37.306, 25.0016], [-12.1891, -37.2568, 28.9984], [-11.8801, -36.3058, 28.9984], [-11.8044, -36.3304, 27], [-9.33231, -28.7219, 27], [-9.40794, -28.6973, 28.9984], [-9.09892, -27.7463, 28.9984], [-8.94767, -27.7954, 25.0016]], [[-4.0045, -38.861, 25.3349], [-4.16266, -38.8443, 29.3318], [-4.05813, -37.8498, 29.3318], [-3.97905, -37.8581, 27.3333], [-3.14282, -29.902, 27.3333], [-3.2219, -29.8936, 29.3318], [-3.11737, -28.8991, 29.3318], [-2.95922, -28.9157, 25.3349]], [[4.14872, -38.7117, 25.6682], [3.99056, -38.7284, 29.6651], [3.88603, -37.7338, 29.6651], [3.96511, -37.7255, 27.6667], [3.12889, -29.7694, 27.6667], [3.04981, -29.7777, 29.6651], [2.94528, -28.7831, 29.6651], [3.10344, -28.7665, 25.6682]], [[12.0655, -36.8764, 26.0016], [11.9142, -36.9256, 29.9984], [11.6052, -35.9745, 29.9984], [11.6808, -35.9499, 28], [9.20871, -28.3415, 28], [9.13308, -28.3661, 29.9984], [8.82407, -27.415, 29.9984], [8.97531, -27.3659, 26.0016]], [[19.4022, -33.4466, 26.3349], [19.2645, -33.5261, 30.3318], [18.7645, -32.66, 30.3318], [18.8333, -32.6203, 28.3333], [14.8333, -25.6921, 28.3333], [14.7645, -25.7318, 30.3318], [14.2645, -24.8658, 30.3318], [14.4022, -24.7863, 26.3349]], [[25.8429, -28.5826, 26.6682], [25.7247, -28.6891, 30.6651], [25.0556, -27.9459, 30.6651], [25.1147, -27.8927, 28.6667], [19.7617, -21.9475, 28.6667], [19.7026, -22.0007, 30.6651], [19.0334, -21.2576, 30.6651], [19.1516, -21.1512, 26.6682]], [[31.113, -22.5066, 27.0016], [31.0195, -22.6353, 30.9984], [30.2105, -22.0475, 30.9984], [30.2572, -21.9832, 29], [23.7851, -17.2809, 29], [23.7384, -17.3452, 30.9984], [22.9293, -16.7574, 30.9984], [23.0228, -16.6288, 27.0016]], [[34.9907, -15.4918, 27.3349], [34.926, -15.6371, 31.3318], [34.0125, -15.2304, 31.3318], [34.0448, -15.1577, 29.3333], [26.7364, -11.9038, 29.3333], [26.7041, -11.9765, 31.3318], [25.7905, -11.5697, 31.3318], [25.8552, -11.4244, 27.3349]], [[37.3166, -7.85059, 27.6682], [37.2835, -8.00614, 31.6651], [36.3053, -7.79823, 31.6651], [36.3219, -7.72045, 29.6667], [28.4967, -6.05716, 29.6667], [28.4802, -6.13494, 31.6651], [27.502, -5.92703, 31.6651], [27.5351, -5.77147, 27.6682]], [[38, 0.0795146, 28.0016], [38, -0.0795146, 31.9984], [37, -0.0795146, 31.9984], [37, 0, 30], [29, 0, 30], [29, -0.0795146, 31.9984], [28, -0.0795146, 31.9984], [28, 0.0795146, 28.0016]], [[37.0227, 7.9507, 28.3349], [37.0557, 7.79515, 32.3318], [36.0776, 7.58723, 32.3318], [36.061, 7.66501, 30.3333], [28.2359, 6.00172, 30.3333], [28.2524, 5.92394, 32.3318], [27.2742, 5.71603, 32.3318], [27.2412, 5.87158, 28.3349]], [[34.4388, 15.4202, 28.6682], [34.5035, 15.2749, 32.6651], [33.5899, 14.8682, 32.6651], [33.5576, 14.9408, 30.6667], [26.2492, 11.6869, 30.6667], [26.2815, 11.6143, 32.6651], [25.368, 11.2075, 32.6651], [25.3033, 11.3528, 28.6682]], [[30.3723, 22.1651, 29.0016], [30.4658, 22.0364, 32.9984], [29.6568, 21.4486, 32.9984], [29.61, 21.5129, 31], [23.1379, 16.8107, 31], [23.1846, 16.7463, 32.9984], [22.3756, 16.1585, 32.9984], [22.2821, 16.2872, 29.0016]], [[25.011, 27.8964, 29.3349], [25.1292, 27.79, 33.3318], [24.4601, 27.0468, 33.3318], [24.401, 27.1, 31.3333], [19.0479, 21.1549, 31.3333], [19.107, 21.1017, 33.3318], [18.4379, 20.3585, 33.3318], [18.3197, 20.4649, 29.3349]], [[18.5978, 32.3714, 29.6682], [18.7355, 32.2919, 33.6651], [18.2355, 31.4258, 33.6651], [18.1667, 31.4656, 31.6667], [14.1667, 24.5374, 31.6667], [14.2355, 24.4976, 33.6651], [13.7355, 23.6316, 33.6651], [13.5978, 23.7111, 29.6682]], [[11.4198, 35.4039, 30.0016], [11.5711, 35.3547, 33.9984], [11.262, 34.4037, 33.9984], [11.1864, 34.4282, 32], [8.71428, 26.8198, 32], [8.7899, 26.7952, 33.9984], [8.48089, 25.8442, 33.9984], [8.32964, 25.8933, 30.0016]], [[3.79544, 36.8719, 30.3349], [3.9536, 36.8553, 34.3318], [3.84907, 35.8608, 34.3318], [3.76999, 35.8691, 32.3333], [2.93377, 27.9129, 32.3333], [3.01284, 27.9046, 34.3318], [2.90832, 26.9101, 34.3318], [2.75016, 26.9267, 30.3349]], [[-3.93966, 36.7227, 30.6682], [-3.78151, 36.7393, 34.6651], [-3.67698, 35.7448, 34.6651], [-3.75606, 35.7365, 32.6667], [-2.91983, 27.7803, 32.6667], [-2.84075, 27.7886, 34.6651], [-2.73622, 26.7941, 34.6651], [-2.89438, 26.7775, 30.6682]], [[-11.4474, 34.9743, 31.0016], [-11.2962, 35.0235, 34.9984], [-10.9872, 34.0724, 34.9984], [-11.0628, 34.0478, 33], [-8.59067, 26.4394, 33], [-8.51505, 26.4639, 34.9984], [-8.20603, 25.5129, 34.9984], [-8.35728, 25.4637, 31.0016]], [[-18.4022, 31.7145, 31.3349], [-18.2645, 31.794, 35.3318], [-17.7645, 30.928, 35.3318], [-17.8333, 30.8882, 33.3333], [-13.8333, 23.96, 33.3333], [-13.7645, 23.9998, 35.3318], [-13.2645, 23.1338, 35.3318], [-13.4022, 23.0543, 31.3349]], [[-24.5047, 27.0964, 31.6682], [-24.3865, 27.2028, 35.6651], [-23.7174, 26.4596, 35.6651], [-23.7764, 26.4064, 33.6667], [-18.4234, 20.4613, 33.6667], [-18.3643, 20.5145, 35.6651], [-17.6952, 19.7713, 35.6651], [-17.8134, 19.6649, 31.6682]], [[-29.495, 21.3311, 32.0016], [-29.4015, 21.4597, 35.9984], [-28.5925, 20.8719, 35.9984], [-28.6392, 20.8076, 34], [-22.1671, 16.1053, 34], [-22.1203, 16.1696, 35.9984], [-21.3113, 15.5819, 35.9984], [-21.4048, 15.4532, 32.0016]], [[-33.1636, 14.6783, 32.3349], [-33.0989, 14.8236, 36.3318], [-32.1854, 14.4169, 36.3318], [-32.2177, 14.3442, 34.3333], [-24.9093, 11.0904, 34.3333], [-24.877, 11.163, 36.3318], [-23.9635, 10.7563, 36.3318], [-24.0281, 10.611, 32.3349]], [[-35.3603, 7.43477, 32.6682], [-35.3272, 7.59032, 36.6651], [-34.3491, 7.38241, 36.6651], [-34.3656, 7.30463, 34.6667], [-26.5404, 5.64134, 34.6667], [-26.5239, 5.71911, 36.6651], [-25.5457, 5.5112, 36.6651], [-25.5788, 5.35565, 32.6682]], [[-36, -0.0795146, 33.0016], [-36, 0.0795146, 36.9984], [-35, 0.0795146, 36.9984], [-35, 0, 35], [-27, 0, 35], [-27, 0.0795146, 36.9984], [-26, 0.0795146, 36.9984], [-26, -0.0795146, 33.0016]], [[-35.0664, -7.53488, 33.3349], [-35.0994, -7.37932, 37.3318], [-34.1213, -7.17141, 37.3318], [-34.1047, -7.24919, 35.3333], [-26.2796, -5.58589, 35.3333], [-26.2961, -5.50812, 37.3318], [-25.3179, -5.30021, 37.3318], [-25.2849, -5.45576, 33.3349]], [[-32.6117, -14.6067, 33.6682], [-32.6764, -14.4614, 37.6651], [-31.7628, -14.0547, 37.6651], [-31.7305, -14.1273, 35.6667], [-24.4221, -10.8734, 35.6667], [-24.4545, -10.8008, 37.6651], [-23.5409, -10.394, 37.6651], [-23.4762, -10.5393, 33.6682]], [[-28.7543, -20.9895, 34.0016], [-28.8477, -20.8608, 37.9984], [-28.0387, -20.273, 37.9984], [-27.992, -20.3374, 36], [-21.5199, -15.6351, 36], [-21.5666, -15.5708, 37.9984], [-20.7576, -14.983, 37.9984], [-20.6641, -15.1116, 34.0016]], [[-23.6727, -26.4101, 34.3349], [-23.7909, -26.3037, 38.3318], [-23.1218, -25.5605, 38.3318], [-23.0627, -25.6137, 36.3333], [-17.7097, -19.6686, 36.3333], [-17.7687, -19.6154, 38.3318], [-17.0996, -18.8722, 38.3318], [-16.9814, -18.9786, 34.3349]], [[-17.5978, -30.6393, 34.6682], [-17.7355, -30.5598, 38.6651], [-17.2355, -29.6938, 38.6651], [-17.1667, -29.7335, 36.6667], [-13.1667, -22.8053, 36.6667], [-13.2355, -22.7656, 38.6651], [-12.7355, -21.8996, 38.6651], [-12.5978, -21.9791, 34.6682]], [[-10.8018, -33.5018, 35.0016], [-10.953, -33.4526, 38.9984], [-10.644, -32.5016, 38.9984], [-10.5684, -32.5261, 37], [-8.09625, -24.9177, 37], [-8.17187, -24.8931, 38.9984], [-7.86285, -23.9421, 38.9984], [-7.71161, -23.9912, 35.0016]], [[-3.58639, -34.8829, 35.3349], [-3.74454, -34.8663, 39.3318], [-3.64002, -33.8717, 39.3318], [-3.56094, -33.88, 37.3333], [-2.72471, -25.9239, 37.3333], [-2.80379, -25.9156, 39.3318], [-2.69926, -24.921, 39.3318], [-2.5411, -24.9377, 35.3349]], [[3.73061, -34.7337, 35.6682], [3.57245, -34.7503, 39.6651], [3.46792, -33.7558, 39.6651], [3.547, -33.7474, 37.6667], [2.71077, -25.7913, 37.6667], [2.63169, -25.7996, 39.6651], [2.52716, -24.8051, 39.6651], [2.68532, -24.7884, 35.6682]], [[10.8294, -33.0722, 36.0016], [10.6782, -33.1213, 39.9984], [10.3692, -32.1703, 39.9984], [10.4448, -32.1457, 38], [7.97264, -24.5373, 38], [7.89702, -24.5618, 39.9984], [7.588, -23.6108, 39.9984], [7.73924, -23.5616, 36.0016]], [[17.4022, -29.9825, 36.3349], [17.2645, -30.062, 40.3318], [16.7645, -29.1959, 40.3318], [16.8333, -29.1562, 38.3333], [12.8333, -22.228, 38.3333], [12.7645, -22.2677, 40.3318], [12.2645, -21.4017, 40.3318], [12.4022, -21.3222, 36.3349]], [[23.1664, -25.6101, 36.6682], [23.0482, -25.7165, 40.6651], [22.3791, -24.9733, 40.6651], [22.4382, -24.9201, 38.6667], [17.0851, -18.975, 38.6667], [17.026, -19.0282, 40.6651], [16.3569, -18.285, 40.6651], [16.4751, -18.1786, 36.6682]], [[27.8769, -20.1555, 37.0016], [27.7834, -20.2841, 40.9984], [26.9744, -19.6964, 40.9984], [27.0212, -19.632, 39], [20.549, -14.9297, 39], [20.5023, -14.9941, 40.9984], [19.6933, -14.4063, 40.9984], [19.7868, -14.2776, 37.0016]], [[31.3365, -13.8649, 37.3349], [31.2718, -14.0101, 41.3318], [30.3583, -13.6034, 41.3318], [30.3906, -13.5308, 39.3333], [23.0822, -10.2769, 39.3333], [23.0499, -10.3495, 41.3318], [22.1364, -9.94278, 41.3318], [22.201, -9.7975, 37.3349]], [[33.404, -7.01894, 37.6682], [33.3709, -7.1745, 41.6651], [32.3928, -6.96658, 41.6651], [32.4093, -6.88881, 39.6667], [24.5841, -5.22551, 39.6667], [24.5676, -5.30329, 41.6651], [23.5894, -5.09538, 41.6651], [23.6225, -4.93983, 37.6682]], [[34, 0.0795146, 38.0016], [34, -0.0795146, 41.9984], [33, -0.0795146, 41.9984], [33, 0, 40], [25, 0, 40], [25, -0.0795146, 41.9984], [24, -0.0795146, 41.9984], [24, 0.0795146, 38.0016]], [[33.1101, 7.11905, 38.3349], [33.1431, 6.9635, 42.3318], [32.165, 6.75559, 42.3318], [32.1485, 6.83336, 40.3333], [24.3233, 5.17007, 40.3333], [24.3398, 5.09229, 42.3318], [23.3617, 4.88438, 42.3318], [23.3286, 5.03994, 38.3349]], [[30.7846, 13.7932, 38.6682], [30.8493, 13.6479, 42.6651], [29.9357, 13.2412, 42.6651], [29.9034, 13.3138, 40.6667], [22.595, 10.06, 40.6667], [22.6274, 9.98731, 42.6651], [21.7138, 9.58058, 42.6651], [21.6491, 9.72586, 38.6682]], [[27.1362, 19.8139, 39.0016], [27.2297, 19.6853, 42.9984], [26.4207, 19.0975, 42.9984], [26.374, 19.1618, 41], [19.9018, 14.4595, 41], [19.9486, 14.3952, 42.9984], [19.1395, 13.8074, 42.9984], [19.0461, 13.9361, 39.0016]], [[22.3345, 24.9238, 39.3349], [22.4527, 24.8174, 43.3318], [21.7835, 24.0742, 43.3318], [21.7244, 24.1274, 41.3333], [16.3714, 18.1823, 41.3333], [16.4305, 18.1291, 43.3318], [15.7614, 17.3859, 43.3318], [15.6432, 17.4923, 39.3349]], [[16.5978, 28.9073, 39.6682], [16.7355, 28.8278, 43.6651], [16.2355, 27.9617, 43.6651], [16.1667, 28.0015, 41.6667], [12.1667, 21.0733, 41.6667], [12.2355, 21.0335, 43.6651], [11.7355, 20.1675, 43.6651], [11.5978, 20.247, 39.6682]], [[10.1837, 31.5996, 40.0016], [10.335, 31.5505, 43.9984], [10.026, 30.5994, 43.9984], [9.95035, 30.624, 42], [7.47821, 23.0156, 42], [7.55383, 22.991, 43.9984], [7.24482, 22.0399, 43.9984], [7.09357, 22.0891, 40.0016]], [[3.37733, 32.8938, 40.3349], [3.53549, 32.8772, 44.3318], [3.43096, 31.8827, 44.3318], [3.35188, 31.891, 42.3333], [2.51565, 23.9348, 42.3333], [2.59473, 23.9265, 44.3318], [2.4902, 22.932, 44.3318], [2.33204, 22.9486, 40.3349]], [[-3.52155, 32.7446, 40.6682], [-3.36339, 32.7612, 44.6651], [-3.25886, 31.7667, 44.6651], [-3.33794, 31.7584, 42.6667], [-2.50171, 23.8022, 42.6667], [-2.42264, 23.8105, 44.6651], [-2.31811, 22.816, 44.6651], [-2.47627, 22.7994, 40.6682]], [[-10.2114, 31.1701, 41.0016], [-10.0601, 31.2192, 44.9984], [-9.75112, 30.2682, 44.9984], [-9.82674, 30.2436, 43], [-7.3546, 22.6351, 43], [-7.27898, 22.6597, 44.9984], [-6.96996, 21.7087, 44.9984], [-7.12121, 21.6595, 41.0016]], [[-16.4022, 28.2504, 41.3349], [-16.2645, 28.3299, 45.3318], [-15.7645, 27.4639, 45.3318], [-15.8333, 27.4241, 43.3333], [-11.8333, 20.4959, 43.3333], [-11.7645, 20.5357, 45.3318], [-11.2645, 19.6697, 45.3318], [-11.4022, 19.5902, 41.3349]], [[-21.8281, 24.1238, 41.6682], [-21.71, 24.2302, 45.6651], [-21.0408, 23.487, 45.6651], [-21.0999, 23.4338, 43.6667], [-15.7469, 17.4887, 43.6667], [-15.6878, 17.5419, 45.6651], [-15.0187, 16.7987, 45.6651], [-15.1368, 16.6923, 41.6682]], [[-26.2589, 18.9799, 42.0016], [-26.1654, 19.1086, 45.9984], [-25.3564, 18.5208, 45.9984], [-25.4031, 18.4565, 44], [-18.931, 13.7542, 44], [-18.8843, 13.8185, 45.9984], [-18.0752, 13.2307, 45.9984], [-18.1687, 13.1021, 42.0016]], [[-29.5094, 13.0514, 42.3349], [-29.4447, 13.1967, 46.3318], [-28.5312, 12.7899, 46.3318], [-28.5635, 12.7173, 44.3333], [-21.2552, 9.46341, 44.3333], [-21.2228, 9.53605, 46.3318], [-20.3093, 9.12931, 46.3318], [-20.374, 8.98403, 42.3349]], [[-31.4477, 6.60312, 42.6682], [-31.4146, 6.75867, 46.6651], [-30.4365, 6.55076, 46.6651], [-30.453, 6.47298, 44.6667], [-22.6278, 4.80969, 44.6667], [-22.6113, 4.88747, 46.6651], [-21.6331, 4.67956, 46.6651], [-21.6662, 4.524, 42.6682]], [[-32, -0.0795146, 43.0016], [-32, 0.0795146, 46.9984], [-31, 0.0795146, 46.9984], [-31, 0, 45], [-23, 0, 45], [-23, 0.0795146, 46.9984], [-22, 0.0795146, 46.9984], [-22, -0.0795146, 43.0016]], [[-31.1538, -6.70323, 43.3349], [-31.1868, -6.54768, 47.3318], [-30.2087, -6.33976, 47.3318], [-30.1922, -6.41754, 45.3333], [-22.367, -4.75425, 45.3333], [-22.3835, -4.67647, 47.3318], [-21.4054, -4.46856, 47.3318], [-21.3723, -4.62411, 43.3349]], [[-28.9575, -12.9797, 43.6682], [-29.0222, -12.8345, 47.6651], [-28.1086, -12.4277, 47.6651], [-28.0763, -12.5004, 45.6667], [-20.7679, -9.24648, 45.6667], [-20.8003, -9.17384, 47.6651], [-19.8867, -8.7671, 47.6651], [-19.822, -8.91238, 43.6682]], [[-25.5182, -18.6383, 44.0016], [-25.6117, -18.5097, 47.9984], [-24.8027, -17.9219, 47.9984], [-24.7559, -17.9862, 46], [-18.2838, -13.2839, 46], [-18.3305, -13.2196, 47.9984], [-17.5215, -12.6318, 47.9984], [-17.428, -12.7605, 44.0016]], [[-20.9962, -23.4375, 44.3349], [-21.1144, -23.3311, 48.3318], [-20.4453, -22.5879, 48.3318], [-20.3862, -22.6411, 46.3333], [-15.0331, -16.696, 46.3333], [-15.0922, -16.6428, 48.3318], [-14.4231, -15.8996, 48.3318], [-14.3049, -16.006, 44.3349]], [[-15.5978, -27.1752, 44.6682], [-15.7355, -27.0957, 48.6651], [-15.2355, -26.2297, 48.6651], [-15.1667, -26.2694, 46.6667], [-11.1667, -19.3412, 46.6667], [-11.2355, -19.3015, 48.6651], [-10.7355, -18.4355, 48.6651], [-10.5978, -18.515, 44.6682]], [[-9.56571, -29.6975, 45.0016], [-9.71695, -29.6484, 48.9984], [-9.40794, -28.6973, 48.9984], [-9.33231, -28.7219, 47], [-6.86018, -21.1135, 47], [-6.9358, -21.0889, 48.9984], [-6.62678, -20.1378, 48.9984], [-6.47554, -20.187, 45.0016]], [[-3.16827, -30.9048, 45.3349], [-3.32643, -30.8882, 49.3318], [-3.2219, -29.8936, 49.3318], [-3.14282, -29.902, 47.3333], [-2.30659, -21.9458, 47.3333], [-2.38567, -21.9375, 49.3318], [-2.28115, -20.9429, 49.3318], [-2.12299, -20.9596, 45.3349]], [[3.31249, -30.7556, 45.6682], [3.15433, -30.7722, 49.6651], [3.04981, -29.7777, 49.6651], [3.12889, -29.7694, 47.6667], [2.29266, -21.8132, 47.6667], [2.21358, -21.8215, 49.6651], [2.10905, -20.827, 49.6651], [2.26721, -20.8103, 45.6682]], [[9.59335, -29.268, 46.0016], [9.4421, -29.3171, 49.9984], [9.13308, -28.3661, 49.9984], [9.20871, -28.3415, 48], [6.73657, -20.733, 48], [6.66095, -20.7576, 49.9984], [6.35193, -19.8065, 49.9984], [6.50318, -19.7574, 46.0016]], [[15.4022, -26.5184, 46.3349], [15.2645, -26.5979, 50.3318], [14.7645, -25.7318, 50.3318], [14.8333, -25.6921, 48.3333], [10.8333, -18.7639, 48.3333], [10.7645, -18.8036, 50.3318], [10.2645, -17.9376, 50.3318], [10.4022, -17.8581, 46.3349]], [[20.4899, -22.6375, 46.6682], [20.3717, -22.7439, 50.6651], [19.7026, -22.0007, 50.6651], [19.7617, -21.9475, 48.6667], [14.4086, -16.0024, 48.6667], [14.3495, -16.0556, 50.6651], [13.6804, -15.3124, 50.6651], [13.7986, -15.206, 46.6682]], [[24.6409, -17.8043, 47.0016], [24.5474, -17.933, 50.9984], [23.7384, -17.3452, 50.9984], [23.7851, -17.2809, 49], [17.313, -12.5786, 49], [17.2662, -12.6429, 50.9984], [16.4572, -12.0551, 50.9984], [16.5507, -11.9265, 47.0016]], [[27.6823, -12.2379, 47.3349], [27.6176, -12.3832, 51.3318], [26.7041, -11.9765, 51.3318], [26.7364, -11.9038, 49.3333], [19.4281, -8.64993, 49.3333], [19.3957, -8.72257, 51.3318], [18.4822, -8.31584, 51.3318], [18.5469, -8.17056, 47.3349]], [[29.4914, -6.1873, 47.6682], [29.4583, -6.34285, 51.6651], [28.4802, -6.13494, 51.6651], [28.4967, -6.05716, 49.6667], [20.6715, -4.39387, 49.6667], [20.655, -4.47164, 51.6651], [19.6768, -4.26373, 51.6651], [19.7099, -4.10818, 47.6682]], [[30, 0.0795146, 48.0016], [30, -0.0795146, 51.9984], [29, -0.0795146, 51.9984], [29, 0, 50], [21, 0, 50], [21, -0.0795146, 51.9984], [20, -0.0795146, 51.9984], [20, 0.0795146, 48.0016]]]; for(i = [0:len(sections) - 1]) { - assertEqualPoints(expected[i], sections[i], float_digits = 3); + assertEqualPoints(expected[i], sections[i]); } } diff --git a/test/test_hexagons.scad b/test/test_hexagons.scad index ed599162..2650d48d 100644 --- a/test/test_hexagons.scad +++ b/test/test_hexagons.scad @@ -10,7 +10,7 @@ module test_hexagons_lv2() { include ; module test_each_hexagon(hex_r, pts_all_lines) { - assertEqual(19, hex_r); + assertEqualNum(19, hex_r); expects = [ [[-34.641, 0], [0, 0], [34.641, 0]], @@ -40,7 +40,7 @@ module test_hexagons_lv3() { include ; module test_each_hexagon(hex_r, pts_all_lines) { - assertEqual(19, hex_r); + assertEqualNum(19, hex_r); expects = [ [[-69.282, 0], [-34.641, 0], [0, 0], [34.641, 0], [69.282, 0]], diff --git a/test/test_hull_polyline2d.scad b/test/test_hull_polyline2d.scad index f2e9b074..961d9f49 100644 --- a/test/test_hull_polyline2d.scad +++ b/test/test_hull_polyline2d.scad @@ -12,7 +12,7 @@ module test_hull_polyline2d() { module test_line_segment(index, point1, point2, radius) { assertEqualPoint(points[index - 1], point1); assertEqualPoint(points[index], point2); - assertEqual(line_width, radius * 2); + assertEqualNum(line_width, radius * 2); } hull_polyline2d( diff --git a/test/test_hull_polyline3d.scad b/test/test_hull_polyline3d.scad index 95811be6..8c6337c0 100644 --- a/test/test_hull_polyline3d.scad +++ b/test/test_hull_polyline3d.scad @@ -17,7 +17,7 @@ module test_hull_polyline3d() { module test_line_segment(index, point1, point2, radius) { assertEqualPoint(points[index - 1], point1); assertEqualPoint(points[index], point2); - assertEqual(thickness, radius * 2); + assertEqualNum(thickness, radius * 2); } hull_polyline3d( @@ -47,7 +47,7 @@ module test_hull_polyline3d_helix() { module test_line_segment(index, point1, point2, radius) { assertEqualPoint(points[index - 1], point1); assertEqualPoint(points[index], point2); - assertEqual(thickness, radius * 2); + assertEqualNum(thickness, radius * 2); } for(i = [0:7]) { diff --git a/test/test_in_polyline.scad b/test/test_in_polyline.scad new file mode 100644 index 00000000..6a247a9c --- /dev/null +++ b/test/test_in_polyline.scad @@ -0,0 +1,31 @@ +include ; + +module test_in_polyline() { + + + echo("==== test_in_polyline ===="); + + pts = [ + [0, 0], + [10, 0], + [10, 10] + ]; + + assert(!in_polyline(pts, [-2, -3])); + assert(in_polyline(pts, [5, 0])); + assert(in_polyline(pts, [10, 5])); + assert(!in_polyline(pts, [10, 15])); + + pts2 = [ + [10, 0, 10], + [20, 0, 10], + [20, 10, 10] + ]; + + assert(in_polyline(pts2, [10, 0, 10])); + assert(in_polyline(pts2, [15, 0, 10])); + assert(!in_polyline(pts2, [15, 1, 10])); + assert(!in_polyline(pts2, [20, 11, 10])); +} + +test_in_polyline(); \ No newline at end of file diff --git a/test/test_line2d.scad b/test/test_line2d.scad index 0cda2d9b..a5e70b3b 100644 --- a/test/test_line2d.scad +++ b/test/test_line2d.scad @@ -12,17 +12,17 @@ module test_line2d() { include ; module test_line2d_cap(point, style) { - assertTrue( + assert( (point == p1 && style == "CAP_SQUARE") || (point == p2 && style == "CAP_SQUARE") ); } module test_line2d_line(angle, length, width, frags) { - assertEqual(0, angle); - assertEqual(5, length); - assertEqual(1, width); - assertEqual(24, frags); + assertEqualNum(0, angle); + assertEqualNum(5, length); + assertEqualNum(1, width); + assertEqualNum(24, frags); } line2d(p1 = p1, p2 = p2, width = width); @@ -34,17 +34,17 @@ module test_line2d() { include ; module test_line2d_cap(point, style) { - assertTrue( + assert( (point == p1 && style == "CAP_ROUND") || (point == p2 && style == "CAP_ROUND") ); } module test_line2d_line(angle, length, width, frags) { - assertEqual(0, angle); - assertEqual(5, length); - assertEqual(1, width); - assertEqual(24, frags); + assertEqualNum(0, angle); + assertEqualNum(5, length); + assertEqualNum(1, width); + assertEqualNum(24, frags); } line2d(p1 = p1, p2 = p2, width = width, @@ -57,17 +57,17 @@ module test_line2d() { include ; module test_line2d_cap(point, style) { - assertTrue( + assert( (point == p1 && style == "CAP_BUTT") || (point == p2 && style == "CAP_BUTT") ); } module test_line2d_line(angle, length, width, frags) { - assertEqual(0, angle); - assertEqual(5, length); - assertEqual(1, width); - assertEqual(24, frags); + assertEqualNum(0, angle); + assertEqualNum(5, length); + assertEqualNum(1, width); + assertEqualNum(24, frags); } line2d(p1 = p1, p2 = p2, width = width, diff --git a/test/test_line3d.scad b/test/test_line3d.scad index fc0ab185..53ccd07d 100644 --- a/test/test_line3d.scad +++ b/test/test_line3d.scad @@ -13,17 +13,17 @@ module test_line3d() { module test_line3d_butt(p, r, frags, length, angles) { assertEqualPoint(p1, p); - assertEqual(thickness / 2, r); - assertEqual(fn, frags); - assertEqual(14.2829, length); + assertEqualNum(thickness / 2, r); + assertEqualNum(fn, frags); + assertEqualNum(14.2829, length); assertEqualPoint([0, 45.5618, 11.3099], angles); } module test_line3d_cap(p, r, frags, cap_leng, angles) { - assertTrue(p == p1 || p == p2); - assertEqual(thickness / 2, r); - assertEqual(fn, frags); - assertEqual(0.3536, cap_leng); + assert(p == p1 || p == p2); + assertEqualNum(thickness / 2, r); + assertEqualNum(fn, frags); + assertEqualNum(0.3536, cap_leng); assertEqualPoint([0, 45.5618, 11.3099], angles); } @@ -43,9 +43,9 @@ module test_line3d() { module test_line3d_butt(p, r, frags, length, angles) { assertEqualPoint(p1, p); - assertEqual(thickness / 2, r); - assertEqual(fn, frags); - assertEqual(14.2829, length); + assertEqualNum(thickness / 2, r); + assertEqualNum(fn, frags); + assertEqualNum(14.2829, length); assertEqualPoint([0, 45.5618, 11.3099], angles); } @@ -70,17 +70,17 @@ module test_line3d() { module test_line3d_butt(p, r, frags, length, angles) { assertEqualPoint(p1, p); - assertEqual(thickness / 2, r); - assertEqual(fn, frags); - assertEqual(14.2829, length); + assertEqualNum(thickness / 2, r); + assertEqualNum(fn, frags); + assertEqualNum(14.2829, length); assertEqualPoint([0, 45.5618, 11.3099], angles); } module test_line3d_cap(p, r, frags, cap_leng, angles) { - assertTrue(p == p1 || p == p2); - assertEqual(thickness / 2, r); - assertEqual(fn, frags); - assertEqual(0.5043, cap_leng); + assert(p == p1 || p == p2); + assertEqualNum(thickness / 2, r); + assertEqualNum(fn, frags); + assertEqualNum(0.5043, cap_leng); assertEqualPoint([0, 45.5618, 11.3099], angles); } diff --git a/test/test_midpt_smooth.scad b/test/test_midpt_smooth.scad new file mode 100644 index 00000000..3e509c23 --- /dev/null +++ b/test/test_midpt_smooth.scad @@ -0,0 +1,17 @@ +module test_midpt_smooth() { + echo("==== test_midpt_smooth ===="); + + include ; + include ; + include ; + include ; + + taiwan = shape_taiwan(50); + + expected = [[10.63, 22.383], [10.1322, 22.6054], [9.65611, 22.8175], [9.26491, 23.013], [8.97805, 23.1879], [8.77136, 23.3444], [8.59924, 23.4932], [8.41804, 23.652], [8.19789, 23.835], [7.924, 24.0385], [7.59413, 24.2351], [7.21713, 24.3828], [6.81247, 24.4453], [6.40816, 24.4087], [6.03497, 24.2851], [5.71872, 24.1048], [5.47485, 23.9026], [5.3079, 23.7055], [5.21391, 23.5269], [5.18172, 23.3679], [5.19229, 23.2254], [5.2195, 23.1], [5.23557, 22.9985], [5.21927, 22.9287], [5.16157, 22.891], [5.06439, 22.8749], [4.93268, 22.862], [4.76432, 22.8332], [4.54436, 22.7749], [4.24956, 22.6813], [3.86392, 22.5547], [3.39557, 22.4027], [2.88008, 22.2349], [2.36299, 22.0574], [1.87426, 21.8686], [1.41628, 21.658], [0.974894, 21.4098], [0.541119, 21.1111], [0.123546, 20.7617], [-0.256239, 20.3801], [-0.57757, 19.9999], [-0.831844, 19.6571], [-1.02464, 19.3735], [-1.17023, 19.1499], [-1.28387, 18.9706], [-1.37709, 18.815], [-1.45723, 18.6666], [-1.52922, 18.5148], [-1.59737, 18.3511], [-1.66659, 18.1661], [-1.74309, 17.9513], [-1.8336, 17.7034], [-1.94287, 17.4279], [-2.07092, 17.1387], [-2.2128, 16.8525], [-2.36146, 16.5833], [-2.51212, 16.3396], [-2.66534, 16.1248], [-2.82654, 15.9391], [-3.00181, 15.7792], [-3.19204, 15.6373], [-3.39004, 15.5036], [-3.5836, 15.3697], [-3.76283, 15.232], [-3.92588, 15.0903], [-4.0786, 14.9424], [-4.22925, 14.7803], [-4.38325, 14.5908], [-4.54247, 14.3608], [-4.70892, 14.0825], [-4.88942, 13.7542], [-5.09632, 13.3761], [-5.34192, 12.9479], [-5.62904, 12.4699], [-5.94531, 11.9488], [-6.26697, 11.4003], [-6.57004, 10.8482], [-6.8408, 10.319], [-7.07929, 9.83461], [-7.29556, 9.40499], [-7.50157, 9.02568], [-7.70299, 8.68327], [-7.8959, 8.36475], [-8.07105, 8.0638], [-8.22214, 7.78104], [-8.35063, 7.52096], [-8.46345, 7.28875], [-8.56764, 7.0879], [-8.66778, 6.91778], [-8.76767, 6.77148], [-8.8725, 6.63422], [-8.98878, 6.48373], [-9.12206, 6.29465], [-9.27463, 6.04779], [-9.44449, 5.74017], [-9.62607, 5.38879], [-9.8122, 5.0234], [-9.99627, 4.67235], [-10.1735, 4.35116], [-10.3417, 4.06058], [-10.5018, 3.79242], [-10.6578, 3.53644], [-10.815, 3.28328], [-10.9767, 3.02401], [-11.1434, 2.74885], [-11.3138, 2.44761], [-11.4874, 2.11172], [-11.6632, 1.73693], [-11.8362, 1.32482], [-11.9945, 0.882597], [-12.1214, 0.421669], [-12.2029, -0.0435495], [-12.2351, -0.496003], [-12.2265, -0.917097], [-12.1943, -1.29055], [-12.1569, -1.60857], [-12.1266, -1.87687], [-12.1073, -2.1145], [-12.0967, -2.34759], [-12.0909, -2.59901], [-12.0875, -2.87817], [-12.0856, -3.17605], [-12.0861, -3.46997], [-12.0925, -3.73656], [-12.1112, -3.9645], [-12.1497, -4.15813], [-12.2116, -4.33142], [-12.2942, -4.49885], [-12.3892, -4.66958], [-12.4867, -4.84605], [-12.5789, -5.02531], [-12.6606, -5.20235], [-12.7288, -5.37373], [-12.7815, -5.53935], [-12.8185, -5.70088], [-12.8435, -5.85884], [-12.8642, -6.0113], [-12.8893, -6.1556], [-12.9224, -6.29146], [-12.9583, -6.42228], [-12.9864, -6.5533], [-12.9974, -6.68803], [-12.988, -6.82606], [-12.9604, -6.96409], [-12.9194, -7.09841], [-12.8724, -7.22642], [-12.831, -7.34645], [-12.8093, -7.45742], [-12.8148, -7.55961], [-12.8398, -7.65585], [-12.861, -7.75107], [-12.8495, -7.84998], [-12.7854, -7.95458], [-12.6653, -8.06416], [-12.5022, -8.17808], [-12.3198, -8.29903], [-12.1459, -8.43379], [-12.0041, -8.59081], [-11.906, -8.77737], [-11.8454, -8.99865], [-11.8024, -9.2581], [-11.7546, -9.55546], [-11.6892, -9.88234], [-11.6065, -10.2202], [-11.5161, -10.5458], [-11.4302, -10.8414], [-11.3573, -11.1035], [-11.2972, -11.3431], [-11.2405, -11.58], [-11.1731, -11.8332], [-11.0851, -12.1128], [-10.9782, -12.4156], [-10.866, -12.7285], [-10.7644, -13.0358], [-10.6807, -13.3279], [-10.6062, -13.6054], [-10.5197, -13.877], [-10.3986, -14.1556], [-10.231, -14.4518], [-10.019, -14.7696], [-9.7739, -15.1036], [-9.50815, -15.4379], [-9.23223, -15.7506], [-8.95555, -16.0226], [-8.68614, -16.2465], [-8.42687, -16.4312], [-8.17294, -16.5961], [-7.91555, -16.7611], [-7.64966, -16.9383], [-7.37826, -17.1308], [-7.10939, -17.3374], [-6.84962, -17.559], [-6.59971, -17.8041], [-6.35454, -18.091], [-6.10578, -18.4465], [-5.84646, -18.8977], [-5.57751, -19.4544], [-5.31332, -20.0928], [-5.07946, -20.7551], [-4.9004, -21.3738], [-4.78492, -21.9043], [-4.72093, -22.3411], [-4.6835, -22.7074], [-4.64854, -23.0316], [-4.60187, -23.3294], [-4.53922, -23.5999], [-4.46074, -23.8303], [-4.36578, -24.0055], [-4.25089, -24.1171], [-4.11027, -24.1713], [-3.93791, -24.1902], [-3.73176, -24.2033], [-3.49915, -24.2312], [-3.25921, -24.2714], [-3.03757, -24.2961], [-2.85466, -24.2676], [-2.71541, -24.1588], [-2.60844, -23.9622], [-2.5152, -23.6777], [-2.42195, -23.2904], [-2.32518, -22.7628], [-2.22734, -22.0581], [-2.12804, -21.1793], [-2.01909, -20.1875], [-1.88796, -19.1792], [-1.72615, -18.24], [-1.53476, -17.4131], [-1.32269, -16.7014], [-1.1003, -16.0884], [-0.874376, -15.5549], [-0.646564, -15.0844], [-0.412728, -14.6623], [-0.162371, -14.2745], [0.118432, -13.9069], [0.437826, -13.5483], [0.78743, -13.195], [1.13984, -12.8535], [1.45894, -12.5358], [1.71665, -12.2513], [1.90496, -11.9993], [2.03782, -11.7689], [2.14479, -11.5435], [2.26081, -11.3054], [2.41465, -11.0385], [2.61883, -10.731], [2.86575, -10.3772], [3.13293, -9.98036], [3.39433, -9.55373], [3.63087, -9.11958], [3.83492, -8.7049], [4.00901, -8.33342], [4.16189, -8.01644], [4.30401, -7.74663], [4.44318, -7.49923], [4.58137, -7.24097], [4.71483, -6.94304], [4.83826, -6.59181], [4.95091, -6.19061], [5.06067, -5.74888], [5.18352, -5.26098], [5.3388, -4.68715], [5.54274, -3.95538], [5.80235, -2.99549], [6.11142, -1.79066], [6.45018, -0.408993], [6.78998, 1.01337], [7.10169, 2.32818], [7.36418, 3.43108], [7.56883, 4.28566], [7.71799, 4.91335], [7.81921, 5.36711], [7.88006, 5.70627], [7.90757, 5.98122], [7.91202, 6.22881], [7.91038, 6.47525], [7.92429, 6.74011], [7.97288, 7.03653], [8.06507, 7.36705], [8.19695, 7.72015], [8.35563, 8.07296], [8.52631, 8.40133], [8.69826, 8.69143], [8.86757, 8.94609], [9.03639, 9.18305], [9.20865, 9.42694], [9.38396, 9.6985], [9.55407, 10.005], [9.70582, 10.3361], [9.82882, 10.6691], [9.92175, 10.9806], [9.9928, 11.2592], [10.0561, 11.5091], [10.1272, 11.7438], [10.2186, 11.9752], [10.3341, 12.206], [10.4653, 12.4299], [10.5932, 12.6382], [10.699, 12.8267], [10.7744, 12.9985], [10.8261, 13.1626], [10.8682, 13.3307], [10.9112, 13.512], [10.9562, 13.7092], [10.9981, 13.9164], [11.0333, 14.1208], [11.0602, 14.3088], [11.0751, 14.4742], [11.068, 14.6227], [11.0282, 14.7706], [10.9539, 14.9379], [10.8577, 15.1407], [10.7606, 15.3877], [10.6798, 15.6804], [10.6216, 16.0162], [10.5851, 16.3894], [10.5709, 16.7903], [10.5883, 17.2078], [10.6555, 17.6348], [10.7948, 18.0721], [11.0224, 18.5236], [11.3355, 18.9861], [11.7031, 19.441], [12.068, 19.8573], [12.3644, 20.2048], [12.5429, 20.4677], [12.5893, 20.6501], [12.5242, 20.7735], [12.3886, 20.8694], [12.2256, 20.9704], [12.0668, 21.1008], [11.9255, 21.2704], [11.7926, 21.4735], [11.6355, 21.6961], [11.4076, 21.9256], [11.0719, 22.1554]]; + actual = midpt_smooth(taiwan, 20, true); + + assertEqualPoints(expected, actual); +} + +test_midpt_smooth(); \ No newline at end of file diff --git a/test/test_parse_number.scad b/test/test_parse_number.scad deleted file mode 100644 index e07e4b95..00000000 --- a/test/test_parse_number.scad +++ /dev/null @@ -1,13 +0,0 @@ -module test_parse_number() { - echo("==== test_parse_number ===="); - - include ; - include ; - include ; - include ; - - assertEqual(11, parse_number("10") + 1); - assertEqual(-0.1, parse_number("-1.1") + 1); -} - -test_parse_number(); diff --git a/test/test_path_extrude.scad b/test/test_path_extrude.scad new file mode 100644 index 00000000..45374a5e --- /dev/null +++ b/test/test_path_extrude.scad @@ -0,0 +1,74 @@ +include ; + +include ; +include ; +include ; +include ; + +module test_path_extrude_euler_angle() { + echo("==== test_path_extrude_euler_angle ===="); + + include ; + + module test_path_extrude(sections) { + + expected = [[[2.95434, 0.520746, 0.297969], [2.85599, 0.35729, -0.0111818], [2.4941, 0.325562, -0.0111818], [2.7952, 0.256268, -0.202247], [2.69684, 0.0928122, -0.511398], [2.98129, 0.213443, -0.320332], [3.28238, 0.144149, -0.511398], [3.15708, 0.287996, -0.202247], [3.44153, 0.408627, -0.0111818], [3.07964, 0.376899, -0.0111818]], [[2.83958, 0.799164, 0.153715], [2.77043, 0.623587, -0.156699], [2.41955, 0.529518, -0.156699], [2.7277, 0.515074, -0.348545], [2.65855, 0.339496, -0.658959], [2.91814, 0.506147, -0.467113], [3.22628, 0.491702, -0.658959], [3.07858, 0.609142, -0.348545], [3.33817, 0.775793, -0.156699], [2.98729, 0.681724, -0.156699]], [[2.68151, 1.04943, 0.0178389], [2.64148, 0.869239, -0.295041], [2.31207, 0.716097, -0.295041], [2.61675, 0.757873, -0.488412], [2.57672, 0.577678, -0.801292], [2.80505, 0.783691, -0.607921], [3.10973, 0.825467, -0.801292], [2.94616, 0.911014, -0.488412], [3.17449, 1.11703, -0.295041], [2.84507, 0.963886, -0.295041]], [[2.48791, 1.26518, -0.106704], [2.47471, 1.08723, -0.423132], [2.17621, 0.880208, -0.423132], [2.46656, 0.977256, -0.618695], [2.45336, 0.799308, -0.935122], [2.646, 1.03723, -0.739559], [2.93635, 1.13428, -0.935122], [2.76506, 1.18428, -0.618695], [2.95771, 1.42221, -0.423132], [2.6592, 1.21518, -0.423132]], [[2.26759, 1.44211, -0.217276], [2.27699, 1.27204, -0.538143], [2.01742, 1.0179, -0.538143], [2.2828, 1.16693, -0.736449], [2.29221, 0.99687, -1.05732], [2.44682, 1.25904, -0.85901], [2.7122, 1.40808, -1.05732], [2.54238, 1.42108, -0.736449], [2.69699, 1.68325, -0.538143], [2.43742, 1.42911, -0.538143]], [[2.02981, 1.57809, -0.311625], [2.05611, 1.41985, -0.637563], [1.84182, 1.12652, -0.637563], [2.07237, 1.32206, -0.839004], [2.09867, 1.16382, -1.16494], [2.21485, 1.44291, -0.963501], [2.4454, 1.63845, -1.16494], [2.28666, 1.61539, -0.839004], [2.40284, 1.89448, -0.637563], [2.18855, 1.60115, -0.637563]], [[1.78378, 1.6732, -0.387964], [1.82034, 1.52873, -0.719262], [1.65586, 1.20483, -0.719262], [1.84294, 1.43945, -0.924016], [1.8795, 1.29498, -1.25531], [1.95855, 1.58445, -1.05056], [2.14563, 1.81907, -1.25531], [2.00741, 1.76335, -0.924016], [2.08647, 2.05282, -0.719262], [1.92199, 1.72892, -0.719262]], [[1.53815, 1.72956, -0.445029], [1.57798, 1.59865, -0.781545], [1.46599, 1.25307, -0.781545], [1.60259, 1.51774, -0.989523], [1.64242, 1.38683, -1.32604], [1.68701, 1.68132, -1.11806], [1.82361, 1.94599, -1.32604], [1.71458, 1.86332, -0.989523], [1.75918, 2.15781, -0.781545], [1.64719, 1.81223, -0.781545]], [[1.30056, 1.75109, -0.48214], [1.3369, 1.6314, -0.823198], [1.27831, 1.27288, -0.823198], [1.35936, 1.55743, -1.03398], [1.3957, 1.43774, -1.37504], [1.40946, 1.73329, -1.16426], [1.49051, 2.01783, -1.37504], [1.41795, 1.91595, -1.03398], [1.4317, 2.21149, -0.823198], [1.37311, 1.85297, -0.823198]], [[1.0772, 1.74315, -0.499231], [1.10413, 1.63043, -0.843523], [1.09819, 1.26721, -0.843523], [1.12077, 1.56077, -1.05631], [1.1477, 1.44806, -1.4006], [1.13472, 1.74221, -1.18781], [1.1573, 2.03577, -1.4006], [1.12671, 1.924, -1.05631], [1.11373, 2.21814, -0.843523], [1.10779, 1.85492, -0.843523]], [[0.872557, 1.71206, -0.496867], [0.885448, 1.60054, -0.842357], [0.929966, 1.24001, -0.842357], [0.893415, 1.53162, -1.05588], [0.906305, 1.4201, -1.40137], [0.870825, 1.71184, -1.18785], [0.834273, 2.00345, -1.40137], [0.848896, 1.89215, -1.05588], [0.813415, 2.18389, -0.842357], [0.857934, 1.82336, -0.842357]], [[0.68925, 1.66452, -0.476198], [0.685146, 1.54745, -0.820065], [0.776653, 1.19589, -0.820065], [0.682609, 1.4751, -1.03259], [0.678504, 1.35803, -1.37645], [0.624487, 1.64766, -1.16393], [0.530443, 1.92686, -1.37645], [0.591102, 1.82666, -1.03259], [0.537084, 2.11628, -0.820065], [0.628591, 1.76472, -0.820065]], [[0.528059, 1.60696, -0.438872], [0.505828, 1.47737, -0.777514], [0.639793, 1.1397, -0.777514], [0.492088, 1.39728, -0.986807], [0.469857, 1.26769, -1.32545], [0.400802, 1.55647, -1.11616], [0.253097, 1.81405, -1.32545], [0.358123, 1.73495, -0.986807], [0.289068, 2.02373, -0.777514], [0.423033, 1.68606, -0.777514]], [[0.388193, 1.54493, -0.386859], [0.3484, 1.39646, -0.716009], [0.519408, 1.07596, -0.716009], [0.323806, 1.3047, -0.919435], [0.284013, 1.15624, -1.24858], [0.202918, 1.44608, -1.04516], [0.0073171, 1.67482, -1.24858], [0.152799, 1.62521, -0.919435], [0.0717037, 1.91505, -0.716009], [0.242712, 1.59454, -0.716009]], [[0.267797, 1.48254, -0.322209], [0.212192, 1.31034, -0.637203], [0.414076, 1.00833, -0.637203], [0.177826, 1.20391, -0.831881], [0.122221, 1.03171, -1.14688], [0.0318154, 1.32479, -0.952198], [-0.204435, 1.52037, -1.14688], [-0.0240582, 1.50592, -0.831881], [-0.114464, 1.799, -0.637203], [0.0874206, 1.49699, -0.637203]], [[0.164626, 1.42205, -0.246739], [0.0952018, 1.22359, -0.54298], [0.321094, 0.939094, -0.54298], [0.0522951, 1.10094, -0.726067], [-0.0171294, 0.902473, -1.02231], [-0.113831, 1.20096, -0.839221], [-0.382629, 1.3628, -1.02231], [-0.173596, 1.38543, -0.726067], [-0.270299, 1.68392, -0.54298], [-0.0444068, 1.39942, -0.54298]], [[0.0767633, 1.36372, -0.161682], [-0.00559166, 1.13943, -0.435312], [0.236618, 0.868684, -0.435312], [-0.0564899, 1.0008, -0.604425], [-0.138845, 0.776502, -0.878056], [-0.23764, 1.08245, -0.708943], [-0.530747, 1.21457, -0.878056], [-0.298699, 1.27154, -0.604425], [-0.397495, 1.57749, -0.435312], [-0.155285, 1.30675, -0.435312]], [[0.00305186, 1.30565, -0.0673166], [-0.0939741, 1.05937, -0.316114], [0.155642, 0.795445, -0.316114], [-0.153939, 0.907166, -0.46988], [-0.250965, 0.66089, -0.718677], [-0.345271, 0.976213, -0.564912], [-0.654853, 1.08793, -0.718677], [-0.403555, 1.17109, -0.46988], [-0.497862, 1.48642, -0.316114], [-0.248245, 1.22249, -0.316114]], [[-0.0574023, 1.24379, 0.0373803], [-0.174492, 0.983272, -0.187091], [0.0716547, 0.716105, -0.187091], [-0.246858, 0.822264, -0.325822], [-0.363948, 0.561749, -0.550294], [-0.443709, 0.887874, -0.411563], [-0.762221, 0.994032, -0.550294], [-0.493004, 1.08943, -0.325822], [-0.572766, 1.41556, -0.187091], [-0.326619, 1.14839, -0.187091]], [[-0.107744, 1.17276, 0.154856], [-0.252867, 0.90993, -0.0496585], [-0.0235737, 0.628166, -0.0496585], [-0.342558, 0.747492, -0.176055], [-0.487682, 0.484663, -0.380569], [-0.539702, 0.82124, -0.254173], [-0.858686, 0.940566, -0.380569], [-0.571852, 1.02926, -0.176055], [-0.623872, 1.36583, -0.0496585], [-0.394578, 1.08407, -0.0496585]], [[-0.157788, 1.08965, 0.288185], [-0.336278, 0.839185, 0.0948634], [-0.137798, 0.534929, 0.0948634], [-0.446591, 0.684388, -0.0246161], [-0.625081, 0.43392, -0.217938], [-0.637435, 0.776758, -0.0984585], [-0.946227, 0.926216, -0.217938], [-0.64507, 0.988643, -0.0246161], [-0.657425, 1.33148, 0.0948634], [-0.458945, 1.02723, 0.0948634]], [[-0.224404, 1.00075, 0.438532], [-0.43166, 0.774108, 0.244514], [-0.271733, 0.447934, 0.244514], [-0.559752, 0.634034, 0.124603], [-0.767007, 0.40739, -0.0694155], [-0.737756, 0.74905, 0.0504947], [-1.02577, 0.93515, -0.0694155], [-0.719678, 0.960208, 0.124603], [-0.690427, 1.30187, 0.244514], [-0.5305, 0.975695, 0.244514]], [[-0.321712, 0.920187, 0.602238], [-0.542524, 0.718669, 0.395844], [-0.416323, 0.378023, 0.395844], [-0.678993, 0.594124, 0.268285], [-0.899805, 0.392606, 0.061891], [-0.841332, 0.727682, 0.18945], [-1.104, 0.943782, 0.061891], [-0.805193, 0.93477, 0.268285], [-0.74672, 1.26985, 0.395844], [-0.62052, 0.9292, 0.395844]], [[-0.453384, 0.856184, 0.771126], [-0.669174, 0.672217, 0.544065], [-0.562189, 0.325057, 0.544065], [-0.80254, 0.558519, 0.403734], [-1.01833, 0.374552, 0.176673], [-0.951085, 0.702807, 0.317004], [-1.19144, 0.936269, 0.176673], [-0.909525, 0.905679, 0.403734], [-0.84228, 1.23393, 0.544065], [-0.735294, 0.886774, 0.544065]], [[-0.616662, 0.804142, 0.935705], [-0.811271, 0.628693, 0.684088], [-0.707072, 0.280686, 0.684088], [-0.931545, 0.520259, 0.52858], [-1.12615, 0.344809, 0.276963], [-1.07028, 0.668323, 0.432471], [-1.29475, 0.907895, 0.276963], [-1.03574, 0.868265, 0.52858], [-0.979868, 1.19178, 0.684088], [-0.875669, 0.843773, 0.684088]], [[-0.807064, 0.751934, 1.08765], [-0.96818, 0.57972, 0.811338], [-0.85302, 0.235185, 0.811338], [-1.06775, 0.473285, 0.640566], [-1.22887, 0.301071, 0.364251], [-1.20047, 0.620439, 0.535023], [-1.4152, 0.85854, 0.364251], [-1.18292, 0.81782, 0.640566], [-1.15451, 1.13719, 0.811338], [-1.03935, 0.792654, 0.811338]], [[-1.01887, 0.686248, 1.2206], [-1.13797, 0.516999, 0.922044], [-1.00178, 0.180221, 0.922044], [-1.21158, 0.412397, 0.737526], [-1.33068, 0.243148, 0.43897], [-1.34124, 0.55589, 0.623488], [-1.55103, 0.788066, 0.43897], [-1.34776, 0.749175, 0.737526], [-1.35832, 1.06192, 0.922044], [-1.22214, 0.725139, 0.922044]], [[-1.24454, 0.595764, 1.33008], [-1.31685, 0.43339, 1.01326], [-1.15288, 0.109227, 1.01326], [-1.36153, 0.333038, 0.817457], [-1.43384, 0.170664, 0.500641], [-1.49049, 0.471361, 0.696444], [-1.69914, 0.695171, 0.500641], [-1.5255, 0.657201, 0.817457], [-1.58215, 0.957898, 1.01326], [-1.41818, 0.633734, 1.01326]], [[-1.47474, 0.472335, 1.41327], [-1.49922, 0.323422, 1.08283], [-1.30347, 0.0173998, 1.08283], [-1.51434, 0.231388, 0.878606], [-1.53882, 0.0824751, 0.548164], [-1.64467, 0.36364, 0.752389], [-1.85554, 0.577628, 0.548164], [-1.71009, 0.53741, 0.878606], [-1.81594, 0.818575, 1.08283], [-1.62019, 0.512553, 1.08283]], [[-1.69895, 0.311332, 1.46876], [-1.67811, 0.183586, 1.12933], [-1.44889, -0.0982403, 1.12933], [-1.66523, 0.104635, 0.919549], [-1.64439, -0.0231113, 0.580119], [-1.79893, 0.230018, 0.789898], [-2.01527, 0.432892, 0.580119], [-1.89445, 0.38646, 0.919549], [-2.04899, 0.63959, 1.12933], [-1.81977, 0.357764, 1.12933]], [[-1.90627, 0.111583, 1.49621], [-1.84573, 0.0125021, 1.15199], [-1.58339, -0.238781, 1.15199], [-1.80831, -0.0487334, 0.939256], [-1.74777, -0.147815, 0.595041], [-1.94732, 0.0687223, 0.807777], [-2.17225, 0.25877, 0.595041], [-2.07065, 0.20255, 0.939256], [-2.2702, 0.419087, 1.15199], [-2.00786, 0.167804, 1.15199]], [[-2.08616, -0.124898, 1.49615], [-1.994, -0.189041, 1.15067], [-1.70072, -0.403413, 1.15067], [-1.93704, -0.228683, 0.937149], [-1.84488, -0.292825, 0.591668], [-2.08309, -0.120694, 0.805187], [-2.31941, 0.0540357, 0.591668], [-2.23031, -0.0143111, 0.937149], [-2.46853, 0.15782, 1.15067], [-2.17525, -0.0565516, 1.15067]], [[-2.22917, -0.393318, 1.46977], [-2.11514, -0.418151, 1.12575], [-1.79482, -0.589512, 1.12575], [-2.04467, -0.433499, 0.913138], [-1.93064, -0.458332, 0.569122], [-2.19908, -0.337077, 0.781735], [-2.44892, -0.181064, 0.569122], [-2.36498, -0.262138, 0.913138], [-2.63342, -0.140883, 1.12575], [-2.3131, -0.312244, 1.12575]], [[-2.32737, -0.686562, 1.41874], [-2.20214, -0.670005, 1.07814], [-1.86026, -0.79283, 1.07814], [-2.12474, -0.659772, 0.867633], [-1.99951, -0.643215, 0.527032], [-2.2882, -0.577538, 0.737535], [-2.55268, -0.44448, 0.527032], [-2.46662, -0.536947, 0.867633], [-2.75531, -0.471269, 1.07814], [-2.41343, -0.594095, 1.07814]], [[-2.37483, -0.995708, 1.34513], [-2.2492, -0.938106, 1.00918], [-1.89267, -1.00776, 1.00918], [-2.17155, -0.902506, 0.801547], [-2.04592, -0.844905, 0.465593], [-2.34391, -0.837458, 0.673224], [-2.6228, -0.732209, 0.465593], [-2.52808, -0.832856, 0.801547], [-2.82608, -0.82541, 1.00918], [-2.46955, -0.89506, 1.00918]], [[-2.36788, -1.31057, 1.25135], [-2.2521, -1.21464, 0.920656], [-1.88907, -1.22767, 0.920656], [-2.18055, -1.15535, 0.716275], [-2.06478, -1.05942, 0.385579], [-2.3607, -1.11065, 0.58996], [-2.65218, -1.03832, 0.385579], [-2.54359, -1.14231, 0.716275], [-2.83951, -1.19354, 0.920656], [-2.47647, -1.20658, 0.920656]], [[-2.3053, -1.62027, 1.14009], [-2.20849, -1.49088, 0.81474], [-1.84808, -1.44536, 0.81474], [-2.14866, -1.41091, 0.613664], [-2.05186, -1.28151, 0.288316], [-2.33443, -1.38961, 0.489392], [-2.63501, -1.35516, 0.288316], [-2.50907, -1.45642, 0.613664], [-2.79164, -1.56453, 0.81474], [-2.43124, -1.51901, 0.81474]], [[-2.18841, -1.91387, 1.01427], [-2.11802, -1.75767, 0.693943], [-1.77003, -1.65341, 0.693943], [-2.07452, -1.66113, 0.495966], [-2.00413, -1.50493, 0.175634], [-2.2627, -1.66591, 0.37361], [-2.56719, -1.67363, 0.175634], [-2.42251, -1.76539, 0.495966], [-2.68108, -1.92636, 0.693943], [-2.33309, -1.82211, 0.693943]], [[-2.021, -2.18096, 0.877056], [-1.98242, -2.00594, 0.561075], [-1.65689, -1.8447, 0.561075], [-1.95857, -1.89777, 0.365788], [-1.91999, -1.72274, 0.0498067], [-2.14502, -1.93056, 0.245094], [-2.44671, -1.98363, 0.0498067], [-2.2841, -2.059, 0.365788], [-2.50913, -2.26683, 0.561075], [-2.18361, -2.10559, 0.561075]], [[-1.80913, -2.41227, 0.731738], [-1.80541, -2.22716, 0.419191], [-1.51217, -2.01274, 0.419191], [-1.80312, -2.11275, 0.226026], [-1.79941, -1.92764, -0.0865211], [-1.98294, -2.17456, 0.106644], [-2.27388, -2.27458, -0.0865211], [-2.09636, -2.32717, 0.226026], [-2.27989, -2.57409, 0.419191], [-1.98665, -2.35968, 0.419191]], [[-1.56075, -2.60019, 0.581733], [-1.59254, -2.41384, 0.271522], [-1.34069, -2.15204, 0.271522], [-1.61218, -2.29867, 0.0798016], [-1.64397, -2.11233, -0.230409], [-1.77997, -2.3893, -0.0386883], [-2.05147, -2.53593, -0.230409], [-1.86403, -2.56047, 0.0798016], [-2.00003, -2.83744, 0.271522], [-1.74819, -2.57564, 0.271522]], [[-1.28526, -2.73917, 0.430501], [-1.35081, -2.55991, 0.121414], [-1.14827, -2.25834, 0.121414], [-1.39133, -2.44912, -0.0696123], [-1.45689, -2.26986, -0.378699], [-1.54155, -2.56703, -0.187673], [-1.78461, -2.7578, -0.378699], [-1.59388, -2.75068, -0.0696123], [-1.67854, -3.04785, 0.121414], [-1.476, -2.74628, 0.121414]], [[-0.992912, -2.826, 0.28148], [-1.0884, -2.661, -0.0277503], [-0.941415, -2.3288, -0.0277503], [-1.14741, -2.55903, -0.218865], [-1.2429, -2.39403, -0.528095], [-1.27472, -2.70132, -0.33698], [-1.48072, -2.93155, -0.528095], [-1.2944, -2.89123, -0.218865], [-1.32622, -3.19853, -0.0277503], [-1.17924, -2.86632, -0.0277503]], [[-0.694221, -2.85993, 0.13801], [-0.814122, -2.71469, -0.172622], [-0.727006, -2.36201, -0.172622], [-0.888226, -2.62492, -0.364604], [-1.00813, -2.47967, -0.675236], [-0.987865, -2.7874, -0.483255], [-1.14908, -3.0503, -0.675236], [-0.975342, -2.97759, -0.364604], [-0.955079, -3.28532, -0.172622], [-0.867963, -2.93265, -0.172622]], [[-0.399355, -2.84257, 0.00326219], [-0.537039, -2.72051, -0.309965], [-0.511948, -2.35811, -0.309965], [-0.622132, -2.64508, -0.50355], [-0.759815, -2.52302, -0.816777], [-0.690229, -2.82243, -0.623192], [-0.800413, -3.1094, -0.816777], [-0.647222, -3.00748, -0.50355], [-0.577636, -3.3069, -0.309965], [-0.552546, -2.94449, -0.309965]], [[-0.117609, -2.77771, -0.11984], [-0.265958, -2.68003, -0.436725], [-0.302879, -2.31864, -0.436725], [-0.357643, -2.61966, -0.63257], [-0.505993, -2.52197, -0.949455], [-0.39149, -2.80569, -0.753609], [-0.446254, -3.10671, -0.949455], [-0.320723, -2.98105, -0.63257], [-0.206219, -3.26477, -0.436725], [-0.24314, -2.90338, -0.436725]], [[0.143065, -2.67101, -0.228697], [-0.0090087, -2.59661, -0.550106], [-0.105874, -2.24649, -0.550106], [-0.102996, -2.55063, -0.748748], [-0.25507, -2.47623, -1.07016], [-0.101217, -2.7386, -0.871516], [-0.098338, -3.04273, -1.07016], [-0.00613011, -2.90075, -0.748748], [0.147723, -3.16311, -0.550106], [0.0508576, -2.813, -0.550106]], [[0.376406, -2.52957, -0.321107], [0.226758, -2.47527, -0.647639], [0.0738218, -2.14576, -0.647639], [0.13427, -2.44171, -0.849446], [-0.0153776, -2.38741, -1.17598], [0.171629, -2.62462, -0.97417], [0.232078, -2.92057, -1.17598], [0.287206, -2.77122, -0.849446], [0.474213, -3.00843, -0.647639], [0.321277, -2.67892, -0.647639]], [[0.578089, -2.3615, -0.395338], [0.435699, -2.32233, -0.727237], [0.232049, -2.02151, -0.727237], [0.347697, -2.29813, -0.932362], [0.205306, -2.25896, -1.26426], [0.41917, -2.46908, -1.05914], [0.534818, -2.7457, -1.26426], [0.551346, -2.59895, -0.932362], [0.765211, -2.80907, -0.727237], [0.561561, -2.50825, -0.727237]], [[0.74586, -2.17537, -0.450189], [0.613832, -2.14505, -0.787258], [0.365931, -1.87951, -0.787258], [0.532234, -2.12631, -0.995578], [0.400206, -2.096, -1.33265], [0.635015, -2.27885, -1.12433], [0.801317, -2.52565, -1.33265], [0.780135, -2.39185, -0.995578], [1.01494, -2.5747, -0.787258], [0.767043, -2.30916, -0.787258]], [[0.879532, -1.97971, -0.485047], [0.758988, -1.95118, -0.826545], [0.474016, -1.72588, -0.826545], [0.684488, -1.93354, -1.0376], [0.563944, -1.90501, -1.3791], [0.814566, -2.06188, -1.16804], [1.02504, -2.26954, -1.3791], [0.96946, -2.15884, -1.0376], [1.22008, -2.31571, -0.826545], [0.93511, -2.09042, -0.826545]], [[0.980851, -1.7825, -0.499918], [0.870846, -1.7485, -0.84446], [0.556317, -1.56673, -0.84446], [0.80286, -1.72748, -1.0574], [0.692855, -1.69348, -1.40194], [0.955231, -1.82683, -1.189], [1.20177, -1.98758, -1.40194], [1.11739, -1.90924, -1.0574], [1.37977, -2.04259, -0.84446], [1.06524, -1.86083, -0.84446]], [[1.05321, -1.59063, -0.495434], [0.950847, -1.54434, -0.840898], [0.614247, -1.40772, -0.840898], [0.887582, -1.51574, -1.05441], [0.785217, -1.46945, -1.39987], [1.05651, -1.5825, -1.18636], [1.32985, -1.69052, -1.39987], [1.22418, -1.65236, -1.05441], [1.49548, -1.76541, -0.840898], [1.15888, -1.62878, -0.840898]], [[1.10122, -1.40953, -0.472809], [1.00197, -1.34518, -0.816283], [0.650423, -1.25365, -0.816283], [0.940639, -1.3054, -1.02856], [0.841395, -1.24104, -1.37204], [1.12, -1.33739, -1.15976], [1.41022, -1.38914, -1.37204], [1.29219, -1.39693, -1.02856], [1.5708, -1.49327, -0.816283], [1.21925, -1.40174, -0.816283]], [[1.13009, -1.24291, -0.433734], [1.02841, -1.1562, -0.771535], [0.668336, -1.10812, -0.771535], [0.965573, -1.10261, -0.980307], [0.863897, -1.0159, -1.31811], [1.14928, -1.0992, -1.10934], [1.44651, -1.09369, -1.31811], [1.32565, -1.15068, -0.980307], [1.61103, -1.23399, -0.771535], [1.25095, -1.18591, -0.771535]], [[1.14497, -1.09264, -0.380204], [1.0351, -0.981095, -0.708003], [0.671916, -0.973238, -0.708003], [0.967199, -0.912155, -0.910594], [0.857329, -0.800609, -1.23839], [1.14969, -0.874404, -1.0358], [1.44498, -0.813322, -1.23839], [1.33039, -0.920013, -0.910594], [1.62275, -0.993808, -0.708003], [1.25956, -0.985951, -0.708003]], [[1.15023, -0.959016, -0.314258], [1.02724, -0.821906, -0.627372], [0.665015, -0.849406, -0.627372], [0.951232, -0.737167, -0.820887], [0.828243, -0.600057, -1.134], [1.12812, -0.667799, -0.940486], [1.41434, -0.55556, -1.134], [1.31346, -0.709666, -0.820887], [1.61334, -0.777409, -0.627372], [1.25111, -0.804909, -0.627372]], [[1.14877, -0.841118, -0.237666], [1.00976, -0.679012, -0.531543], [0.650864, -0.735214, -0.531543], [0.923848, -0.578825, -0.713169], [0.784838, -0.416719, -1.00705], [1.09256, -0.482171, -0.825421], [1.36555, -0.325782, -1.00705], [1.28275, -0.522623, -0.713169], [1.59047, -0.588075, -0.531543], [1.23157, -0.644277, -0.531543]], [[1.14151, -0.737354, -0.151573], [0.986833, -0.551226, -0.422491], [0.631622, -0.627329, -0.422491], [0.891235, -0.436193, -0.589927], [0.736553, -0.250066, -0.860844], [1.05168, -0.318065, -0.693408], [1.3113, -0.12693, -0.860844], [1.24644, -0.360091, -0.589927], [1.56158, -0.428091, -0.422491], [1.20636, -0.504193, -0.422491]], [[1.12714, -0.645722, -0.0561277], [0.96155, -0.435872, -0.302111], [0.608237, -0.520347, -0.302111], [0.859207, -0.306179, -0.454137], [0.693613, -0.0963293, -0.700121], [1.01432, -0.173815, -0.548095], [1.26529, 0.0403526, -0.700121], [1.21252, -0.221704, -0.454137], [1.53322, -0.29919, -0.302111], [1.17991, -0.383665, -0.302111]], [[1.10246, -0.563247, 0.049856], [0.935951, -0.328757, -0.17208], [0.581157, -0.40678, -0.17208], [0.833044, -0.183834, -0.309244], [0.666537, 0.0506569, -0.531181], [0.988719, -0.0460451, -0.394017], [1.24061, 0.176901, -0.531181], [1.18784, -0.10581, -0.309244], [1.51002, -0.202512, -0.17208], [1.15523, -0.280536, -0.17208]], [[1.06463, -0.484068, 0.168962], [0.911933, -0.224176, -0.0337838], [0.552719, -0.278318, -0.0337838], [0.817561, -0.0635537, -0.159088], [0.664864, 0.196338, -0.361833], [0.981242, 0.0691779, -0.236529], [1.24608, 0.283942, -0.361833], [1.17677, -0.0094114, -0.159088], [1.49315, -0.136572, -0.0337838], [1.13394, -0.190714, -0.0337838]], [[1.01714, -0.39776, 0.304211], [0.893254, -0.115881, 0.111432], [0.530286, -0.130728, 0.111432], [0.816691, 0.0583301, -0.00771108], [0.69281, 0.340209, -0.200489], [0.993699, 0.175175, -0.0813458], [1.2801, 0.364233, -0.200489], [1.17966, 0.0731774, -0.00771108], [1.48055, -0.0918575, 0.111432], [1.11758, -0.106705, 0.111432]], [[0.975085, -0.293199, 0.45634], [0.886209, 0.000219066, 0.261474], [0.524122, 0.0295245, 0.261474], [0.831281, 0.181561, 0.14104], [0.742404, 0.474979, -0.0538266], [1.02111, 0.275525, 0.0666074], [1.32827, 0.427562, -0.0538266], [1.19337, 0.152256, 0.14104], [1.47208, -0.0471982, 0.261474], [1.10999, -0.0178927, 0.261474]], [[0.957352, -0.166154, 0.621088], [0.895524, 0.124916, 0.412709], [0.537962, 0.189067, 0.412709], [0.857313, 0.304806, 0.283924], [0.795485, 0.595876, 0.0755446], [1.05468, 0.376338, 0.20433], [1.37403, 0.492077, 0.0755446], [1.21487, 0.240655, 0.283924], [1.47407, 0.0211169, 0.412709], [1.11651, 0.0852681, 0.412709]], [[0.971166, -0.0177755, 0.789959], [0.920102, 0.258986, 0.56026], [0.566218, 0.341039, 0.56026], [0.888543, 0.430034, 0.418299], [0.837479, 0.706796, 0.1886], [1.08775, 0.485037, 0.330562], [1.41007, 0.574032, 0.1886], [1.24243, 0.347982, 0.418299], [1.4927, 0.126222, 0.56026], [1.13881, 0.208275, 0.56026]], [[1.00994, 0.152165, 0.953501], [0.954154, 0.405377, 0.699065], [0.600525, 0.488519, 0.699065], [0.919677, 0.56187, 0.541814], [0.863892, 0.815082, 0.287378], [1.11692, 0.607204, 0.444628], [1.43608, 0.680555, 0.287378], [1.27331, 0.478728, 0.541814], [1.52634, 0.27085, 0.699065], [1.17271, 0.353992, 0.699065]], [[1.06053, 0.345946, 1.1036], [0.989993, 0.567684, 0.824633], [0.633638, 0.638231, 0.824633], [0.946398, 0.704725, 0.652221], [0.875859, 0.926463, 0.373254], [1.13969, 0.745821, 0.545665], [1.45245, 0.812316, 0.373254], [1.30275, 0.634179, 0.652221], [1.56659, 0.453537, 0.824633], [1.21023, 0.524084, 0.824633]], [[1.10857, 0.565055, 1.23411], [1.01945, 0.74817, 0.933285], [0.659284, 0.795586, 0.933285], [0.96437, 0.861342, 0.747368], [0.875252, 1.04446, 0.446548], [1.15292, 0.901981, 0.632465], [1.45801, 0.967737, 0.446548], [1.32453, 0.813926, 0.747368], [1.60221, 0.67145, 0.933285], [1.24204, 0.718866, 0.933285]], [[1.14064, 0.808275, 1.34075], [1.03448, 0.94685, 1.02217], [0.671568, 0.963109, 1.02217], [0.968865, 1.03249, 0.825276], [0.862703, 1.17107, 0.506697], [1.1526, 1.07538, 0.70359], [1.4499, 1.14476, 0.506697], [1.33177, 1.01624, 0.825276], [1.62167, 0.920543, 1.02217], [1.25876, 0.936802, 1.02217]], [[1.14527, 1.07126, 1.42089], [1.02763, 1.16136, 1.08921], [0.664964, 1.14043, 1.08921], [0.954926, 1.21704, 0.884224], [0.837285, 1.30714, 0.552549], [1.13413, 1.26439, 0.757536], [1.42409, 1.341, 0.552549], [1.31759, 1.23797, 0.884224], [1.61444, 1.19521, 1.08921], [1.25177, 1.17429, 1.08921]], [[1.11351, 1.34694, 1.47323], [0.992537, 1.38719, 1.13306], [0.634666, 1.32478, 1.13306], [0.917773, 1.41207, 0.922829], [0.796802, 1.45232, 0.582665], [1.09274, 1.46601, 0.792898], [1.37585, 1.5533, 0.582665], [1.27564, 1.47448, 0.922829], [1.57158, 1.48817, 1.13306], [1.21371, 1.42576, 1.13306]], [[1.0392, 1.62627, 1.49755], [0.924273, 1.61811, 1.15303], [0.576991, 1.51152, 1.15303], [0.853248, 1.61307, 0.940111], [0.738326, 1.60491, 0.595593], [1.02398, 1.67583, 0.808517], [1.30024, 1.77738, 0.595593], [1.20053, 1.71966, 0.940111], [1.48619, 1.79057, 1.15303], [1.13891, 1.68398, 1.15303]], [[0.919151, 1.89904, 1.49448], [0.819702, 1.84662, 1.14904], [0.489705, 1.69473, 1.14904], [0.75824, 1.81422, 0.935545], [0.658792, 1.76179, 0.590106], [0.924204, 1.88806, 0.803599], [1.19274, 2.00754, 0.590106], [1.08824, 1.9661, 0.935545], [1.35365, 2.09236, 1.14904], [1.02365, 1.94048, 1.14904]], [[0.753114, 2.15464, 1.46524], [0.677663, 2.06446, 1.12152], [0.37223, 1.8678, 1.12152], [0.631033, 2.00873, 0.909094], [0.555582, 1.91855, 0.565377], [0.790982, 2.09583, 0.777806], [1.04978, 2.23676, 0.565377], [0.936466, 2.20539, 0.909094], [1.17187, 2.38267, 1.12152], [0.866432, 2.18601, 1.12152]], [[0.543589, 2.38273, 1.41157], [0.499062, 2.26317, 1.07144], [0.225727, 2.02389, 1.07144], [0.471543, 2.18927, 0.861227], [0.427016, 2.06971, 0.521098], [0.623465, 2.29149, 0.73131], [0.869281, 2.45687, 0.521098], [0.744878, 2.42855, 0.861227], [0.941327, 2.65033, 1.07144], [0.667992, 2.41105, 1.07144]], [[0.295602, 2.57383, 1.33558], [0.286851, 2.43452, 1.00019], [0.0530577, 2.15648, 1.00019], [0.281442, 2.34842, 0.792912], [0.27269, 2.20911, 0.457529], [0.422591, 2.46705, 0.664807], [0.650975, 2.65899, 0.457529], [0.515235, 2.62646, 0.792912], [0.665136, 2.8844, 1.00019], [0.431343, 2.60636, 1.00019]], [[0.0163643, 2.71984, 1.2397], [0.0458959, 2.57106, 0.909605], [-0.141373, 2.25978, 0.909605], [0.0641476, 2.47912, 0.705597], [0.0936792, 2.33034, 0.375505], [0.191166, 2.61467, 0.579513], [0.396687, 2.83401, 0.375505], [0.251417, 2.7904, 0.705597], [0.348904, 3.07473, 0.909605], [0.161635, 2.76345, 0.909605]], [[-0.285141, 2.81449, 1.12665], [-0.217257, 2.66655, 0.80189], [-0.351869, 2.32914, 0.80189], [-0.175303, 2.57511, 0.601176], [-0.107419, 2.42717, 0.276414], [-0.0661791, 2.72713, 0.477128], [0.110387, 2.97311, 0.276414], [-0.0406916, 2.91252, 0.601176], [0.000548354, 3.21249, 0.80189], [-0.134063, 2.87508, 0.80189]], [[-0.598659, 2.85372, 0.999401], [-0.494723, 2.71629, 0.679595], [-0.571778, 2.36128, 0.679595], [-0.430486, 2.63135, 0.481943], [-0.32655, 2.49392, 0.162137], [-0.343164, 2.79826, 0.359788], [-0.201872, 3.06833, 0.162137], [-0.353431, 2.98636, 0.481943], [-0.370045, 3.2907, 0.679595], [-0.4471, 2.93569, 0.679595]], [[-0.913236, 2.83588, 0.861107], [-0.777688, 2.71747, 0.545561], [-0.793887, 2.35456, 0.545561], [-0.693915, 2.64428, 0.350542], [-0.558367, 2.52586, 0.0349953], [-0.632129, 2.82334, 0.230014], [-0.532157, 3.11306, 0.0349953], [-0.677716, 3.00719, 0.350542], [-0.751477, 3.30467, 0.545561], [-0.767676, 2.94176, 0.545561]], [[-1.21784, 2.76188, 0.715092], [-1.05689, 2.66928, 0.402864], [-1.01083, 2.30894, 0.402864], [-0.957414, 2.61205, 0.209897], [-0.796463, 2.51945, -0.102331], [-0.924399, 2.79938, 0.0906365], [-0.870981, 3.10249, -0.102331], [-1.00347, 2.97239, 0.209897], [-1.1314, 3.25232, 0.402864], [-1.08535, 2.89198, 0.402864]], [[-1.50198, 2.63505, 0.564777], [-1.32309, 2.573, 0.254755], [-1.2155, 2.22603, 0.254755], [-1.21254, 2.53464, 0.0631499], [-1.03365, 2.47259, -0.246873], [-1.21071, 2.72538, -0.0552683], [-1.20775, 3.034, -0.246873], [-1.32013, 2.88161, 0.0631499], [-1.49719, 3.13441, 0.254755], [-1.38959, 2.78744, 0.254755]], [[-1.75633, 2.46101, 0.413623], [-1.56762, 2.43189, 0.104584], [-1.40136, 2.10889, 0.104584], [-1.45099, 2.41389, -0.0864133], [-1.26227, 2.38477, -0.395453], [-1.48165, 2.60239, -0.204456], [-1.53128, 2.90739, -0.395453], [-1.61724, 2.73689, -0.0864133], [-1.83662, 2.95451, 0.104584], [-1.67037, 2.63151, 0.104584]], [[-1.97318, 2.24721, 0.26506], [-1.78274, 2.25102, -0.0442647], [-1.56282, 1.96188, -0.0442647], [-1.66503, 2.25338, -0.235438], [-1.47459, 2.25719, -0.544763], [-1.7282, 2.43354, -0.35359], [-1.83042, 2.72503, -0.544763], [-1.88495, 2.54252, -0.235438], [-2.13856, 2.71887, -0.0442647], [-1.91865, 2.42972, -0.0442647]], [[-2.14686, 2.00251, 0.122414], [-1.96209, 2.03698, -0.188451], [-1.69537, 1.79035, -0.188451], [-1.84789, 2.05829, -0.380577], [-1.66312, 2.09276, -0.691442], [-1.94216, 2.22388, -0.499317], [-2.09468, 2.49182, -0.691442], [-2.11461, 2.30492, -0.380577], [-2.39365, 2.43604, -0.188451], [-2.12693, 2.18941, -0.188451]], [[-2.27393, 1.73658, -0.0111679], [-2.10096, 1.7975, -0.324755], [-1.7958, 1.60041, -0.324755], [-1.99406, 1.83514, -0.518562], [-1.82109, 1.89605, -0.83215], [-2.11659, 1.98021, -0.638342], [-2.31485, 2.21494, -0.83215], [-2.29922, 2.03222, -0.518562], [-2.59473, 2.11638, -0.324755], [-2.28956, 1.9193, -0.324755]], [[-2.35331, 1.45938, -0.132796], [-2.1965, 1.54102, -0.450149], [-1.8623, 1.39862, -0.450149], [-2.09959, 1.59147, -0.646284], [-1.94278, 1.67311, -0.963637], [-2.24624, 1.71066, -0.767502], [-2.48353, 1.90351, -0.963637], [-2.43379, 1.73387, -0.646284], [-2.73725, 1.77142, -0.450149], [-2.40305, 1.62903, -0.450149]], [[-2.38615, 1.18056, -0.239911], [-2.24779, 1.27629, -0.56187], [-1.89451, 1.19169, -0.56187], [-2.16228, 1.33546, -0.760852], [-2.02392, 1.4312, -1.08281], [-2.32777, 1.42432, -0.88383], [-2.59555, 1.56809, -1.08281], [-2.51556, 1.42006, -0.760852], [-2.81941, 1.41318, -0.56187], [-2.46613, 1.32858, -0.56187]], [[-2.3757, 0.908979, -0.33036], [-2.25585, 1.01189, -0.657488], [-1.89349, 0.986177, -0.657488], [-2.18179, 1.07549, -0.859665], [-2.06194, 1.17841, -1.18679], [-2.35996, 1.1307, -0.984616], [-2.64826, 1.22001, -1.18679], [-2.54415, 1.10121, -0.859665], [-2.84216, 1.0535, -0.657488], [-2.4798, 1.02778, -0.657488]], [[-2.32699, 0.652279, -0.402468], [-2.22354, 0.755769, -0.734965], [-1.86172, 0.788142, -0.734965], [-2.15961, 0.81973, -0.94046], [-2.05616, 0.923221, -1.27296], [-2.34372, 0.839253, -1.06746], [-2.64161, 0.870841, -1.27296], [-2.52144, 0.787358, -0.94046], [-2.80899, 0.70339, -0.734965], [-2.44716, 0.735762, -0.734965]], [[-2.24647, 0.41651, -0.455097], [-2.15532, 0.514873, -0.79271], [-1.80286, 0.602855, -0.79271], [-2.09899, 0.575664, -1.00137], [-2.00784, 0.674027, -1.33898], [-2.282, 0.55886, -1.13032], [-2.57812, 0.531669, -1.33898], [-2.45144, 0.487682, -1.00137], [-2.72561, 0.372514, -0.79271], [-2.37315, 0.460497, -0.79271]], [[-2.14151, 0.205886, -0.487702], [-2.05694, 0.29479, -0.829624], [-1.72161, 0.434506, -0.829624], [-2.00467, 0.349736, -1.04094], [-1.9201, 0.43864, -1.38286], [-2.17961, 0.297346, -1.17154], [-2.46267, 0.212576, -1.38286], [-2.34, 0.210021, -1.04094], [-2.59951, 0.0687256, -0.829624], [-2.26418, 0.208441, -0.829624]], [[-2.01989, 0.022655, -0.500361], [-1.93505, 0.0995002, -0.845126], [-1.6233, 0.285977, -0.845126], [-1.88262, 0.146993, -1.0582], [-1.79778, 0.223838, -1.40297], [-2.04289, 0.0610964, -1.18989], [-2.30221, -0.0778875, -1.40297], [-2.19438, -0.0394837, -1.0582], [-2.43949, -0.202226, -0.845126], [-2.12773, -0.0157489, -0.845126]], [[-1.88926, -0.132885, -0.493773], [-1.79677, -0.0687764, -0.839173], [-1.51354, 0.158709, -0.839173], [-1.73961, -0.0291553, -1.05264], [-1.64712, 0.0349532, -1.39804], [-1.87932, -0.145261, -1.18457], [-2.10538, -0.333125, -1.39804], [-2.02283, -0.25664, -1.05264], [-2.25504, -0.436855, -0.839173], [-1.97181, -0.20937, -0.839173]], [[-1.7565, -0.262182, -0.469212], [-1.64914, -0.20959, -0.812248], [-1.39778, 0.0526804, -0.812248], [-1.58279, -0.177086, -1.02426], [-1.47542, -0.124493, -1.36729], [-1.69713, -0.319089, -1.15528], [-1.88213, -0.548855, -1.36729], [-1.83414, -0.439356, -1.02426], [-2.05584, -0.633952, -0.812248], [-1.80449, -0.371682, -0.812248]], [[-1.62726, -0.368039, -0.428415], [-1.49868, -0.324135, -0.765319], [-1.28078, -0.0334733, -0.765319], [-1.41921, -0.297002, -0.973538], [-1.29063, -0.253099, -1.31044], [-1.50477, -0.459871, -1.10222], [-1.6432, -0.723399, -1.31044], [-1.63711, -0.587664, -0.973538], [-1.85125, -0.794436, -0.765319], [-1.63335, -0.503774, -0.765319]], [[-1.50556, -0.45402, -0.373394], [-1.35092, -0.414989, -0.699782], [-1.16616, -0.102212, -0.699782], [-1.25535, -0.390866, -0.901501], [-1.10071, -0.351834, -1.22789], [-1.31047, -0.569263, -1.02617], [-1.39966, -0.857916, -1.22789], [-1.44011, -0.703642, -0.901501], [-1.64987, -0.921071, -0.699782], [-1.46511, -0.608295, -0.699782]], [[-1.39361, -0.523727, -0.306174], [-1.21006, -0.485721, -0.61735], [-1.05601, -0.15673, -0.61735], [-1.09662, -0.462231, -0.809667], [-0.913071, -0.424225, -1.12084], [-1.12172, -0.651041, -0.928526], [-1.16233, -0.956543, -1.12084], [-1.25067, -0.791222, -0.809667], [-1.45932, -1.01804, -0.61735], [-1.30527, -0.689048, -0.61735]], [[-1.2919, -0.580006, -0.228475], [-1.07871, -0.540443, -0.519941], [-0.950505, -0.200548, -0.519941], [-0.946957, -0.515992, -0.700076], [-0.73377, -0.476429, -0.991541], [-0.944764, -0.710947, -0.811406], [-0.941216, -1.02639, -0.991541], [-1.07517, -0.855887, -0.700076], [-1.28616, -1.09041, -0.519941], [-1.15795, -0.75051, -0.519941]], [[-1.19934, -0.624272, -0.141349], [-0.957732, -0.58336, -0.409527], [-0.847562, -0.237197, -0.409527], [-0.808412, -0.558075, -0.57527], [-0.566808, -0.517163, -0.843448], [-0.784216, -0.756388, -0.677705], [-0.745067, -1.07727, -0.843448], [-0.918582, -0.904237, -0.57527], [-1.13599, -1.14346, -0.409527], [-1.02582, -0.7973, -0.409527]], [[-1.11335, -0.656197, -0.044808], [-0.846136, -0.618455, -0.287987], [-0.742712, -0.270217, -0.287987], [-0.680986, -0.595129, -0.438281], [-0.413769, -0.557387, -0.68146], [-0.642837, -0.795936, -0.531167], [-0.581111, -1.12085, -0.68146], [-0.78441, -0.943367, -0.438281], [-1.01348, -1.18192, -0.287987], [-0.910055, -0.833678, -0.287987]], [[-1.02953, -0.674488, 0.0624958], [-0.741119, -0.649606, -0.156966], [-0.629552, -0.303891, -0.156966], [-0.562869, -0.634229, -0.2926], [-0.274453, -0.609347, -0.512062], [-0.521656, -0.838388, -0.376427], [-0.454973, -1.16873, -0.512062], [-0.674436, -0.979943, -0.2926], [-0.921639, -1.20898, -0.156966], [-0.810072, -0.86327, -0.156966]], [[-0.941149, -0.680164, 0.183273], [-0.638617, -0.681463, -0.0178214], [-0.502375, -0.344708, -0.0178214], [-0.451643, -0.682267, -0.142105], [-0.149111, -0.683567, -0.343199], [-0.420288, -0.89089, -0.218916], [-0.369555, -1.22845, -0.343199], [-0.587885, -1.01902, -0.142105], [-0.859062, -1.22635, -0.0178214], [-0.72282, -0.88959, -0.0178214]], [[-0.841129, -0.682668, 0.320454], [-0.535334, -0.720642, 0.128064], [-0.362312, -0.401221, 0.128064], [-0.346343, -0.744111, 0.00916022], [-0.040549, -0.782084, -0.18323], [-0.336474, -0.956028, -0.0643262], [-0.320505, -1.29892, -0.18323], [-0.519365, -1.06353, 0.00916022], [-0.815291, -1.23747, 0.128064], [-0.642268, -0.918054, 0.128064]], [[-0.728356, -0.701405, 0.474311], [-0.431276, -0.774534, 0.27845], [-0.221075, -0.478253, 0.27845], [-0.24767, -0.81973, 0.157402], [0.0494106, -0.892859, -0.0384589], [-0.264106, -1.03077, 0.0825896], [-0.2907, -1.37225, -0.0384589], [-0.45787, -1.11601, 0.157402], [-0.771387, -1.25392, 0.27845], [-0.561187, -0.957645, 0.27845]], [[-0.609066, -0.753814, 0.639991], [-0.328039, -0.847063, 0.429528], [-0.0914566, -0.571391, 0.429528], [-0.154355, -0.904694, 0.299455], [0.126672, -0.997943, 0.0889923], [-0.193228, -1.11069, 0.219066], [-0.256126, -1.44399, 0.0889923], [-0.390937, -1.18037, 0.299455], [-0.710837, -1.29311, 0.429528], [-0.474255, -1.01744, 0.429528]], [[-0.487096, -0.84401, 0.808722], [-0.223881, -0.937201, 0.576345], [0.0248025, -0.672394, 0.576345], [-0.0612057, -0.994796, 0.432727], [0.202009, -1.08799, 0.200349], [-0.114361, -1.19405, 0.343967], [-0.200369, -1.51645, 0.200349], [-0.309889, -1.2596, 0.432727], [-0.62626, -1.36567, 0.576345], [-0.377576, -1.10086, 0.576345]], [[-0.358119, -0.965594, 0.971127], [-0.11303, -1.04121, 0.713875], [0.135194, -0.775975, 0.713875], [0.0384441, -1.08795, 0.554884], [0.283534, -1.16357, 0.297632], [-0.0213502, -1.28076, 0.456622], [-0.118099, -1.59273, 0.297632], [-0.209779, -1.35319, 0.554884], [-0.514663, -1.47038, 0.713875], [-0.26644, -1.20514, 0.713875]], [[-0.213379, -1.10807, 1.1193], [0.0114663, -1.15412, 0.837714], [0.24911, -0.879362, 0.837714], [0.150428, -1.18258, 0.663685], [0.375273, -1.22863, 0.3821], [0.0894397, -1.36998, 0.556129], [-0.00924145, -1.6732, 0.3821], [-0.0872149, -1.45734, 0.663685], [-0.373049, -1.59869, 0.837714], [-0.135405, -1.32393, 0.837714]], [[-0.0446229, -1.25963, 1.24731], [0.155461, -1.26985, 0.944277], [0.374091, -0.979738, 0.944277], [0.279119, -1.27617, 0.756994], [0.479203, -1.28639, 0.453962], [0.220423, -1.45937, 0.641246], [0.125452, -1.7558, 0.453962], [0.060489, -1.56628, 0.756994], [-0.198291, -1.73927, 0.944277], [0.0203398, -1.44915, 0.944277]], [[0.153404, -1.40806, 1.35108], [0.322733, -1.38136, 1.0308], [0.514965, -1.07312, 1.0308], [0.427383, -1.36486, 0.832856], [0.596711, -1.33816, 0.512573], [0.373255, -1.54516, 0.710519], [0.285674, -1.83691, 0.512573], [0.235151, -1.6731, 0.832856], [0.0116946, -1.8801, 1.0308], [0.203927, -1.57186, 1.0308]], [[0.382253, -1.54128, 1.42815], [0.514685, -1.48096, 1.0953], [0.673888, -1.15444, 1.0953], [0.596532, -1.44368, 0.889586], [0.728964, -1.38336, 0.556736], [0.548723, -1.62245, 0.762448], [0.471367, -1.9117, 0.556736], [0.437329, -1.77021, 0.889586], [0.257088, -2.0093, 1.0953], [0.416292, -1.68277, 1.0953]], [[0.639908, -1.64814, 1.47734], [0.730347, -1.56091, 1.1365], [0.850598, -1.21811, 1.1365], [0.786242, -1.50699, 0.925841], [0.876681, -1.41975, 0.584995], [0.746468, -1.68552, 0.79565], [0.682112, -1.9744, 0.584995], [0.665992, -1.84978, 0.925841], [0.535778, -2.11555, 1.1365], [0.656029, -1.77276, 1.1365]], [[0.921297, -1.71899, 1.49855], [0.966539, -1.61389, 1.15378], [1.0427, -1.25869, 1.15378], [0.994501, -1.54893, 0.940691], [1.03974, -1.44382, 0.595914], [0.964711, -1.7283, 0.808998], [0.916511, -2.01854, 0.595914], [0.918339, -1.90412, 0.940691], [0.843307, -2.18861, 1.15378], [0.919469, -1.83341, 1.15378]], [[1.21894, -1.74622, 1.49247], [1.21814, -1.63357, 1.14711], [1.24602, -1.27137, 1.14711], [1.21764, -1.56395, 0.933664], [1.21684, -1.4513, 0.588302], [1.20011, -1.74477, 0.801748], [1.17173, -2.03735, 0.588302], [1.18976, -1.92615, 0.933664], [1.17303, -2.21962, 1.14711], [1.20091, -1.85742, 1.14711]], [[1.5236, -1.72457, 1.4604], [1.47842, -1.615, 1.11701], [1.45495, -1.25249, 1.11701], [1.45049, -1.54729, 0.904781], [1.4053, -1.43772, 0.561387], [1.44773, -1.72948, 0.773616], [1.44327, -2.02428, 0.561387], [1.47395, -1.9098, 0.904781], [1.51638, -2.20156, 1.11701], [1.49292, -1.83905, 1.11701]], [[1.825, -1.65132, 1.40412], [1.73947, -1.55493, 1.06448], [1.66292, -1.19981, 1.06448], [1.6866, -1.49535, 0.854565], [1.60107, -1.39895, 0.514922], [1.70124, -1.678, 0.724833], [1.72492, -1.97354, 0.514922], [1.76315, -1.85046, 0.854565], [1.86332, -2.12952, 1.06448], [1.78677, -1.7744, 1.06448]], [[2.11238, -1.52639, 1.32577], [1.99264, -1.45202, 0.990962], [1.86281, -1.11274, 0.990962], [1.91864, -1.40605, 0.784039], [1.79889, -1.33167, 0.449231], [1.95314, -1.58733, 0.656154], [2.00896, -1.88064, 0.449231], [2.04846, -1.74533, 0.784039], [2.2027, -2.00098, 0.990962], [2.07288, -1.6617, 0.990962]], [[2.37518, -1.35225, 1.22783], [2.22905, -1.307, 0.898339], [2.04743, -0.992384, 0.898339], [2.13873, -1.27902, 0.694704], [1.9926, -1.23377, 0.365216], [2.19516, -1.45618, 0.568851], [2.28646, -1.74282, 0.365216], [2.32035, -1.59364, 0.694704], [2.52292, -1.81605, 0.898339], [2.3413, -1.50144, 0.898339]], [[2.6036, -1.13382, 1.11304], [2.44006, -1.12263, 0.788856], [2.20994, -0.841535, 0.788856], [2.33898, -1.11571, 0.588501], [2.17544, -1.10452, 0.26432], [2.41873, -1.28516, 0.464675], [2.54777, -1.55934, 0.26432], [2.5691, -1.39681, 0.588501], [2.81239, -1.57745, 0.788856], [2.58228, -1.29635, 0.788856]], [[2.78916, -0.878157, 0.984388], [2.61778, -0.903613, 0.665099], [2.34432, -0.66448, 0.665099], [2.51186, -0.919346, 0.467768], [2.34047, -0.944801, 0.148479], [2.6154, -1.07686, 0.34581], [2.78294, -1.33173, 0.148479], [2.78532, -1.15848, 0.467768], [3.06025, -1.29054, 0.665099], [2.78679, -1.05141, 0.665099]], [[2.92519, -0.594112, 0.845061], [2.75551, -0.656344, 0.529937], [2.44564, -0.466754, 0.529937], [2.65065, -0.694805, 0.33518], [2.48097, -0.757037, 0.0200556], [2.77735, -0.835748, 0.214813], [2.98236, -1.0638, 0.0200556], [2.96052, -0.884395, 0.33518], [3.2569, -0.963106, 0.529937], [2.94702, -0.773517, 0.529937]], [[3.00719, -0.291798, 0.698393], [2.84812, -0.388579, 0.38647], [2.51037, -0.254813, 0.38647], [2.74981, -0.448393, 0.193691], [2.59074, -0.545174, -0.118232], [2.89779, -0.568032, 0.074547], [3.13722, -0.761611, -0.118232], [3.08756, -0.582158, 0.193691], [3.39461, -0.605016, 0.38647], [3.05686, -0.471251, 0.38647]], [[3.03312, 0.0179831, 0.547811], [2.89231, -0.109027, 0.237961], [2.53653, -0.0356621, 0.237961], [2.80529, -0.187524, 0.0464628], [2.66448, -0.314534, -0.263388], [2.97139, -0.281379, -0.0718896], [3.24015, -0.43324, -0.263388], [3.16107, -0.260888, 0.0464628], [3.46799, -0.227734, 0.237961], [3.1122, -0.154369, 0.237961]], [[3.01297, 0.22306, 0.447299], [2.89194, 0.0754433, 0.138223], [2.52928, 0.096523, 0.138223], [2.81714, -0.0157888, -0.0527965], [2.69611, -0.163405, -0.361872], [2.99505, -0.0852013, -0.170853], [3.28291, -0.197513, -0.361872], [3.1798, -0.0368685, -0.0527965], [3.47873, 0.0413356, 0.138223], [3.11607, 0.0624153, 0.138223]], [[2.95434, 0.520746, 0.297969], [2.85599, 0.35729, -0.0111818], [2.4941, 0.325562, -0.0111818], [2.7952, 0.256268, -0.202247], [2.69684, 0.0928122, -0.511398], [2.98129, 0.213443, -0.320332], [3.28238, 0.144149, -0.511398], [3.15708, 0.287996, -0.202247], [3.44153, 0.408627, -0.0111818], [3.07964, 0.376899, -0.0111818]]]; + + for(i = [0:len(expected) - 1]) { + assertEqualPoints(expected[i], sections[i]); + } + } + + + p = 2; + q = 3; + phi_step = 0.05; + star_radius = 0.5; + + pts = torus_knot(p, q, phi_step); + + shape_pentagram_pts = shape_pentagram(star_radius); + + path_extrude( + shape_pentagram_pts, + concat(pts, [pts[0]]), + closed = true, + method = "EULER_ANGLE" + ); +} + +module test_path_extrude_axis_angle() { + echo("==== test_path_extrude_axis_angle ===="); + + include ; + + module test_path_extrude(sections) { + + expected = [[[2.9805, 0.222367, 0.447407], [2.88215, 0.0589106, 0.138256], [2.52026, 0.0271826, 0.138256], [2.82136, -0.0421108, -0.0528092], [2.723, -0.205567, -0.36196], [3.00745, -0.0849366, -0.170894], [3.30854, -0.15423, -0.36196], [3.18324, -0.0103828, -0.0528092], [3.46769, 0.110248, 0.138256], [3.1058, 0.0785196, 0.138256]], [[2.95434, 0.520746, 0.297969], [2.85599, 0.35729, -0.0111818], [2.4941, 0.325562, -0.0111818], [2.7952, 0.256268, -0.202247], [2.69684, 0.0928122, -0.511398], [2.98129, 0.213443, -0.320332], [3.28238, 0.144149, -0.511398], [3.15708, 0.287996, -0.202247], [3.44153, 0.408627, -0.0111818], [3.07964, 0.376899, -0.0111818]], [[2.86455, 0.805557, 0.153118], [2.77764, 0.628055, -0.151684], [2.42509, 0.542053, -0.134859], [2.72392, 0.518352, -0.340062], [2.637, 0.34085, -0.644864], [2.9086, 0.503705, -0.466885], [3.20742, 0.480005, -0.672088], [3.07646, 0.604355, -0.356887], [3.34806, 0.767209, -0.178908], [2.99552, 0.681207, -0.162083]], [[2.72752, 1.06964, 0.015547], [2.6542, 0.880061, -0.285534], [2.31993, 0.741734, -0.252475], [2.60889, 0.762895, -0.471612], [2.53557, 0.573315, -0.772693], [2.78747, 0.775973, -0.607046], [3.07643, 0.797134, -0.826183], [2.94316, 0.901222, -0.504671], [3.19507, 1.10388, -0.339024], [2.86079, 0.965553, -0.305965]], [[2.54875, 1.30479, -0.111553], [2.49076, 1.10553, -0.409708], [2.18335, 0.918084, -0.361421], [2.45492, 0.982373, -0.593979], [2.39693, 0.783108, -0.892134], [2.62276, 1.02211, -0.737707], [2.89433, 1.08639, -0.970265], [2.76233, 1.16981, -0.642266], [2.98816, 1.40881, -0.487839], [2.68075, 1.22137, -0.439552]], [[2.33552, 1.50419, -0.2252], [2.294, 1.29804, -0.521414], [2.02152, 1.06593, -0.459353], [2.26833, 1.17063, -0.704484], [2.22681, 0.964474, -1.0007], [2.42087, 1.23533, -0.855983], [2.66769, 1.34002, -1.10111], [2.54081, 1.40273, -0.766544], [2.73487, 1.67359, -0.62183], [2.4624, 1.44148, -0.559769]], [[2.09654, 1.66282, -0.322716], [2.07181, 1.4529, -0.618161], [1.84159, 1.18178, -0.544283], [2.05653, 1.32317, -0.800756], [2.0318, 1.11324, -1.0962], [2.18937, 1.41054, -0.959265], [2.4043, 1.55193, -1.21574], [2.28675, 1.59428, -0.874634], [2.44432, 1.89158, -0.737698], [2.21409, 1.62046, -0.66382]], [[1.84149, 1.7778, -0.401834], [1.83287, 1.56739, -0.697844], [1.6512, 1.264, -0.614663], [1.82753, 1.43736, -0.880788], [1.8189, 1.22695, -1.1768], [1.93651, 1.5445, -1.04526], [2.11284, 1.71785, -1.31139], [2.00919, 1.74075, -0.963969], [2.1268, 2.05829, -0.832433], [1.94514, 1.7549, -0.749252]], [[1.58057, 1.84855, -0.460816], [1.5861, 1.64086, -0.75881], [1.45798, 1.31289, -0.669451], [1.58952, 1.5125, -0.94298], [1.59505, 1.30481, -1.24097], [1.67081, 1.63587, -1.11203], [1.80235, 1.83548, -1.38556], [1.71764, 1.84047, -1.03234], [1.7934, 2.17153, -0.903395], [1.66528, 1.84356, -0.814036]], [[1.32382, 1.87694, -0.498575], [1.34016, 1.67472, -0.799918], [1.26887, 1.33054, -0.708146], [1.35027, 1.54974, -0.986157], [1.36661, 1.34752, -1.2875], [1.40057, 1.68522, -1.15798], [1.48196, 1.90442, -1.43599], [1.42156, 1.89392, -1.07793], [1.45552, 2.23162, -0.948407], [1.38422, 1.88744, -0.856635]], [[1.08053, 1.86715, -0.514808], [1.10289, 1.6723, -0.820584], [1.08964, 1.32055, -0.730775], [1.11672, 1.55188, -1.00956], [1.13909, 1.35703, -1.31534], [1.13345, 1.69484, -1.18187], [1.16053, 1.92616, -1.46065], [1.12997, 1.90362, -1.09937], [1.12434, 2.24144, -0.965898], [1.11108, 1.88969, -0.876089]], [[0.858524, 1.82543, -0.510091], [0.880812, 1.63853, -0.820796], [0.924361, 1.28755, -0.737801], [0.894586, 1.52302, -1.01282], [0.916874, 1.33612, -1.32353], [0.876184, 1.66854, -1.1828], [0.84641, 1.904, -1.45782], [0.851037, 1.87399, -1.09582], [0.810348, 2.20641, -0.955086], [0.853897, 1.85544, -0.872091]], [[0.663547, 1.7595, -0.485931], [0.678721, 1.57947, -0.801084], [0.775139, 1.23653, -0.729928], [0.688099, 1.4682, -0.99586], [0.703272, 1.28816, -1.31101], [0.634305, 1.61137, -1.16022], [0.547265, 1.84304, -1.42615], [0.59168, 1.81113, -1.06702], [0.522713, 2.13435, -0.916218], [0.619131, 1.79141, -0.845062]], [[0.498677, 1.67784, -0.444675], [0.49943, 1.50177, -0.762425], [0.642074, 1.17217, -0.707793], [0.499896, 1.39295, -0.958806], [0.500648, 1.21688, -1.27656], [0.412024, 1.5294, -1.11394], [0.269846, 1.75018, -1.36495], [0.357252, 1.72255, -1.01344], [0.268628, 2.03506, -0.850822], [0.411272, 1.70547, -0.79619]], [[0.364059, 1.58856, -0.389233], [0.34368, 1.41204, -0.70608], [0.523547, 1.09831, -0.671575], [0.331085, 1.30294, -0.901902], [0.310706, 1.12643, -1.21875], [0.212137, 1.42941, -1.04425], [0.0196751, 1.63404, -1.27458], [0.151218, 1.61667, -0.936407], [0.0526489, 1.91966, -0.76191], [0.232516, 1.60593, -0.727405]], [[0.256985, 1.49844, -0.322546], [0.210279, 1.31631, -0.633372], [0.416785, 1.01771, -0.620634], [0.181413, 1.20374, -0.825472], [0.134707, 1.02161, -1.1363], [0.0359454, 1.31872, -0.952069], [-0.199426, 1.50475, -1.15691], [-0.0250928, 1.50234, -0.83821], [-0.123855, 1.79944, -0.653981], [0.0826512, 1.50085, -0.641244]], [[0.172449, 1.41207, -0.246877], [0.0964491, 1.21962, -0.545465], [0.318554, 0.932268, -0.553367], [0.0494783, 1.10069, -0.730002], [-0.0265218, 0.90824, -1.02859], [-0.116819, 1.20477, -0.839169], [-0.385895, 1.37319, -1.0158], [-0.172626, 1.38804, -0.7221], [-0.262924, 1.68457, -0.532678], [-0.0408192, 1.39722, -0.540581]], [[0.104051, 1.33159, -0.163091], [-0.0017305, 1.12594, -0.443241], [0.225686, 0.843701, -0.46749], [-0.0671073, 0.998844, -0.616384], [-0.172889, 0.793194, -0.896534], [-0.248063, 1.09473, -0.708405], [-0.540856, 1.24987, -0.857298], [-0.294523, 1.28108, -0.592135], [-0.369698, 1.58262, -0.404005], [-0.142281, 1.30038, -0.428254]], [[0.0449523, 1.25719, -0.070278], [-0.0889033, 1.03822, -0.327376], [0.135222, 0.754295, -0.360859], [-0.171631, 0.902887, -0.486271], [-0.305486, 0.683914, -0.743369], [-0.361276, 0.994721, -0.563781], [-0.668128, 1.14331, -0.689193], [-0.395755, 1.18681, -0.452789], [-0.451545, 1.49762, -0.2732], [-0.22742, 1.21369, -0.306683]], [[-0.0114836, 1.18809, 0.0339872], [-0.170144, 0.958587, -0.198654], [0.044155, 0.667238, -0.232678], [-0.268202, 0.816747, -0.342434], [-0.426862, 0.587245, -0.575075], [-0.461248, 0.909149, -0.410267], [-0.773605, 1.05866, -0.520023], [-0.4825, 1.1081, -0.30841], [-0.516887, 1.43, -0.143602], [-0.302588, 1.13865, -0.177626]], [[-0.0715622, 1.12352, 0.152643], [-0.250781, 0.888396, -0.0584525], [-0.0509185, 0.586184, -0.0846979], [-0.361545, 0.743079, -0.188917], [-0.540763, 0.507951, -0.400012], [-0.553522, 0.840046, -0.253328], [-0.864148, 0.99694, -0.357546], [-0.561407, 1.04529, -0.162671], [-0.574165, 1.37739, -0.0159866], [-0.374303, 1.07517, -0.042232]], [[-0.141465, 1.06316, 0.287643], [-0.336201, 0.828018, 0.0907882], [-0.153793, 0.514118, 0.0781423], [-0.456554, 0.682692, -0.030875], [-0.651289, 0.447549, -0.22773], [-0.64367, 0.786877, -0.0982515], [-0.94643, 0.955451, -0.207269], [-0.638961, 0.996592, -0.0182292], [-0.631342, 1.33592, 0.11125], [-0.448935, 1.02202, 0.0986037]], [[-0.227322, 1.00662, 0.438508], [-0.431473, 0.776466, 0.245332], [-0.268022, 0.452055, 0.248007], [-0.557645, 0.634223, 0.125943], [-0.761796, 0.404067, -0.0672326], [-0.736642, 0.746808, 0.0505039], [-1.02626, 0.928976, -0.0715595], [-0.721096, 0.958634, 0.123269], [-0.695942, 1.30138, 0.241006], [-0.532491, 0.976964, 0.24368]], [[-0.334717, 0.952491, 0.601513], [-0.54076, 0.731084, 0.400289], [-0.395847, 0.398311, 0.415397], [-0.668102, 0.594248, 0.275925], [-0.874145, 0.372841, 0.0747005], [-0.836364, 0.715343, 0.189726], [-1.10862, 0.911279, 0.0502542], [-0.813014, 0.927021, 0.260816], [-0.775234, 1.26952, 0.375842], [-0.630321, 0.93675, 0.390951]], [[-0.467604, 0.897449, 0.769873], [-0.66664, 0.687552, 0.550115], [-0.537234, 0.34875, 0.570944], [-0.789651, 0.557828, 0.414297], [-0.988686, 0.34793, 0.194538], [-0.945653, 0.687045, 0.317483], [-1.19807, 0.896122, 0.160835], [-0.919056, 0.896629, 0.393467], [-0.876023, 1.23574, 0.516412], [-0.746617, 0.896942, 0.537241]], [[-0.627051, 0.836133, 0.93488], [-0.809598, 0.640306, 0.689331], [-0.689596, 0.297889, 0.707124], [-0.922418, 0.519278, 0.537574], [-1.10496, 0.323451, 0.292025], [-1.06631, 0.656103, 0.432786], [-1.29913, 0.877492, 0.263236], [-1.04242, 0.861694, 0.519781], [-1.00376, 1.19435, 0.660542], [-0.883762, 0.851931, 0.678335]], [[-0.810465, 0.761897, 1.08756], [-0.967893, 0.583272, 0.813201], [-0.848404, 0.240269, 0.819318], [-1.06519, 0.472875, 0.643635], [-1.22262, 0.29425, 0.369272], [-1.19917, 0.616634, 0.535057], [-1.41595, 0.84924, 0.359374], [-1.18468, 0.815878, 0.637518], [-1.16123, 1.13826, 0.803303], [-1.04174, 0.795259, 0.80942]], [[-1.01175, 0.668128, 1.22027], [-1.13784, 0.510654, 0.918165], [-1.00836, 0.171462, 0.905942], [-1.21577, 0.413329, 0.731453], [-1.34186, 0.255855, 0.429346], [-1.34396, 0.562811, 0.623613], [-1.55137, 0.804678, 0.449124], [-1.34525, 0.752521, 0.743676], [-1.34735, 1.05948, 0.937943], [-1.21787, 0.720285, 0.92572]], [[-1.22231, 0.549492, 1.32765], [-1.31435, 0.417546, 1.00195], [-1.16452, 0.0883814, 0.967753], [-1.37123, 0.335999, 0.800647], [-1.46326, 0.204053, 0.474938], [-1.49898, 0.489035, 0.697369], [-1.70568, 0.736652, 0.530262], [-1.52105, 0.665163, 0.834839], [-1.55677, 0.950145, 1.05727], [-1.40694, 0.620981, 1.02308]], [[-1.4325, 0.402678, 1.40689], [-1.49147, 0.300283, 1.06337], [-1.31289, -0.0109598, 1.00678], [-1.52791, 0.237, 0.851064], [-1.58688, 0.134605, 0.507546], [-1.6608, 0.390247, 0.754828], [-1.87583, 0.638206, 0.599116], [-1.70649, 0.548242, 0.907657], [-1.78042, 0.803884, 1.15494], [-1.60184, 0.492642, 1.09835]], [[-1.63279, 0.226528, 1.45726], [-1.66282, 0.156577, 1.10206], [-1.45027, -0.127848, 1.0253], [-1.68137, 0.113345, 0.882526], [-1.7114, 0.0433938, 0.52732], [-1.8242, 0.26241, 0.794289], [-2.05531, 0.503603, 0.651518], [-1.89392, 0.39777, 0.959285], [-2.00673, 0.616786, 1.22625], [-1.79418, 0.332361, 1.1495]], [[-1.81459, 0.0217734, 1.47952], [-1.82182, -0.0144367, 1.11813], [-1.57381, -0.263086, 1.02523], [-1.8263, -0.0368156, 0.894778], [-1.83354, -0.0730256, 0.533388], [-1.98234, 0.103027, 0.814152], [-2.23483, 0.329296, 0.683695], [-2.07431, 0.211833, 0.987673], [-2.22312, 0.387886, 1.26844], [-1.9751, 0.139237, 1.17554]], [[-1.9704, -0.20932, 1.47518], [-1.96188, -0.212155, 1.11202], [-1.68044, -0.416903, 1.00793], [-1.95662, -0.213907, 0.887578], [-1.9481, -0.216741, 0.524417], [-2.12731, -0.0884478, 0.813196], [-2.40348, 0.114549, 0.692843], [-2.23806, -0.00915799, 0.99167], [-2.41726, 0.119136, 1.28045], [-2.13582, -0.0856129, 1.17636]], [[-2.09387, -0.463212, 1.44612], [-2.07654, -0.434452, 1.0844], [-1.76663, -0.588669, 0.974248], [-2.06584, -0.416677, 0.860851], [-2.04851, -0.387917, 0.499135], [-2.25076, -0.31038, 0.790768], [-2.54997, -0.138388, 0.677371], [-2.37575, -0.26246, 0.971007], [-2.578, -0.184923, 1.26264], [-2.26808, -0.33914, 1.15248]], [[-2.17964, -0.73522, 1.3943], [-2.15975, -0.677651, 1.03617], [-1.82841, -0.776563, 0.924806], [-2.14745, -0.642072, 0.814835], [-2.12756, -0.584504, 0.456707], [-2.34463, -0.558952, 0.746869], [-2.66366, -0.42446, 0.636898], [-2.47878, -0.54316, 0.9262], [-2.69585, -0.517608, 1.21636], [-2.36452, -0.61652, 1.105]], [[-2.22336, -1.01958, 1.32174], [-2.20615, -0.936568, 0.968495], [-1.8618, -0.977369, 0.860238], [-2.19552, -0.885265, 0.75018], [-2.17831, -0.802255, 0.396939], [-2.40177, -0.828341, 0.68216], [-2.73549, -0.736237, 0.572102], [-2.53988, -0.844463, 0.858436], [-2.76334, -0.870549, 1.14366], [-2.41898, -0.911351, 1.0354]], [[-2.22183, -1.30951, 1.23052], [-2.21151, -1.20466, 0.88286], [-1.86318, -1.18645, 0.781384], [-2.20514, -1.13985, 0.667996], [-2.19483, -1.035, 0.320339], [-2.41649, -1.11105, 0.597918], [-2.75845, -1.06446, 0.48453], [-2.55348, -1.15806, 0.769472], [-2.77513, -1.23411, 1.04705], [-2.4268, -1.21591, 0.945576]], [[-2.17313, -1.59738, 1.12287], [-2.17299, -1.47427, 0.781089], [-1.82987, -1.39792, 0.689415], [-2.17291, -1.39819, 0.569859], [-2.17276, -1.27509, 0.228083], [-2.38491, -1.39836, 0.49597], [-2.72795, -1.39862, 0.376415], [-2.51603, -1.47454, 0.661534], [-2.72818, -1.59781, 0.929421], [-2.38505, -1.52146, 0.837747]], [[-2.07693, -1.87495, 1.00119], [-2.08945, -1.73705, 0.665344], [-1.7605, -1.60498, 0.585882], [-2.09719, -1.65182, 0.45778], [-2.10972, -1.51392, 0.121935], [-2.30528, -1.68077, 0.378609], [-2.64197, -1.72761, 0.250506], [-2.42615, -1.78389, 0.537242], [-2.62171, -1.95074, 0.793915], [-2.29276, -1.81867, 0.714454]], [[-1.93457, -2.13374, 0.868113], [-1.96164, -1.98431, 0.538105], [-1.65532, -1.80032, 0.472717], [-1.97837, -1.89196, 0.334149], [-2.00545, -1.74254, 0.00414212], [-2.17804, -1.9486, 0.24851], [-2.50109, -2.04024, 0.109943], [-2.2847, -2.07596, 0.399538], [-2.45729, -2.28202, 0.643906], [-2.15097, -2.09803, 0.578517]], [[-1.74924, -2.36542, 0.726483], [-1.79225, -2.20758, 0.402133], [-1.51631, -1.97666, 0.352186], [-1.81884, -2.11003, 0.201673], [-1.86185, -1.95219, -0.122678], [-2.00581, -2.19246, 0.108651], [-2.30834, -2.32583, -0.0418621], [-2.09478, -2.34095, 0.25162], [-2.23875, -2.58122, 0.482948], [-1.9628, -2.3503, 0.433001]], [[-1.52591, -2.56228, 0.579348], [-1.58585, -2.39903, 0.260409], [-1.34721, -2.12721, 0.22683], [-1.6229, -2.29813, 0.0632937], [-1.68284, -2.13488, -0.255645], [-1.79328, -2.40378, -0.0377772], [-2.06897, -2.5747, -0.201313], [-1.86154, -2.56996, 0.0968726], [-1.97198, -2.83885, 0.314741], [-1.73334, -2.56703, 0.281162]], [[-1.27119, -2.71768, 0.429911], [-1.34869, -2.55196, 0.116074], [-1.15333, -2.24614, 0.0993824], [-1.39658, -2.44953, -0.0778883], [-1.47409, -2.2838, -0.391725], [-1.54693, -2.57523, -0.187448], [-1.79018, -2.77862, -0.364718], [-1.59194, -2.75534, -0.0611969], [-1.66478, -3.04677, 0.143081], [-1.46943, -2.74096, 0.12639]], [[-0.993118, -2.82647, 0.281479], [-1.08842, -2.66117, -0.0276484], [-0.941282, -2.32903, -0.0273186], [-1.14731, -2.55901, -0.2187], [-1.24261, -2.3937, -0.527828], [-1.27465, -2.70114, -0.33698], [-1.48068, -2.93112, -0.528361], [-1.29445, -2.89115, -0.21903], [-1.32648, -3.19858, -0.0281822], [-1.17935, -2.86644, -0.0278523]], [[-0.700791, -2.88528, 0.137393], [-0.813692, -2.72328, -0.167528], [-0.718611, -2.37309, -0.150424], [-0.883468, -2.62317, -0.355979], [-0.996368, -2.46117, -0.6609], [-0.985355, -2.77772, -0.483019], [-1.15021, -3.02779, -0.688574], [-0.978548, -2.97336, -0.373083], [-0.967535, -3.2899, -0.195202], [-0.872454, -2.93971, -0.178098]], [[-0.403915, -2.89284, 0.000947729], [-0.533718, -2.73695, -0.300409], [-0.493323, -2.37746, -0.26717], [-0.613941, -2.64061, -0.486657], [-0.743744, -2.48472, -0.788014], [-0.688487, -2.80323, -0.622308], [-0.809106, -3.06637, -0.841795], [-0.654337, -3.00009, -0.519896], [-0.59908, -3.31861, -0.35419], [-0.558684, -2.95912, -0.320951]], [[-0.112334, -2.85006, -0.124687], [-0.257755, -2.70291, -0.423292], [-0.273405, -2.3432, -0.374974], [-0.34763, -2.61196, -0.607839], [-0.493051, -2.46481, -0.906443], [-0.393504, -2.77806, -0.751758], [-0.467729, -3.04682, -0.984623], [-0.331981, -2.97166, -0.656157], [-0.232433, -3.28492, -0.501472], [-0.248083, -2.92521, -0.453154]], [[0.164491, -2.76008, -0.236562], [0.00538563, -2.62395, -0.533413], [-0.0663245, -2.27325, -0.471527], [-0.0929468, -2.53982, -0.716877], [-0.252052, -2.40369, -1.01373], [-0.1094, -2.70457, -0.868511], [-0.136023, -2.97115, -1.11386], [-0.0212368, -2.89053, -0.778763], [0.121415, -3.19141, -0.633546], [0.0497049, -2.8407, -0.571661]], [[0.417999, -2.62817, -0.332043], [0.24782, -2.50479, -0.628325], [0.12145, -2.17222, -0.554891], [0.142644, -2.42854, -0.811438], [-0.0275356, -2.30516, -1.10772], [0.155742, -2.58696, -0.969993], [0.176936, -2.84328, -1.22654], [0.269014, -2.76111, -0.884873], [0.452291, -3.0429, -0.747145], [0.325921, -2.71033, -0.67371]], [[0.641022, -2.46146, -0.40892], [0.463021, -2.35172, -0.705971], [0.284857, -2.04605, -0.62357], [0.353011, -2.2839, -0.889559], [0.175011, -2.17416, -1.18661], [0.395132, -2.4309, -1.05395], [0.463286, -2.66875, -1.31994], [0.531175, -2.58957, -0.971959], [0.751297, -2.84631, -0.839298], [0.573133, -2.54064, -0.756897]], [[0.828221, -2.26864, -0.465525], [0.646171, -2.17227, -0.764752], [0.420561, -1.90154, -0.676584], [0.533658, -2.11271, -0.949684], [0.351608, -2.01634, -1.24891], [0.603556, -2.24322, -1.11847], [0.716653, -2.45439, -1.39157], [0.759268, -2.38344, -1.03785], [1.01122, -2.61031, -0.90741], [0.785606, -2.33959, -0.819242]], [[0.976447, -2.05942, -0.500858], [0.794402, -1.97469, -0.803589], [0.527117, -1.74576, -0.71349], [0.681892, -1.92232, -0.990687], [0.499847, -1.83759, -1.29342], [0.777548, -2.03144, -1.162], [0.932324, -2.208, -1.4392], [0.949177, -2.15124, -1.08079], [1.22688, -2.3451, -0.949372], [0.959593, -2.11617, -0.859273]], [[1.08497, -1.84394, -0.514713], [0.906912, -1.76741, -0.821964], [0.604972, -1.5854, -0.734371], [0.796864, -1.72011, -1.01186], [0.618802, -1.64358, -1.31911], [0.91546, -1.80336, -1.18335], [1.10735, -1.93807, -1.46083], [1.0988, -1.90211, -1.09945], [1.39546, -2.0619, -0.963692], [1.09352, -1.87989, -0.876099]], [[1.15557, -1.632, -0.507774], [0.984925, -1.55846, -0.819926], [0.65625, -1.42615, -0.739722], [0.879463, -1.51301, -1.01285], [0.708822, -1.43947, -1.325], [1.01742, -1.56669, -1.18165], [1.24063, -1.65355, -1.45477], [1.20814, -1.64532, -1.09305], [1.51673, -1.77254, -0.9497], [1.18806, -1.64023, -0.869495]], [[1.19231, -1.43226, -0.481649], [1.03148, -1.3549, -0.798061], [0.684329, -1.27212, -0.730252], [0.932086, -1.30709, -0.993614], [0.771258, -1.22974, -1.31003], [1.08521, -1.32871, -1.15638], [1.33296, -1.36368, -1.41974], [1.27924, -1.38987, -1.06142], [1.59319, -1.48884, -0.907778], [1.24604, -1.40606, -0.839969]], [[1.20115, -1.25131, -0.438766], [1.05107, -1.16229, -0.757384], [0.693257, -1.12552, -0.706557], [0.958316, -1.10727, -0.9543], [0.808236, -1.01825, -1.27292], [1.12213, -1.09599, -1.10741], [1.38719, -1.07775, -1.35516], [1.31613, -1.14404, -1.00513], [1.63003, -1.22178, -0.839623], [1.27221, -1.18501, -0.788796]], [[1.18914, -1.09298, -0.382058], [1.04912, -0.98434, -0.699169], [0.687134, -0.986647, -0.668728], [0.962587, -0.917197, -0.895154], [0.822572, -0.808558, -1.21227], [1.13283, -0.874275, -1.03509], [1.40828, -0.804826, -1.26152], [1.32457, -0.914891, -0.925595], [1.63483, -0.980608, -0.748423], [1.27284, -0.982915, -0.717982]], [[1.16343, -0.95794, -0.314417], [1.03146, -0.822823, -0.624727], [0.669662, -0.854368, -0.616009], [0.949892, -0.739316, -0.81651], [0.817919, -0.604199, -1.12682], [1.12308, -0.66821, -0.940426], [1.40331, -0.553159, -1.14093], [1.31169, -0.707771, -0.825228], [1.61685, -0.771782, -0.638833], [1.25506, -0.803327, -0.630115]], [[1.13036, -0.843817, -0.237961], [1.00381, -0.677663, -0.535188], [0.644059, -0.726803, -0.54669], [0.925596, -0.574975, -0.718885], [0.799047, -0.408821, -1.01611], [1.0996, -0.48114, -0.825308], [1.38113, -0.329312, -0.997504], [1.28534, -0.525836, -0.707384], [1.58589, -0.598154, -0.516579], [1.22614, -0.647294, -0.52808]], [[1.09479, -0.745931, -0.153345], [0.971504, -0.547301, -0.431398], [0.613413, -0.602124, -0.458452], [0.89531, -0.424541, -0.603244], [0.772026, -0.225912, -0.881297], [1.06953, -0.314789, -0.692731], [1.35143, -0.137206, -0.837523], [1.2534, -0.369718, -0.576191], [1.55091, -0.458596, -0.387624], [1.19282, -0.513419, -0.414678]], [[1.06015, -0.658376, -0.0594452], [0.939368, -0.429097, -0.314023], [0.581268, -0.478993, -0.349251], [0.864722, -0.287396, -0.47136], [0.743941, -0.0581172, -0.725937], [1.03991, -0.168982, -0.546828], [1.32336, 0.0226151, -0.668937], [1.22282, -0.2375, -0.436132], [1.51879, -0.348365, -0.257022], [1.16069, -0.39826, -0.29225]], [[1.02903, -0.575045, 0.0462945], [0.911731, -0.319657, -0.18389], [0.551991, -0.356436, -0.218545], [0.839239, -0.161818, -0.326151], [0.721944, 0.0935698, -0.556336], [1.01677, -0.0415386, -0.392656], [1.30401, 0.153078, -0.500263], [1.19898, -0.12504, -0.291497], [1.4938, -0.260148, -0.127817], [1.13406, -0.296927, -0.162472]], [[1.00395, -0.490164, 0.166777], [0.892358, -0.214986, -0.0424842], [0.530479, -0.233292, -0.068454], [0.823391, -0.0449162, -0.171814], [0.711799, 0.230262, -0.381075], [1.00442, 0.0715066, -0.235695], [1.29733, 0.259883, -0.339055], [1.18527, -0.0266098, -0.145845], [1.47789, -0.185365, -0.00046419], [1.11601, -0.203672, -0.026434]], [[0.987757, -0.398245, 0.303729], [0.884146, -0.110555, 0.107604], [0.521081, -0.107681, 0.0956956], [0.82011, 0.0672478, -0.0136082], [0.716499, 0.354938, -0.209733], [1.00492, 0.17536, -0.0811617], [1.30395, 0.350288, -0.190466], [1.18317, 0.0643741, -0.00170017], [1.4716, -0.115204, 0.126871], [1.10853, -0.112331, 0.114963]], [[0.983122, -0.293796, 0.456303], [0.888587, -0.00145563, 0.262483], [0.526156, 0.023027, 0.265785], [0.83016, 0.17922, 0.142695], [0.735625, 0.47156, -0.0511253], [1.01805, 0.275753, 0.0666214], [1.32205, 0.431947, -0.0564686], [1.19259, 0.154738, 0.139393], [1.47501, -0.0410694, 0.257139], [1.11258, -0.0165867, 0.260442]], [[0.991397, -0.171301, 0.620373], [0.905218, 0.117211, 0.417149], [0.544982, 0.161577, 0.432231], [0.851957, 0.295522, 0.291549], [0.765778, 0.584034, 0.0883253], [1.04168, 0.378304, 0.204603], [1.34865, 0.512248, 0.0639213], [1.21219, 0.251155, 0.276467], [1.48809, 0.0454252, 0.392745], [1.12786, 0.0897915, 0.407827]], [[1.01133, -0.0258016, 0.788842], [0.931331, 0.249732, 0.566027], [0.573617, 0.309863, 0.585804], [0.881886, 0.420021, 0.428319], [0.801883, 0.695554, 0.205504], [1.07241, 0.488102, 0.330988], [1.38068, 0.598261, 0.173503], [1.2396, 0.35989, 0.408542], [1.51012, 0.152438, 0.534026], [1.15241, 0.212569, 0.553804]], [[1.03845, 0.146053, 0.952875], [0.962137, 0.399134, 0.703692], [0.60583, 0.468186, 0.71929], [0.914973, 0.555547, 0.549688], [0.83866, 0.808628, 0.300504], [1.10603, 0.609538, 0.444868], [1.41518, 0.696899, 0.275265], [1.27128, 0.486494, 0.534089], [1.53865, 0.287405, 0.678452], [1.18235, 0.356457, 0.694051]], [[1.06542, 0.344993, 1.10358], [0.991382, 0.566741, 0.82553], [0.634629, 0.635189, 0.828453], [0.945622, 0.703788, 0.653685], [0.871581, 0.925536, 0.375636], [1.13783, 0.746185, 0.545673], [1.44882, 0.814785, 0.370905], [1.30237, 0.63534, 0.650762], [1.56862, 0.45599, 0.8208], [1.21187, 0.524438, 0.823723]], [[1.08338, 0.568691, 1.23354], [1.01218, 0.75206, 0.928137], [0.653666, 0.808428, 0.912042], [0.968169, 0.865389, 0.739387], [0.896963, 1.04876, 0.433983], [1.16254, 0.900592, 0.632681], [1.47704, 0.957553, 0.460026], [1.32668, 0.809021, 0.755482], [1.59226, 0.660856, 0.954179], [1.23375, 0.717223, 0.938084]], [[1.08351, 0.812108, 1.33772], [1.01778, 0.952969, 1.00938], [0.657981, 0.985197, 0.971033], [0.977161, 1.04003, 0.806459], [0.911433, 1.18089, 0.478124], [1.17442, 1.07391, 0.704747], [1.4936, 1.12874, 0.540174], [1.33696, 1.0078, 0.844808], [1.59995, 0.900824, 1.07143], [1.24015, 0.933051, 1.03308]], [[1.05831, 1.06838, 1.41357], [1.00215, 1.16603, 1.0682], [0.643997, 1.16308, 1.00753], [0.967446, 1.22637, 0.854754], [0.911286, 1.32402, 0.509388], [1.16735, 1.26549, 0.760331], [1.4908, 1.32878, 0.607552], [1.3256, 1.22931, 0.915422], [1.58167, 1.17078, 1.16637], [1.22351, 1.16784, 1.1057]], [[1.00229, 1.32982, 1.4606], [0.960246, 1.38675, 1.10429], [0.609096, 1.34003, 1.02381], [0.934261, 1.42193, 0.88408], [0.892217, 1.47886, 0.527769], [1.13522, 1.47255, 0.79772], [1.46039, 1.55446, 0.657988], [1.28541, 1.46865, 0.964559], [1.52842, 1.46234, 1.23451], [1.17727, 1.41562, 1.15403]], [[0.912, 1.58863, 1.47969], [0.888157, 1.60979, 1.11782], [0.551196, 1.51394, 1.02172], [0.873421, 1.62287, 0.894172], [0.849579, 1.64404, 0.532302], [1.07257, 1.6902, 0.81534], [1.39479, 1.79914, 0.687788], [1.21038, 1.71873, 0.990268], [1.43337, 1.7649, 1.27331], [1.09641, 1.66904, 1.17721]], [[0.785874, 1.83727, 1.47242], [0.783259, 1.82908, 1.10925], [0.468604, 1.6822, 1.00254], [0.781643, 1.82401, 0.884795], [0.779027, 1.81581, 0.521626], [0.975111, 1.91165, 0.812025], [1.28815, 2.05346, 0.694282], [1.0963, 1.97088, 0.991502], [1.29238, 2.06672, 1.2819], [0.977726, 1.91985, 1.17519]], [[0.623967, 2.06851, 1.44067], [0.644328, 2.03788, 1.07926], [0.360163, 1.84134, 0.967072], [0.656911, 2.01896, 0.8559], [0.677271, 1.98833, 0.494496], [0.840311, 2.12873, 0.787192], [1.13706, 2.30634, 0.676021], [0.941075, 2.2155, 0.968089], [1.10412, 2.3559, 1.26079], [0.819951, 2.15936, 1.1486]], [[0.427817, 2.27542, 1.38641], [0.471698, 2.22911, 1.02879], [0.225583, 1.98692, 0.915926], [0.498818, 2.20049, 0.807765], [0.5427, 2.15417, 0.450141], [0.667687, 2.33248, 0.740918], [0.940921, 2.54604, 0.632757], [0.744933, 2.44267, 0.920628], [0.86992, 2.62098, 1.21141], [0.623805, 2.37879, 1.09854]], [[0.200398, 2.45142, 1.31168], [0.267382, 2.39555, 0.959033], [0.0657912, 2.1138, 0.849743], [0.30878, 2.36102, 0.741088], [0.375764, 2.30514, 0.388445], [0.458956, 2.51381, 0.673936], [0.701944, 2.76102, 0.565281], [0.510371, 2.64277, 0.850379], [0.593563, 2.85143, 1.13587], [0.391972, 2.56968, 1.02658]], [[-0.0538763, 2.5904, 1.21855], [0.0351078, 2.5303, 0.871513], [-0.116832, 2.21653, 0.769391], [0.0901031, 2.49315, 0.657032], [0.179087, 2.43304, 0.309995], [0.217996, 2.66411, 0.587591], [0.424931, 2.94073, 0.475232], [0.242043, 2.80692, 0.759154], [0.280951, 3.03799, 1.03675], [0.129012, 2.72422, 0.934628]], [[-0.329203, 2.68702, 1.10927], [-0.21975, 2.62719, 0.768087], [-0.318367, 2.28988, 0.67608], [-0.152105, 2.59021, 0.557224], [-0.0426521, 2.53038, 0.216041], [-0.0493492, 2.77582, 0.483767], [0.116913, 3.07615, 0.364911], [-0.0534883, 2.92752, 0.649231], [-0.0601853, 3.17296, 0.916957], [-0.158802, 2.83566, 0.82495]], [[-0.618501, 2.73699, 0.986264], [-0.490359, 2.6812, 0.650953], [-0.533451, 2.32937, 0.571404], [-0.411163, 2.64672, 0.44372], [-0.28302, 2.59093, 0.108409], [-0.335585, 2.84285, 0.364806], [-0.213297, 3.1602, 0.237122], [-0.368071, 2.99854, 0.523269], [-0.420635, 3.25046, 0.779666], [-0.463727, 2.89864, 0.700117]], [[-0.913646, 2.73741, 0.852178], [-0.76873, 2.68883, 0.522625], [-0.755529, 2.33171, 0.457333], [-0.679167, 2.6588, 0.31895], [-0.534251, 2.61022, -0.0106026], [-0.631972, 2.86095, 0.233425], [-0.555609, 3.18804, 0.0950417], [-0.692367, 3.01591, 0.384242], [-0.790089, 3.26665, 0.628269], [-0.776888, 2.90953, 0.562977]], [[-1.20579, 2.68707, 0.70988], [-1.04611, 2.64837, 0.385889], [-0.977219, 2.29517, 0.336168], [-0.947419, 2.62445, 0.185652], [-0.787739, 2.58574, -0.138339], [-0.929002, 2.82795, 0.0926274], [-0.899202, 3.15723, -0.0578888], [-1.01631, 2.97765, 0.235373], [-1.15757, 3.21985, 0.46634], [-1.08868, 2.86666, 0.416618]], [[-1.48576, 2.58665, 0.562434], [-1.31343, 2.5601, 0.243748], [-1.19076, 2.21978, 0.210474], [-1.20692, 2.54369, 0.0467895], [-1.03458, 2.51714, -0.271896], [-1.2169, 2.74387, -0.0543731], [-1.23306, 3.06777, -0.218058], [-1.32958, 2.884, 0.0800635], [-1.51191, 3.11073, 0.297587], [-1.38924, 2.77042, 0.264313]], [[-1.74456, 2.43877, 0.413057], [-1.5618, 2.4263, 0.0993551], [-1.38849, 2.10745, 0.0830016], [-1.44885, 2.41859, -0.0945232], [-1.26609, 2.40612, -0.408225], [-1.48615, 2.61089, -0.20424], [-1.5465, 2.92203, -0.381764], [-1.62216, 2.73744, -0.0781697], [-1.84222, 2.9422, 0.125816], [-1.66891, 2.62335, 0.109462]], [[-1.97379, 2.24802, 0.265059], [-1.783, 2.25121, -0.0440624], [-1.56335, 1.96187, -0.0434066], [-1.66509, 2.25319, -0.23511], [-1.47431, 2.25638, -0.544232], [-1.72797, 2.43323, -0.353589], [-1.82971, 2.72454, -0.545293], [-1.88475, 2.54253, -0.235766], [-2.13841, 2.71937, -0.0451234], [-1.91876, 2.43003, -0.0444677]], [[-2.16616, 2.02078, 0.121778], [-1.96994, 2.04082, -0.183279], [-1.70931, 1.78836, -0.165907], [-1.84866, 2.05321, -0.371815], [-1.65244, 2.07326, -0.676873], [-1.93479, 2.2169, -0.499074], [-2.07413, 2.48176, -0.704982], [-2.10928, 2.30568, -0.389188], [-2.39163, 2.44933, -0.211388], [-2.13101, 2.19686, -0.194016]], [[-2.3159, 1.76497, -0.0135026], [-2.117, 1.80257, -0.315154], [-1.82179, 1.59353, -0.281752], [-1.99408, 1.82581, -0.501586], [-1.79519, 1.86341, -0.803237], [-2.10056, 1.96937, -0.63745], [-2.27285, 2.20165, -0.857284], [-2.28929, 2.03485, -0.534988], [-2.59467, 2.14081, -0.369201], [-2.29946, 1.93177, -0.335798]], [[-2.41911, 1.48968, -0.137638], [-2.22044, 1.54493, -0.436712], [-1.89792, 1.3849, -0.388386], [-2.09766, 1.57908, -0.621549], [-1.89899, 1.63433, -0.920623], [-2.22111, 1.69909, -0.765653], [-2.42085, 1.89326, -0.998816], [-2.42018, 1.73911, -0.669875], [-2.7423, 1.80387, -0.514905], [-2.41977, 1.64384, -0.466579]], [[-2.47404, 1.20473, -0.24771], [-2.2785, 1.27698, -0.54522], [-1.93673, 1.17045, -0.483539], [-2.15766, 1.32164, -0.729091], [-1.96213, 1.3939, -1.0266], [-2.2942, 1.41508, -0.880851], [-2.51513, 1.56628, -1.1264], [-2.49944, 1.42818, -0.790772], [-2.83151, 1.44936, -0.645022], [-2.48973, 1.34283, -0.583341]], [[-2.48122, 0.920135, -0.341131], [-2.29155, 1.00788, -0.638273], [-1.93919, 0.958028, -0.565319], [-2.17433, 1.06211, -0.821917], [-1.98466, 1.14985, -1.11906], [-2.31966, 1.12643, -0.980502], [-2.5548, 1.23052, -1.2371], [-2.52669, 1.11196, -0.89487], [-2.86168, 1.08854, -0.756314], [-2.50932, 1.03869, -0.683361]], [[-2.44352, 0.645617, -0.41575], [-2.26201, 0.746347, -0.713862], [-1.90812, 0.75489, -0.632288], [-2.14982, 0.808602, -0.898105], [-1.96831, 0.909332, -1.19622], [-2.29921, 0.841797, -1.06239], [-2.54091, 0.895509, -1.32821], [-2.50371, 0.800059, -0.979679], [-2.83461, 0.732524, -0.845851], [-2.48072, 0.741067, -0.764277]], [[-2.36604, 0.389994, -0.469971], [-2.19417, 0.500188, -0.770446], [-1.84787, 0.567168, -0.683523], [-2.08795, 0.568293, -0.95615], [-1.91609, 0.678488, -1.25663], [-2.23633, 0.568988, -1.12464], [-2.47641, 0.570113, -1.39727], [-2.43425, 0.501314, -1.04307], [-2.7545, 0.391814, -0.91109], [-2.4082, 0.458793, -0.824167]], [[-2.25579, 0.160652, -0.502881], [-2.09391, 0.275836, -0.807008], [-1.76394, 0.399448, -0.718645], [-1.99386, 0.347024, -0.994969], [-1.83198, 0.462208, -1.2991], [-2.13596, 0.314624, -1.16575], [-2.36588, 0.262199, -1.44207], [-2.32383, 0.223412, -1.08333], [-2.62781, 0.0758275, -0.949983], [-2.29784, 0.19944, -0.86162]], [[-2.12134, -0.0369652, -0.514374], [-1.96823, 0.0779885, -0.823094], [-1.66238, 0.254472, -0.737784], [-1.8736, 0.149034, -1.01389], [-1.72049, 0.263987, -1.32261], [-2.00414, 0.0838693, -1.18454], [-2.21536, -0.0215691, -1.46065], [-2.17945, -0.0274498, -1.0992], [-2.4631, -0.207568, -0.961128], [-2.15725, -0.0310844, -0.875818]], [[-1.97212, -0.199773, -0.505241], [-1.82473, -0.0906305, -0.818816], [-1.54911, 0.133022, -0.74147], [-1.73363, -0.0231768, -1.01262], [-1.58624, 0.0859657, -1.32619], [-1.84767, -0.119713, -1.18019], [-2.03219, -0.275911, -1.45134], [-2.00925, -0.246829, -1.08996], [-2.27068, -0.452507, -0.943964], [-1.99507, -0.228855, -0.866618]], [[-1.81759, -0.327299, -0.47719], [-1.67099, -0.229364, -0.794811], [-1.42924, 0.0340337, -0.730409], [-1.58038, -0.168836, -0.991112], [-1.43378, -0.0709006, -1.30873], [-1.67379, -0.294217, -1.15224], [-1.82493, -0.497086, -1.41294], [-1.82213, -0.432233, -1.05551], [-2.06214, -0.65555, -0.899017], [-1.82039, -0.392152, -0.834614]], [[-1.66626, -0.421685, -0.432722], [-1.51396, -0.339528, -0.752132], [-1.30653, -0.0450302, -0.70515], [-1.41984, -0.288752, -0.949539], [-1.26755, -0.206595, -1.26895], [-1.48987, -0.43938, -1.10058], [-1.60319, -0.683102, -1.34497], [-1.62728, -0.583249, -0.996521], [-1.8496, -0.816035, -0.828151], [-1.64217, -0.521537, -0.781169]], [[-1.52468, -0.487346, -0.37479], [-1.35943, -0.424134, -0.692064], [-1.1831, -0.107627, -0.665694], [-1.2573, -0.385067, -0.888151], [-1.09206, -0.321854, -1.20543], [-1.30317, -0.556534, -1.02564], [-1.37737, -0.833973, -1.24809], [-1.43364, -0.701573, -0.914521], [-1.64475, -0.936253, -0.734732], [-1.46841, -0.619746, -0.708362]], [[-1.39666, -0.530291, -0.306222], [-1.21165, -0.48746, -0.615901], [-1.05969, -0.157535, -0.611166], [-1.0973, -0.460989, -0.807294], [-0.912291, -0.418159, -1.11697], [-1.12055, -0.648534, -0.928508], [-1.15817, -0.951989, -1.12464], [-1.24927, -0.790914, -0.81203], [-1.45753, -1.02129, -0.623564], [-1.30557, -0.691365, -0.618828]], [[-1.28295, -0.557199, -0.228982], [-1.07323, -0.534564, -0.524737], [-0.936237, -0.19845, -0.539753], [-0.943619, -0.520575, -0.707524], [-0.733899, -0.49794, -1.00328], [-0.948182, -0.719659, -0.811212], [-0.955564, -1.04178, -0.978984], [-1.08062, -0.856688, -0.692509], [-1.2949, -1.07841, -0.500442], [-1.1579, -0.742294, -0.515457]], [[-1.18167, -0.574563, -0.143512], [-0.945352, -0.570858, -0.419384], [-0.812782, -0.23395, -0.449118], [-0.799298, -0.568569, -0.589882], [-0.562978, -0.564865, -0.865753], [-0.790964, -0.775375, -0.676878], [-0.777479, -1.10999, -0.817641], [-0.931867, -0.905477, -0.560147], [-1.15985, -1.11599, -0.371272], [-1.02728, -0.779079, -0.401007]], [[-1.0893, -0.58821, -0.0484782], [-0.828025, -0.601838, -0.300503], [-0.690049, -0.267814, -0.337334], [-0.666549, -0.610261, -0.456263], [-0.405276, -0.623889, -0.708288], [-0.652026, -0.821904, -0.529765], [-0.628526, -1.16435, -0.648694], [-0.804525, -0.944285, -0.419432], [-1.05128, -1.1423, -0.240909], [-0.913299, -0.808276, -0.27774]], [[-1.00185, -0.603379, 0.0587882], [-0.720396, -0.632936, -0.168975], [-0.569452, -0.304384, -0.204131], [-0.546448, -0.651204, -0.30974], [-0.264994, -0.680761, -0.537504], [-0.532231, -0.86555, -0.375011], [-0.509227, -1.21237, -0.480621], [-0.697392, -0.979755, -0.274585], [-0.964629, -1.16454, -0.112092], [-0.813685, -0.835992, -0.147248]], [[-0.915663, -0.62515, 0.181131], [-0.620803, -0.669376, -0.0263969], [-0.4524, -0.348517, -0.0520054], [-0.43857, -0.696709, -0.154656], [-0.14371, -0.740935, -0.362184], [-0.430023, -0.911903, -0.218098], [-0.416193, -1.26009, -0.320748], [-0.606974, -1.01757, -0.129048], [-0.893287, -1.18854, 0.0150385], [-0.724883, -0.867677, -0.01057]], [[-0.827445, -0.658733, 0.32003], [-0.526668, -0.715843, 0.124487], [-0.339283, -0.404831, 0.113335], [-0.340777, -0.75114, 0.00363447], [-0.0399994, -0.80825, -0.191909], [-0.3417, -0.96517, -0.0641645], [-0.343194, -1.31148, -0.173866], [-0.528162, -1.06215, 0.0147859], [-0.829863, -1.21907, 0.14253], [-0.642478, -0.90806, 0.131379]], [[-0.733743, -0.709124, 0.47426], [-0.434372, -0.775928, 0.279633], [-0.228804, -0.47644, 0.28351], [-0.24935, -0.817215, 0.159346], [0.0500214, -0.884019, -0.0352816], [-0.262048, -1.02783, 0.0826087], [-0.282594, -1.3686, -0.0415549], [-0.454918, -1.1167, 0.155469], [-0.766988, -1.26051, 0.273359], [-0.56142, -0.961021, 0.277236]], [[-0.630369, -0.780028, 0.639296], [-0.339351, -0.851443, 0.433932], [-0.118073, -0.563729, 0.448877], [-0.159492, -0.89558, 0.30701], [0.131526, -0.966994, 0.101645], [-0.185091, -1.10067, 0.219331], [-0.226509, -1.43252, 0.0774642], [-0.38077, -1.18329, 0.292065], [-0.697387, -1.31697, 0.409751], [-0.476109, -1.02926, 0.424695]], [[-0.512348, -0.872465, 0.807748], [-0.236513, -0.941906, 0.581786], [-0.00345302, -0.66387, 0.600369], [-0.0660372, -0.984823, 0.442134], [0.209798, -1.05426, 0.216171], [-0.104716, -1.18318, 0.344339], [-0.1673, -1.50414, 0.186103], [-0.299097, -1.26286, 0.42355], [-0.613611, -1.39178, 0.551718], [-0.380551, -1.11374, 0.570301]], [[-0.374583, -0.983774, 0.970679], [-0.120893, -1.04442, 0.717836], [0.118348, -0.771373, 0.731103], [0.0358961, -1.0819, 0.56157], [0.289586, -1.14254, 0.308727], [-0.0150616, -1.27382, 0.456793], [-0.0975128, -1.58434, 0.287261], [-0.203344, -1.35494, 0.548303], [-0.507992, -1.48622, 0.696369], [-0.268752, -1.21317, 0.709636]], [[-0.212961, -1.10759, 1.1193], [0.0116581, -1.15403, 0.837597], [0.249504, -0.879443, 0.837219], [0.15048, -1.18273, 0.663496], [0.375099, -1.22917, 0.381795], [0.0892802, -1.37017, 0.556129], [-0.00974368, -1.67345, 0.382406], [-0.0873657, -1.45731, 0.663874], [-0.373185, -1.59831, 0.838209], [-0.135339, -1.32373, 0.837831]], [[-0.0253282, -1.23482, 1.24644], [0.163996, -1.2644, 0.93782], [0.390953, -0.981462, 0.917792], [0.281005, -1.28269, 0.747082], [0.47033, -1.31227, 0.43846], [0.213054, -1.46885, 0.641577], [0.103106, -1.77007, 0.470867], [0.0540483, -1.56563, 0.76711], [-0.203228, -1.72221, 0.970227], [0.0237291, -1.43927, 0.950199]], [[0.188083, -1.35529, 1.34738], [0.337483, -1.36863, 1.01652], [0.54277, -1.07195, 0.973998], [0.429817, -1.37687, 0.812035], [0.579217, -1.39021, 0.481176], [0.360009, -1.56532, 0.711936], [0.247057, -1.87024, 0.549972], [0.224531, -1.67355, 0.854553], [0.00532206, -1.84866, 1.08531], [0.210609, -1.55198, 1.04279]], [[0.424851, -1.45919, 1.41984], [0.532001, -1.45977, 1.07273], [0.704643, -1.14677, 1.00801], [0.598223, -1.46013, 0.858207], [0.705373, -1.46072, 0.511098], [0.532452, -1.65381, 0.765622], [0.426033, -1.96717, 0.615815], [0.425582, -1.77314, 0.922926], [0.252661, -1.96623, 1.17745], [0.425303, -1.65322, 1.11273]], [[0.680925, -1.53812, 1.46355], [0.746048, -1.53129, 1.10623], [0.876091, -1.2027, 1.02208], [0.786297, -1.52707, 0.885395], [0.85142, -1.52025, 0.528074], [0.730801, -1.72755, 0.800917], [0.641007, -2.05192, 0.664228], [0.656254, -1.85567, 0.969543], [0.535635, -2.06297, 1.24239], [0.665678, -1.73438, 1.15824]], [[0.951191, -1.58543, 1.4795], [0.976809, -1.57722, 1.11722], [1.05631, -1.23693, 1.01799], [0.992641, -1.57214, 0.893326], [1.01826, -1.56393, 0.531052], [0.953293, -1.77932, 0.816277], [0.889625, -2.11454, 0.69161], [0.913141, -1.91244, 0.992556], [0.848174, -2.12782, 1.27778], [0.927675, -1.78753, 1.17855]], [[1.22985, -1.59619, 1.46932], [1.22019, -1.59232, 1.10619], [1.2438, -1.24667, 0.996943], [1.21422, -1.58993, 0.881772], [1.20456, -1.58607, 0.51865], [1.19594, -1.80208, 0.810593], [1.16636, -2.14534, 0.695422], [1.19061, -1.93558, 0.991023], [1.18199, -2.15159, 1.28297], [1.2056, -1.80595, 1.17371]], [[1.51058, -1.567, 1.43491], [1.47086, -1.57231, 1.07386], [1.43599, -1.22921, 0.959704], [1.44632, -1.57559, 0.850713], [1.40661, -1.5809, 0.489658], [1.45271, -1.78967, 0.783353], [1.46304, -2.13605, 0.674362], [1.4812, -1.91869, 0.964866], [1.52729, -2.12746, 1.25856], [1.49242, -1.78436, 1.14441]], [[1.78657, -1.4959, 1.37826], [1.7224, -1.51406, 1.02116], [1.62906, -1.18211, 0.906864], [1.68274, -1.52528, 0.800466], [1.61857, -1.54343, 0.443369], [1.71592, -1.73737, 0.734709], [1.7696, -2.08053, 0.628311], [1.77608, -1.85722, 0.914767], [1.87343, -2.05116, 1.20611], [1.78009, -1.71921, 1.09181]], [[2.05061, -1.38233, 1.30138], [1.96747, -1.41588, 0.94935], [1.81795, -1.10371, 0.839077], [1.91608, -1.43661, 0.731781], [1.83294, -1.47015, 0.379747], [1.97673, -1.64235, 0.665468], [2.07486, -1.97526, 0.558172], [2.0656, -1.74878, 0.842054], [2.20939, -1.92098, 1.12778], [2.05987, -1.60881, 1.0175]], [[2.2952, -1.22724, 1.20638], [2.19819, -1.27774, 0.859968], [1.99667, -0.993479, 0.757242], [2.13823, -1.30895, 0.645872], [2.04121, -1.35946, 0.299458], [2.22571, -1.50393, 0.577042], [2.36727, -1.81941, 0.465672], [2.33974, -1.59322, 0.748598], [2.52424, -1.73769, 1.02618], [2.32273, -1.45343, 0.923456]], [[2.51284, -1.03314, 1.09551], [2.40653, -1.10142, 0.754915], [2.1587, -0.852377, 0.66261], [2.34083, -1.14362, 0.544418], [2.23453, -1.2119, 0.203825], [2.4534, -1.32362, 0.471371], [2.63554, -1.61486, 0.353178], [2.58867, -1.39266, 0.636723], [2.80754, -1.50438, 0.904269], [2.55971, -1.25534, 0.811963]], [[2.69632, -0.804209, 0.971208], [2.58481, -0.890524, 0.636425], [2.29748, -0.682984, 0.556815], [2.51588, -0.94387, 0.429518], [2.40437, -1.03019, 0.0947355], [2.65086, -1.10511, 0.350844], [2.86927, -1.36599, 0.223547], [2.80321, -1.15141, 0.509128], [3.04971, -1.22633, 0.765237], [2.76238, -1.01879, 0.685627]], [[2.8392, -0.546199, 0.836151], [2.72609, -0.650404, 0.507043], [2.40698, -0.489507, 0.441867], [2.65618, -0.714807, 0.303643], [2.54306, -0.819012, -0.0254647], [2.81019, -0.85405, 0.218216], [3.05939, -1.07935, 0.0799924], [2.97529, -0.875704, 0.368819], [3.24242, -0.910741, 0.6125], [2.92331, -0.749844, 0.547324]], [[2.93615, -0.266308, 0.693225], [2.82468, -0.387946, 0.369582], [2.48212, -0.277622, 0.320099], [2.75579, -0.463122, 0.169559], [2.64432, -0.584761, -0.154084], [2.92492, -0.577768, 0.0765208], [3.19859, -0.763268, -0.0740189], [3.09835, -0.573446, 0.219042], [3.37895, -0.566454, 0.449647], [3.03639, -0.45613, 0.400164]], [[2.98335, 0.027088, 0.54551], [2.87648, -0.11125, 0.227064], [2.51924, -0.0541853, 0.194101], [2.81044, -0.196748, 0.0302532], [2.70357, -0.335086, -0.288193], [2.9904, -0.284857, -0.0710107], [3.2816, -0.427419, -0.234859], [3.16768, -0.253813, 0.0632155], [3.45451, -0.203583, 0.280398], [3.09727, -0.146518, 0.247436]], [[2.98177, 0.224436, 0.446426], [2.88233, 0.0727283, 0.131681], [2.51979, 0.0836457, 0.111385], [2.82088, -0.0210325, -0.0628413], [2.72145, -0.172741, -0.377586], [3.00696, -0.0857271, -0.170519], [3.30805, -0.190405, -0.344746], [3.18342, -0.0319498, -0.0425455], [3.46894, 0.0550637, 0.164521], [3.1064, 0.065981, 0.144225]]]; + + for(i = [0:len(expected) - 1]) { + assertEqualPoints(expected[i], sections[i]); + } + } + + p = 2; + q = 3; + phi_step = 0.05; + star_radius = 0.5; + + pts = torus_knot(p, q, phi_step); + + shape_pentagram_pts = shape_pentagram(star_radius); + + // adjust it + path_extrude( + shape_pentagram_pts, + concat(pts, [pts[0]]), + closed = true, + twist = 188, + method = "AXIS_ANGLE" + ); +} + +test_path_extrude_euler_angle(); +test_path_extrude_axis_angle(); \ No newline at end of file diff --git a/test/test_polyline2d.scad b/test/test_polyline2d.scad index fc0bc635..508a7fd6 100644 --- a/test/test_polyline2d.scad +++ b/test/test_polyline2d.scad @@ -11,7 +11,7 @@ module test_polyline2d() { module assertCorrectSegment(index, point1, point2, width) { assertEqualPoint(points[index - 1], point1); assertEqualPoint(points[index], point2); - assertEqual(line_width, width); + assertEqualNum(line_width, width); } module assertCorrectCaps(startStyle, endStyle, index, p1Style, p2Style) { diff --git a/test/test_polyline3d.scad b/test/test_polyline3d.scad index a455e80b..71c43f72 100644 --- a/test/test_polyline3d.scad +++ b/test/test_polyline3d.scad @@ -17,7 +17,7 @@ module test_polyline3d() { module assertCorrectSegment(expected, actual, thickness) { assertEqualPoint(expected[0], actual[0]); assertEqualPoint(expected[1], actual[1]); - assertEqual(line_thickness, thickness); + assertEqualNum(line_thickness, thickness); } module assertCorrectCaps(leng_pts, startStyle, endStyle, index, p1Style, p2Style) { diff --git a/test/test_polysections.scad b/test/test_polysections.scad index bc3793d6..6f7b7a01 100644 --- a/test/test_polysections.scad +++ b/test/test_polysections.scad @@ -35,7 +35,7 @@ module test_polysections_solid_sections() { assertEqualPoints(expected_pts, points); for(i = [0:len(expected_faces) - 1]) { - assertTrue(expected_faces[i] == faces[i]); + assert(expected_faces[i] == faces[i]); } } @@ -78,7 +78,7 @@ module test_polysections_hollow_sections() { assertEqualPoints(expected_pts, points); for(i = [0:len(expected_faces) - 1]) { - assertTrue(expected_faces[i] == faces[i]); + assert(expected_faces[i] == faces[i]); } } diff --git a/test/test_ring_extrude.scad b/test/test_ring_extrude.scad index bd3cd96b..918e5e9f 100644 --- a/test/test_ring_extrude.scad +++ b/test/test_ring_extrude.scad @@ -9,42 +9,10 @@ module test_ring_extrude_closed() { include ; module test_ring_extrude(sections) { - expected = [ - [[52, 0, -10], [52, 0, 10], [48, 0, 10], [48, 0, -10]] - , [[51.875, 11.026, -9.736], [49.831, 10.592, 10.154], [45.939, 9.765, 9.736], [47.984, 10.199, -10.154]] - , [[49.364, 21.978, -9.366], [45.565, 20.287, 10.197], [41.991, 18.695, 9.366], [45.789, 20.387, -10.197]] - , [[44.49, 32.324, -8.893], [39.49, 28.691, 10.129], [36.412, 26.455, 8.893], [41.412, 30.088, -10.129]] - , [[37.401, 41.538, -8.322], [31.957, 35.492, 9.949], [29.512, 32.777, 8.322], [34.956, 38.822, -9.949]] - , [[28.366, 49.131, -7.66], [23.366, 40.471, 9.66], [21.634, 37.471, 7.66], [26.634, 46.131, -9.66]] - , [[17.767, 54.682, -6.915], [14.134, 43.501, 9.266], [13.134, 40.424, 6.915], [16.767, 51.604, -9.266]] - , [[6.081, 57.859, -6.093], [4.682, 44.55, 8.77], [4.372, 41.593, 6.093], [5.77, 54.903, -8.77]] - , [[-6.143, 58.448, -5.205], [-4.59, 43.666, 8.178], [-4.31, 41.004, 5.205], [-5.863, 55.786, -8.178]] - , [[-18.314, 56.365, -4.26], [-13.314, 40.977, 7.496], [-12.588, 38.741, 4.26], [-17.588, 54.129, -7.496]] - , [[-29.83, 51.667, -3.268], [-21.17, 36.667, 6.732], [-20.17, 34.935, 3.268], [-28.83, 49.935, -6.732]] - , [[-40.114, 44.551, -2.24], [-27.888, 30.973, 5.894], [-26.799, 29.764, 2.24], [-39.025, 43.342, -5.894]] - , [[-48.645, 35.343, -1.188], [-33.257, 24.162, 4.992], [-32.257, 23.436, 1.188], [-47.645, 34.616, -4.992]] - , [[-54.993, 24.484, -0.123], [-37.121, 16.527, 4.035], [-36.362, 16.189, 0.123], [-54.233, 24.146, -4.035]] - , [[-58.84, 12.507, 0.944], [-39.384, 8.371, 3.034], [-38.975, 8.284, -0.944], [-58.431, 12.42, -3.034]] - , [[-60, 0, 2], [-40, 0, 2], [-40, 0, -2], [-60, 0, -2]] - , [[-58.431, -12.42, 3.034], [-38.975, -8.284, 0.944], [-39.384, -8.371, -3.034], [-58.84, -12.507, -0.944]] - , [[-54.233, -24.146, 4.035], [-36.362, -16.189, -0.123], [-37.121, -16.527, -4.035], [-54.993, -24.484, 0.123]] - , [[-47.645, -34.616, 4.992], [-32.257, -23.436, -1.188], [-33.257, -24.162, -4.992], [-48.645, -35.343, 1.188]] - , [[-39.025, -43.342, 5.894], [-26.799, -29.764, -2.24], [-27.888, -30.973, -5.894], [-40.114, -44.551, 2.24]] - , [[-28.83, -49.935, 6.732], [-20.17, -34.935, -3.268], [-21.17, -36.667, -6.732], [-29.83, -51.667, 3.268]] - , [[-17.588, -54.129, 7.496], [-12.588, -38.741, -4.26], [-13.314, -40.977, -7.496], [-18.314, -56.365, 4.26]] - , [[-5.863, -55.786, 8.178], [-4.31, -41.004, -5.205], [-4.59, -43.666, -8.178], [-6.143, -58.448, 5.205]] - , [[5.77, -54.903, 8.77], [4.372, -41.593, -6.093], [4.682, -44.55, -8.77], [6.081, -57.859, 6.093]] - , [[16.767, -51.604, 9.266], [13.134, -40.424, -6.915], [14.134, -43.501, -9.266], [17.767, -54.682, 6.915]] - , [[26.634, -46.131, 9.66], [21.634, -37.471, -7.66], [23.366, -40.471, -9.66], [28.366, -49.131, 7.66]] - , [[34.956, -38.822, 9.949], [29.512, -32.777, -8.322], [31.957, -35.492, -9.949], [37.401, -41.538, 8.322]] - , [[41.412, -30.088, 10.129], [36.412, -26.455, -8.893], [39.49, -28.691, -10.129], [44.49, -32.324, 8.893]] - , [[45.789, -20.387, 10.197], [41.991, -18.695, -9.366], [45.565, -20.287, -10.197], [49.364, -21.978, 9.366]] - , [[47.984, -10.199, 10.154], [45.939, -9.765, -9.736], [49.831, -10.592, -10.154], [51.875, -11.026, 9.736]] - , [[48, 0, 10], [48, 0, -10], [52, 0, -10], [52, 0, 10]] - ]; - + expected = [[[52, 0, -10], [52, 0, 10], [48, 0, 10], [48, 0, -10]], [[51.8754, 11.0265, -9.73616], [49.8305, 10.5918, 10.1543], [45.9394, 9.76471, 9.73616], [47.9842, 10.1994, -10.1543]], [[49.3638, 21.9782, -9.36565], [45.5651, 20.2869, 10.1973], [41.9907, 18.6955, 9.36565], [45.7895, 20.3868, -10.1973]], [[44.4897, 32.3237, -8.89253], [39.4897, 28.6909, 10.1286], [36.412, 26.4549, 8.89253], [41.412, 30.0876, -10.1286]], [[37.4007, 41.5377, -8.32198], [31.9575, 35.4924, 9.94893], [29.5124, 32.7768, 8.32198], [34.9556, 38.8221, -9.94893]], [[28.366, 49.1314, -7.66025], [23.366, 40.4711, 9.66025], [21.634, 37.4711, 7.66025], [26.634, 46.1314, -9.66025]], [[17.7672, 54.6818, -6.9146], [14.1345, 43.5015, 9.26574], [13.1345, 40.4238, 6.9146], [16.7672, 51.6042, -9.26574]], [[6.08121, 57.8589, -6.09319], [4.68235, 44.5496, 8.76971], [4.37163, 41.5933, 6.09319], [5.7705, 54.9026, -8.76971]], [[-6.14311, 58.4478, -5.20502], [-4.58951, 43.6663, 8.1776], [-4.30974, 41.0044, 5.20502], [-5.86333, 55.7859, -8.1776]], [[-18.3141, 56.3651, -4.25982], [-13.3141, 40.9767, 7.49589], [-12.5876, 38.7406, 4.25982], [-17.5876, 54.129, -7.49589]], [[-29.8301, 51.6673, -3.26795], [-21.1699, 36.6673, 6.73205], [-20.1699, 34.9352, 3.26795], [-28.8301, 49.9352, -6.73205]], [[-40.1137, 44.5507, -2.24028], [-27.888, 30.9728, 5.89446], [-26.7994, 29.7637, 2.24028], [-39.025, 43.3417, -5.89446]], [[-48.6451, 35.3427, -1.18806], [-33.2566, 24.1624, 4.99228], [-32.2566, 23.4358, 1.18806], [-47.6451, 34.6162, -4.99228]], [[-54.993, 24.4844, -0.122822], [-37.1213, 16.5275, 4.03541], [-36.3616, 16.1892, 0.122822], [-54.2332, 24.1462, -4.03541]], [[-58.8398, 12.5068, 0.943759], [-39.384, 8.37132, 3.03433], [-38.975, 8.28439, -0.943759], [-58.4308, 12.4198, -3.03433]], [[-60, 0, 2], [-40, 0, 2], [-40, 0, -2], [-60, 0, -2]], [[-58.4308, -12.4198, 3.03433], [-38.975, -8.28439, 0.943759], [-39.384, -8.37132, -3.03433], [-58.8398, -12.5068, -0.943759]], [[-54.2332, -24.1462, 4.03541], [-36.3616, -16.1892, -0.122822], [-37.1213, -16.5275, -4.03541], [-54.993, -24.4844, 0.122822]], [[-47.6451, -34.6162, 4.99228], [-32.2566, -23.4358, -1.18806], [-33.2566, -24.1624, -4.99228], [-48.6451, -35.3427, 1.18806]], [[-39.025, -43.3417, 5.89446], [-26.7994, -29.7637, -2.24028], [-27.888, -30.9728, -5.89446], [-40.1137, -44.5507, 2.24028]], [[-28.8301, -49.9352, 6.73205], [-20.1699, -34.9352, -3.26795], [-21.1699, -36.6673, -6.73205], [-29.8301, -51.6673, 3.26795]], [[-17.5876, -54.129, 7.49589], [-12.5876, -38.7406, -4.25982], [-13.3141, -40.9767, -7.49589], [-18.3141, -56.3651, 4.25982]], [[-5.86333, -55.7859, 8.1776], [-4.30974, -41.0044, -5.20502], [-4.58951, -43.6663, -8.1776], [-6.14311, -58.4478, 5.20502]], [[5.7705, -54.9026, 8.76971], [4.37163, -41.5933, -6.09319], [4.68235, -44.5496, -8.76971], [6.08121, -57.8589, 6.09319]], [[16.7672, -51.6042, 9.26574], [13.1345, -40.4238, -6.9146], [14.1345, -43.5015, -9.26574], [17.7672, -54.6818, 6.9146]], [[26.634, -46.1314, 9.66025], [21.634, -37.4711, -7.66025], [23.366, -40.4711, -9.66025], [28.366, -49.1314, 7.66025]], [[34.9556, -38.8221, 9.94893], [29.5124, -32.7768, -8.32198], [31.9575, -35.4924, -9.94893], [37.4007, -41.5377, 8.32198]], [[41.412, -30.0876, 10.1286], [36.412, -26.4549, -8.89253], [39.4897, -28.6909, -10.1286], [44.4897, -32.3237, 8.89253]], [[45.7895, -20.3868, 10.1973], [41.9907, -18.6955, -9.36565], [45.5651, -20.2869, -10.1973], [49.3638, -21.9782, 9.36565]], [[47.9842, -10.1994, 10.1543], [45.9394, -9.76471, -9.73616], [49.8305, -10.5918, -10.1543], [51.8754, -11.0265, 9.73616]], [[48, 0, 10], [48, 0, -10], [52, 0, -10], [52, 0, 10]]]; + for(i = [0:len(expected) - 1]) { - assertEqualPoints(expected[i], sections[i], float_digits = 3); + assertEqualPoints(expected[i], sections[i]); } } @@ -64,27 +32,10 @@ module test_ring_extrude_not_closed() { include ; module test_ring_extrude(sections) { - expected = [ - [[52, 0, -10], [52, 0, 10], [48, 0, 10], [48, 0, -10]] - , [[50.994, 10.839, -10.667], [50.994, 10.839, 10.667], [46.821, 9.952, 10.667], [46.821, 9.952, -10.667]] - , [[47.748, 21.259, -11.333], [47.748, 21.259, 11.333], [43.607, 19.415, 11.333], [43.607, 19.415, -11.333]] - , [[42.392, 30.8, -12], [42.392, 30.8, 12], [38.509, 27.979, 12], [38.509, 27.979, -12]] - , [[35.152, 39.04, -12.667], [35.152, 39.04, 12.667], [31.761, 35.275, 12.667], [31.761, 35.275, -12.667]] - , [[26.333, 45.611, -13.333], [26.333, 45.611, 13.333], [23.667, 40.992, 13.333], [23.667, 40.992, -13.333]] - , [[16.316, 50.216, -14], [16.316, 50.216, 14], [14.586, 44.89, 14], [14.586, 44.89, -14]] - , [[5.533, 52.643, -14.667], [5.533, 52.643, 14.667], [4.92, 46.809, 14.667], [4.92, 46.809, -14.667]] - , [[-5.547, 52.776, -15.333], [-5.547, 52.776, 15.333], [-4.906, 46.676, 15.333], [-4.906, 46.676, -15.333]] - , [[-16.44, 50.596, -16], [-16.44, 50.596, 16], [-14.462, 44.509, 16], [-14.462, 44.509, -16]] - , [[-26.667, 46.188, -16.667], [-26.667, 46.188, 16.667], [-23.333, 40.415, 16.667], [-23.333, 40.415, -16.667]] - , [[-35.776, 39.733, -17.333], [-35.776, 39.733, 17.333], [-31.137, 34.581, 17.333], [-31.137, 34.581, -17.333]] - , [[-43.363, 31.505, -18], [-43.363, 31.505, 18], [-37.538, 27.273, 18], [-37.538, 27.273, -18]] - , [[-49.088, 21.855, -18.667], [-49.088, 21.855, 18.667], [-42.267, 18.818, 18.667], [-42.267, 18.818, -18.667]] - , [[-52.69, 11.2, -19.333], [-52.69, 11.2, 19.333], [-45.125, 9.592, 19.333], [-45.125, 9.592, -19.333]] - , [[-54, 0, -20], [-54, 0, 20], [-46, 0, 20], [-46, 0, -20]] - ]; + expected = [[[52, 0, -10], [52, 0, 10], [48, 0, 10], [48, 0, -10]], [[50.9941, 10.8391, -10.6667], [50.9941, 10.8391, 10.6667], [46.8207, 9.95204, 10.6667], [46.8207, 9.95204, -10.6667]], [[47.748, 21.2588, -11.3333], [47.748, 21.2588, 11.3333], [43.6066, 19.4149, 11.3333], [43.6066, 19.4149, -11.3333]], [[42.3925, 30.7999, -12], [42.3925, 30.7999, 12], [38.5092, 27.9786, 12], [38.5092, 27.9786, -12]], [[35.1517, 39.0399, -12.6667], [35.1517, 39.0399, 12.6667], [31.7614, 35.2746, 12.6667], [31.7614, 35.2746, -12.6667]], [[26.3333, 45.6107, -13.3333], [26.3333, 45.6107, 13.3333], [23.6667, 40.9919, 13.3333], [23.6667, 40.9919, -13.3333]], [[16.3161, 50.2158, -14], [16.3161, 50.2158, 14], [14.5856, 44.8899, 14], [14.5856, 44.8899, -14]], [[5.53304, 52.6434, -14.6667], [5.53304, 52.6434, 14.6667], [4.91981, 46.8088, 14.6667], [4.91981, 46.8088, -14.6667]], [[-5.54698, 52.776, -15.3333], [-5.54698, 52.776, 15.3333], [-4.90587, 46.6762, 15.3333], [-4.90587, 46.6762, -15.3333]], [[-16.4397, 50.5962, -16], [-16.4397, 50.5962, 16], [-14.462, 44.5094, 16], [-14.462, 44.5094, -16]], [[-26.6667, 46.188, -16.6667], [-26.6667, 46.188, 16.6667], [-23.3333, 40.4145, 16.6667], [-23.3333, 40.4145, -16.6667]], [[-35.7762, 39.7335, -17.3333], [-35.7762, 39.7335, 17.3333], [-31.1369, 34.581, 17.3333], [-31.1369, 34.581, -17.3333]], [[-43.3633, 31.5053, -18], [-43.3633, 31.5053, 18], [-37.5384, 27.2732, 18], [-37.5384, 27.2732, -18]], [[-49.0878, 21.8553, -18.6667], [-49.0878, 21.8553, 18.6667], [-42.2667, 18.8183, 18.6667], [-42.2667, 18.8183, -18.6667]], [[-52.6896, 11.1995, -19.3333], [-52.6896, 11.1995, 19.3333], [-45.1252, 9.59166, 19.3333], [-45.1252, 9.59166, -19.3333]], [[-54, 0, -20], [-54, 0, 20], [-46, 0, 20], [-46, 0, -20]]]; for(i = [0:len(expected) - 1]) { - assertEqualPoints(expected[i], sections[i], float_digits = 3); + assertEqualPoints(expected[i], sections[i]); } } @@ -95,6 +46,7 @@ module test_ring_extrude_not_closed() { [-2, -10] ]; + ring_extrude(shape_pts, radius = 50, angle = 180); ring_extrude(shape_pts, radius = 50, angle = 180, scale = 2); } diff --git a/test/test_rounded_cube.scad b/test/test_rounded_cube.scad index 4ae311df..9500da78 100644 --- a/test/test_rounded_cube.scad +++ b/test/test_rounded_cube.scad @@ -11,7 +11,7 @@ module test_rounded_cube_size_corner() { module test_rounded_edge_corner_center(corner_frags, corners, center_pts) { half_size = size / 2; - assertTrue(corner_frags % 4 == 0); + assert(corner_frags % 4 == 0); expected_corners = [[5.0961, 5.0961, 5.0961], [-5.0961, 5.0961, 5.0961], [5.0961, -5.0961, 5.0961], [-5.0961, -5.0961, 5.0961], [5.0961, 5.0961, -5.0961], [-5.0961, 5.0961, -5.0961], [5.0961, -5.0961, -5.0961], [-5.0961, -5.0961, -5.0961]]; @@ -36,7 +36,7 @@ module test_rounded_cube_size_center() { module test_rounded_edge_corner_center(corner_frags, corners, center_pts) { - assertTrue(corner_frags % 4 == 0); + assert(corner_frags % 4 == 0); expected_corners = [[20.0961, 7.5961, 2.5961], [-20.0961, 7.5961, 2.5961], [20.0961, -7.5961, 2.5961], [-20.0961, -7.5961, 2.5961], [20.0961, 7.5961, -2.5961], [-20.0961, 7.5961, -2.5961], [20.0961, -7.5961, -2.5961], [-20.0961, -7.5961, -2.5961]]; @@ -63,7 +63,7 @@ module test_rounded_cube_size_center_fn() { module test_rounded_edge_corner_center(corner_frags, corners, center_pts) { - assertTrue(corner_frags == $fn); + assert(corner_frags == $fn); expected_corners = [[20.3806, 7.8806, 2.8806], [-20.3806, 7.8806, 2.8806], [20.3806, -7.8806, 2.8806], [-20.3806, -7.8806, 2.8806], [20.3806, 7.8806, -2.8806], [-20.3806, 7.8806, -2.8806], [20.3806, -7.8806, -2.8806], [-20.3806, -7.8806, -2.8806]]; diff --git a/test/test_shape_arc.scad b/test/test_shape_arc.scad new file mode 100644 index 00000000..6e8fc276 --- /dev/null +++ b/test/test_shape_arc.scad @@ -0,0 +1,14 @@ +include ; +include ; + +module test_shape_arc() { + echo("==== test_shape_arc ===="); + + expected = [[0, -12.4315], [1.3066, -12.4315], [3.8627, -11.8882], [6.25, -10.8253], [8.3641, -9.2893], [10.1127, -7.3473], [11.4193, -5.0842], [12.2268, -2.5989], [12.5, 0], [12.2268, 2.5989], [11.4193, 5.0842], [10.1127, 7.3473], [8.3641, 9.2893], [6.25, 10.8253], [3.8627, 11.8882], [1.3066, 12.4315], [0, 12.4315], [0, 7.4589], [0.784, 7.4589], [2.3176, 7.1329], [3.75, 6.4952], [5.0185, 5.5736], [6.0676, 4.4084], [6.8516, 3.0505], [7.3361, 1.5593], [7.5, 0], [7.3361, -1.5593], [6.8516, -3.0505], [6.0676, -4.4084], [5.0185, -5.5736], [3.75, -6.4952], [2.3176, -7.1329], [0.784, -7.4589], [0, -7.4589]]; + + actual = shape_arc(radius = 10, angle = [-90, 90], width = 5); + + assertEqualPoints(expected, actual); +} + +test_shape_arc(); \ No newline at end of file diff --git a/test/test_shape_glued2circles.scad b/test/test_shape_glued2circles.scad new file mode 100644 index 00000000..6707695d --- /dev/null +++ b/test/test_shape_glued2circles.scad @@ -0,0 +1,22 @@ +include ; +include ; +include ; +include ; +include ; + +module test_shape_glued2circles() { + echo("==== test_shape_glued2circles ===="); + + $fn = 36; + + radius = 10; + centre_dist = 30; + + expected = [[0, -6.49519], [2.24, -6.58179], [4.42, -6.8416], [6.48, -7.27461], [8.36, -7.88083], [10, -8.66025], [10, -8.66025], [11.5798, -9.39693], [13.2635, -9.84808], [15, -10], [16.7365, -9.84808], [18.4202, -9.39693], [20, -8.66025], [21.4279, -7.66044], [22.6604, -6.42788], [23.6603, -5], [24.3969, -3.4202], [24.8481, -1.73648], [25, 0], [24.8481, 1.73648], [24.3969, 3.4202], [23.6603, 5], [22.6604, 6.42788], [21.4279, 7.66044], [20, 8.66025], [18.4202, 9.39693], [16.7365, 9.84808], [15, 10], [13.2635, 9.84808], [11.5798, 9.39693], [10, 8.66025], [10, 8.66025], [8.36, 7.88083], [6.48, 7.27461], [4.42, 6.8416], [2.24, 6.58179], [0, 6.49519], [0, 6.49519], [-2.24, 6.58179], [-4.42, 6.8416], [-6.48, 7.27461], [-8.36, 7.88083], [-10, 8.66025], [-10, 8.66025], [-11.5798, 9.39693], [-13.2635, 9.84808], [-15, 10], [-16.7365, 9.84808], [-18.4202, 9.39693], [-20, 8.66025], [-21.4279, 7.66044], [-22.6604, 6.42788], [-23.6603, 5], [-24.3969, 3.4202], [-24.8481, 1.73648], [-25, 0], [-24.8481, -1.73648], [-24.3969, -3.4202], [-23.6603, -5], [-22.6604, -6.42788], [-21.4279, -7.66044], [-20, -8.66025], [-18.4202, -9.39693], [-16.7365, -9.84808], [-15, -10], [-13.2635, -9.84808], [-11.5798, -9.39693], [-10, -8.66025], [-10, -8.66025], [-8.36, -7.88083], [-6.48, -7.27461], [-4.42, -6.8416], [-2.24, -6.58179], [0, -6.49519]]; + + actual = shape_glued2circles(radius, centre_dist); + + assertEqualPoints(expected, actual); +} + +test_shape_glued2circles(); \ No newline at end of file diff --git a/test/test_shape_path_extend.scad b/test/test_shape_path_extend.scad index 6cd43257..3e6aac0f 100644 --- a/test/test_shape_path_extend.scad +++ b/test/test_shape_path_extend.scad @@ -31,13 +31,13 @@ module test_shape_path_extend_stroke2() { num_of_points = 85 ); - expected = [[-4.5011, 0.0947], [-8.4053, -3.9989], [-12.4989, -0.0947], [-12.3643, -5.7817], [-8.5243, -12.4798], [-2.2566, -16.2117], [4.7338, -16.8348], [11.2185, -14.7228], [16.3807, -10.5003], [19.7496, -4.8836], [21.1346, 1.4176], [20.5617, 7.7614], [18.2156, 13.6081], [14.389, 18.5362], [9.4388, 22.2465], [3.7507, 24.5569], [-2.2893, 25.3921], [-8.317, 24.7693], [-14.0056, 22.7825], [-19.0767, 19.5862], [-23.3068, 15.3794], [-26.5297, 10.3903], [-28.6366, 4.8631], [-29.5737, -0.9545], [-29.3373, -6.8213], [-27.9691, -12.511], [-25.5494, -17.819], [-22.1903, -22.5671], [-18.0291, -26.6074], [-13.221, -29.8235], [-7.9329, -32.1319], [-2.3372, -33.4815], [3.394, -33.8522], [9.0933, -33.2528], [14.6026, -31.7189], [19.7766, -29.3093], [24.4855, -26.1033], [28.6173, -22.1964], [32.0793, -17.6978], [34.7988, -12.726], [36.7237, -7.4055], [37.8222, -1.8642], [38.0821, 3.7706], [37.5103, 9.3741], [36.1309, 14.8272], [33.984, 20.018], [31.124, 24.8443], [27.6176, 29.2145], [23.5417, 33.0491], [18.9816, 36.2816], [14.0288, 38.859], [8.7792, 40.7418], [3.3307, 41.9044], [-2.2179, 42.3347], [-7.7694, 42.0336], [-13.2293, 41.0145], [-18.5073, 39.3023], [-23.519, 36.9325], [-28.1862, 33.9503], [-32.4387, 30.4092], [-36.2144, 26.3702], [-39.4604, 21.9], [-42.1328, 17.0702], [-44.1976, 11.9559], [-45.6306, 6.6344], [-46.4169, 1.1839], [-46.5514, -4.3173], [-46.0381, -9.7921], [-44.8898, -15.1657], [-43.1276, -20.3663], [-40.7801, -25.3262], [-37.8833, -29.9823], [-34.479, -34.2768], [-30.6151, -38.1579], [-26.3437, -41.5801], [-21.7212, -44.5045], [-16.8071, -46.8992], [-11.663, -48.7393], [-6.352, -50.0072], [-0.9381, -50.6921], [4.5151, -50.7904], [9.9446, -50.3053], [15.2889, -49.2466], [20.4888, -47.6301], [25.4876, -45.4777], [30.2321, -42.8167], [34.6727, -39.6793], [35.6093, -34.1005], [30.0305, -33.1639], [30.0305, -33.1639], [26.2907, -35.855], [22.294, -38.1428], [18.0826, -40.0005], [13.7017, -41.4056], [9.1992, -42.3401], [4.6253, -42.7912], [0.0318, -42.7511], [-4.5284, -42.2178], [-9.0017, -41.195], [-13.3348, -39.6921], [-17.4748, -37.7246], [-21.3703, -35.3139], [-24.972, -32.4873], [-28.2333, -29.2777], [-31.1109, -25.7237], [-33.5658, -21.8689], [-35.5634, -17.7618], [-37.0749, -13.455], [-38.0769, -9.0052], [-38.5529, -4.4719], [-38.493, 0.0827], [-37.8948, 4.5951], [-36.7635, 9.0007], [-35.1119, 13.2352], [-32.9611, 17.2353], [-30.3397, 20.9399], [-27.2846, 24.2908], [-23.8397, 27.234], [-20.0566, 29.7206], [-15.9932, 31.7076], [-11.7134, 33.1594], [-7.2866, 34.0482], [-2.786, 34.3549], [1.7117, 34.0699], [6.1279, 33.1939], [10.3834, 31.7378], [14.3997, 29.7237], [18.1006, 27.1845], [21.4135, 24.1638], [24.2714, 20.7162], [26.6141, 16.9059], [28.3902, 12.8067], [29.5581, 8.5005], [30.0879, 4.0761], [29.9625, -0.3721], [29.1786, -4.7462], [27.7479, -8.9466], [25.6972, -12.8741], [23.0694, -16.4328], [19.9228, -19.532], [16.3312, -22.0893], [12.3824, -24.0332], [8.1775, -25.3054], [3.8285, -25.864], [-0.5437, -25.6851], [-4.8124, -24.7656], [-8.8484, -23.1242], [-12.5235, -20.8032], [-15.7156, -17.8685], [-18.3121, -14.4099], [-20.2157, -10.5398], [-21.3488, -6.3913], [-21.6583, -2.1154], [-21.1203, 2.1236], [-19.7441, 6.153], [-17.5751, 9.7984], [-14.6973, 12.8913], [-11.2338, 15.278], [-7.3453, 16.8285], [-3.2269, 17.4472], [0.898, 17.0828], [4.7872, 15.7378], [8.1917, 13.4772], [10.8722, 10.4342], [12.618, 6.8134], [13.2708, 2.8875], [12.749, -1.0117], [11.0749, -4.5129], [8.3989, -7.2362], [5.0179, -8.8399], [1.3786, -9.0853], [-1.9491, -7.9227]]; + expected = [[-4.50112, 0.0946668], [-8.40532, -3.99889], [-12.4989, -0.0946859], [-12.3642, -5.78176], [-8.52426, -12.4798], [-2.25652, -16.2117], [4.73389, -16.8348], [11.2186, -14.7228], [16.3807, -10.5002], [19.7496, -4.88353], [21.1345, 1.41768], [20.5616, 7.76153], [18.2155, 13.6082], [14.3889, 18.5363], [9.43865, 22.2465], [3.75054, 24.5569], [-2.2895, 25.3921], [-8.31717, 24.7692], [-14.0057, 22.7824], [-19.0769, 19.586], [-23.3069, 15.3792], [-26.5298, 10.3901], [-28.6367, 4.86291], [-29.5736, -0.954708], [-29.3372, -6.82151], [-27.969, -12.5112], [-25.5492, -17.8192], [-22.1901, -22.5673], [-18.0289, -26.6075], [-13.2208, -29.8236], [-7.93264, -32.132], [-2.33684, -33.4815], [3.39434, -33.8521], [9.09361, -33.2527], [14.6029, -31.7188], [19.7769, -29.3091], [24.4858, -26.103], [28.6176, -22.1962], [32.0795, -17.6975], [34.799, -12.7256], [36.7238, -7.40514], [37.8222, -1.86377], [38.0821, 3.77099], [37.5102, 9.37453], [36.1307, 14.8276], [33.9838, 20.0184], [31.1237, 24.8447], [27.6173, 29.2148], [23.5413, 33.0494], [18.9812, 36.2819], [14.0284, 38.8591], [8.7787, 40.7419], [3.33025, 41.9044], [-2.21838, 42.3346], [-7.76988, 42.0335], [-13.2298, 41.0143], [-18.5078, 39.302], [-23.5194, 36.9322], [-28.1866, 33.9499], [-32.4391, 30.4088], [-36.2148, 26.3697], [-39.4606, 21.8995], [-42.133, 17.0697], [-44.1978, 11.9554], [-45.6306, 6.63376], [-46.4169, 1.18325], [-46.5513, -4.31793], [-46.038, -9.79273], [-44.8896, -15.1663], [-43.1273, -20.3669], [-40.7798, -25.3268], [-37.8829, -29.9828], [-34.4786, -34.2773], [-30.6145, -38.1583], [-26.3431, -41.5805], [-21.7206, -44.5048], [-16.8064, -46.8994], [-11.6623, -48.7395], [-6.35131, -50.0073], [-0.937338, -50.6921], [4.51586, -50.7903], [9.94533, -50.3052], [15.2896, -49.2463], [20.4895, -47.6298], [25.4883, -45.4773], [30.2327, -42.8162], [34.6733, -39.6788], [35.6098, -34.1], [30.031, -33.1634], [30.031, -33.1634], [26.2913, -35.8546], [22.2946, -38.1424], [18.0832, -40.0002], [13.7023, -41.4054], [9.19983, -42.34], [4.62594, -42.7911], [0.032421, -42.7511], [-4.52778, -42.2179], [-9.00115, -41.1951], [-13.3342, -39.6922], [-17.4742, -37.7248], [-21.3698, -35.3142], [-24.9715, -32.4876], [-28.2329, -29.2781], [-31.1106, -25.7242], [-33.5655, -21.8694], [-35.5632, -17.7623], [-37.0747, -13.4555], [-38.0768, -9.0057], [-38.5528, -4.47244], [-38.493, 0.082213], [-37.8949, 4.59457], [-36.7636, 9.00019], [-35.1121, 13.2347], [-32.9613, 17.2349], [-30.34, 20.9395], [-27.2849, 24.2905], [-23.8401, 27.2337], [-20.057, 29.7203], [-15.9936, 31.7074], [-11.7138, 33.1593], [-7.28699, 34.0481], [-2.78643, 34.3548], [1.71125, 34.0699], [6.12748, 33.1939], [10.383, 31.7379], [14.3994, 29.7239], [18.1003, 27.1847], [21.4132, 24.1641], [24.2711, 20.7165], [26.6139, 16.9062], [28.3901, 12.8071], [29.558, 8.50082], [30.0879, 4.07644], [29.9625, -0.3718], [29.1787, -4.74591], [27.748, -8.94627], [25.6973, -12.8738], [23.0695, -16.4325], [19.923, -19.5318], [16.3314, -22.0891], [12.3826, -24.033], [8.17771, -25.3053], [3.82872, -25.8639], [-0.543495, -25.6851], [-4.81221, -24.7656], [-8.84815, -23.1243], [-12.5234, -20.8033], [-15.7154, -17.8686], [-18.312, -14.41], [-20.2157, -10.5399], [-21.3488, -6.3915], [-21.6583, -2.11558], [-21.1204, 2.12341], [-19.7441, 6.15281], [-17.5752, 9.79825], [-14.6974, 12.8912], [-11.2339, 15.2779], [-7.34541, 16.8284], [-3.22705, 17.4472], [0.897907, 17.0828], [4.78711, 15.7378], [8.19166, 13.4772], [10.8721, 10.4343], [12.618, 6.81346], [13.2708, 2.8876], [12.749, -1.01163], [11.0749, -4.51283], [8.39894, -7.23614], [5.01789, -8.83984], [1.37862, -9.08532], [-1.9491, -7.92267]]; actual = shape_path_extend( stroke2, [for(pa = pts_angles) pa[0]] ); - + assertEqualPoints(expected, actual); } diff --git a/test/test_shape_starburst.scad b/test/test_shape_starburst.scad new file mode 100644 index 00000000..8c7646ed --- /dev/null +++ b/test/test_shape_starburst.scad @@ -0,0 +1,14 @@ +include ; +include ; + +module test_shape_starburst() { + echo("==== test_shape_starburst ===="); + + expected = [[30, 0], [10.3923, 6], [15, 25.9808], [0, 12], [-15, 25.9808], [-10.3923, 6], [-30, 0], [-10.3923, -6], [-15, -25.9808], [0, -12], [15, -25.9808], [10.3923, -6]]; + + actual = shape_starburst(30, 12, 6); + + assertEqualPoints(expected, actual); +} + +test_shape_starburst(); \ No newline at end of file diff --git a/test/test_shape_superformula.scad b/test/test_shape_superformula.scad index fd249fa3..fe273b2c 100644 --- a/test/test_shape_superformula.scad +++ b/test/test_shape_superformula.scad @@ -6,53 +6,16 @@ module test_shape_superformula() { phi_step = 0.05; + assertEqualPoints( - [[1, 0], [1.0003, 0.0501], [1.0012, 0.1005], [1.0028, 0.1516], [1.005, 0.2037], [1.0077, 0.2573], [1.0111, 0.3128], [1.015, 0.3705], [1.0195, 0.431], [1.0245, 0.4949], [1.0299, 0.5626], [1.0357, 0.635], [1.0418, 0.7127], [1.0479, 0.7966], [1.0538, 0.8876], [1.0589, 0.9865], [1.0621, 1.0936], [1.0614, 1.2083], [1.0533, 1.3273], [1.0318, 1.4429], [0.9897, 1.5413], [0.9213, 1.6062], [0.8287, 1.6281], [0.7213, 1.6117], [0.6105, 1.5704], [0.5041, 1.5171], [0.4054, 1.4602], [0.3152, 1.4041], [0.2329, 1.3506], [0.1578, 1.3004], [0.0889, 1.2534], [0.0252, 1.2097], [-0.0341, 1.1688], [-0.0897, 1.1305], [-0.1422, 1.0945], [-0.1921, 1.0606], [-0.24, 1.0285], [-0.2861, 0.998], [-0.331, 0.969], [-0.375, 0.9412], [-0.4185, 0.9144], [-0.4616, 0.8885], [-0.5049, 0.8632], [-0.5484, 0.8385], [-0.5926, 0.8142], [-0.6378, 0.79], [-0.6842, 0.7657], [-0.7322, 0.7413], [-0.7821, 0.7164], [-0.8344, 0.6909], [-0.8893, 0.6644], [-0.9475, 0.6366], [-1.0093, 0.6072], [-1.0754, 0.5758], [-1.1463, 0.5419], [-1.2227, 0.5049], [-1.3052, 0.464], [-1.3941, 0.4184], [-1.4891, 0.3669], [-1.5883, 0.3081], [-1.6868, 0.2404], [-1.7743, 0.163], [-1.8345, 0.0763], [-1.851, -0.0156], [-1.8184, -0.1063], [-1.747, -0.1901], [-1.6543, -0.2643], [-1.5547, -0.3288], [-1.4565, -0.385], [-1.3634, -0.4344], [-1.2767, -0.4782], [-1.1964, -0.5177], [-1.1219, -0.5536], [-1.0527, -0.5866], [-0.9881, -0.6173], [-0.9276, -0.6461], [-0.8705, -0.6734], [-0.8165, -0.6996], [-0.7651, -0.7249], [-0.7158, -0.7496], [-0.6684, -0.7739], [-0.6225, -0.7981], [-0.5777, -0.8223], [-0.5337, -0.8468], [-0.4903, -0.8716], [-0.4471, -0.8971], [-0.4039, -0.9233], [-0.3603, -0.9504], [-0.3161, -0.9786], [-0.2708, -1.0081], [-0.2241, -1.0391], [-0.1756, -1.0718], [-0.1249, -1.1064], [-0.0714, -1.1431], [-0.0146, -1.1822], [0.0461, -1.2241], [0.1115, -1.2689], [0.1824, -1.3169], [0.2598, -1.3682], [0.3446, -1.4227], [0.4376, -1.4794], [0.5391, -1.5357], [0.6476, -1.5862], [0.7583, -1.6207], [0.8621, -1.6255], [0.9473, -1.589], [1.0066, -1.5112], [1.041, -1.4051], [1.0572, -1.2871], [1.0623, -1.169], [1.0613, -1.0566], [1.0573, -0.9523], [1.0519, -0.8562], [1.0458, -0.7676], [1.0397, -0.6859], [1.0337, -0.6101], [1.028, -0.5394], [1.0227, -0.473], [1.0179, -0.4103], [1.0136, -0.3508], [1.0099, -0.2939], [1.0067, -0.2391], [1.0042, -0.186], [1.0022, -0.1343], [1.0009, -0.0834], [1.0001, -0.0332]], + [[1, 0], [1.00031, 0.0500573], [1.00125, 0.10046], [1.0028, 0.151559], [1.00497, 0.203718], [1.00774, 0.257319], [1.0111, 0.31277], [1.01503, 0.370514], [1.01949, 0.431035], [1.02447, 0.494873], [1.02989, 0.562631], [1.03569, 0.634988], [1.04176, 0.712707], [1.04791, 0.796625], [1.05382, 0.887618], [1.05891, 0.986477], [1.06212, 1.09359], [1.06143, 1.20826], [1.05327, 1.32729], [1.03183, 1.4429], [0.989681, 1.54134], [0.921341, 1.60619], [0.828655, 1.62811], [0.721278, 1.61169], [0.61053, 1.57037], [0.50409, 1.51709], [0.405381, 1.46023], [0.315158, 1.4041], [0.232947, 1.3506], [0.157848, 1.30036], [0.0888879, 1.25345], [0.0251604, 1.20967], [-0.0341423, 1.16878], [-0.0897256, 1.13048], [-0.142206, 1.0945], [-0.192123, 1.06059], [-0.239956, 1.02851], [-0.286133, 0.998049], [-0.331044, 0.968998], [-0.375046, 0.941168], [-0.418473, 0.91438], [-0.461641, 0.888456], [-0.504856, 0.863226], [-0.548417, 0.838518], [-0.592622, 0.814157], [-0.637774, 0.789965], [-0.684186, 0.765751], [-0.732186, 0.741314], [-0.782123, 0.716436], [-0.834372, 0.690875], [-0.889346, 0.664361], [-0.947497, 0.63659], [-1.00933, 0.607209], [-1.0754, 0.575806], [-1.14631, 0.541894], [-1.22271, 0.504878], [-1.30517, 0.464026], [-1.39405, 0.418422], [-1.48905, 0.366911], [-1.58832, 0.30809], [-1.68684, 0.240453], [-1.77429, 0.162968], [-1.8345, 0.076346], [-1.85103, -0.0155626], [-1.81842, -0.10633], [-1.74702, -0.190135], [-1.6543, -0.264268], [-1.55469, -0.328782], [-1.45649, -0.384975], [-1.36344, -0.434355], [-1.27673, -0.478245], [-1.19637, -0.517714], [-1.12188, -0.553613], [-1.05267, -0.586621], [-0.988091, -0.617293], [-0.927557, -0.64609], [-0.870528, -0.673402], [-0.816518, -0.699563], [-0.765091, -0.724866], [-0.715846, -0.74957], [-0.668418, -0.773908], [-0.622465, -0.798093], [-0.577665, -0.822322], [-0.533711, -0.84678], [-0.490299, -0.871644], [-0.447134, -0.897088], [-0.403913, -0.923283], [-0.360329, -0.950402], [-0.316059, -0.978622], [-0.270764, -1.00813], [-0.224075, -1.03911], [-0.175591, -1.07178], [-0.124868, -1.10636], [-0.0714085, -1.14308], [-0.0146473, -1.18223], [0.0460598, -1.22406], [0.111452, -1.26886], [0.18237, -1.31688], [0.259752, -1.36824], [0.344568, -1.42274], [0.437631, -1.47942], [0.53912, -1.53573], [0.647576, -1.58617], [0.758281, -1.62073], [0.862053, -1.62552], [0.947326, -1.58897], [1.00661, -1.5112], [1.04098, -1.40513], [1.05716, -1.28714], [1.06228, -1.16898], [1.06135, -1.05666], [1.05734, -0.952316], [1.05189, -0.856175], [1.04585, -0.767657], [1.0397, -0.685922], [1.0337, -0.610096], [1.02802, -0.539367], [1.02274, -0.472999], [1.01793, -0.41034], [1.01364, -0.35081], [1.00991, -0.293889], [1.00674, -0.239108], [1.00417, -0.186036], [1.00221, -0.134275], [1.00086, -0.0834498], [1.00014, -0.0332021]], shape_superformula(phi_step, 3, 3, 4.5, 10, 10) ); - - assertEqualPoints( - [[1, 0], [1.0003, 0.0501], [1.0013, 0.1005], [1.0028, 0.1516], [1.005, 0.2037], [1.0079, 0.2574], [1.0115, 0.3129], [1.0158, 0.3708], [1.0208, 0.4316], [1.0266, 0.4959], [1.0332, 0.5644], [1.0406, 0.638], [1.0489, 0.7176], [1.0572, 0.8037], [1.0628, 0.8952], [1.0548, 0.9827], [1.0124, 1.0424], [0.9331, 1.0622], [0.8414, 1.0602], [0.7526, 1.0524], [0.6703, 1.044], [0.5944, 1.0362], [0.5238, 1.0292], [0.4579, 1.0231], [0.3957, 1.0178], [0.3367, 1.0132], [0.2802, 1.0093], [0.2258, 1.0062], [0.1731, 1.0037], [0.1216, 1.0018], [0.071, 1.0006], [0.0208, 1.0001], [-0.0292, 1.0001], [-0.0794, 1.0008], [-0.1302, 1.0021], [-0.1819, 1.004], [-0.2349, 1.0066], [-0.2895, 1.0099], [-0.3464, 1.0139], [-0.4059, 1.0186], [-0.4687, 1.0241], [-0.5354, 1.0303], [-0.6067, 1.0374], [-0.6837, 1.0454], [-0.7671, 1.0538], [-0.8568, 1.0612], [-0.948, 1.061], [-1.0226, 1.0353], [-1.058, 0.9691], [-1.0624, 0.8796], [-1.0559, 0.7888], [-1.0474, 0.7037], [-1.0393, 0.6253], [-1.032, 0.5526], [-1.0255, 0.4848], [-1.0199, 0.4211], [-1.015, 0.3609], [-1.0108, 0.3034], [-1.0074, 0.2482], [-1.0046, 0.1949], [-1.0025, 0.1429], [-1.0011, 0.0919], [-1.0002, 0.0416], [-1, -0.0084], [-1.0004, -0.0585], [-1.0015, -0.109], [-1.0032, -0.1603], [-1.0055, -0.2126], [-1.0085, -0.2666], [-1.0122, -0.3224], [-1.0165, -0.3808], [-1.0217, -0.4421], [-1.0276, -0.5071], [-1.0344, -0.5764], [-1.042, -0.651], [-1.0503, -0.7316], [-1.0585, -0.8188], [-1.0629, -0.9106], [-1.0506, -0.9954], [-1.0011, -1.0483], [-0.9179, -1.0628], [-0.826, -1.0591], [-0.7383, -1.051], [-0.6571, -1.0426], [-0.5822, -1.0349], [-0.5124, -1.0281], [-0.4472, -1.0221], [-0.3855, -1.0169], [-0.327, -1.0125], [-0.2709, -1.0087], [-0.2169, -1.0057], [-0.1644, -1.0033], [-0.113, -1.0016], [-0.0625, -1.0005], [-0.0124, -1], [0.0376, -1.0002], [0.0879, -1.001], [0.1388, -1.0024], [0.1907, -1.0044], [0.2439, -1.0072], [0.2989, -1.0105], [0.3562, -1.0146], [0.4162, -1.0195], [0.4796, -1.0251], [0.547, -1.0315], [0.6193, -1.0387], [0.6973, -1.0468], [0.7818, -1.0552], [0.8723, -1.0621], [0.9625, -1.0591], [1.0315, -1.027], [1.0602, -0.9549], [1.0617, -0.8641], [1.0545, -0.774], [1.046, -0.6901], [1.038, -0.6126], [1.0309, -0.5408], [1.0245, -0.4738], [1.019, -0.4108], [1.0142, -0.351], [1.0102, -0.294], [1.0069, -0.2391], [1.0042, -0.186], [1.0022, -0.1343], [1.0009, -0.0834], [1.0001, -0.0332]], + [[1, 0], [1.00031, 0.0500574], [1.00125, 0.10046], [1.00283, 0.151562], [1.00505, 0.203733], [1.00793, 0.257366], [1.01149, 0.31289], [1.01576, 0.370781], [1.02077, 0.431575], [1.02656, 0.495886], [1.03317, 0.564426], [1.04064, 0.638021], [1.04887, 0.717569], [1.05724, 0.803717], [1.0628, 0.89518], [1.05482, 0.982667], [1.01242, 1.04243], [0.933118, 1.0622], [0.841354, 1.06024], [0.752593, 1.05241], [0.670333, 1.04398], [0.594371, 1.03618], [0.523835, 1.02921], [0.457858, 1.02308], [0.395681, 1.01775], [0.336652, 1.01318], [0.280204, 1.00932], [0.225839, 1.00616], [0.17311, 1.00367], [0.121609, 1.00183], [0.0709593, 1.00063], [0.0208004, 1.00005], [-0.0292151, 1.00011], [-0.079432, 1.00079], [-0.1302, 1.00209], [-0.18188, 1.00404], [-0.234854, 1.00665], [-0.289537, 1.00992], [-0.346382, 1.01389], [-0.405899, 1.01859], [-0.468666, 1.02405], [-0.535354, 1.03032], [-0.606739, 1.03743], [-0.683704, 1.04537], [-0.767083, 1.05384], [-0.856786, 1.06124], [-0.948011, 1.06103], [-1.02259, 1.03534], [-1.05797, 0.969119], [-1.06236, 0.879651], [-1.05589, 0.788775], [-1.04744, 0.703741], [-1.03932, 0.625254], [-1.032, 0.552572], [-1.02553, 0.484797], [-1.01987, 0.421124], [-1.01499, 0.360859], [-1.01084, 0.303402], [-1.0074, 0.248228], [-1.00463, 0.19487], [-1.00252, 0.142905], [-1.00105, 0.0919462], [-1.00022, 0.0416257], [-1.00001, -0.00840762], [-1.00043, -0.0584988], [-1.00147, -0.108994], [-1.00315, -0.16025], [-1.00548, -0.212638], [-1.00848, -0.266558], [-1.01216, -0.322445], [-1.01655, -0.380784], [-1.02169, -0.442124], [-1.02761, -0.507094], [-1.03437, -0.576423], [-1.04197, -0.650956], [-1.0503, -0.731587], [-1.05852, -0.818825], [-1.06289, -0.910641], [-1.05065, -0.995413], [-1.00113, -1.04829], [-0.917916, -1.06278], [-0.826033, -1.0591], [-0.738293, -1.05098], [-0.657142, -1.04261], [-0.582156, -1.03494], [-0.512444, -1.02812], [-0.447156, -1.02213], [-0.385551, -1.01693], [-0.326994, -1.01248], [-0.27093, -1.00874], [-0.21687, -1.0057], [-0.164375, -1.00332], [-0.113043, -1.00158], [-0.0625005, -1.00049], [-0.0123899, -1.00002], [0.0376354, -1.00018], [0.0879203, -1.00096], [0.138816, -1.00238], [0.190686, -1.00444], [0.243918, -1.00715], [0.298931, -1.01054], [0.356188, -1.01463], [0.416209, -1.01946], [0.479586, -1.02505], [0.547006, -1.03146], [0.619266, -1.03871], [0.697257, -1.04677], [0.78176, -1.05524], [0.872294, -1.06205], [0.962466, -1.05915], [1.03154, -1.02698], [1.06023, -0.95492], [1.06165, -0.864124], [1.0545, -0.774011], [1.04603, -0.6901], [1.03803, -0.612652], [1.03086, -0.540856], [1.02452, -0.473824], [1.019, -0.41077], [1.01424, -0.351017], [1.01021, -0.293978], [1.00688, -0.239141], [1.00423, -0.186045], [1.00223, -0.134277], [1.00087, -0.0834499], [1.00014, -0.0332021]], shape_superformula(phi_step, 4, 4, 12, 15, 15) ); - - - assertEqualPoints( - [[1, 0], [1.001, 0.0501], [1.0042, 0.1008], [1.0096, 0.1526], [1.0173, 0.2062], [1.0271, 0.2623], [1.0381, 0.3211], [1.0476, 0.3824], [1.0493, 0.4436], [1.0343, 0.4996], [0.9989, 0.5457], [0.9496, 0.5822], [0.8957, 0.6128], [0.843, 0.6408], [0.7932, 0.6681], [0.7466, 0.6956], [0.7029, 0.7237], [0.6614, 0.7528], [0.6216, 0.7833], [0.5832, 0.8155], [0.5456, 0.8497], [0.5084, 0.8863], [0.4713, 0.9259], [0.4335, 0.9687], [0.3942, 1.0141], [0.3521, 1.0596], [0.305, 1.0985], [0.2516, 1.1208], [0.1933, 1.1208], [0.1341, 1.1044], [0.0767, 1.0812], [0.022, 1.0575], [-0.0303, 1.0357], [-0.0807, 1.0165], [-0.1299, 1], [-0.1786, 0.9858], [-0.2272, 0.9739], [-0.2764, 0.9639], [-0.3266, 0.9559], [-0.3785, 0.9499], [-0.4327, 0.9456], [-0.4899, 0.9428], [-0.55, 0.9403], [-0.6119, 0.9355], [-0.6714, 0.9224], [-0.7215, 0.8937], [-0.7571, 0.8474], [-0.7808, 0.7905], [-0.7983, 0.7312], [-0.8138, 0.6738], [-0.8294, 0.6196], [-0.8459, 0.5683], [-0.8637, 0.5196], [-0.8831, 0.4728], [-0.9041, 0.4274], [-0.9271, 0.3828], [-0.9523, 0.3386], [-0.98, 0.2941], [-1.0106, 0.249], [-1.0442, 0.2025], [-1.0798, 0.1539], [-1.1144, 0.1024], [-1.1407, 0.0475], [-1.1484, -0.0097], [-1.1334, -0.0663], [-1.1033, -0.1201], [-1.0677, -0.1706], [-1.0326, -0.2184], [-1, -0.2643], [-0.9704, -0.3091], [-0.9435, -0.3534], [-0.9191, -0.3977], [-0.8968, -0.4426], [-0.8764, -0.4884], [-0.8576, -0.5358], [-0.8402, -0.5852], [-0.8241, -0.6375], [-0.8086, -0.6928], [-0.7928, -0.7511], [-0.7738, -0.8103], [-0.7468, -0.8646], [-0.7061, -0.9054], [-0.6521, -0.9282], [-0.591, -0.9377], [-0.5294, -0.9412], [-0.4703, -0.9436], [-0.4142, -0.9468], [-0.3608, -0.9517], [-0.3095, -0.9584], [-0.2597, -0.9671], [-0.2108, -0.9777], [-0.1622, -0.9903], [-0.1135, -1.0053], [-0.0639, -1.0227], [-0.0129, -1.0427], [0.0401, -1.0653], [0.0957, -1.0893], [0.1539, -1.1111], [0.2132, -1.1231], [0.2702, -1.1157], [0.3215, -1.0867], [0.3667, -1.0445], [0.4077, -0.9986], [0.4463, -0.9539], [0.4838, -0.9122], [0.5209, -0.8737], [0.5581, -0.8379], [0.596, -0.8045], [0.6348, -0.7729], [0.6751, -0.7429], [0.7173, -0.7141], [0.762, -0.6863], [0.8096, -0.6589], [0.8604, -0.6315], [0.9139, -0.6029], [0.9671, -0.5708], [1.0129, -0.5314], [1.0417, -0.4817], [1.0501, -0.4233], [1.0449, -0.3616], [1.0344, -0.301], [1.0236, -0.2431], [1.0145, -0.1879], [1.0076, -0.135], [1.0029, -0.0836], [1.0005, -0.0332]], - shape_superformula(phi_step, 7, 7, 10, 6, 6) - ); - - - assertEqualPoints( - [[1, 0], [1.0007, 0.0501], [1.0028, 0.1006], [1.0061, 0.1521], [1.0104, 0.2048], [1.0155, 0.2593], [1.0206, 0.3157], [1.025, 0.3742], [1.0274, 0.4344], [1.0261, 0.4957], [1.0192, 0.5568], [1.0045, 0.6158], [0.9803, 0.6706], [0.946, 0.7192], [0.9025, 0.7601], [0.8516, 0.7934], [0.7961, 0.8197], [0.7383, 0.8405], [0.6802, 0.8572], [0.6231, 0.8714], [0.5676, 0.884], [0.514, 0.8961], [0.4623, 0.9082], [0.4121, 0.9209], [0.3633, 0.9344], [0.3153, 0.949], [0.2679, 0.965], [0.2205, 0.9824], [0.1727, 1.0012], [0.124, 1.0215], [0.074, 1.043], [0.0222, 1.0652], [-0.0318, 1.0875], [-0.088, 1.1087], [-0.1464, 1.127], [-0.2065, 1.1401], [-0.2673, 1.1456], [-0.3271, 1.141], [-0.3843, 1.1249], [-0.4374, 1.0976], [-0.4854, 1.0606], [-0.5282, 1.0166], [-0.5664, 0.9685], [-0.6007, 0.9185], [-0.6322, 0.8685], [-0.6616, 0.8194], [-0.6897, 0.7719], [-0.7173, 0.7262], [-0.7448, 0.6822], [-0.7726, 0.6398], [-0.8013, 0.5986], [-0.8309, 0.5583], [-0.8619, 0.5185], [-0.8944, 0.4789], [-0.9285, 0.4389], [-0.9642, 0.3981], [-1.0013, 0.356], [-1.0391, 0.3119], [-1.0767, 0.2653], [-1.1126, 0.2158], [-1.1444, 0.1631], [-1.1694, 0.1074], [-1.185, 0.0493], [-1.189, -0.01], [-1.181, -0.0691], [-1.1619, -0.1265], [-1.1343, -0.1812], [-1.1008, -0.2328], [-1.0642, -0.2813], [-1.0263, -0.327], [-0.9887, -0.3703], [-0.9521, -0.412], [-0.9169, -0.4525], [-0.8833, -0.4922], [-0.8513, -0.5319], [-0.8208, -0.5717], [-0.7915, -0.6123], [-0.7632, -0.6539], [-0.7355, -0.6968], [-0.708, -0.7414], [-0.6803, -0.7877], [-0.6518, -0.8358], [-0.6219, -0.8852], [-0.5896, -0.9354], [-0.554, -0.985], [-0.5144, -1.032], [-0.4698, -1.074], [-0.4201, -1.108], [-0.3655, -1.1316], [-0.3072, -1.1438], [-0.2469, -1.1448], [-0.1862, -1.1364], [-0.1265, -1.1213], [-0.0688, -1.1018], [-0.0134, -1.0801], [0.0398, -1.0577], [0.091, -1.0356], [0.1405, -1.0145], [0.1888, -0.9947], [0.2365, -0.9763], [0.2838, -0.9595], [0.3314, -0.944], [0.3796, -0.9297], [0.4288, -0.9165], [0.4795, -0.9041], [0.5318, -0.8921], [0.5861, -0.8799], [0.6422, -0.8668], [0.6997, -0.8519], [0.7579, -0.834], [0.8151, -0.8115], [0.8694, -0.783], [0.9181, -0.7472], [0.9586, -0.7036], [0.9895, -0.6528], [1.0104, -0.5963], [1.0223, -0.5364], [1.0271, -0.475], [1.0269, -0.414], [1.0237, -0.3543], [1.0189, -0.2965], [1.0137, -0.2408], [1.0089, -0.1869], [1.0048, -0.1346], [1.0019, -0.0835], [1.0003, -0.0332]], - shape_superformula(phi_step, 5, 5, 4, 4, 4) - ); - - - assertEqualPoints( - [[1, 0], [1.0056, 0.0503], [1.0227, 0.1026], [1.0519, 0.159], [1.0946, 0.2219], [1.1526, 0.2943], [1.2283, 0.38], [1.3248, 0.4836], [1.4443, 0.6106], [1.5862, 0.7662], [1.7408, 0.951], [1.8778, 1.1513], [1.9418, 1.3285], [1.8814, 1.4302], [1.7043, 1.4355], [1.4736, 1.3728], [1.247, 1.2839], [1.0505, 1.1958], [0.8884, 1.1195], [0.7565, 1.0579], [0.6488, 1.0105], [0.5599, 0.9761], [0.4853, 0.9535], [0.4214, 0.9417], [0.3656, 0.9403], [0.3154, 0.9491], [0.2689, 0.9685], [0.2243, 0.9993], [0.1798, 1.0427], [0.1336, 1.1007], [0.0834, 1.1757], [0.0264, 1.2712], [-0.0406, 1.3913], [-0.1222, 1.5402], [-0.2234, 1.7195], [-0.3482, 1.922], [-0.4943, 2.1189], [-0.6448, 2.2491], [-0.7666, 2.2438], [-0.8339, 2.0925], [-0.8507, 1.8587], [-0.8385, 1.6137], [-0.8158, 1.3949], [-0.793, 1.2124], [-0.7744, 1.0639], [-0.7617, 0.9435], [-0.7556, 0.8457], [-0.7562, 0.7657], [-0.7638, 0.6997], [-0.7787, 0.6448], [-0.8015, 0.5988], [-0.8331, 0.5597], [-0.8747, 0.5262], [-0.9281, 0.4969], [-0.9954, 0.4705], [-1.0797, 0.4458], [-1.185, 0.4213], [-1.3162, 0.395], [-1.4785, 0.3643], [-1.6756, 0.325], [-1.9038, 0.2714], [-2.1389, 0.1965], [-2.3222, 0.0966], [-2.376, -0.02], [-2.2714, -0.1328], [-2.0619, -0.2244], [-1.8245, -0.2915], [-1.6054, -0.3395], [-1.4201, -0.3754], [-1.2688, -0.4042], [-1.147, -0.4296], [-1.0492, -0.454], [-0.971, -0.4792], [-0.9087, -0.5064], [-0.8595, -0.537], [-0.8214, -0.5722], [-0.7929, -0.6134], [-0.7729, -0.6622], [-0.7605, -0.7205], [-0.7553, -0.7908], [-0.7569, -0.8764], [-0.7653, -0.9812], [-0.78, -1.1104], [-0.8003, -1.2698], [-0.8238, -1.4646], [-0.8445, -1.6943], [-0.8494, -1.9416], [-0.8177, -2.1567], [-0.7309, -2.2632], [-0.5956, -2.2175], [-0.4434, -2.0564], [-0.3035, -1.8525], [-0.1869, -1.6559], [-0.0929, -1.4867], [-0.0167, -1.3479], [0.0465, -1.2365], [0.1009, -1.1483], [0.1495, -1.0794], [0.1949, -1.0266], [0.2392, -0.9876], [0.2842, -0.9608], [0.3317, -0.945], [0.3836, -0.9396], [0.4419, -0.9445], [0.509, -0.9598], [0.588, -0.9863], [0.6827, -1.0249], [0.7979, -1.077], [0.9393, -1.1436], [1.1127, -1.2244], [1.3205, -1.3147], [1.5529, -1.3987], [1.7734, -1.4435], [1.9167, -1.4069], [1.9324, -1.2748], [1.8367, -1.084], [1.6887, -0.886], [1.5363, -0.7105], [1.4014, -0.5649], [1.2899, -0.4464], [1.2007, -0.3494], [1.1312, -0.2687], [1.0786, -0.1998], [1.0406, -0.1394], [1.0156, -0.0847], [1.0025, -0.0333]], - shape_superformula(phi_step, 5, 5, 2, 7, 7) - ); - - - - assertEqualPoints( - [[1, 0], [1.0115, 0.0506], [1.047, 0.105], [1.1092, 0.1676], [1.2034, 0.2439], [1.3379, 0.3416], [1.5257, 0.472], [1.7868, 0.6522], [2.152, 0.9098], [2.6685, 1.289], [3.4016, 1.8583], [4.3853, 2.6887], [5.318, 3.6382], [5.2197, 3.968], [4.0782, 3.4351], [2.9443, 2.7429], [2.136, 2.1994], [1.5884, 1.8082], [1.2129, 1.5284], [0.9491, 1.3273], [0.7594, 1.1826], [0.6196, 1.0801], [0.5142, 1.0103], [0.4328, 0.9672], [0.3683, 0.9474], [0.3154, 0.9492], [0.2701, 0.9728], [0.2289, 1.02], [0.1888, 1.0945], [0.146, 1.2025], [0.096, 1.3539], [0.0325, 1.5636], [-0.0542, 1.8545], [-0.1796, 2.2622], [-0.3693, 2.8422], [-0.6657, 3.6751], [-1.1265, 4.8286], [-1.7383, 6.0632], [-2.1478, 6.2868], [-2.0438, 5.1287], [-1.7389, 3.7996], [-1.4633, 2.8161], [-1.2524, 2.1414], [-1.0962, 1.676], [-0.9816, 1.3486], [-0.899, 1.1136], [-0.8417, 0.9421], [-0.8053, 0.8154], [-0.7872, 0.7211], [-0.7861, 0.6509], [-0.8019, 0.599], [-0.8358, 0.5615], [-0.8903, 0.5356], [-0.9698, 0.5193], [-1.081, 0.511], [-1.2338, 0.5095], [-1.4437, 0.5133], [-1.7341, 0.5205], [-2.1414, 0.5276], [-2.7227, 0.5281], [-3.5642, 0.5081], [-4.7564, 0.4369], [-6.1478, 0.2558], [-6.7005, -0.0564], [-5.6982, -0.3332], [-4.3144, -0.4696], [-3.2456, -0.5185], [-2.5031, -0.5293], [-1.9883, -0.5256], [-1.6255, -0.5179], [-1.3655, -0.5115], [-1.1769, -0.5093], [-1.0395, -0.513], [-0.9399, -0.5238], [-0.8694, -0.5432], [-0.8222, -0.5727], [-0.7946, -0.6147], [-0.7846, -0.6722], [-0.7914, -0.7498], [-0.8155, -0.8539], [-0.8585, -0.994], [-0.9237, -1.1844], [-1.0162, -1.4466], [-1.1435, -1.8143], [-1.3165, -2.3405], [-1.5487, -3.1073], [-1.8435, -4.2141], [-2.1216, -5.5961], [-2.0671, -6.4005], [-1.5279, -5.6887], [-0.9502, -4.4063], [-0.5506, -3.361], [-0.2961, -2.6234], [-0.1317, -2.1091], [-0.0216, -1.7457], [0.0559, -1.4853], [0.114, -1.2974], [0.1609, -1.1619], [0.2024, -1.066], [0.2425, -1.0013], [0.2847, -0.9624], [0.3322, -0.9462], [0.3885, -0.9516], [0.458, -0.979], [0.5465, -1.0305], [0.6621, -1.1106], [0.8167, -1.226], [1.0281, -1.3877], [1.3243, -1.6124], [1.7496, -1.9253], [2.3738, -2.3633], [3.2908, -2.9639], [4.5032, -3.6653], [5.416, -3.9753], [5.0622, -3.3397], [4.0315, -2.3794], [3.1266, -1.6404], [2.4741, -1.1442], [2.015, -0.8122], [1.6892, -0.5846], [1.4555, -0.4236], [1.2875, -0.3058], [1.1677, -0.2163], [1.085, -0.1454], [1.0322, -0.0861], [1.0051, -0.0334]], - shape_superformula(phi_step, 5, 5, 2, 13, 13) - ); - - - assertEqualPoints( - [[1, 0], [0.9523, 0.0477], [0.9088, 0.0912], [0.8687, 0.1313], [0.8315, 0.1685], [0.7966, 0.2034], [0.7637, 0.2363], [0.7326, 0.2674], [0.7028, 0.2972], [0.6743, 0.3257], [0.6467, 0.3533], [0.6199, 0.3801], [0.5938, 0.4062], [0.5681, 0.4319], [0.5428, 0.4572], [0.5177, 0.4823], [0.4927, 0.5073], [0.4677, 0.5323], [0.4424, 0.5576], [0.4169, 0.5831], [0.391, 0.609], [0.3645, 0.6355], [0.3373, 0.6627], [0.3092, 0.6908], [0.2799, 0.7201], [0.2494, 0.7506], [0.2173, 0.7827], [0.1833, 0.8167], [0.1471, 0.8529], [0.1082, 0.8918], [0.0662, 0.9338], [0.0204, 0.9796], [-0.0284, 0.9716], [-0.0735, 0.9265], [-0.115, 0.885], [-0.1534, 0.8466], [-0.1892, 0.8108], [-0.2228, 0.7772], [-0.2546, 0.7454], [-0.2849, 0.7151], [-0.314, 0.686], [-0.3419, 0.6581], [-0.369, 0.631], [-0.3954, 0.6046], [-0.4213, 0.5787], [-0.4467, 0.5533], [-0.4719, 0.5281], [-0.4969, 0.5031], [-0.5219, 0.4781], [-0.547, 0.453], [-0.5724, 0.4276], [-0.5981, 0.4019], [-0.6244, 0.3756], [-0.6513, 0.3487], [-0.679, 0.321], [-0.7078, 0.2922], [-0.7377, 0.2623], [-0.7691, 0.2309], [-0.8023, 0.1977], [-0.8375, 0.1625], [-0.8752, 0.1248], [-0.9159, 0.0841], [-0.96, 0.04], [-0.9917, -0.0083], [-0.9448, -0.0552], [-0.9018, -0.0982], [-0.8623, -0.1377], [-0.8254, -0.1746], [-0.7909, -0.2091], [-0.7584, -0.2416], [-0.7275, -0.2725], [-0.698, -0.302], [-0.6696, -0.3304], [-0.6421, -0.3579], [-0.6155, -0.3845], [-0.5894, -0.4106], [-0.5638, -0.4362], [-0.5386, -0.4614], [-0.5135, -0.4865], [-0.4885, -0.5115], [-0.4634, -0.5366], [-0.4382, -0.5618], [-0.4126, -0.5874], [-0.3866, -0.6134], [-0.36, -0.64], [-0.3326, -0.6674], [-0.3043, -0.6957], [-0.2749, -0.7251], [-0.2441, -0.7559], [-0.2117, -0.7883], [-0.1774, -0.8226], [-0.1408, -0.8592], [-0.1014, -0.8986], [-0.0588, -0.9412], [-0.0122, -0.9878], [0.0363, -0.9637], [0.0807, -0.9193], [0.1216, -0.8784], [0.1596, -0.8404], [0.195, -0.805], [0.2283, -0.7717], [0.2598, -0.7402], [0.2899, -0.7101], [0.3187, -0.6813], [0.3465, -0.6535], [0.3735, -0.6265], [0.3998, -0.6002], [0.4256, -0.5744], [0.451, -0.549], [0.4761, -0.5239], [0.5011, -0.4989], [0.5261, -0.4739], [0.5513, -0.4487], [0.5767, -0.4233], [0.6025, -0.3975], [0.6289, -0.3711], [0.6559, -0.3441], [0.6838, -0.3162], [0.7127, -0.2873], [0.7429, -0.2571], [0.7746, -0.2254], [0.8081, -0.1919], [0.8437, -0.1563], [0.8819, -0.1181], [0.923, -0.077], [0.9679, -0.0321]], - shape_superformula(phi_step, 4, 4, 1, 1, 1) - ); - - assertEqualPoints( - [[1, 0], [1.0075, 0.0504], [1.0305, 0.1034], [1.0701, 0.1617], [1.1284, 0.2287], [1.2086, 0.3086], [1.3153, 0.4069], [1.4549, 0.5311], [1.6363, 0.6918], [1.8711, 0.9038], [2.174, 1.1877], [2.5611, 1.5702], [3.0433, 2.0821], [3.6083, 2.743], [4.1846, 3.5246], [4.6053, 4.2903], [4.6507, 4.7886], [4.2298, 4.815], [3.4997, 4.4102], [2.7159, 3.7978], [2.0403, 3.1776], [1.5167, 2.644], [1.1286, 2.2175], [0.8445, 1.887], [0.6354, 1.6343], [0.4792, 1.442], [0.3599, 1.2966], [0.2666, 1.1877], [0.1911, 1.108], [0.1278, 1.0525], [0.0722, 1.0177], [0.0208, 1.0015], [-0.0293, 1.003], [-0.0811, 1.0222], [-0.1378, 1.0603], [-0.2028, 1.1196], [-0.2808, 1.2038], [-0.3779, 1.3182], [-0.5025, 1.4708], [-0.6663, 1.6722], [-0.8863, 1.9367], [-1.1857, 2.282], [-1.5945, 2.7263], [-2.1434, 3.2772], [-2.8428, 3.9055], [-3.6327, 4.4995], [-4.3291, 4.8452], [-4.6763, 4.7346], [-4.5551, 4.1726], [-4.0927, 3.3888], [-3.5095, 2.6216], [-2.9556, 1.9858], [-2.4895, 1.4977], [-2.1176, 1.1338], [-1.8273, 0.8638], [-1.6024, 0.6617], [-1.4288, 0.508], [-1.2953, 0.3888], [-1.1934, 0.2941], [-1.1172, 0.2167], [-1.0622, 0.1514], [-1.0255, 0.0942], [-1.0052, 0.0418], [-1.0002, -0.0084], [-1.0103, -0.0591], [-1.036, -0.1128], [-1.0785, -0.1723], [-1.1403, -0.2411], [-1.2246, -0.3237], [-1.3363, -0.4257], [-1.4822, -0.5552], [-1.6717, -0.7234], [-1.9168, -0.9459], [-2.2328, -1.2443], [-2.6355, -1.6465], [-3.1335, -2.1827], [-3.7077, -2.8681], [-4.2722, -3.6603], [-4.6445, -4.4003], [-4.6112, -4.8285], [-4.1215, -4.772], [-3.3655, -4.3151], [-2.5923, -3.6902], [-1.9416, -3.0806], [-1.4427, -2.5649], [-1.0744, -2.1556], [-0.8048, -1.8396], [-0.6059, -1.5982], [-0.4569, -1.4146], [-0.3427, -1.2759], [-0.2528, -1.1724], [-0.1797, -1.0971], [-0.118, -1.0453], [-0.0633, -1.0137], [-0.0124, -1.0005], [0.0378, -1.005], [0.0902, -1.0273], [0.148, -1.0688], [0.2149, -1.1319], [0.2956, -1.2207], [0.3967, -1.341], [0.5269, -1.5009], [0.6989, -1.7118], [0.9304, -1.9886], [1.246, -2.3494], [1.6763, -2.8116], [2.2509, -3.3793], [2.9726, -4.0125], [3.7633, -4.5819], [4.4182, -4.862], [4.688, -4.6673], [4.4952, -4.0486], [3.9977, -3.2539], [3.4117, -2.5042], [2.8705, -1.8937], [2.4206, -1.4286], [2.0635, -1.0826], [1.7853, -0.8257], [1.57, -0.6329], [1.4038, -0.4858], [1.2761, -0.3713], [1.1789, -0.28], [1.1065, -0.205], [1.0548, -0.1413], [1.021, -0.0851], [1.0033, -0.0333]], - shape_superformula(phi_step, 4, 4, 1, 7, 8) - ); } test_shape_superformula(); diff --git a/test/test_sphere_spiral_extrude.scad b/test/test_sphere_spiral_extrude.scad index ad973790..62d3810a 100644 --- a/test/test_sphere_spiral_extrude.scad +++ b/test/test_sphere_spiral_extrude.scad @@ -10,643 +10,11 @@ module test_sphere_spiral_extrude_star() { include ; module test_sphere_spiral_extrude(sections) { - expected = [ - [[0, -8.233, -39.195], [0, -6.798, -38.967], [0, -6.57, -37.532], [0, -5.911, -38.827], [0, -4.475, -38.6], [0, -5.503, -39.627], [0, -4.843, -40.922], [0, -6.138, -40.262], [0, -7.165, -41.29], [0, -6.938, -39.854]] - , [[0.293, -8.377, -39.164], [0.242, -6.933, -38.94], [0.234, -6.699, -37.496], [0.211, -6.04, -38.802], [0.16, -4.596, -38.578], [0.197, -5.633, -39.608], [0.174, -4.974, -40.914], [0.219, -6.274, -40.245], [0.255, -7.311, -41.276], [0.247, -7.077, -39.832]] - , [[0.595, -8.51, -39.132], [0.494, -7.059, -38.912], [0.477, -6.819, -37.46], [0.431, -6.162, -38.776], [0.329, -4.711, -38.556], [0.402, -5.756, -39.589], [0.357, -5.098, -40.905], [0.448, -6.402, -40.228], [0.521, -7.447, -41.261], [0.504, -7.207, -39.809]] - , [[0.907, -8.633, -39.1], [0.754, -7.176, -38.884], [0.728, -6.93, -37.424], [0.66, -6.276, -38.75], [0.506, -4.819, -38.534], [0.617, -5.871, -39.57], [0.548, -5.216, -40.896], [0.685, -6.521, -40.21], [0.796, -7.573, -41.246], [0.77, -7.328, -39.786]] - , [[1.229, -8.743, -39.067], [1.024, -7.283, -38.855], [0.988, -7.032, -37.386], [0.897, -6.38, -38.723], [0.691, -4.92, -38.511], [0.84, -5.978, -39.55], [0.749, -5.326, -40.887], [0.932, -6.631, -40.192], [1.081, -7.689, -41.23], [1.045, -7.438, -39.762]] - , [[1.559, -8.842, -39.034], [1.301, -7.38, -38.825], [1.256, -7.123, -37.349], [1.142, -6.476, -38.696], [0.884, -5.014, -38.488], [1.071, -6.076, -39.529], [0.957, -5.429, -40.877], [1.187, -6.732, -40.173], [1.374, -7.794, -41.214], [1.329, -7.538, -39.738]] - , [[1.898, -8.927, -39], [1.587, -7.465, -38.795], [1.531, -7.204, -37.311], [1.395, -6.562, -38.669], [1.084, -5.1, -38.464], [1.31, -6.165, -39.508], [1.174, -5.523, -40.866], [1.45, -6.823, -40.154], [1.677, -7.888, -41.198], [1.621, -7.627, -39.713]] - , [[2.244, -9, -38.966], [1.88, -7.54, -38.765], [1.814, -7.274, -37.272], [1.655, -6.638, -38.641], [1.291, -5.178, -38.44], [1.557, -6.245, -39.487], [1.398, -5.609, -40.856], [1.721, -6.904, -40.134], [1.987, -7.97, -41.18], [1.921, -7.704, -39.688]] - , [[2.598, -9.059, -38.931], [2.18, -7.603, -38.734], [2.103, -7.333, -37.233], [1.922, -6.704, -38.613], [1.505, -5.248, -38.416], [1.811, -6.315, -39.465], [1.63, -5.685, -40.844], [2, -6.974, -40.113], [2.305, -8.04, -41.163], [2.228, -7.77, -39.662]] - , [[2.958, -9.104, -38.895], [2.487, -7.654, -38.703], [2.398, -7.38, -37.194], [2.196, -6.758, -38.584], [1.725, -5.309, -38.391], [2.071, -6.374, -39.443], [1.869, -5.752, -40.833], [2.285, -7.032, -40.093], [2.631, -8.097, -41.144], [2.542, -7.823, -39.635]] - , [[3.325, -9.134, -38.859], [2.8, -7.693, -38.671], [2.699, -7.416, -37.154], [2.476, -6.802, -38.555], [1.951, -5.361, -38.366], [2.338, -6.423, -39.42], [2.114, -5.809, -40.821], [2.577, -7.079, -40.071], [2.963, -8.141, -41.125], [2.862, -7.864, -39.608]] - , [[3.697, -9.15, -38.823], [3.118, -7.719, -38.639], [3.005, -7.439, -37.114], [2.761, -6.834, -38.525], [2.183, -5.403, -38.341], [2.61, -6.46, -39.397], [2.366, -5.856, -40.808], [2.874, -7.114, -40.05], [3.301, -8.171, -41.106], [3.188, -7.892, -39.581]] - , [[4.074, -9.15, -38.785], [3.442, -7.731, -38.606], [3.316, -7.449, -37.073], [3.052, -6.854, -38.495], [2.42, -5.435, -38.315], [2.888, -6.487, -39.373], [2.623, -5.892, -40.795], [3.177, -7.136, -40.028], [3.646, -8.188, -41.086], [3.52, -7.906, -39.553]] - , [[4.456, -9.135, -38.748], [3.77, -7.73, -38.572], [3.632, -7.446, -37.031], [3.347, -6.862, -38.464], [2.662, -5.457, -38.289], [3.171, -6.501, -39.349], [2.886, -5.917, -40.782], [3.485, -7.146, -40.005], [3.995, -8.19, -41.066], [3.856, -7.906, -39.525]] - , [[4.841, -9.105, -38.709], [4.103, -7.716, -38.538], [3.951, -7.43, -36.99], [3.646, -6.857, -38.433], [2.908, -5.468, -38.262], [3.458, -6.503, -39.325], [3.153, -5.931, -40.768], [3.798, -7.143, -39.982], [4.348, -8.178, -41.044], [4.196, -7.892, -39.496]] - , [[5.23, -9.058, -38.67], [4.438, -7.687, -38.504], [4.273, -7.401, -36.947], [3.949, -6.84, -38.401], [3.158, -5.469, -38.235], [3.749, -6.494, -39.3], [3.425, -5.933, -40.754], [4.115, -7.127, -39.958], [4.706, -8.151, -41.023], [4.54, -7.864, -39.466]] - , [[5.621, -8.995, -38.631], [4.777, -7.644, -38.469], [4.597, -7.357, -36.905], [4.255, -6.81, -38.369], [3.411, -5.459, -38.208], [4.044, -6.471, -39.274], [3.701, -5.923, -40.739], [4.434, -7.096, -39.934], [5.067, -8.108, -41.001], [4.887, -7.822, -39.436]] - , [[6.013, -8.915, -38.591], [5.117, -7.587, -38.434], [4.924, -7.3, -36.862], [4.564, -6.766, -38.337], [3.668, -5.438, -38.18], [4.341, -6.436, -39.249], [3.98, -5.901, -40.724], [4.757, -7.052, -39.909], [5.43, -8.051, -40.978], [5.237, -7.764, -39.406]] - , [[6.407, -8.819, -38.551], [5.46, -7.515, -38.398], [5.252, -7.229, -36.818], [4.874, -6.709, -38.304], [3.927, -5.405, -38.152], [4.641, -6.387, -39.222], [4.263, -5.867, -40.708], [5.082, -6.994, -39.884], [5.796, -7.977, -40.955], [5.588, -7.691, -39.375]] - , [[6.802, -8.706, -38.509], [5.803, -7.428, -38.362], [5.581, -7.143, -36.774], [5.186, -6.638, -38.271], [4.188, -5.36, -38.123], [4.942, -6.325, -39.196], [4.547, -5.82, -40.692], [5.408, -6.922, -39.859], [6.163, -7.888, -40.931], [5.94, -7.603, -39.343]] - , [[7.196, -8.575, -38.468], [6.147, -7.326, -38.325], [5.91, -7.043, -36.729], [5.499, -6.553, -38.237], [4.45, -5.304, -38.094], [5.245, -6.25, -39.168], [4.833, -5.76, -40.676], [5.736, -6.835, -39.832], [6.53, -7.782, -40.907], [6.293, -7.5, -39.311]] - , [[7.588, -8.428, -38.426], [6.49, -7.208, -38.288], [6.239, -6.929, -36.684], [5.812, -6.455, -38.203], [4.714, -5.235, -38.065], [5.548, -6.162, -39.141], [5.121, -5.687, -40.659], [6.063, -6.734, -39.806], [6.898, -7.661, -40.882], [6.646, -7.381, -39.279]] - , [[7.98, -8.263, -38.383], [6.833, -7.076, -38.25], [6.566, -6.8, -36.639], [6.124, -6.342, -38.168], [4.978, -5.154, -38.035], [5.851, -6.059, -39.113], [5.409, -5.601, -40.642], [6.391, -6.618, -39.779], [7.264, -7.522, -40.857], [6.998, -7.246, -39.246]] - , [[8.368, -8.081, -38.339], [7.174, -6.928, -38.212], [6.892, -6.656, -36.593], [6.436, -6.215, -38.133], [5.242, -5.062, -38.005], [6.154, -5.943, -39.084], [5.697, -5.502, -40.624], [6.718, -6.487, -39.751], [7.63, -7.368, -40.831], [7.348, -7.096, -39.212]] - , [[8.754, -7.882, -38.296], [7.513, -6.765, -38.173], [7.216, -6.497, -36.547], [6.746, -6.074, -38.097], [5.505, -4.957, -37.975], [6.455, -5.812, -39.055], [5.985, -5.389, -40.606], [7.043, -6.341, -39.723], [7.993, -7.197, -40.804], [7.696, -6.93, -39.178]] - , [[9.135, -7.666, -38.251], [7.849, -6.586, -38.134], [7.537, -6.324, -36.5], [7.054, -5.919, -38.061], [5.767, -4.839, -37.944], [6.755, -5.668, -39.026], [6.272, -5.263, -40.587], [7.366, -6.18, -39.695], [8.354, -7.01, -40.777], [8.042, -6.748, -39.143]] - , [[9.512, -7.432, -38.206], [8.181, -6.392, -38.094], [7.854, -6.136, -36.453], [7.358, -5.749, -38.025], [6.027, -4.709, -37.912], [7.052, -5.51, -38.996], [6.557, -5.123, -40.568], [7.686, -6.005, -39.666], [8.711, -6.806, -40.75], [8.383, -6.55, -39.108]] - , [[9.884, -7.181, -38.161], [8.509, -6.182, -38.054], [8.167, -5.934, -36.405], [7.66, -5.565, -37.988], [6.285, -4.567, -37.881], [7.347, -5.338, -38.966], [6.84, -4.969, -40.549], [8.002, -5.814, -39.636], [9.063, -6.585, -40.721], [8.721, -6.336, -39.073]] - , [[10.249, -6.913, -38.115], [8.832, -5.958, -38.013], [8.475, -5.716, -36.357], [7.957, -5.367, -37.95], [6.541, -4.412, -37.849], [7.637, -5.151, -38.935], [7.119, -4.802, -40.529], [8.315, -5.608, -39.607], [9.411, -6.348, -40.693], [9.053, -6.107, -39.037]] - , [[10.607, -6.628, -38.068], [9.15, -5.718, -37.972], [8.777, -5.485, -36.308], [8.25, -5.155, -37.913], [6.793, -4.245, -37.817], [7.924, -4.951, -38.904], [7.396, -4.621, -40.508], [8.622, -5.388, -39.576], [9.753, -6.094, -40.664], [9.38, -5.862, -39]] - , [[10.957, -6.326, -38.021], [9.461, -5.463, -37.93], [9.074, -5.239, -36.259], [8.537, -4.929, -37.874], [7.041, -4.065, -37.784], [8.205, -4.737, -38.872], [7.668, -4.427, -40.487], [8.925, -5.153, -39.545], [10.089, -5.825, -40.634], [9.701, -5.601, -38.963]] - , [[11.3, -6.008, -37.973], [9.766, -5.193, -37.888], [9.363, -4.979, -36.21], [8.818, -4.689, -37.836], [7.284, -3.873, -37.751], [8.481, -4.509, -38.84], [7.936, -4.219, -40.466], [9.221, -4.903, -39.514], [10.417, -5.539, -40.604], [10.015, -5.325, -38.925]] - , [[11.632, -5.673, -37.925], [10.063, -4.908, -37.845], [9.645, -4.704, -36.16], [9.092, -4.435, -37.796], [7.523, -3.669, -37.717], [8.751, -4.268, -38.808], [8.198, -3.998, -40.444], [9.51, -4.638, -39.482], [10.738, -5.237, -40.573], [10.321, -5.034, -38.887]] - , [[11.955, -5.323, -37.876], [10.351, -4.609, -37.802], [9.919, -4.416, -36.11], [9.36, -4.167, -37.757], [7.756, -3.453, -37.683], [9.014, -4.013, -38.775], [8.454, -3.764, -40.422], [9.791, -4.359, -39.45], [11.05, -4.92, -40.541], [10.618, -4.727, -38.849]] - , [[12.268, -4.956, -37.827], [10.631, -4.295, -37.759], [10.185, -4.115, -36.059], [9.619, -3.886, -37.717], [7.982, -3.225, -37.649], [9.269, -3.745, -38.742], [8.704, -3.517, -40.4], [10.065, -4.067, -39.417], [11.352, -4.587, -40.509], [10.906, -4.406, -38.809]] - , [[12.569, -4.575, -37.777], [10.901, -3.968, -37.715], [10.441, -3.8, -36.008], [9.87, -3.592, -37.676], [8.202, -2.985, -37.614], [9.517, -3.464, -38.708], [8.946, -3.256, -40.377], [10.33, -3.76, -39.384], [11.645, -4.238, -40.477], [11.185, -4.071, -38.77]] - , [[12.858, -4.178, -37.726], [11.161, -3.626, -37.67], [10.687, -3.472, -35.956], [10.112, -3.286, -37.635], [8.415, -2.734, -37.579], [9.756, -3.17, -38.674], [9.181, -2.983, -40.353], [10.585, -3.439, -39.35], [11.927, -3.875, -40.444], [11.453, -3.721, -38.73]] - , [[13.134, -3.766, -37.675], [11.409, -3.272, -37.625], [10.922, -3.132, -35.904], [10.344, -2.966, -37.594], [8.62, -2.472, -37.544], [9.986, -2.863, -38.639], [9.408, -2.698, -40.329], [10.831, -3.106, -39.316], [12.197, -3.498, -40.41], [11.71, -3.358, -38.689]] - , [[13.396, -3.34, -37.624], [11.647, -2.904, -37.58], [11.147, -2.779, -35.851], [10.566, -2.634, -37.552], [8.816, -2.198, -37.508], [10.206, -2.545, -38.604], [9.625, -2.4, -40.305], [11.066, -2.759, -39.281], [12.456, -3.106, -40.376], [11.956, -2.981, -38.648]] - , [[13.645, -2.9, -37.572], [11.872, -2.524, -37.534], [11.36, -2.415, -35.798], [10.777, -2.291, -37.51], [9.004, -1.914, -37.472], [10.416, -2.214, -38.568], [9.833, -2.09, -40.28], [11.289, -2.4, -39.246], [12.702, -2.7, -40.342], [12.189, -2.591, -38.606]] - , [[13.879, -2.447, -37.519], [12.085, -2.131, -37.487], [11.56, -2.038, -35.745], [10.976, -1.935, -37.467], [9.182, -1.619, -37.436], [10.615, -1.872, -38.532], [10.031, -1.769, -40.255], [11.501, -2.028, -39.21], [12.934, -2.281, -40.307], [12.409, -2.188, -38.564]] - , [[14.098, -1.981, -37.466], [12.284, -1.726, -37.44], [11.748, -1.651, -35.691], [11.164, -1.569, -37.424], [9.35, -1.314, -37.399], [10.802, -1.518, -38.496], [10.218, -1.436, -40.229], [11.7, -1.644, -39.174], [13.152, -1.848, -40.271], [12.616, -1.773, -38.521]] - , [[14.3, -1.503, -37.412], [12.47, -1.311, -37.393], [11.922, -1.253, -35.636], [11.339, -1.192, -37.381], [9.508, -0.999, -37.362], [10.978, -1.154, -38.459], [10.394, -1.092, -40.203], [11.886, -1.249, -39.137], [13.356, -1.404, -40.235], [12.808, -1.346, -38.478]] - , [[14.486, -1.013, -37.358], [12.641, -0.884, -37.345], [12.083, -0.845, -35.582], [11.501, -0.804, -37.337], [9.655, -0.675, -37.324], [11.141, -0.779, -38.422], [10.558, -0.738, -40.177], [12.059, -0.843, -39.1], [13.544, -0.947, -40.198], [12.986, -0.908, -38.435]] - , [[14.655, -0.512, -37.303], [12.797, -0.447, -37.296], [12.229, -0.427, -35.526], [11.649, -0.407, -37.292], [9.791, -0.342, -37.286], [11.29, -0.394, -38.384], [10.71, -0.374, -40.15], [12.217, -0.427, -39.063], [13.716, -0.479, -40.16], [13.148, -0.459, -38.39]] - , [[14.806, 0, -37.248], [12.938, 0, -37.248], [12.361, 0, -35.471], [11.783, 0, -37.248], [9.915, 0, -37.248], [11.427, 0, -38.346], [10.849, 0, -40.123], [12.361, 0, -39.024], [13.872, 0, -40.123], [13.295, 0, -38.346]] - , [[14.939, 0.522, -37.192], [13.063, 0.456, -37.198], [12.477, 0.436, -35.415], [11.903, 0.416, -37.202], [10.027, 0.35, -37.209], [11.549, 0.403, -38.307], [10.975, 0.383, -40.095], [12.489, 0.436, -38.986], [14.011, 0.489, -40.084], [13.425, 0.469, -38.301]] - , [[15.053, 1.053, -37.135], [13.171, 0.921, -37.149], [12.577, 0.879, -35.358], [12.008, 0.84, -37.157], [10.126, 0.708, -37.17], [11.656, 0.815, -38.268], [11.087, 0.775, -40.067], [12.602, 0.881, -38.947], [14.132, 0.988, -40.045], [13.538, 0.947, -38.255]] - , [[15.148, 1.592, -37.078], [13.263, 1.394, -37.098], [12.661, 1.331, -35.301], [12.097, 1.271, -37.111], [10.212, 1.073, -37.13], [11.749, 1.235, -38.229], [11.185, 1.176, -40.038], [12.699, 1.335, -38.907], [14.236, 1.496, -40.006], [13.634, 1.433, -38.209]] - , [[15.223, 2.14, -37.021], [13.337, 1.874, -37.048], [12.729, 1.789, -35.244], [12.171, 1.711, -37.064], [10.285, 1.445, -37.091], [11.826, 1.662, -38.189], [11.268, 1.584, -40.009], [12.779, 1.796, -38.867], [14.321, 2.013, -39.966], [13.713, 1.927, -38.162]] - , [[15.278, 2.694, -36.963], [13.393, 2.362, -36.996], [12.78, 2.253, -35.186], [12.228, 2.156, -37.017], [10.343, 1.824, -37.05], [11.888, 2.096, -38.148], [11.337, 1.999, -39.979], [12.842, 2.264, -38.827], [14.387, 2.537, -39.925], [13.773, 2.429, -38.115]] - , [[15.313, 3.255, -36.904], [13.432, 2.855, -36.945], [12.813, 2.723, -35.128], [12.269, 2.608, -36.97], [10.388, 2.208, -37.01], [11.933, 2.536, -38.108], [11.389, 2.421, -39.949], [12.888, 2.739, -38.786], [14.433, 3.068, -39.884], [13.814, 2.936, -38.067]] - , [[15.327, 3.821, -36.845], [13.452, 3.354, -36.892], [12.829, 3.199, -35.069], [12.293, 3.065, -36.922], [10.418, 2.598, -36.969], [11.962, 2.982, -38.066], [11.426, 2.849, -39.919], [12.916, 3.22, -38.745], [14.46, 3.605, -39.842], [13.837, 3.45, -38.019]] - , [[15.319, 4.393, -36.786], [13.453, 3.858, -36.84], [12.827, 3.678, -35.01], [12.299, 3.527, -36.873], [10.433, 2.992, -36.928], [11.974, 3.433, -38.025], [11.447, 3.282, -39.888], [12.926, 3.706, -38.703], [14.466, 4.148, -39.8], [13.84, 3.968, -37.971]] - , [[15.29, 4.968, -36.725], [13.435, 4.365, -36.787], [12.806, 4.161, -34.951], [12.288, 3.993, -36.825], [10.434, 3.39, -36.886], [11.968, 3.889, -37.983], [11.451, 3.721, -39.857], [12.917, 4.197, -38.661], [14.452, 4.696, -39.757], [13.823, 4.491, -37.921]] - , [[15.239, 5.546, -36.665], [13.397, 4.876, -36.733], [12.767, 4.647, -34.891], [12.259, 4.462, -36.776], [10.418, 3.792, -36.844], [11.946, 4.348, -37.94], [11.438, 4.163, -39.825], [12.89, 4.691, -38.618], [14.417, 5.247, -39.714], [13.787, 5.018, -37.872]] - , [[15.165, 6.127, -36.604], [13.34, 5.39, -36.679], [12.71, 5.135, -34.831], [12.212, 4.934, -36.726], [10.387, 4.197, -36.802], [11.905, 4.81, -37.897], [11.408, 4.609, -39.793], [12.843, 5.189, -38.575], [14.361, 5.802, -39.67], [13.73, 5.547, -37.822]] - , [[15.07, 6.709, -36.542], [13.263, 5.905, -36.625], [12.633, 5.625, -34.77], [12.147, 5.408, -36.676], [10.341, 4.604, -36.759], [11.847, 5.274, -37.854], [11.36, 5.058, -39.76], [12.777, 5.689, -38.531], [14.283, 6.359, -39.626], [13.653, 6.079, -37.771]] - , [[14.952, 7.292, -36.48], [13.166, 6.422, -36.57], [12.538, 6.115, -34.709], [12.063, 5.884, -36.625], [10.278, 5.013, -36.716], [11.77, 5.741, -37.81], [11.295, 5.509, -39.727], [12.692, 6.19, -38.487], [14.184, 6.918, -39.581], [13.555, 6.611, -37.72]] - , [[14.811, 7.875, -36.417], [13.049, 6.938, -36.514], [12.423, 6.605, -34.647], [11.961, 6.36, -36.575], [10.199, 5.423, -36.672], [11.675, 6.208, -37.766], [11.212, 5.962, -39.693], [12.587, 6.693, -38.442], [14.063, 7.477, -39.536], [13.436, 7.144, -37.668]] - , [[14.647, 8.457, -36.353], [12.912, 7.455, -36.458], [12.289, 7.095, -34.585], [11.839, 6.835, -36.523], [10.104, 5.833, -36.628], [11.561, 6.675, -37.721], [11.112, 6.415, -39.66], [12.462, 7.195, -38.397], [13.919, 8.036, -39.49], [13.297, 7.677, -37.616]] - , [[14.461, 9.036, -36.29], [12.754, 7.97, -36.402], [12.136, 7.583, -34.523], [11.699, 7.31, -36.472], [9.992, 6.244, -36.584], [11.429, 7.142, -37.676], [10.992, 6.869, -39.625], [12.317, 7.697, -38.351], [13.754, 8.595, -39.443], [13.136, 8.208, -37.564]] - , [[14.251, 9.613, -36.225], [12.575, 8.482, -36.345], [11.963, 8.069, -34.46], [11.54, 7.784, -36.42], [9.864, 6.653, -36.54], [11.278, 7.607, -37.631], [10.855, 7.322, -39.59], [12.152, 8.197, -38.305], [13.567, 9.151, -39.396], [12.954, 8.738, -37.511]] - , [[14.019, 10.185, -36.16], [12.376, 8.992, -36.288], [11.771, 8.552, -34.397], [11.361, 8.254, -36.367], [9.719, 7.061, -36.495], [11.108, 8.071, -37.585], [10.699, 7.773, -39.555], [11.967, 8.695, -38.258], [13.357, 9.704, -39.348], [12.751, 9.264, -37.457]] - , [[13.764, 10.753, -36.095], [12.157, 9.498, -36.23], [11.559, 9.031, -34.333], [11.164, 8.722, -36.314], [9.557, 7.467, -36.449], [10.92, 8.531, -37.538], [10.525, 8.223, -39.52], [11.762, 9.189, -38.211], [13.124, 10.254, -39.3], [12.526, 9.787, -37.403]] - , [[13.485, 11.316, -36.029], [11.917, 9.999, -36.172], [11.328, 9.505, -34.269], [10.947, 9.186, -36.261], [9.379, 7.87, -36.404], [10.712, 8.989, -37.492], [10.332, 8.669, -39.483], [11.536, 9.68, -38.164], [12.87, 10.799, -39.252], [12.281, 10.305, -37.348]] - , [[13.184, 11.871, -35.962], [11.656, 10.495, -36.113], [11.077, 9.974, -34.204], [10.712, 9.645, -36.207], [9.183, 8.269, -36.358], [10.486, 9.441, -37.444], [10.12, 9.112, -39.447], [11.291, 10.166, -38.116], [12.593, 11.339, -39.203], [12.014, 10.817, -37.293]] - , [[12.861, 12.419, -35.895], [11.375, 10.985, -36.054], [10.807, 10.437, -34.139], [10.457, 10.098, -36.153], [8.972, 8.664, -36.312], [10.241, 9.889, -37.397], [9.89, 9.551, -39.41], [11.025, 10.647, -38.068], [12.294, 11.872, -39.153], [11.726, 11.324, -37.238]] - , [[12.515, 12.959, -35.828], [11.074, 11.467, -35.995], [10.519, 10.892, -34.074], [10.184, 10.546, -36.098], [8.743, 9.054, -36.265], [9.977, 10.331, -37.349], [9.642, 9.984, -39.373], [10.739, 11.121, -38.019], [11.973, 12.398, -39.103], [11.417, 11.823, -37.182]] - , [[12.146, 13.49, -35.76], [10.753, 11.942, -35.935], [10.211, 11.34, -34.008], [9.892, 10.986, -36.043], [8.498, 9.438, -36.218], [9.694, 10.767, -37.3], [9.375, 10.412, -39.335], [10.433, 11.588, -37.969], [11.629, 12.916, -39.052], [11.088, 12.314, -37.125]] - , [[11.756, 14.01, -35.691], [10.412, 12.408, -35.874], [9.884, 11.78, -33.942], [9.581, 11.418, -35.987], [8.237, 9.816, -36.17], [9.393, 11.195, -37.251], [9.09, 10.833, -39.296], [10.108, 12.046, -37.919], [11.265, 13.425, -39], [10.737, 12.796, -37.068]] - , [[11.343, 14.519, -35.622], [10.051, 12.864, -35.813], [9.539, 12.21, -33.876], [9.252, 11.842, -35.932], [7.959, 10.188, -36.123], [9.074, 11.614, -37.202], [8.787, 11.246, -39.258], [9.763, 12.496, -37.869], [10.878, 13.923, -38.949], [10.367, 13.269, -37.011]] - , [[10.91, 15.016, -35.553], [9.671, 13.31, -35.752], [9.176, 12.63, -33.809], [8.905, 12.256, -35.875], [7.666, 10.551, -36.074], [8.737, 12.025, -37.152], [8.466, 11.652, -39.219], [9.399, 12.937, -37.818], [10.47, 14.411, -38.896], [9.976, 13.731, -36.953]] - , [[10.455, 15.5, -35.483], [9.271, 13.745, -35.69], [8.795, 13.039, -33.741], [8.54, 12.661, -35.818], [7.356, 10.906, -36.026], [8.382, 12.427, -37.102], [8.127, 12.048, -39.179], [9.016, 13.367, -37.767], [10.042, 14.887, -38.843], [9.565, 14.181, -36.895]] - , [[9.979, 15.97, -35.412], [8.853, 14.168, -35.628], [8.396, 13.437, -33.674], [8.157, 13.054, -35.761], [7.031, 11.252, -35.977], [8.009, 12.818, -37.052], [7.77, 12.435, -39.139], [8.614, 13.785, -37.715], [9.592, 15.351, -38.79], [9.135, 14.62, -36.836]] - , [[9.483, 16.426, -35.341], [8.417, 14.578, -35.565], [7.98, 13.823, -33.606], [7.757, 13.436, -35.704], [6.691, 11.589, -35.928], [7.62, 13.198, -37], [7.397, 12.811, -39.099], [8.194, 14.192, -37.663], [9.122, 15.801, -38.736], [8.686, 15.045, -36.776]] - , [[8.968, 16.866, -35.269], [7.962, 14.975, -35.502], [7.548, 14.195, -33.537], [7.341, 13.806, -35.646], [6.335, 11.915, -35.878], [7.213, 13.566, -36.949], [7.006, 13.177, -39.058], [7.755, 14.586, -37.611], [8.633, 16.236, -38.681], [8.218, 15.456, -36.716]] - , [[8.433, 17.289, -35.197], [7.49, 15.357, -35.438], [7.098, 14.553, -33.468], [6.908, 14.162, -35.587], [5.965, 12.23, -35.829], [6.79, 13.921, -36.897], [6.599, 13.53, -39.017], [7.299, 14.966, -37.558], [8.124, 16.657, -38.626], [7.732, 15.853, -36.656]] - , [[7.879, 17.696, -35.125], [7.001, 15.724, -35.374], [6.633, 14.898, -33.399], [6.458, 14.505, -35.529], [5.58, 12.534, -35.778], [6.35, 14.263, -36.845], [6.176, 13.871, -38.975], [6.826, 15.332, -37.504], [7.596, 17.061, -38.571], [7.228, 16.235, -36.595]] - , [[7.306, 18.084, -35.051], [6.495, 16.075, -35.31], [6.152, 15.227, -33.329], [5.993, 14.834, -35.469], [5.182, 12.825, -35.728], [5.895, 14.591, -36.792], [5.736, 14.198, -38.933], [6.336, 15.682, -37.45], [7.05, 17.448, -38.515], [6.707, 16.6, -36.534]] - , [[6.717, 18.454, -34.978], [5.973, 16.41, -35.245], [5.656, 15.54, -33.259], [5.513, 15.147, -35.41], [4.769, 13.103, -35.677], [5.425, 14.904, -36.739], [5.282, 14.511, -38.89], [5.83, 16.017, -37.396], [6.485, 17.818, -38.458], [6.169, 16.948, -36.472]] - , [[6.11, 18.804, -34.904], [5.435, 16.728, -35.179], [5.146, 15.837, -33.188], [5.018, 15.444, -35.35], [4.344, 13.368, -35.626], [4.939, 15.202, -36.686], [4.812, 14.81, -38.847], [5.308, 16.335, -37.341], [5.904, 18.169, -38.401], [5.614, 17.278, -36.41]] - , [[5.486, 19.134, -34.829], [4.882, 17.027, -35.113], [4.621, 16.116, -33.117], [4.509, 15.726, -35.289], [3.905, 13.619, -35.574], [4.44, 15.484, -36.632], [4.328, 15.093, -38.804], [4.77, 16.637, -37.285], [5.305, 18.501, -38.343], [5.044, 17.59, -36.347]] - , [[4.848, 19.442, -34.754], [4.315, 17.308, -35.047], [4.084, 16.378, -33.046], [3.987, 15.989, -35.229], [3.455, 13.855, -35.522], [3.927, 15.749, -36.577], [3.83, 15.361, -38.76], [4.219, 16.92, -37.23], [4.691, 18.814, -38.285], [4.459, 17.883, -36.284]] - , [[4.194, 19.729, -34.678], [3.735, 17.57, -34.98], [3.533, 16.622, -32.974], [3.451, 16.236, -35.167], [2.992, 14.077, -35.47], [3.4, 15.997, -36.523], [3.318, 15.611, -38.715], [3.653, 17.184, -37.173], [4.061, 19.105, -38.226], [3.859, 18.156, -36.22]] - , [[3.526, 19.994, -34.602], [3.141, 17.812, -34.913], [2.97, 16.846, -32.902], [2.903, 16.464, -35.106], [2.518, 14.282, -35.417], [2.861, 16.227, -36.467], [2.794, 15.845, -38.671], [3.073, 17.43, -37.117], [3.416, 19.375, -38.167], [3.246, 18.409, -36.156]] - , [[2.844, 20.236, -34.525], [2.534, 18.034, -34.846], [2.396, 17.052, -32.83], [2.343, 16.673, -35.044], [2.034, 14.471, -35.364], [2.31, 16.439, -36.412], [2.257, 16.06, -38.626], [2.481, 17.655, -37.059], [2.758, 19.623, -38.107], [2.62, 18.641, -36.091]] - , [[2.15, 20.454, -34.448], [1.917, 18.234, -34.778], [1.812, 17.237, -32.757], [1.772, 16.863, -34.981], [1.539, 14.643, -35.311], [1.748, 16.632, -36.356], [1.709, 16.257, -38.58], [1.877, 17.86, -37.002], [2.086, 19.848, -38.047], [1.981, 18.851, -36.026]] - , [[1.444, 20.647, -34.37], [1.288, 18.413, -34.709], [1.217, 17.402, -32.684], [1.191, 17.033, -34.918], [1.035, 14.799, -35.257], [1.175, 16.805, -36.299], [1.149, 16.436, -38.534], [1.262, 18.044, -36.944], [1.402, 20.05, -37.986], [1.331, 19.039, -35.961]] - , [[0.727, 20.816, -34.292], [0.648, 18.57, -34.64], [0.613, 17.546, -32.61], [0.6, 17.182, -34.855], [0.522, 14.936, -35.203], [0.592, 16.958, -36.243], [0.579, 16.594, -38.487], [0.636, 18.207, -36.885], [0.706, 20.228, -37.925], [0.671, 19.204, -35.895]] - , [[0, 20.96, -34.213], [0, 18.705, -34.571], [0, 17.668, -32.536], [0, 17.311, -34.791], [0, 15.055, -35.149], [0, 17.09, -36.185], [0, 16.733, -38.441], [0, 18.347, -36.826], [0, 20.382, -37.863], [0, 19.345, -35.828]] - , [[-0.736, 21.078, -34.134], [-0.657, 18.816, -34.501], [-0.62, 17.769, -32.462], [-0.608, 17.418, -34.727], [-0.529, 15.156, -35.094], [-0.601, 17.201, -36.128], [-0.588, 16.851, -38.393], [-0.645, 18.465, -36.766], [-0.716, 20.511, -37.8], [-0.68, 19.463, -35.761]] - , [[-1.48, 21.169, -34.055], [-1.322, 18.904, -34.431], [-1.248, 17.847, -32.387], [-1.224, 17.504, -34.663], [-1.066, 15.238, -35.039], [-1.209, 17.291, -36.07], [-1.185, 16.948, -38.346], [-1.298, 18.56, -36.707], [-1.441, 20.614, -37.737], [-1.368, 19.557, -35.694]] - , [[-2.232, 21.234, -33.974], [-1.994, 18.968, -34.36], [-1.882, 17.903, -32.312], [-1.846, 17.567, -34.598], [-1.608, 15.301, -34.983], [-1.825, 17.359, -36.011], [-1.789, 17.024, -38.297], [-1.958, 18.632, -36.646], [-2.175, 20.691, -37.674], [-2.063, 19.626, -35.626]] - , [[-2.99, 21.271, -33.894], [-2.671, 19.007, -34.289], [-2.521, 17.936, -32.236], [-2.475, 17.608, -34.533], [-2.156, 15.344, -34.928], [-2.446, 17.405, -35.952], [-2.4, 17.078, -38.249], [-2.625, 18.68, -36.585], [-2.915, 20.741, -37.61], [-2.764, 19.67, -35.557]] - , [[-3.753, 21.282, -33.813], [-3.354, 19.022, -34.217], [-3.164, 17.945, -32.16], [-3.108, 17.626, -34.467], [-2.71, 15.367, -34.872], [-3.073, 17.429, -35.893], [-3.017, 17.109, -38.2], [-3.298, 18.703, -36.524], [-3.661, 20.765, -37.545], [-3.472, 19.688, -35.488]] - , [[-4.52, 21.264, -33.731], [-4.041, 19.012, -34.145], [-3.811, 17.931, -32.084], [-3.745, 17.621, -34.401], [-3.267, 15.369, -34.815], [-3.705, 17.429, -35.833], [-3.639, 17.119, -38.15], [-3.975, 18.702, -36.462], [-4.413, 20.762, -37.48], [-4.183, 19.681, -35.419]] - , [[-5.29, 21.218, -33.649], [-4.732, 18.977, -34.073], [-4.461, 17.894, -32.007], [-4.386, 17.592, -34.335], [-3.828, 15.352, -34.759], [-4.34, 17.406, -35.773], [-4.265, 17.105, -38.1], [-4.656, 18.676, -36.4], [-5.169, 20.731, -37.415], [-4.899, 19.647, -35.349]] - , [[-6.063, 21.144, -33.566], [-5.424, 18.917, -34], [-5.113, 17.832, -31.93], [-5.03, 17.54, -34.268], [-4.391, 15.313, -34.701], [-4.978, 17.36, -35.713], [-4.894, 17.068, -38.05], [-5.341, 18.625, -36.337], [-5.928, 20.672, -37.349], [-5.617, 19.587, -35.279]] - , [[-6.837, 21.042, -33.483], [-6.118, 18.831, -33.927], [-5.766, 17.747, -31.853], [-5.675, 17.464, -34.201], [-4.956, 15.254, -34.644], [-5.618, 17.29, -35.652], [-5.526, 17.008, -37.999], [-6.027, 18.549, -36.274], [-6.689, 20.585, -37.282], [-6.336, 19.501, -35.208]] - , [[-7.611, 20.91, -33.4], [-6.813, 18.719, -33.853], [-6.419, 17.637, -31.775], [-6.32, 17.365, -34.133], [-5.523, 15.173, -34.586], [-6.259, 17.196, -35.59], [-6.16, 16.924, -37.948], [-6.714, 18.447, -36.211], [-7.45, 20.47, -37.215], [-7.057, 19.388, -35.137]] - , [[-8.384, 20.75, -33.315], [-7.507, 18.581, -33.779], [-7.071, 17.502, -31.697], [-6.966, 17.24, -34.065], [-6.089, 15.071, -34.528], [-6.9, 17.079, -35.529], [-6.794, 16.817, -37.897], [-7.401, 18.319, -36.147], [-8.212, 20.327, -37.147], [-7.777, 19.248, -35.065]] - , [[-9.154, 20.561, -33.231], [-8.2, 18.417, -33.704], [-7.722, 17.343, -31.618], [-7.61, 17.092, -33.997], [-6.655, 14.948, -34.47], [-7.541, 16.937, -35.466], [-7.429, 16.685, -37.845], [-8.088, 18.166, -36.082], [-8.973, 20.154, -37.079], [-8.495, 19.081, -34.993]] - , [[-9.922, 20.343, -33.146], [-8.89, 18.227, -33.629], [-8.37, 17.16, -31.539], [-8.252, 16.919, -33.928], [-7.22, 14.803, -34.411], [-8.18, 16.771, -35.404], [-8.062, 16.53, -37.792], [-8.773, 17.986, -36.018], [-9.732, 19.954, -37.01], [-9.212, 18.887, -34.921]] - , [[-10.685, 20.096, -33.06], [-9.577, 18.011, -33.554], [-9.014, 16.953, -31.46], [-8.891, 16.722, -33.859], [-7.783, 14.637, -34.352], [-8.816, 16.58, -35.341], [-8.694, 16.35, -37.739], [-9.454, 17.781, -35.952], [-10.487, 19.724, -36.941], [-9.925, 18.665, -34.848]] - , [[-11.443, 19.821, -32.974], [-10.259, 17.769, -33.478], [-9.653, 16.72, -31.381], [-9.527, 16.501, -33.789], [-8.342, 14.45, -34.293], [-9.449, 16.366, -35.278], [-9.322, 16.146, -37.686], [-10.132, 17.55, -35.886], [-11.239, 19.466, -36.871], [-10.633, 18.417, -34.774]] - , [[-12.195, 19.516, -32.888], [-10.936, 17.501, -33.402], [-10.288, 16.464, -31.301], [-10.158, 16.255, -33.719], [-8.898, 14.24, -34.233], [-10.077, 16.127, -35.214], [-9.947, 15.918, -37.632], [-10.806, 17.292, -35.82], [-11.984, 19.179, -36.801], [-11.336, 18.142, -34.7]] - , [[-12.939, 19.183, -32.801], [-11.606, 17.207, -33.325], [-10.916, 16.183, -31.22], [-10.782, 15.985, -33.649], [-9.45, 14.01, -34.173], [-10.7, 15.863, -35.15], [-10.567, 15.666, -37.578], [-11.473, 17.009, -35.754], [-12.723, 18.863, -36.73], [-12.033, 17.839, -34.626]] - , [[-13.674, 18.821, -32.713], [-12.269, 16.887, -33.248], [-11.536, 15.878, -31.139], [-11.4, 15.691, -33.578], [-9.995, 13.757, -34.112], [-11.317, 15.576, -35.085], [-11.181, 15.39, -37.524], [-12.133, 16.7, -35.686], [-13.455, 18.519, -36.659], [-12.722, 17.51, -34.551]] - , [[-14.399, 18.43, -32.626], [-12.923, 16.541, -33.17], [-12.148, 15.549, -31.058], [-12.011, 15.373, -33.507], [-10.535, 13.484, -34.052], [-11.926, 15.265, -35.02], [-11.789, 15.089, -37.469], [-12.786, 16.365, -35.619], [-14.177, 18.146, -36.587], [-13.402, 17.154, -34.476]] - , [[-15.114, 18.012, -32.537], [-13.568, 16.17, -33.092], [-12.751, 15.196, -30.977], [-12.613, 15.032, -33.435], [-11.067, 13.189, -33.991], [-12.528, 14.93, -34.955], [-12.389, 14.765, -37.413], [-13.43, 16.005, -35.551], [-14.89, 17.746, -36.515], [-14.073, 16.772, -34.4]] - , [[-15.817, 17.566, -32.448], [-14.203, 15.774, -33.014], [-13.344, 14.82, -30.895], [-13.205, 14.666, -33.364], [-11.592, 12.874, -33.929], [-13.12, 14.571, -34.889], [-12.981, 14.417, -37.358], [-14.064, 15.62, -35.482], [-15.592, 17.317, -36.442], [-14.733, 16.363, -34.324]] - , [[-16.506, 17.093, -32.359], [-14.826, 15.353, -32.935], [-13.926, 14.421, -30.813], [-13.788, 14.277, -33.291], [-12.107, 12.538, -33.868], [-13.702, 14.189, -34.823], [-13.563, 14.045, -37.301], [-14.687, 15.209, -35.414], [-16.282, 16.86, -36.369], [-15.382, 15.929, -34.247]] - , [[-17.181, 16.592, -32.269], [-15.437, 14.907, -32.856], [-14.496, 13.999, -30.73], [-14.358, 13.866, -33.219], [-12.613, 12.181, -33.806], [-14.273, 13.783, -34.757], [-14.135, 13.65, -37.245], [-15.299, 14.774, -35.344], [-16.959, 16.377, -36.295], [-16.018, 15.468, -34.17]] - , [[-17.842, 16.065, -32.179], [-16.034, 14.437, -32.776], [-15.053, 13.554, -30.648], [-14.917, 13.431, -33.146], [-13.109, 11.803, -33.743], [-14.832, 13.355, -34.69], [-14.696, 13.232, -37.188], [-15.898, 14.314, -35.275], [-17.621, 15.866, -36.221], [-16.64, 14.983, -34.092]] - , [[-18.486, 15.511, -32.088], [-16.617, 13.943, -32.696], [-15.596, 13.087, -30.564], [-15.462, 12.974, -33.072], [-13.593, 11.406, -33.681], [-15.379, 12.905, -34.622], [-15.245, 12.792, -37.13], [-16.483, 13.831, -35.204], [-18.268, 15.329, -36.146], [-17.248, 14.473, -34.014]] - , [[-19.112, 14.932, -31.997], [-17.185, 13.426, -32.616], [-16.125, 12.598, -30.481], [-15.993, 12.495, -32.999], [-14.066, 10.989, -33.618], [-15.912, 12.432, -34.555], [-15.78, 12.329, -37.072], [-17.053, 13.323, -35.134], [-18.899, 14.766, -36.071], [-17.84, 13.938, -33.936]] - , [[-19.721, 14.328, -31.905], [-17.736, 12.886, -32.535], [-16.638, 12.089, -30.397], [-16.51, 11.995, -32.924], [-14.525, 10.553, -33.554], [-16.43, 11.937, -34.487], [-16.302, 11.844, -37.014], [-17.608, 12.793, -35.063], [-19.513, 14.177, -35.995], [-18.415, 13.379, -33.857]] - , [[-20.31, 13.699, -31.813], [-18.271, 12.324, -32.454], [-17.135, 11.558, -30.313], [-17.01, 11.474, -32.85], [-14.971, 10.098, -33.491], [-16.933, 11.422, -34.418], [-16.808, 11.337, -36.955], [-18.146, 12.239, -34.991], [-20.108, 13.563, -35.919], [-18.972, 12.797, -33.777]] - , [[-20.879, 13.046, -31.721], [-18.787, 11.739, -32.372], [-17.615, 11.007, -30.228], [-17.494, 10.932, -32.775], [-15.403, 9.625, -33.427], [-17.42, 10.885, -34.349], [-17.299, 10.81, -36.896], [-18.666, 11.664, -34.919], [-20.683, 12.924, -35.842], [-19.511, 12.192, -33.698]] - , [[-21.426, 12.37, -31.628], [-19.285, 11.134, -32.29], [-18.077, 10.437, -30.143], [-17.961, 10.37, -32.7], [-15.819, 9.133, -33.362], [-17.889, 10.328, -34.28], [-17.773, 10.261, -36.837], [-19.169, 11.067, -34.847], [-21.238, 12.262, -35.764], [-20.031, 11.565, -33.617]] - , [[-21.952, 11.672, -31.534], [-19.762, 10.508, -32.208], [-18.52, 9.847, -30.058], [-18.409, 9.788, -32.624], [-16.22, 8.624, -33.298], [-18.341, 9.752, -34.21], [-18.23, 9.693, -36.777], [-19.651, 10.449, -34.774], [-21.772, 11.577, -35.687], [-20.53, 10.916, -33.537]] - , [[-22.454, 10.952, -31.44], [-20.219, 9.862, -32.125], [-18.944, 9.239, -29.972], [-18.838, 9.188, -32.548], [-16.604, 8.098, -33.233], [-18.774, 9.156, -34.14], [-18.668, 9.105, -36.716], [-20.114, 9.81, -34.701], [-22.284, 10.869, -35.608], [-21.008, 10.246, -33.455]] - , [[-22.932, 10.21, -31.346], [-20.655, 9.196, -32.042], [-19.347, 8.614, -29.886], [-19.248, 8.57, -32.472], [-16.971, 7.556, -33.168], [-19.187, 8.542, -34.07], [-19.088, 8.498, -36.655], [-20.556, 9.152, -34.627], [-22.772, 10.139, -35.529], [-21.464, 9.556, -33.374]] - , [[-23.386, 9.448, -31.251], [-21.069, 8.512, -31.958], [-19.729, 7.971, -29.8], [-19.637, 7.934, -32.395], [-17.32, 6.998, -33.102], [-19.58, 7.911, -33.999], [-19.487, 7.873, -36.594], [-20.976, 8.475, -34.553], [-23.236, 9.388, -35.45], [-21.897, 8.847, -33.292]] - , [[-23.813, 8.667, -31.156], [-21.459, 7.81, -31.874], [-20.09, 7.312, -29.713], [-20.004, 7.281, -32.318], [-17.65, 6.424, -33.036], [-19.951, 7.262, -33.928], [-19.866, 7.231, -36.532], [-21.374, 7.779, -34.479], [-23.675, 8.617, -35.37], [-22.306, 8.119, -33.209]] - , [[-24.215, 7.868, -31.06], [-21.826, 7.092, -31.789], [-20.428, 6.637, -29.626], [-20.35, 6.612, -32.24], [-17.961, 5.836, -32.97], [-20.301, 6.596, -33.856], [-20.223, 6.571, -36.47], [-21.748, 7.066, -34.404], [-24.088, 7.827, -35.29], [-22.69, 7.372, -33.126]] - , [[-24.589, 7.051, -30.963], [-22.168, 6.357, -31.705], [-20.743, 5.948, -29.539], [-20.672, 5.928, -32.163], [-18.252, 5.234, -32.904], [-20.629, 5.915, -33.784], [-20.558, 5.895, -36.408], [-22.098, 6.336, -34.328], [-24.475, 7.018, -35.209], [-23.049, 6.609, -33.043]] - , [[-24.935, 6.217, -30.867], [-22.485, 5.606, -31.619], [-21.034, 5.244, -29.451], [-20.972, 5.229, -32.084], [-18.522, 4.618, -32.837], [-20.933, 5.219, -33.712], [-20.871, 5.204, -36.345], [-22.423, 5.591, -34.253], [-24.834, 6.192, -35.127], [-23.382, 5.83, -32.959]] - , [[-25.252, 5.367, -30.77], [-22.777, 4.841, -31.534], [-21.301, 4.528, -29.363], [-21.247, 4.516, -32.006], [-18.772, 3.99, -32.77], [-21.214, 4.509, -33.639], [-21.159, 4.498, -36.282], [-22.723, 4.83, -34.176], [-25.164, 5.349, -35.046], [-23.689, 5.035, -32.875]] - , [[-25.54, 4.503, -30.672], [-23.042, 4.063, -31.448], [-21.543, 3.799, -29.275], [-21.498, 3.791, -31.927], [-19, 3.35, -32.702], [-21.47, 3.786, -33.566], [-21.424, 3.778, -36.218], [-22.996, 4.055, -34.1], [-25.466, 4.49, -34.963], [-23.968, 4.226, -32.79]] - , [[-25.797, 3.626, -30.574], [-23.279, 3.272, -31.361], [-21.76, 3.058, -29.186], [-21.723, 3.053, -31.848], [-19.205, 2.699, -32.635], [-21.701, 3.05, -33.492], [-21.664, 3.045, -36.154], [-23.243, 3.267, -34.023], [-25.738, 3.617, -34.88], [-24.218, 3.404, -32.705]] - , [[-26.024, 2.735, -30.476], [-23.49, 2.469, -31.274], [-21.951, 2.307, -29.097], [-21.923, 2.304, -31.768], [-19.388, 2.038, -32.567], [-21.906, 2.302, -33.419], [-21.878, 2.299, -36.089], [-23.462, 2.466, -33.945], [-25.979, 2.731, -34.797], [-24.441, 2.569, -32.62]] - , [[-26.22, 1.834, -30.377], [-23.672, 1.655, -31.187], [-22.116, 1.546, -29.008], [-22.097, 1.545, -31.688], [-19.548, 1.367, -32.498], [-22.085, 1.544, -33.344], [-22.067, 1.543, -36.024], [-23.653, 1.654, -33.867], [-26.19, 1.831, -34.713], [-24.634, 1.723, -32.534]] - , [[-26.384, 0.921, -30.277], [-23.825, 0.832, -31.099], [-22.253, 0.777, -28.918], [-22.244, 0.777, -31.608], [-19.685, 0.687, -32.43], [-22.238, 0.777, -33.27], [-22.229, 0.776, -35.959], [-23.816, 0.832, -33.789], [-26.369, 0.921, -34.629], [-24.797, 0.866, -32.447]] - , [[-26.516, 0, -30.177], [-23.95, 0, -31.011], [-22.364, 0, -28.828], [-22.364, 0, -31.527], [-19.797, 0, -32.361], [-22.364, 0, -33.195], [-22.364, 0, -35.893], [-23.95, 0, -33.71], [-26.516, 0, -34.544], [-24.93, 0, -32.361]] - , [[-26.616, -0.929, -30.077], [-24.045, -0.84, -30.923], [-22.446, -0.784, -28.738], [-22.456, -0.784, -31.446], [-19.885, -0.694, -32.291], [-22.462, -0.784, -33.119], [-22.471, -0.785, -35.827], [-24.054, -0.84, -33.631], [-26.631, -0.93, -34.459], [-25.033, -0.874, -32.273]] - , [[-26.682, -1.866, -29.977], [-24.11, -1.686, -30.834], [-22.501, -1.573, -28.647], [-22.52, -1.575, -31.364], [-19.948, -1.395, -32.222], [-22.532, -1.576, -33.043], [-22.551, -1.577, -35.76], [-24.129, -1.687, -33.551], [-26.712, -1.868, -34.373], [-25.104, -1.755, -32.186]] - , [[-26.714, -2.808, -29.875], [-24.145, -2.538, -30.745], [-22.528, -2.368, -28.556], [-22.556, -2.371, -31.282], [-19.987, -2.101, -32.152], [-22.574, -2.373, -32.967], [-22.602, -2.376, -35.693], [-24.173, -2.541, -33.471], [-26.76, -2.813, -34.286], [-25.144, -2.643, -32.098]] - , [[-26.713, -3.754, -29.774], [-24.149, -3.394, -30.655], [-22.526, -3.166, -28.465], [-22.564, -3.171, -31.2], [-20, -2.811, -32.082], [-22.587, -3.174, -32.891], [-22.625, -3.18, -35.626], [-24.187, -3.399, -33.391], [-26.774, -3.763, -34.2], [-25.152, -3.535, -32.009]] - , [[-26.678, -4.704, -29.672], [-24.122, -4.253, -30.565], [-22.496, -3.967, -28.373], [-22.543, -3.975, -31.118], [-19.987, -3.524, -32.011], [-22.572, -3.98, -32.814], [-22.619, -3.988, -35.558], [-24.17, -4.262, -33.31], [-26.754, -4.718, -34.112], [-25.128, -4.431, -31.92]] - , [[-26.609, -5.656, -29.569], [-24.065, -5.115, -30.475], [-22.436, -4.769, -28.282], [-22.493, -4.781, -31.035], [-19.949, -4.24, -31.941], [-22.527, -4.788, -32.737], [-22.584, -4.8, -35.49], [-24.121, -5.127, -33.228], [-26.7, -5.675, -34.024], [-25.071, -5.329, -31.831]] - , [[-26.505, -6.608, -29.467], [-23.976, -5.978, -30.384], [-22.348, -5.572, -28.189], [-22.413, -5.588, -30.952], [-19.884, -4.958, -31.87], [-22.454, -5.598, -32.659], [-22.519, -5.615, -35.421], [-24.042, -5.994, -33.147], [-26.611, -6.635, -33.936], [-24.982, -6.229, -31.741]] - , [[-26.367, -7.56, -29.363], [-23.856, -6.841, -30.293], [-22.23, -6.374, -28.097], [-22.304, -6.396, -30.868], [-19.794, -5.676, -31.798], [-22.35, -6.409, -32.581], [-22.425, -6.43, -35.352], [-23.93, -6.862, -33.065], [-26.487, -7.595, -33.847], [-24.861, -7.129, -31.651]] - , [[-26.193, -8.511, -29.26], [-23.704, -7.702, -30.202], [-22.083, -7.175, -28.004], [-22.166, -7.202, -30.784], [-19.677, -6.393, -31.726], [-22.217, -7.219, -32.503], [-22.301, -7.246, -35.283], [-23.787, -7.729, -32.982], [-26.328, -8.554, -33.758], [-24.706, -8.028, -31.56]] - , [[-25.986, -9.458, -29.156], [-23.521, -8.561, -30.11], [-21.907, -7.973, -27.911], [-21.998, -8.007, -30.7], [-19.534, -7.11, -31.654], [-22.055, -8.027, -32.424], [-22.146, -8.061, -35.213], [-23.613, -8.594, -32.899], [-26.134, -9.512, -33.668], [-24.519, -8.924, -31.469]] - , [[-25.743, -10.401, -29.051], [-23.307, -9.417, -30.018], [-21.701, -8.768, -27.817], [-21.801, -8.808, -30.615], [-19.364, -7.824, -31.582], [-21.863, -8.833, -32.345], [-21.962, -8.873, -35.143], [-23.406, -9.457, -32.816], [-25.905, -10.466, -33.578], [-24.299, -9.817, -31.378]] - , [[-25.466, -11.338, -28.946], [-23.061, -10.267, -29.925], [-21.467, -9.558, -27.724], [-21.574, -9.605, -30.53], [-19.169, -8.534, -31.51], [-21.64, -9.635, -32.265], [-21.748, -9.683, -35.072], [-23.168, -10.315, -32.732], [-25.64, -11.416, -33.488], [-24.046, -10.706, -31.286]] - , [[-25.155, -12.269, -28.841], [-22.783, -11.112, -29.832], [-21.203, -10.341, -27.63], [-21.318, -10.397, -30.445], [-18.946, -9.241, -31.437], [-21.389, -10.432, -32.185], [-21.504, -10.488, -35.001], [-22.898, -11.168, -32.648], [-25.34, -12.359, -33.396], [-23.76, -11.589, -31.194]] - , [[-24.809, -13.191, -28.735], [-22.474, -11.95, -29.739], [-20.91, -11.118, -27.535], [-21.032, -11.183, -30.359], [-18.698, -9.942, -31.364], [-21.107, -11.223, -32.105], [-21.229, -11.288, -34.929], [-22.596, -12.015, -32.563], [-25.006, -13.296, -33.305], [-23.441, -12.464, -31.101]] - , [[-24.428, -14.104, -28.628], [-22.135, -12.779, -29.645], [-20.588, -11.887, -27.44], [-20.717, -11.961, -30.274], [-18.423, -10.637, -31.29], [-20.796, -12.007, -32.024], [-20.925, -12.081, -34.858], [-22.263, -12.854, -32.478], [-24.636, -14.224, -33.213], [-23.09, -13.331, -31.008]] - , [[-24.014, -15.006, -28.522], [-21.764, -13.6, -29.551], [-20.238, -12.646, -27.345], [-20.373, -12.73, -30.187], [-18.123, -11.324, -31.216], [-20.456, -12.782, -31.944], [-20.591, -12.867, -34.785], [-21.899, -13.684, -32.393], [-24.232, -15.142, -33.12], [-22.707, -14.189, -30.914]] - , [[-23.566, -15.896, -28.415], [-21.362, -14.409, -29.457], [-19.86, -13.396, -27.25], [-20, -13.49, -30.101], [-17.796, -12.004, -31.142], [-20.087, -13.549, -31.862], [-20.227, -13.643, -34.713], [-21.503, -14.504, -32.307], [-23.794, -16.049, -33.027], [-22.291, -15.035, -30.82]] - , [[-23.085, -16.772, -28.307], [-20.93, -15.207, -29.362], [-19.453, -14.134, -27.155], [-19.599, -14.239, -30.014], [-17.444, -12.674, -31.068], [-19.689, -14.305, -31.781], [-19.834, -14.41, -34.64], [-21.076, -15.313, -32.221], [-23.321, -16.944, -32.933], [-21.843, -15.87, -30.726]] - , [[-22.571, -17.635, -28.199], [-20.469, -15.992, -29.267], [-19.019, -14.859, -27.059], [-19.169, -14.977, -29.926], [-17.066, -13.334, -30.993], [-19.262, -15.049, -31.698], [-19.412, -15.166, -34.566], [-20.619, -16.109, -32.134], [-22.814, -17.824, -32.839], [-21.365, -16.692, -30.631]] - , [[-22.025, -18.481, -28.091], [-19.977, -16.763, -29.171], [-18.557, -15.572, -26.962], [-18.711, -15.701, -29.839], [-16.664, -13.983, -30.919], [-18.807, -15.781, -31.616], [-18.961, -15.91, -34.492], [-20.131, -16.892, -32.047], [-22.274, -18.69, -32.745], [-20.854, -17.499, -30.536]] - , [[-21.446, -19.31, -27.982], [-19.456, -17.519, -29.075], [-18.069, -16.269, -26.866], [-18.226, -16.411, -29.751], [-16.236, -14.619, -30.843], [-18.324, -16.499, -31.533], [-18.481, -16.64, -34.418], [-19.614, -17.66, -31.96], [-21.701, -19.54, -32.65], [-20.314, -18.291, -30.44]] - , [[-20.836, -20.122, -27.873], [-18.907, -18.258, -28.979], [-17.554, -16.952, -26.769], [-17.714, -17.106, -29.662], [-15.784, -15.243, -30.768], [-17.813, -17.202, -31.45], [-17.973, -17.357, -34.343], [-19.067, -18.413, -31.872], [-21.096, -20.372, -32.554], [-19.743, -19.065, -30.345]] - , [[-20.196, -20.913, -27.764], [-18.329, -18.98, -28.882], [-17.013, -17.618, -26.672], [-17.175, -17.786, -29.574], [-15.309, -15.852, -30.692], [-17.276, -17.889, -31.367], [-17.438, -18.057, -34.268], [-18.491, -19.148, -31.784], [-20.458, -21.185, -32.458], [-19.142, -19.822, -30.248]] - , [[-19.525, -21.684, -27.654], [-17.724, -19.684, -28.785], [-16.447, -18.266, -26.575], [-16.61, -18.448, -29.485], [-14.809, -16.447, -30.616], [-16.711, -18.56, -31.283], [-16.875, -18.741, -34.193], [-17.887, -19.866, -31.695], [-19.789, -21.978, -32.362], [-18.513, -20.56, -30.151]] - , [[-18.824, -22.434, -27.543], [-17.091, -20.368, -28.688], [-15.856, -18.896, -26.477], [-16.02, -19.092, -29.395], [-14.287, -17.026, -30.54], [-16.121, -19.212, -31.199], [-16.285, -19.408, -34.117], [-17.255, -20.564, -31.606], [-19.09, -22.75, -32.265], [-17.854, -21.278, -30.054]] - , [[-18.095, -23.16, -27.433], [-16.432, -21.032, -28.59], [-15.24, -19.507, -26.379], [-15.404, -19.717, -29.306], [-13.741, -17.588, -30.463], [-15.506, -19.846, -31.114], [-15.67, -20.056, -34.041], [-16.596, -21.242, -31.517], [-18.36, -23.5, -32.168], [-17.168, -21.975, -29.957]] - , [[-17.337, -23.863, -27.321], [-15.747, -21.674, -28.492], [-14.601, -20.097, -26.281], [-14.764, -20.321, -29.216], [-13.174, -18.133, -30.386], [-14.865, -20.46, -31.029], [-15.028, -20.684, -33.964], [-15.91, -21.898, -31.427], [-17.601, -24.226, -32.07], [-16.455, -22.649, -29.859]] - , [[-16.552, -24.54, -27.21], [-15.037, -22.294, -28.394], [-13.939, -20.666, -26.182], [-14.101, -20.905, -29.125], [-12.586, -18.659, -30.309], [-14.2, -21.053, -30.944], [-14.362, -21.292, -33.887], [-15.199, -22.533, -31.336], [-16.813, -24.927, -31.971], [-15.716, -23.299, -29.76]] - , [[-15.741, -25.191, -27.098], [-14.303, -22.89, -28.295], [-13.255, -21.213, -26.084], [-13.414, -21.467, -29.035], [-11.976, -19.166, -30.232], [-13.512, -21.624, -30.858], [-13.671, -21.878, -33.809], [-14.462, -23.144, -31.246], [-15.998, -25.602, -31.873], [-14.95, -23.926, -29.661]] - , [[-14.904, -25.815, -26.986], [-13.545, -23.461, -28.196], [-12.55, -21.737, -25.985], [-12.705, -22.006, -28.944], [-11.346, -19.652, -30.154], [-12.801, -22.173, -30.772], [-12.957, -22.442, -33.732], [-13.701, -23.73, -31.155], [-15.156, -26.251, -31.773], [-14.16, -24.527, -29.562]] - , [[-14.043, -26.411, -26.873], [-12.765, -24.007, -28.096], [-11.824, -22.237, -25.885], [-11.975, -22.522, -28.852], [-10.697, -20.118, -30.076], [-12.068, -22.697, -30.686], [-12.22, -22.982, -33.653], [-12.916, -24.292, -31.063], [-14.288, -26.871, -31.674], [-13.346, -25.101, -29.463]] - , [[-13.158, -26.977, -26.76], [-11.963, -24.527, -27.996], [-11.078, -22.712, -25.786], [-11.224, -23.012, -28.761], [-10.029, -20.562, -29.998], [-11.314, -23.198, -30.6], [-11.461, -23.498, -33.575], [-12.109, -24.827, -30.972], [-13.394, -27.463, -31.574], [-12.509, -25.648, -29.363]] - , [[-12.25, -27.514, -26.646], [-11.139, -25.019, -27.896], [-10.313, -23.162, -25.686], [-10.453, -23.478, -28.669], [-9.342, -20.983, -29.919], [-10.54, -23.673, -30.513], [-10.68, -23.988, -33.496], [-11.28, -25.335, -30.879], [-12.477, -28.024, -31.473], [-11.65, -26.167, -29.262]] - , [[-11.321, -28.019, -26.532], [-10.296, -25.484, -27.796], [-9.529, -23.586, -25.586], [-9.663, -23.917, -28.577], [-8.639, -21.382, -29.84], [-9.746, -24.121, -30.425], [-9.879, -24.452, -33.416], [-10.43, -25.815, -30.787], [-11.537, -28.554, -31.372], [-10.77, -26.657, -29.162]] - , [[-10.371, -28.493, -26.418], [-9.434, -25.92, -27.695], [-8.729, -23.983, -25.485], [-8.855, -24.329, -28.484], [-7.919, -21.756, -29.761], [-8.933, -24.543, -30.337], [-9.059, -24.889, -33.336], [-9.56, -26.266, -30.694], [-10.574, -29.053, -31.27], [-9.87, -27.116, -29.061]] - , [[-9.401, -28.934, -26.303], [-8.554, -26.326, -27.594], [-7.913, -24.353, -25.384], [-8.03, -24.714, -28.391], [-7.183, -22.106, -29.682], [-8.103, -24.937, -30.249], [-8.22, -25.298, -33.256], [-8.671, -26.687, -30.6], [-9.591, -29.518, -31.168], [-8.95, -27.545, -28.959]] - , [[-8.413, -29.341, -26.188], [-7.657, -26.701, -27.492], [-7.081, -24.694, -25.283], [-7.189, -25.07, -28.298], [-6.432, -22.43, -29.602], [-7.255, -25.303, -30.161], [-7.363, -25.679, -33.176], [-7.764, -27.078, -30.507], [-8.588, -29.95, -31.066], [-8.012, -27.942, -28.857]] - , [[-7.409, -29.714, -26.073], [-6.743, -27.046, -27.39], [-6.235, -25.006, -25.182], [-6.332, -25.397, -28.204], [-5.667, -22.729, -29.522], [-6.393, -25.639, -30.072], [-6.49, -26.03, -33.095], [-6.841, -27.437, -30.413], [-7.566, -30.347, -30.963], [-7.058, -28.307, -28.755]] - , [[-6.388, -30.053, -25.957], [-5.815, -27.359, -27.288], [-5.375, -25.289, -25.08], [-5.462, -25.695, -28.111], [-4.889, -23.001, -29.442], [-5.515, -25.946, -29.983], [-5.601, -26.352, -33.013], [-5.902, -27.765, -30.318], [-6.528, -30.71, -30.86], [-6.087, -28.639, -28.652]] - , [[-5.352, -30.355, -25.841], [-4.874, -27.64, -27.185], [-4.504, -25.541, -24.979], [-4.578, -25.962, -28.016], [-4.099, -23.247, -29.361], [-4.624, -26.222, -29.894], [-4.698, -26.642, -32.932], [-4.948, -28.06, -30.223], [-5.472, -31.036, -30.756], [-5.102, -28.937, -28.549]] - , [[-4.304, -30.622, -25.724], [-3.919, -27.888, -27.082], [-3.621, -25.764, -24.877], [-3.682, -26.198, -27.922], [-3.298, -23.464, -29.28], [-3.72, -26.467, -29.804], [-3.781, -26.901, -32.85], [-3.98, -28.322, -30.128], [-4.402, -31.325, -30.652], [-4.104, -29.201, -28.446]] - , [[-3.243, -30.851, -25.607], [-2.954, -28.102, -26.979], [-2.728, -25.955, -24.774], [-2.775, -26.403, -27.827], [-2.486, -23.654, -29.199], [-2.804, -26.68, -29.714], [-2.851, -27.129, -32.767], [-3.001, -28.551, -30.032], [-3.319, -31.577, -30.547], [-3.093, -29.429, -28.342]] - , [[-2.171, -31.044, -25.49], [-1.978, -28.283, -26.876], [-1.826, -26.115, -24.672], [-1.858, -26.576, -27.732], [-1.665, -23.816, -29.118], [-1.878, -26.862, -29.624], [-1.911, -27.324, -32.684], [-2.01, -28.745, -29.936], [-2.223, -31.791, -30.442], [-2.071, -29.623, -28.238]] - , [[-1.089, -31.198, -25.372], [-0.993, -28.429, -26.772], [-0.916, -26.243, -24.569], [-0.933, -26.717, -27.637], [-0.836, -23.948, -29.037], [-0.943, -27.011, -29.533], [-0.96, -27.485, -32.601], [-1.009, -28.904, -29.84], [-1.116, -31.966, -30.336], [-1.04, -29.78, -28.133]] - , [[0, -31.315, -25.254], [0, -28.54, -26.667], [0, -26.339, -24.466], [0, -26.826, -27.541], [0, -24.051, -28.955], [0, -27.127, -29.442], [0, -27.614, -32.517], [0, -29.027, -29.743], [0, -32.103, -30.23], [0, -29.901, -28.028]] - , [[1.096, -31.393, -25.135], [0.999, -28.617, -26.563], [0.922, -26.402, -24.362], [0.939, -26.901, -27.445], [0.842, -24.125, -28.873], [0.95, -27.209, -29.35], [0.968, -27.708, -32.433], [1.017, -29.116, -29.646], [1.124, -32.2, -30.123], [1.047, -29.985, -27.923]] - , [[2.198, -31.431, -25.016], [2.004, -28.657, -26.458], [1.848, -26.433, -24.259], [1.884, -26.943, -27.349], [1.69, -24.169, -28.79], [1.906, -27.258, -29.259], [1.942, -27.769, -32.349], [2.04, -29.168, -29.548], [2.256, -32.257, -30.016], [2.1, -30.032, -27.817]] - , [[3.304, -31.431, -24.897], [3.013, -28.662, -26.353], [2.778, -26.43, -24.155], [2.833, -26.951, -27.252], [2.542, -24.182, -28.708], [2.867, -27.273, -29.167], [2.921, -27.794, -32.264], [3.067, -29.183, -29.45], [3.392, -32.274, -29.909], [3.158, -30.042, -27.711]] - , [[4.412, -31.391, -24.778], [4.024, -28.631, -26.247], [3.71, -26.395, -24.051], [3.784, -26.926, -27.155], [3.396, -24.166, -28.625], [3.83, -27.254, -29.074], [3.905, -27.785, -32.179], [4.099, -29.162, -29.352], [4.533, -32.25, -29.801], [4.218, -30.014, -27.605]] - , [[5.521, -31.312, -24.658], [5.037, -28.564, -26.141], [4.642, -26.326, -23.946], [4.737, -26.866, -27.058], [4.253, -24.118, -28.542], [4.796, -27.2, -28.981], [4.891, -27.74, -32.093], [5.132, -29.105, -29.253], [5.675, -32.186, -29.693], [5.281, -29.948, -27.498]] - , [[6.63, -31.193, -24.537], [6.05, -28.461, -26.035], [5.574, -26.223, -23.842], [5.691, -26.772, -26.961], [5.11, -24.04, -28.458], [5.763, -27.112, -28.888], [5.879, -27.66, -32.007], [6.166, -29.01, -29.154], [6.819, -32.081, -29.584], [6.343, -29.843, -27.391]] - , [[7.738, -31.034, -24.417], [7.061, -28.321, -25.929], [6.504, -26.088, -23.737], [6.643, -26.644, -26.863], [5.967, -23.932, -28.374], [6.729, -26.988, -28.795], [6.868, -27.545, -31.921], [7.2, -28.878, -29.055], [7.962, -31.934, -29.475], [7.405, -29.701, -27.283]] - , [[8.842, -30.835, -24.296], [8.07, -28.145, -25.822], [7.432, -25.918, -23.632], [7.594, -26.482, -26.765], [6.822, -23.792, -28.291], [7.693, -26.83, -28.701], [7.855, -27.394, -31.834], [8.232, -28.708, -28.955], [9.103, -31.747, -29.365], [8.465, -29.521, -27.175]] - , [[9.941, -30.596, -24.174], [9.076, -27.932, -25.714], [8.356, -25.716, -23.526], [8.541, -26.285, -26.666], [7.675, -23.621, -28.206], [8.655, -26.637, -28.607], [8.84, -27.207, -31.747], [9.261, -28.502, -28.855], [10.241, -31.518, -29.255], [9.521, -29.302, -27.067]] - , [[11.035, -30.318, -24.053], [10.076, -27.683, -25.607], [9.274, -25.48, -23.42], [9.483, -26.054, -26.568], [8.524, -23.42, -28.122], [9.612, -26.41, -28.513], [9.822, -26.985, -31.66], [10.285, -28.258, -28.754], [11.373, -31.248, -29.145], [10.571, -29.045, -26.958]] - , [[12.121, -30, -23.931], [11.069, -27.398, -25.499], [10.186, -25.21, -23.315], [10.42, -25.789, -26.469], [9.368, -23.187, -28.037], [10.564, -26.147, -28.418], [10.798, -26.726, -31.572], [11.303, -27.977, -28.653], [12.499, -30.937, -29.034], [11.616, -28.75, -26.849]] - , [[13.198, -29.643, -23.808], [12.055, -27.076, -25.391], [11.09, -24.908, -23.209], [11.349, -25.49, -26.369], [10.206, -22.924, -27.952], [11.509, -25.85, -28.323], [11.768, -26.432, -31.484], [12.314, -27.659, -28.552], [13.617, -30.585, -28.923], [12.652, -28.416, -26.74]] - , [[14.264, -29.246, -23.685], [13.032, -26.719, -25.283], [11.985, -24.573, -23.102], [12.27, -25.157, -26.27], [11.037, -22.63, -27.867], [12.446, -25.518, -28.228], [12.731, -26.103, -31.395], [13.317, -27.304, -28.45], [14.726, -30.192, -28.811], [13.679, -28.046, -26.63]] - , [[15.319, -28.811, -23.562], [13.998, -26.326, -25.174], [12.87, -24.205, -22.996], [13.181, -24.791, -26.17], [11.86, -22.306, -27.782], [13.374, -25.152, -28.132], [13.685, -25.738, -31.306], [14.309, -26.912, -28.348], [15.823, -29.758, -28.699], [14.695, -27.637, -26.52]] - , [[16.36, -28.337, -23.439], [14.952, -25.898, -25.065], [13.744, -23.805, -22.889], [14.082, -24.391, -26.07], [12.674, -21.952, -27.696], [14.291, -24.753, -28.036], [14.629, -25.338, -31.217], [15.29, -26.484, -28.246], [16.907, -29.285, -28.586], [15.699, -27.192, -26.41]] - , [[17.387, -27.825, -23.315], [15.894, -25.435, -24.955], [14.605, -23.373, -22.782], [14.97, -23.958, -25.969], [13.477, -21.567, -27.61], [15.196, -24.319, -27.939], [15.561, -24.903, -31.127], [16.259, -26.019, -28.143], [17.978, -28.771, -28.473], [16.69, -26.709, -26.299]] - , [[18.398, -27.276, -23.191], [16.82, -24.937, -24.846], [15.453, -22.91, -22.674], [15.845, -23.492, -25.869], [14.268, -21.153, -27.524], [16.088, -23.852, -27.843], [16.481, -24.434, -31.037], [17.213, -25.519, -28.04], [19.033, -28.218, -28.359], [17.666, -26.19, -26.188]] - , [[19.391, -26.689, -23.066], [17.732, -24.405, -24.736], [16.285, -22.415, -22.567], [16.706, -22.994, -25.768], [15.047, -20.71, -27.437], [16.966, -23.352, -27.746], [17.386, -23.93, -30.947], [18.152, -24.984, -27.937], [20.071, -27.626, -28.245], [18.625, -25.635, -26.076]] - , [[20.365, -26.066, -22.941], [18.626, -23.84, -24.626], [17.102, -21.89, -22.459], [17.551, -22.464, -25.666], [15.811, -20.238, -27.351], [17.828, -22.819, -27.649], [18.277, -23.393, -30.856], [19.074, -24.414, -27.833], [21.091, -26.995, -28.131], [19.567, -25.045, -25.964]] - , [[21.319, -25.407, -22.816], [19.502, -23.241, -24.515], [17.902, -21.335, -22.351], [18.379, -21.903, -25.565], [16.561, -19.737, -27.264], [18.673, -22.254, -27.551], [19.15, -22.823, -30.765], [19.979, -23.81, -27.729], [22.091, -26.327, -28.016], [20.491, -24.42, -25.852]] - , [[22.252, -24.713, -22.691], [20.359, -22.61, -24.404], [18.683, -20.75, -22.243], [19.189, -21.311, -25.463], [17.295, -19.209, -27.176], [19.501, -21.658, -27.453], [20.006, -22.219, -30.673], [20.864, -23.172, -27.624], [23.069, -25.621, -27.901], [21.394, -23.76, -25.74]] - , [[23.161, -23.984, -22.565], [21.195, -21.948, -24.293], [19.445, -20.136, -22.134], [19.979, -20.689, -25.361], [18.013, -18.653, -27.089], [20.309, -21.031, -27.355], [20.843, -21.584, -30.581], [21.728, -22.5, -27.519], [24.025, -24.879, -27.785], [22.276, -23.067, -25.627]] - , [[24.046, -23.221, -22.439], [22.009, -21.254, -24.181], [20.187, -19.494, -22.026], [20.749, -20.037, -25.258], [18.712, -18.07, -27.001], [21.097, -20.373, -27.256], [21.66, -20.916, -30.489], [22.571, -21.797, -27.414], [24.957, -24.1, -27.669], [23.135, -22.341, -25.514]] - , [[24.906, -22.426, -22.312], [22.8, -20.529, -24.07], [20.907, -18.825, -21.917], [21.498, -19.357, -25.156], [19.392, -17.46, -26.913], [21.863, -19.686, -27.158], [22.455, -20.218, -30.396], [23.391, -21.061, -27.309], [25.863, -23.287, -27.553], [23.97, -21.583, -25.4]] - , [[25.74, -21.598, -22.185], [23.567, -19.775, -23.958], [21.604, -18.128, -21.808], [22.224, -18.648, -25.053], [20.051, -16.825, -26.825], [22.607, -18.97, -27.058], [23.227, -19.49, -30.303], [24.187, -20.295, -27.203], [26.742, -22.44, -27.436], [24.78, -20.793, -25.286]] - , [[26.545, -20.739, -22.058], [24.309, -18.992, -23.845], [22.278, -17.406, -21.698], [22.927, -17.912, -24.95], [20.69, -16.165, -26.737], [23.327, -18.225, -26.959], [23.976, -18.732, -30.21], [24.957, -19.499, -27.096], [27.594, -21.559, -27.319], [25.564, -19.972, -25.172]] - , [[27.321, -19.85, -21.931], [25.024, -18.181, -23.732], [22.928, -16.658, -21.589], [23.604, -17.15, -24.846], [21.307, -15.481, -26.648], [24.023, -17.453, -26.859], [24.699, -17.945, -30.116], [25.701, -18.673, -26.99], [28.416, -20.645, -27.201], [26.32, -19.122, -25.057]] - , [[28.067, -18.932, -21.803], [25.712, -17.343, -23.62], [23.552, -15.886, -21.479], [24.257, -16.361, -24.742], [21.901, -14.773, -26.559], [24.692, -16.655, -26.759], [25.397, -17.13, -30.022], [26.417, -17.818, -26.883], [29.208, -19.701, -27.083], [27.047, -18.244, -24.942]] - , [[28.782, -17.985, -21.675], [26.372, -16.479, -23.506], [24.15, -15.09, -21.369], [24.882, -15.548, -24.638], [22.472, -14.042, -26.47], [25.335, -15.831, -26.659], [26.067, -16.289, -29.928], [27.104, -16.937, -26.775], [29.967, -18.726, -26.964], [27.745, -17.337, -24.827]] - , [[29.464, -17.011, -21.546], [27.002, -15.59, -23.393], [24.72, -14.272, -21.259], [25.48, -14.711, -24.534], [23.017, -13.289, -26.381], [25.95, -14.982, -26.558], [26.71, -15.421, -29.833], [27.762, -16.028, -26.668], [30.694, -17.721, -26.845], [28.412, -16.404, -24.711]] - , [[30.113, -16.012, -21.417], [27.602, -14.676, -23.279], [25.262, -13.432, -21.149], [26.049, -13.851, -24.429], [23.537, -12.515, -26.291], [26.536, -14.109, -26.457], [27.323, -14.528, -29.738], [28.389, -15.095, -26.56], [31.387, -16.689, -26.726], [29.048, -15.445, -24.596]] - , [[30.728, -14.987, -21.288], [28.17, -13.739, -23.165], [25.776, -12.572, -21.038], [26.589, -12.968, -24.325], [24.031, -11.721, -26.201], [27.092, -13.214, -26.356], [27.906, -13.611, -29.642], [28.984, -14.136, -26.451], [32.045, -15.629, -26.606], [29.65, -14.461, -24.479]] - , [[31.307, -13.939, -21.159], [28.706, -12.781, -23.05], [26.259, -11.691, -20.927], [27.099, -12.065, -24.22], [24.498, -10.907, -26.111], [27.618, -12.296, -26.254], [28.458, -12.67, -29.547], [29.546, -13.155, -26.343], [32.666, -14.544, -26.486], [30.219, -13.454, -24.363]] - , [[31.85, -12.868, -21.029], [29.209, -11.801, -22.936], [26.712, -10.792, -20.816], [27.577, -11.142, -24.114], [24.937, -10.075, -26.021], [28.112, -11.358, -26.152], [28.977, -11.708, -29.45], [30.075, -12.151, -26.234], [33.25, -13.434, -26.365], [30.753, -12.425, -24.246]] - , [[32.356, -11.777, -20.899], [29.679, -10.802, -22.821], [27.134, -9.876, -20.705], [28.024, -10.2, -24.009], [25.347, -9.225, -25.93], [28.574, -10.4, -26.05], [29.464, -10.724, -29.354], [30.569, -11.126, -26.124], [33.796, -12.301, -26.244], [31.252, -11.375, -24.128]] - , [[32.824, -10.665, -20.769], [30.113, -9.784, -22.706], [27.524, -8.943, -20.594], [28.438, -9.24, -23.903], [25.728, -8.359, -25.839], [29.003, -9.424, -25.948], [29.918, -9.721, -29.257], [31.028, -10.082, -26.015], [34.303, -11.146, -26.123], [31.714, -10.304, -24.011]] - , [[33.253, -9.535, -20.638], [30.513, -8.749, -22.59], [27.881, -7.995, -20.482], [28.819, -8.264, -23.796], [26.079, -7.478, -25.748], [29.399, -8.43, -25.845], [30.336, -8.699, -29.16], [31.45, -9.018, -25.905], [34.77, -9.97, -26.001], [32.139, -9.216, -23.893]] - , [[33.643, -8.388, -20.507], [30.876, -7.698, -22.474], [28.205, -7.032, -20.37], [29.166, -7.272, -23.69], [26.399, -6.582, -25.657], [29.759, -7.42, -25.742], [30.72, -7.659, -29.062], [31.836, -7.938, -25.794], [35.197, -8.776, -25.879], [32.526, -8.11, -23.775]] - , [[33.992, -7.225, -20.376], [31.202, -6.632, -22.358], [28.496, -6.057, -20.258], [29.478, -6.266, -23.583], [26.688, -5.673, -25.566], [30.085, -6.395, -25.639], [31.067, -6.603, -28.964], [32.184, -6.841, -25.684], [35.581, -7.563, -25.756], [32.875, -6.988, -23.656]] - , [[34.301, -6.048, -20.244], [31.492, -5.553, -22.242], [28.752, -5.07, -20.146], [29.755, -5.247, -23.476], [26.946, -4.751, -25.474], [30.375, -5.356, -25.535], [31.378, -5.533, -28.866], [32.494, -5.73, -25.572], [35.924, -6.334, -25.633], [33.185, -5.851, -23.537]] - , [[34.569, -4.858, -20.112], [31.743, -4.461, -22.125], [28.974, -4.072, -20.033], [29.997, -4.216, -23.369], [27.171, -3.819, -25.382], [30.629, -4.305, -25.431], [31.651, -4.448, -28.767], [32.765, -4.605, -25.461], [36.223, -5.091, -25.51], [33.454, -4.702, -23.418]] - , [[34.794, -3.657, -19.98], [31.956, -3.359, -22.008], [29.16, -3.065, -19.921], [30.202, -3.174, -23.262], [27.363, -2.876, -25.29], [30.845, -3.242, -25.327], [31.887, -3.351, -28.668], [32.997, -3.468, -25.349], [36.479, -3.834, -25.386], [33.684, -3.54, -23.299]] - , [[34.978, -2.446, -19.848], [32.13, -2.247, -21.891], [29.312, -2.05, -19.808], [30.37, -2.124, -23.154], [27.523, -1.925, -25.198], [31.025, -2.169, -25.222], [32.084, -2.244, -28.568], [33.189, -2.321, -25.237], [36.691, -2.566, -25.262], [33.872, -2.369, -23.179]] - , [[35.118, -1.226, -19.715], [32.265, -1.127, -21.774], [29.427, -1.028, -19.695], [30.502, -1.065, -23.046], [27.649, -0.966, -25.105], [31.167, -1.088, -25.117], [32.242, -1.126, -28.469], [33.341, -1.164, -25.125], [36.858, -1.287, -25.137], [34.02, -1.188, -23.059]] - , [[35.216, 0, -19.582], [32.361, 0, -21.656], [29.506, 0, -19.582], [30.596, 0, -22.938], [27.741, 0, -25.012], [31.27, 0, -25.012], [32.361, 0, -28.369], [33.451, 0, -25.012], [36.98, 0, -25.012], [34.125, 0, -22.938]] - , [[35.27, 1.232, -19.449], [32.416, 1.132, -21.538], [29.548, 1.032, -19.469], [30.653, 1.07, -22.83], [27.799, 0.971, -24.919], [31.335, 1.094, -24.907], [32.44, 1.133, -28.268], [33.521, 1.171, -24.899], [37.057, 1.294, -24.887], [34.189, 1.194, -22.817]] - , [[35.28, 2.467, -19.315], [32.432, 2.268, -21.42], [29.554, 2.067, -19.355], [30.671, 2.145, -22.721], [27.823, 1.946, -24.826], [31.362, 2.193, -24.801], [32.479, 2.271, -28.167], [33.549, 2.346, -24.786], [37.087, 2.593, -24.761], [34.21, 2.392, -22.696]] - , [[35.247, 3.705, -19.181], [32.407, 3.406, -21.302], [29.524, 3.103, -19.241], [30.652, 3.222, -22.612], [27.812, 2.923, -24.733], [31.349, 3.295, -24.695], [32.477, 3.414, -28.066], [33.535, 3.525, -24.672], [37.072, 3.896, -24.635], [34.189, 3.593, -22.575]] - , [[35.169, 4.943, -19.047], [32.342, 4.545, -21.183], [29.456, 4.14, -19.127], [30.594, 4.3, -22.503], [27.767, 3.902, -24.639], [31.298, 4.399, -24.589], [32.436, 4.559, -27.965], [33.48, 4.705, -24.558], [37.011, 5.201, -24.509], [34.125, 4.796, -22.453]] - , [[35.048, 6.18, -18.912], [32.236, 5.684, -21.064], [29.352, 5.176, -19.013], [30.498, 5.378, -22.394], [27.686, 4.882, -24.545], [31.207, 5.503, -24.483], [32.353, 5.705, -27.863], [33.382, 5.886, -24.444], [36.902, 6.507, -24.382], [34.018, 5.998, -22.331]] - , [[34.882, 7.414, -18.778], [32.09, 6.821, -20.945], [29.211, 6.209, -18.899], [30.364, 6.454, -22.284], [27.571, 5.86, -24.451], [31.076, 6.605, -24.376], [32.229, 6.851, -27.761], [33.243, 7.066, -24.329], [36.748, 7.811, -24.254], [33.869, 7.199, -22.209]] - , [[34.673, 8.645, -18.642], [31.903, 7.954, -20.825], [29.033, 7.239, -18.785], [30.191, 7.527, -22.174], [27.421, 6.837, -24.357], [30.907, 7.706, -24.269], [32.065, 7.995, -27.658], [33.061, 8.243, -24.215], [36.547, 9.112, -24.127], [33.676, 8.396, -22.086]] - , [[34.419, 9.869, -18.507], [31.675, 9.083, -20.705], [28.818, 8.263, -18.67], [29.979, 8.596, -22.064], [27.236, 7.81, -24.262], [30.697, 8.802, -24.161], [31.859, 9.135, -27.555], [32.837, 9.416, -24.099], [36.299, 10.408, -23.999], [33.441, 9.589, -21.963]] - , [[34.122, 11.087, -18.372], [31.407, 10.205, -20.585], [28.566, 9.282, -18.555], [29.73, 9.66, -21.954], [27.015, 8.778, -24.167], [30.449, 9.893, -24.054], [31.613, 10.272, -27.452], [32.571, 10.583, -23.984], [36.004, 11.699, -23.87], [33.163, 10.775, -21.84]] - , [[33.781, 12.295, -18.236], [31.099, 11.319, -20.465], [28.278, 10.292, -18.44], [29.442, 10.716, -21.843], [26.761, 9.74, -24.072], [30.161, 10.978, -23.946], [31.325, 11.401, -27.349], [32.263, 11.743, -23.868], [35.664, 12.981, -23.742], [32.843, 11.954, -21.717]] - , [[33.396, 13.493, -18.1], [30.751, 12.424, -20.345], [27.954, 11.294, -18.325], [29.116, 11.764, -21.732], [26.471, 10.695, -23.977], [29.835, 12.054, -23.838], [30.997, 12.524, -27.245], [31.913, 12.894, -23.752], [35.277, 14.253, -23.612], [32.48, 13.123, -21.593]] - , [[32.969, 14.679, -17.963], [30.363, 13.519, -20.224], [27.594, 12.286, -18.21], [28.753, 12.802, -21.621], [26.147, 11.641, -23.882], [29.469, 13.12, -23.729], [30.628, 13.637, -27.141], [31.522, 14.035, -23.635], [34.844, 15.514, -23.483], [32.075, 14.281, -21.469]] - , [[32.499, 15.851, -17.826], [29.936, 14.601, -20.103], [27.198, 13.265, -18.094], [28.352, 13.828, -21.51], [25.789, 12.578, -23.786], [29.065, 14.176, -23.621], [30.219, 14.739, -27.036], [31.09, 15.164, -23.518], [34.366, 16.761, -23.353], [31.628, 15.426, -21.344]] - , [[31.987, 17.008, -17.689], [29.47, 15.669, -19.982], [26.767, 14.232, -17.979], [27.914, 14.842, -21.398], [25.397, 13.504, -23.69], [28.623, 15.219, -23.512], [29.77, 15.829, -26.931], [30.617, 16.279, -23.401], [33.843, 17.995, -23.223], [31.14, 16.558, -21.22]] - , [[31.433, 18.148, -17.552], [28.965, 16.723, -19.86], [26.301, 15.185, -17.863], [27.44, 15.842, -21.287], [24.971, 14.417, -23.594], [28.143, 16.248, -23.403], [29.281, 16.905, -26.826], [30.103, 17.38, -23.284], [33.275, 19.211, -23.092], [30.611, 17.673, -21.095]] - , [[30.838, 19.27, -17.415], [28.422, 17.76, -19.738], [25.801, 16.122, -17.747], [26.929, 16.827, -21.175], [24.513, 15.317, -23.498], [27.626, 17.262, -23.293], [28.753, 17.967, -26.721], [29.55, 18.465, -23.166], [32.663, 20.41, -22.961], [30.042, 18.772, -20.969]] - , [[30.203, 20.372, -17.277], [27.842, 18.779, -19.617], [25.267, 17.043, -17.631], [26.382, 17.795, -21.062], [24.021, 16.203, -23.402], [27.071, 18.26, -23.183], [28.186, 19.012, -26.615], [28.957, 19.532, -23.048], [32.007, 21.589, -22.83], [29.433, 19.853, -20.844]] - , [[29.528, 21.453, -17.139], [27.224, 19.78, -19.494], [24.7, 17.946, -17.514], [25.801, 18.745, -20.95], [23.498, 17.072, -23.305], [26.481, 19.24, -23.073], [27.581, 20.039, -26.509], [28.325, 20.579, -22.93], [31.308, 22.747, -22.698], [28.784, 20.913, -20.718]] - , [[28.813, 22.511, -17.001], [26.571, 20.759, -19.372], [24.101, 18.83, -17.398], [25.185, 19.676, -20.837], [22.942, 17.924, -23.208], [25.855, 20.2, -22.963], [26.939, 21.047, -26.402], [27.655, 21.606, -22.811], [30.567, 23.882, -22.566], [28.097, 21.952, -20.592]] - , [[28.061, 23.546, -16.862], [25.881, 21.717, -19.249], [23.469, 19.693, -17.281], [24.535, 20.587, -20.724], [22.355, 18.758, -23.111], [25.193, 21.14, -22.852], [26.259, 22.034, -26.295], [26.947, 22.611, -22.692], [29.785, 24.992, -22.433], [27.372, 22.968, -20.465]] - , [[27.27, 24.554, -16.724], [25.157, 22.652, -19.126], [22.806, 20.535, -17.165], [23.851, 21.476, -20.611], [21.738, 19.573, -23.014], [24.497, 22.057, -22.742], [25.543, 22.999, -26.188], [26.203, 23.593, -22.573], [28.962, 26.077, -22.3], [26.61, 23.96, -20.339]] - , [[26.443, 25.536, -16.585], [24.399, 23.562, -19.003], [22.113, 21.354, -17.048], [23.135, 22.342, -20.498], [21.091, 20.367, -22.917], [23.768, 22.952, -22.631], [24.791, 23.94, -26.081], [25.422, 24.55, -22.454], [28.099, 27.134, -22.167], [25.812, 24.926, -20.212]] - , [[25.581, 26.49, -16.445], [23.607, 24.446, -18.88], [21.389, 22.149, -16.931], [22.388, 23.183, -20.385], [20.415, 21.14, -22.819], [23.005, 23.823, -22.519], [24.004, 24.857, -25.973], [24.606, 25.48, -22.334], [27.197, 28.163, -22.034], [24.978, 25.866, -20.085]] - , [[24.683, 27.414, -16.306], [22.784, 25.304, -18.756], [20.637, 22.92, -16.814], [21.61, 24, -20.271], [19.71, 21.89, -22.721], [22.211, 24.667, -22.408], [23.183, 25.747, -25.865], [23.756, 26.384, -22.214], [26.257, 29.161, -21.9], [24.11, 26.777, -19.957]] - , [[23.752, 28.307, -16.166], [21.928, 26.133, -18.633], [19.857, 23.665, -16.696], [20.801, 24.79, -20.157], [18.977, 22.616, -22.623], [21.385, 25.485, -22.296], [22.329, 26.611, -25.756], [22.873, 27.258, -22.093], [25.28, 30.128, -21.766], [23.209, 27.659, -19.829]] - , [[22.788, 29.168, -16.026], [21.043, 26.933, -18.508], [19.05, 24.382, -16.579], [19.964, 25.552, -20.043], [18.218, 23.318, -22.525], [20.529, 26.275, -22.184], [21.443, 27.445, -25.648], [21.957, 28.103, -21.973], [24.267, 31.061, -21.631], [22.274, 28.51, -19.701]] - , [[21.793, 29.996, -15.886], [20.127, 27.703, -18.384], [18.216, 25.072, -16.461], [19.098, 26.286, -19.928], [17.432, 23.993, -22.427], [19.643, 27.036, -22.071], [20.525, 28.25, -25.539], [21.009, 28.917, -21.852], [23.22, 31.96, -21.496], [21.309, 29.329, -19.573]] - , [[20.768, 30.789, -15.745], [19.184, 28.441, -18.26], [17.357, 25.733, -16.343], [18.205, 26.99, -19.814], [16.621, 24.642, -22.328], [18.729, 27.767, -21.959], [19.577, 29.024, -25.429], [20.032, 29.698, -21.73], [22.139, 32.823, -21.361], [20.313, 30.115, -19.444]] - , [[19.713, 31.547, -15.605], [18.213, 29.147, -18.135], [16.474, 26.364, -16.225], [17.286, 27.663, -19.699], [15.786, 25.263, -22.229], [17.788, 28.466, -21.846], [18.6, 29.766, -25.319], [19.025, 30.446, -21.609], [21.026, 33.649, -21.225], [19.288, 30.867, -19.315]] - , [[18.63, 32.268, -15.464], [17.216, 29.819, -18.01], [15.568, 26.965, -16.107], [16.342, 28.305, -19.584], [14.928, 25.856, -22.131], [16.82, 29.134, -21.733], [17.594, 30.474, -25.209], [17.99, 31.159, -21.487], [19.882, 34.437, -21.089], [18.234, 31.583, -19.186]] - , [[17.521, 32.952, -15.323], [16.194, 30.456, -17.885], [14.64, 27.533, -15.989], [15.374, 28.914, -19.469], [14.047, 26.419, -22.031], [15.828, 29.768, -21.619], [16.562, 31.148, -25.099], [16.928, 31.837, -21.365], [18.709, 35.186, -20.953], [17.154, 32.263, -19.057]] - , [[16.386, 33.597, -15.181], [15.148, 31.058, -17.76], [13.691, 28.07, -15.871], [14.383, 29.49, -19.353], [13.145, 26.952, -21.932], [14.811, 30.367, -21.506], [15.504, 31.787, -24.988], [15.841, 32.478, -21.242], [17.507, 35.894, -20.816], [16.049, 32.905, -18.927]] - , [[15.228, 34.202, -15.039], [14.08, 31.624, -17.634], [12.722, 28.573, -15.752], [13.371, 30.031, -19.238], [12.223, 27.453, -21.833], [13.772, 30.932, -21.392], [14.421, 32.39, -24.877], [14.729, 33.082, -21.12], [16.278, 36.561, -20.679], [14.919, 33.51, -18.797]] - , [[14.047, 34.767, -14.898], [12.99, 32.153, -17.508], [11.734, 29.043, -15.634], [12.338, 30.537, -19.122], [11.282, 27.923, -21.733], [12.711, 31.461, -21.278], [13.315, 32.955, -24.766], [13.594, 33.647, -20.997], [15.024, 37.185, -20.542], [13.767, 34.075, -18.667]] - , [[12.845, 35.29, -14.756], [11.881, 32.643, -17.382], [10.729, 29.477, -15.515], [11.286, 31.007, -19.006], [10.322, 28.36, -21.633], [11.63, 31.952, -21.164], [12.186, 33.482, -24.654], [12.438, 34.173, -20.873], [13.745, 37.765, -20.404], [12.593, 34.6, -18.537]] - , [[11.623, 35.772, -14.613], [10.753, 33.095, -17.256], [9.708, 29.877, -15.396], [10.216, 31.44, -18.89], [9.346, 28.764, -21.533], [10.53, 32.407, -21.049], [11.038, 33.97, -24.543], [11.261, 34.658, -20.75], [12.445, 38.301, -20.266], [11.399, 35.083, -18.406]] - , [[10.383, 36.21, -14.471], [9.608, 33.507, -17.13], [8.671, 30.241, -15.277], [9.129, 31.836, -18.773], [8.354, 29.133, -21.433], [9.412, 32.823, -20.934], [9.869, 34.418, -24.43], [10.066, 35.103, -20.626], [11.123, 38.792, -20.128], [10.187, 35.526, -18.275]] - , [[9.127, 36.605, -14.328], [8.447, 33.879, -17.003], [7.621, 30.568, -15.158], [8.027, 32.194, -18.657], [7.347, 29.468, -21.332], [8.278, 33.2, -20.819], [8.683, 34.826, -24.318], [8.853, 35.506, -20.502], [9.783, 39.237, -19.989], [8.957, 35.925, -18.144]] - , [[7.855, 36.956, -14.185], [7.272, 34.21, -16.877], [6.559, 30.858, -15.039], [6.911, 32.514, -18.54], [6.327, 29.768, -21.232], [7.128, 33.537, -20.704], [7.48, 35.192, -24.205], [7.624, 35.866, -20.378], [8.425, 39.634, -19.85], [7.712, 36.282, -18.012]] - , [[6.57, 37.262, -14.042], [6.083, 34.5, -16.75], [5.486, 31.111, -14.92], [5.782, 32.794, -18.423], [5.296, 30.033, -21.131], [5.966, 33.834, -20.588], [6.263, 35.517, -24.092], [6.38, 36.183, -20.253], [7.05, 39.985, -19.71], [6.453, 36.595, -17.881]] - , [[5.273, 37.523, -13.898], [4.884, 34.749, -16.622], [4.403, 31.326, -14.8], [4.643, 33.034, -18.306], [4.253, 30.261, -21.03], [4.791, 34.09, -20.473], [5.031, 35.798, -23.978], [5.124, 36.457, -20.128], [5.662, 40.287, -19.571], [5.181, 36.864, -17.749]] - , [[3.966, 37.738, -13.755], [3.674, 34.955, -16.495], [3.311, 31.503, -14.68], [3.493, 33.235, -18.188], [3.201, 30.452, -20.929], [3.606, 34.305, -20.357], [3.788, 36.037, -23.864], [3.856, 36.687, -20.003], [4.261, 40.54, -19.431], [3.898, 37.088, -17.616]] - , [[2.651, 37.907, -13.611], [2.456, 35.118, -16.367], [2.213, 31.641, -14.561], [2.335, 33.395, -18.071], [2.14, 30.607, -20.827], [2.411, 34.479, -20.24], [2.534, 36.232, -23.75], [2.578, 36.872, -19.877], [2.849, 40.744, -19.29], [2.606, 37.267, -17.484]] - , [[1.328, 38.029, -13.467], [1.231, 35.239, -16.24], [1.108, 31.741, -14.441], [1.17, 33.514, -17.953], [1.073, 30.724, -20.726], [1.209, 34.61, -20.124], [1.271, 36.383, -23.636], [1.292, 37.012, -19.752], [1.428, 40.898, -19.15], [1.306, 37.4, -17.351]] - , [[0, 38.105, -13.323], [0, 35.316, -16.112], [0, 31.802, -14.321], [0, 33.592, -17.835], [0, 30.803, -20.624], [0, 34.699, -20.007], [0, 36.489, -23.521], [0, 37.106, -19.626], [0, 41.002, -19.009], [0, 37.488, -17.218]] - , [[-1.332, 38.134, -13.178], [-1.234, 35.35, -15.983], [-1.111, 31.823, -14.201], [-1.174, 33.629, -17.717], [-1.077, 30.845, -20.522], [-1.213, 34.745, -19.89], [-1.276, 36.551, -23.406], [-1.298, 37.156, -19.5], [-1.434, 41.056, -18.868], [-1.311, 37.529, -17.085]] - , [[-2.665, 38.115, -13.034], [-2.471, 35.34, -15.855], [-2.224, 31.805, -14.081], [-2.351, 33.624, -17.599], [-2.157, 30.849, -20.42], [-2.43, 34.749, -19.773], [-2.557, 36.568, -23.291], [-2.598, 37.159, -19.373], [-2.871, 41.059, -18.726], [-2.624, 37.524, -16.952]] - , [[-3.999, 38.05, -12.889], [-3.709, 35.286, -15.727], [-3.337, 31.748, -13.961], [-3.529, 33.578, -17.48], [-3.239, 30.814, -20.318], [-3.648, 34.709, -19.656], [-3.84, 36.539, -23.176], [-3.901, 37.116, -19.246], [-4.31, 41.011, -18.584], [-3.939, 37.473, -16.818]] - , [[-5.332, 37.937, -12.744], [-4.945, 35.188, -15.598], [-4.448, 31.651, -13.84], [-4.707, 33.49, -17.362], [-4.32, 30.741, -20.216], [-4.866, 34.626, -19.538], [-5.125, 36.465, -23.06], [-5.204, 37.027, -19.119], [-5.75, 40.912, -18.442], [-5.253, 37.374, -16.684]] - , [[-6.661, 37.777, -12.599], [-6.18, 35.047, -15.469], [-5.557, 31.515, -13.72], [-5.882, 33.36, -17.243], [-5.401, 30.63, -20.113], [-6.083, 34.5, -19.42], [-6.409, 36.345, -22.943], [-6.505, 36.892, -18.992], [-7.187, 40.762, -18.299], [-6.565, 37.23, -16.55]] - , [[-7.986, 37.569, -12.453], [-7.41, 34.862, -15.34], [-6.661, 31.339, -13.599], [-7.054, 33.188, -17.124], [-6.479, 30.48, -20.011], [-7.297, 34.331, -19.302], [-7.69, 36.179, -22.827], [-7.803, 36.71, -18.865], [-8.621, 40.56, -18.156], [-7.873, 37.038, -16.416]] - , [[-9.304, 37.315, -12.308], [-8.635, 34.633, -15.211], [-7.76, 31.125, -13.478], [-8.222, 32.975, -17.005], [-7.553, 30.293, -19.908], [-8.507, 34.118, -19.184], [-8.968, 35.968, -22.71], [-9.096, 36.483, -18.737], [-10.05, 40.308, -18.013], [-9.175, 36.801, -16.281]] - , [[-10.614, 37.014, -12.162], [-9.853, 34.36, -15.081], [-8.852, 30.871, -13.358], [-9.382, 32.72, -16.885], [-8.621, 30.066, -19.805], [-9.71, 33.863, -19.066], [-10.24, 35.712, -22.593], [-10.383, 36.209, -18.609], [-11.471, 40.005, -17.87], [-10.471, 36.516, -16.146]] - , [[-11.914, 36.666, -12.016], [-11.062, 34.044, -14.951], [-9.936, 30.579, -13.237], [-10.535, 32.424, -16.766], [-9.683, 29.802, -19.701], [-10.906, 33.564, -18.947], [-11.505, 35.409, -22.476], [-11.661, 35.889, -18.48], [-12.884, 39.652, -17.726], [-11.758, 36.186, -16.011]] - , [[-13.202, 36.272, -11.87], [-12.261, 33.686, -14.822], [-11.009, 30.248, -13.116], [-11.679, 32.087, -16.646], [-10.737, 29.5, -19.598], [-12.092, 33.223, -18.828], [-12.762, 35.062, -22.358], [-12.93, 35.524, -18.352], [-14.285, 39.248, -17.582], [-13.034, 35.81, -15.876]] - , [[-14.477, 35.833, -11.723], [-13.448, 33.284, -14.692], [-12.072, 29.879, -12.995], [-12.811, 31.709, -16.526], [-11.782, 29.16, -19.495], [-13.268, 32.84, -18.709], [-14.008, 34.67, -22.24], [-14.187, 35.114, -18.223], [-15.674, 38.794, -17.437], [-14.298, 35.388, -15.74]] - , [[-15.738, 35.348, -11.577], [-14.621, 32.84, -14.562], [-13.122, 29.472, -12.874], [-13.931, 31.291, -16.406], [-12.815, 28.783, -19.391], [-14.432, 32.414, -18.589], [-15.241, 34.233, -22.122], [-15.431, 34.659, -18.094], [-17.048, 38.29, -17.293], [-15.548, 34.922, -15.605]] - , [[-16.982, 34.818, -11.43], [-15.78, 32.355, -14.431], [-14.158, 29.028, -12.752], [-15.038, 30.832, -16.286], [-13.837, 28.369, -19.287], [-15.582, 31.947, -18.47], [-16.462, 33.752, -22.004], [-16.66, 34.159, -17.965], [-18.406, 37.737, -17.148], [-16.783, 34.41, -15.469]] - , [[-18.208, 34.243, -11.283], [-16.923, 31.828, -14.301], [-15.179, 28.547, -12.631], [-16.129, 30.334, -16.166], [-14.845, 27.919, -19.183], [-16.716, 31.439, -18.35], [-17.667, 33.226, -21.885], [-17.873, 33.615, -17.835], [-19.745, 37.135, -17.002], [-18.001, 33.855, -15.333]] - , [[-19.414, 33.625, -11.136], [-18.048, 31.26, -14.17], [-16.183, 28.03, -12.51], [-17.204, 29.798, -16.045], [-15.838, 27.432, -19.079], [-17.834, 30.89, -18.23], [-18.855, 32.658, -21.766], [-19.068, 33.027, -17.706], [-21.065, 36.486, -16.857], [-19.2, 33.256, -15.196]] - , [[-20.599, 32.965, -10.989], [-19.153, 30.652, -14.039], [-17.169, 27.477, -12.388], [-18.26, 29.222, -15.924], [-16.815, 26.909, -18.975], [-18.934, 30.301, -18.11], [-20.025, 32.046, -21.646], [-20.244, 32.397, -17.576], [-22.363, 35.789, -16.711], [-20.379, 32.614, -15.06]] - , [[-21.761, 32.261, -10.842], [-20.238, 30.004, -13.908], [-18.137, 26.889, -12.266], [-19.297, 28.609, -15.804], [-17.775, 26.352, -18.87], [-20.014, 29.672, -17.99], [-21.175, 31.393, -21.527], [-21.398, 31.725, -17.445], [-23.638, 35.045, -16.565], [-21.537, 31.93, -14.923]] - , [[-22.898, 31.517, -10.694], [-21.301, 29.318, -13.777], [-19.083, 26.266, -12.145], [-20.313, 27.959, -15.683], [-18.716, 25.76, -18.766], [-21.073, 29.005, -17.869], [-22.303, 30.698, -21.407], [-22.53, 31.01, -17.315], [-24.888, 34.256, -16.418], [-22.671, 31.204, -14.786]] - , [[-24.01, 30.732, -10.546], [-22.34, 28.593, -13.646], [-20.009, 25.61, -12.023], [-21.307, 27.272, -15.561], [-19.637, 25.134, -18.661], [-22.11, 28.299, -17.748], [-23.408, 29.961, -21.287], [-23.638, 30.256, -17.184], [-26.111, 33.421, -16.272], [-23.78, 30.437, -14.649]] - , [[-25.095, 29.907, -10.398], [-23.354, 27.832, -13.514], [-20.911, 24.921, -11.901], [-22.278, 26.55, -15.44], [-20.537, 24.475, -18.556], [-23.122, 27.556, -17.627], [-24.489, 29.185, -21.166], [-24.721, 29.461, -17.053], [-27.306, 32.542, -16.125], [-24.863, 29.631, -14.511]] - , [[-26.151, 29.043, -10.25], [-24.341, 27.034, -13.383], [-21.789, 24.199, -11.779], [-23.223, 25.792, -15.319], [-21.414, 23.783, -18.451], [-24.11, 26.777, -17.506], [-25.544, 28.37, -21.045], [-25.776, 28.627, -16.922], [-28.471, 31.621, -15.977], [-25.919, 28.786, -14.374]] - , [[-27.176, 28.142, -10.102], [-25.302, 26.201, -13.251], [-22.642, 23.447, -11.657], [-24.143, 25.001, -15.197], [-22.268, 23.059, -18.346], [-25.071, 25.961, -17.385], [-26.572, 27.516, -20.924], [-26.803, 27.755, -16.791], [-29.605, 30.657, -15.83], [-26.945, 27.903, -14.236]] - , [[-28.171, 27.204, -9.954], [-26.233, 25.333, -13.119], [-23.469, 22.663, -11.535], [-25.035, 24.176, -15.075], [-23.098, 22.305, -18.24], [-26.004, 25.111, -17.263], [-27.57, 26.624, -20.803], [-27.8, 26.846, -16.659], [-30.705, 29.652, -15.682], [-27.941, 26.983, -14.098]] - , [[-29.132, 26.231, -9.805], [-27.134, 24.432, -12.987], [-24.268, 21.851, -11.413], [-25.899, 23.32, -14.953], [-23.901, 21.521, -18.135], [-26.907, 24.227, -17.141], [-28.539, 25.696, -20.681], [-28.765, 25.9, -16.527], [-31.771, 28.607, -15.534], [-28.905, 26.027, -13.96]] - , [[-30.059, 25.223, -9.657], [-28.004, 23.498, -12.855], [-25.039, 21.01, -11.291], [-26.733, 22.432, -14.831], [-24.678, 20.707, -18.029], [-27.781, 23.311, -17.019], [-29.475, 24.733, -20.56], [-29.699, 24.92, -16.395], [-32.802, 27.524, -15.385], [-29.836, 25.036, -13.821]] - , [[-30.952, 24.182, -9.508], [-28.841, 22.533, -12.722], [-25.78, 20.141, -11.168], [-27.537, 21.514, -14.709], [-25.426, 19.865, -17.923], [-28.623, 22.362, -16.897], [-30.379, 23.735, -20.437], [-30.598, 23.906, -16.263], [-33.794, 26.403, -15.236], [-30.733, 24.011, -13.683]] - , [[-31.807, 23.109, -9.359], [-29.645, 21.538, -12.59], [-26.491, 19.246, -11.046], [-28.308, 20.567, -14.587], [-26.146, 18.996, -17.817], [-29.432, 21.383, -16.775], [-31.249, 22.704, -20.315], [-31.462, 22.859, -16.13], [-34.748, 25.246, -15.087], [-31.594, 22.954, -13.544]] - , [[-32.625, 22.006, -9.21], [-30.414, 20.514, -12.457], [-27.17, 18.326, -10.924], [-29.047, 19.592, -14.464], [-26.835, 18.101, -17.711], [-30.207, 20.375, -16.652], [-32.084, 21.641, -20.192], [-32.291, 21.78, -15.997], [-35.662, 24.054, -14.938], [-32.418, 21.866, -13.405]] - , [[-33.404, 20.873, -9.06], [-31.147, 19.463, -12.324], [-27.817, 17.382, -10.801], [-29.751, 18.591, -14.341], [-27.494, 17.18, -17.605], [-30.947, 19.338, -16.529], [-32.882, 20.547, -20.069], [-33.081, 20.672, -15.864], [-36.535, 22.829, -14.789], [-33.205, 20.749, -13.266]] - , [[-34.143, 19.713, -8.911], [-31.843, 18.384, -12.191], [-28.43, 16.414, -10.679], [-30.421, 17.564, -14.219], [-28.121, 16.235, -17.499], [-31.651, 18.274, -16.406], [-33.642, 19.423, -19.946], [-33.834, 19.534, -15.731], [-37.364, 21.572, -14.639], [-33.952, 19.602, -13.126]] - , [[-34.842, 18.526, -8.762], [-32.501, 17.281, -12.058], [-29.01, 15.425, -10.556], [-31.055, 16.512, -14.096], [-28.715, 15.268, -17.392], [-32.319, 17.184, -16.283], [-34.364, 18.272, -19.823], [-34.546, 18.369, -15.598], [-38.151, 20.285, -14.489], [-34.659, 18.429, -12.987]] - , [[-35.498, 17.314, -8.612], [-33.121, 16.154, -11.925], [-29.554, 14.415, -10.433], [-31.652, 15.438, -13.973], [-29.275, 14.278, -17.286], [-32.948, 16.07, -16.16], [-35.046, 17.093, -19.699], [-35.219, 17.177, -15.464], [-38.892, 18.969, -14.338], [-35.325, 17.229, -12.847]] - , [[-36.112, 16.078, -8.462], [-33.701, 15.005, -11.792], [-30.063, 13.385, -10.311], [-32.211, 14.341, -13.849], [-29.8, 13.268, -17.179], [-33.539, 14.932, -16.036], [-35.687, 15.889, -19.575], [-35.849, 15.961, -15.33], [-39.587, 17.625, -14.188], [-35.95, 16.006, -12.707]] - , [[-36.682, 14.821, -8.312], [-34.241, 13.834, -11.658], [-30.536, 12.337, -10.188], [-32.732, 13.225, -13.726], [-30.291, 12.238, -17.072], [-34.09, 13.773, -15.913], [-36.286, 14.66, -19.451], [-36.437, 14.722, -15.196], [-40.236, 16.256, -14.037], [-36.531, 14.759, -12.567]] - , [[-37.208, 13.543, -8.162], [-34.74, 12.644, -11.524], [-30.972, 11.273, -10.065], [-33.214, 12.089, -13.603], [-30.746, 11.19, -16.965], [-34.6, 12.593, -15.789], [-36.842, 13.409, -19.326], [-36.982, 13.46, -15.062], [-40.836, 14.863, -13.886], [-37.069, 13.492, -12.426]] - , [[-37.689, 12.246, -8.012], [-35.197, 11.436, -11.391], [-31.37, 10.193, -9.942], [-33.656, 10.936, -13.479], [-31.164, 10.126, -16.858], [-35.069, 11.395, -15.665], [-37.355, 12.137, -19.202], [-37.483, 12.179, -14.927], [-41.388, 13.448, -13.734], [-37.562, 12.205, -12.286]] - , [[-38.125, 10.932, -7.861], [-35.611, 10.211, -11.257], [-31.73, 9.099, -9.819], [-34.058, 9.766, -13.355], [-31.544, 9.045, -16.75], [-35.496, 10.178, -15.541], [-37.823, 10.846, -19.076], [-37.938, 10.879, -14.793], [-41.89, 12.012, -13.583], [-38.01, 10.899, -12.145]] - , [[-38.513, 9.602, -7.711], [-35.982, 8.971, -11.123], [-32.052, 7.991, -9.696], [-34.418, 8.581, -13.231], [-31.887, 7.95, -16.643], [-35.881, 8.946, -15.416], [-38.247, 9.536, -18.951], [-38.349, 9.561, -14.658], [-42.342, 10.557, -13.431], [-38.412, 9.577, -12.004]] - , [[-38.855, 8.259, -7.56], [-36.31, 7.718, -10.989], [-32.334, 6.873, -9.573], [-34.737, 7.384, -13.107], [-32.192, 6.843, -16.535], [-36.222, 7.699, -15.292], [-38.624, 8.21, -18.826], [-38.712, 8.229, -14.523], [-42.743, 9.085, -13.279], [-38.767, 8.24, -11.863]] - , [[-39.15, 6.903, -7.41], [-36.593, 6.452, -10.854], [-32.577, 5.744, -9.45], [-35.013, 6.174, -12.983], [-32.457, 5.723, -16.428], [-36.519, 6.439, -15.167], [-38.955, 6.869, -18.7], [-39.03, 6.882, -14.387], [-43.092, 7.598, -13.126], [-39.075, 6.89, -11.722]] - , [[-39.396, 5.537, -7.259], [-36.832, 5.176, -10.72], [-32.78, 4.607, -9.327], [-35.247, 4.954, -12.859], [-32.683, 4.593, -16.32], [-36.772, 5.168, -15.042], [-39.24, 5.515, -18.574], [-39.299, 5.523, -14.252], [-43.388, 6.098, -12.974], [-39.336, 5.528, -11.581]] - , [[-39.594, 4.162, -7.108], [-37.026, 3.892, -10.585], [-32.943, 3.462, -9.204], [-35.438, 3.725, -12.735], [-32.87, 3.455, -16.212], [-36.981, 3.887, -14.917], [-39.476, 4.149, -18.447], [-39.521, 4.154, -14.116], [-43.632, 4.586, -12.821], [-39.549, 4.157, -11.439]] - , [[-39.744, 2.779, -6.957], [-37.174, 2.599, -10.451], [-33.065, 2.312, -9.081], [-35.586, 2.488, -12.61], [-33.016, 2.309, -16.104], [-37.144, 2.597, -14.791], [-39.665, 2.774, -18.321], [-39.695, 2.776, -13.98], [-43.822, 3.064, -12.668], [-39.714, 2.777, -11.298]] - , [[-39.845, 1.391, -6.806], [-37.277, 1.302, -10.316], [-33.147, 1.158, -8.957], [-35.69, 1.246, -12.485], [-33.123, 1.157, -15.996], [-37.262, 1.301, -14.666], [-39.805, 1.39, -18.194], [-39.82, 1.391, -13.844], [-43.959, 1.535, -12.514], [-39.829, 1.391, -11.156]] - , [[-39.896, 0, -6.654], [-37.334, 0, -10.181], [-33.188, 0, -8.834], [-35.75, 0, -12.361], [-33.188, 0, -15.887], [-37.334, 0, -14.54], [-39.896, 0, -18.067], [-39.896, 0, -13.708], [-44.042, 0, -12.361], [-39.896, 0, -11.014]] - , [[-39.899, -1.393, -6.503], [-37.345, -1.304, -10.046], [-33.188, -1.159, -8.711], [-35.767, -1.249, -12.236], [-33.213, -1.16, -15.779], [-37.36, -1.305, -14.415], [-39.939, -1.395, -17.94], [-39.924, -1.394, -13.571], [-44.071, -1.539, -12.207], [-39.914, -1.394, -10.871]] - , [[-39.852, -2.787, -6.351], [-37.31, -2.609, -9.911], [-33.147, -2.318, -8.587], [-35.739, -2.499, -12.111], [-33.197, -2.321, -15.67], [-37.341, -2.611, -14.289], [-39.932, -2.792, -17.812], [-39.902, -2.79, -13.435], [-44.045, -3.08, -12.053], [-39.883, -2.789, -10.729]] - , [[-39.756, -4.179, -6.2], [-37.229, -3.913, -9.776], [-33.066, -3.475, -8.464], [-35.667, -3.749, -11.986], [-33.14, -3.483, -15.562], [-37.275, -3.918, -14.162], [-39.876, -4.191, -17.684], [-39.83, -4.186, -13.298], [-43.965, -4.621, -11.898], [-39.802, -4.183, -10.587]] - , [[-39.611, -5.567, -6.048], [-37.102, -5.214, -9.64], [-32.943, -4.63, -8.34], [-35.551, -4.996, -11.861], [-33.041, -4.644, -15.453], [-37.162, -5.223, -14.036], [-39.77, -5.589, -17.556], [-39.709, -5.581, -13.161], [-43.831, -6.16, -11.744], [-39.672, -5.576, -10.444]] - , [[-39.417, -6.95, -5.896], [-36.928, -6.511, -9.505], [-32.78, -5.78, -8.217], [-35.391, -6.24, -11.735], [-32.902, -5.802, -15.344], [-37.004, -6.525, -13.91], [-39.615, -6.985, -17.428], [-39.539, -6.972, -13.023], [-43.642, -7.695, -11.589], [-39.493, -6.964, -10.301]] - , [[-39.174, -8.327, -5.744], [-36.709, -7.803, -9.369], [-32.576, -6.924, -8.094], [-35.186, -7.479, -11.61], [-32.722, -6.955, -15.235], [-36.8, -7.822, -13.783], [-39.411, -8.377, -17.299], [-39.32, -8.358, -12.886], [-43.398, -9.225, -11.434], [-39.264, -8.346, -10.158]] - , [[-38.882, -9.694, -5.592], [-36.445, -9.087, -9.234], [-32.331, -8.061, -7.97], [-34.938, -8.711, -11.484], [-32.501, -8.103, -15.126], [-36.55, -9.113, -13.656], [-39.157, -9.763, -17.171], [-39.052, -9.737, -12.748], [-43.101, -10.746, -11.279], [-38.987, -9.721, -10.015]] - , [[-38.542, -11.052, -5.44], [-36.135, -10.361, -9.098], [-32.047, -9.189, -7.846], [-34.647, -9.935, -11.359], [-32.239, -9.244, -15.017], [-36.254, -10.396, -13.529], [-38.854, -11.141, -17.042], [-38.735, -11.107, -12.61], [-42.749, -12.258, -11.123], [-38.661, -11.086, -9.872]] - , [[-38.154, -12.397, -5.288], [-35.779, -11.625, -8.962], [-31.722, -10.307, -7.723], [-34.312, -11.149, -11.233], [-31.937, -10.377, -14.907], [-35.912, -11.669, -13.402], [-38.502, -12.51, -16.912], [-38.369, -12.467, -12.472], [-42.344, -13.758, -10.968], [-38.287, -12.44, -9.728]] - , [[-37.719, -13.728, -5.136], [-35.379, -12.877, -8.826], [-31.358, -11.414, -7.599], [-33.934, -12.351, -11.107], [-31.595, -11.5, -14.798], [-35.525, -12.93, -13.275], [-38.101, -13.868, -16.783], [-37.955, -13.814, -12.334], [-41.886, -15.245, -10.812], [-37.865, -13.782, -9.585]] - , [[-37.236, -15.044, -4.983], [-34.935, -14.115, -8.69], [-30.956, -12.507, -7.476], [-33.513, -13.54, -10.981], [-31.213, -12.611, -14.688], [-35.094, -14.179, -13.148], [-37.652, -15.212, -16.653], [-37.493, -15.148, -12.196], [-41.375, -16.716, -10.656], [-37.395, -15.109, -9.441]] - , [[-36.707, -16.343, -4.831], [-34.447, -15.337, -8.554], [-30.514, -13.586, -7.352], [-33.051, -14.715, -10.855], [-30.791, -13.709, -14.578], [-34.618, -15.413, -13.02], [-37.155, -16.542, -16.523], [-36.984, -16.466, -12.057], [-40.811, -18.17, -10.499], [-36.878, -16.419, -9.297]] - , [[-36.132, -17.623, -4.679], [-33.916, -16.542, -8.418], [-30.035, -14.649, -7.228], [-32.547, -15.874, -10.729], [-30.33, -14.793, -14.469], [-34.099, -16.631, -12.893], [-36.611, -17.856, -16.393], [-36.428, -17.767, -11.919], [-40.196, -19.605, -10.343], [-36.315, -17.712, -9.153]] - , [[-35.513, -18.882, -4.526], [-33.342, -17.729, -8.282], [-29.518, -15.695, -7.105], [-32.001, -17.015, -10.603], [-29.831, -15.862, -14.359], [-33.536, -17.831, -12.765], [-36.019, -19.152, -16.263], [-35.826, -19.049, -11.78], [-39.531, -21.019, -10.186], [-35.706, -18.985, -9.009]] - , [[-34.848, -20.12, -4.373], [-32.727, -18.895, -8.145], [-28.964, -16.723, -6.981], [-31.416, -18.138, -10.477], [-29.294, -16.913, -14.249], [-32.931, -19.013, -12.637], [-35.382, -20.428, -16.132], [-35.178, -20.31, -11.641], [-38.814, -22.41, -10.029], [-35.052, -20.237, -8.865]] - , [[-34.14, -21.333, -4.22], [-32.07, -20.039, -8.009], [-28.375, -17.73, -6.858], [-30.79, -19.24, -10.35], [-28.72, -17.946, -14.138], [-32.283, -20.173, -12.509], [-34.699, -21.682, -16.001], [-34.486, -21.549, -11.501], [-38.049, -23.776, -9.872], [-34.354, -21.467, -8.72]] - , [[-33.39, -22.522, -4.068], [-31.372, -21.161, -7.872], [-27.749, -18.717, -6.734], [-30.126, -20.32, -10.224], [-28.109, -18.96, -14.028], [-31.595, -21.311, -12.38], [-33.971, -22.914, -15.87], [-33.749, -22.764, -11.362], [-37.235, -25.115, -9.714], [-33.612, -22.671, -8.576]] - , [[-32.597, -23.683, -3.915], [-30.635, -22.258, -7.736], [-27.089, -19.682, -6.61], [-29.423, -21.377, -10.097], [-27.461, -19.952, -13.918], [-30.865, -22.425, -12.252], [-33.199, -24.12, -15.739], [-32.969, -23.953, -11.222], [-36.373, -26.427, -9.557], [-32.827, -23.85, -8.431]] - , [[-31.764, -24.817, -3.762], [-29.86, -23.329, -7.599], [-26.396, -20.622, -6.486], [-28.683, -22.41, -9.97], [-26.779, -20.922, -13.807], [-30.097, -23.514, -12.123], [-32.384, -25.301, -15.607], [-32.147, -25.116, -11.083], [-35.465, -27.708, -9.399], [-32.001, -25.002, -8.286]] - , [[-30.891, -25.92, -3.609], [-29.046, -24.373, -7.462], [-25.669, -21.539, -6.363], [-27.906, -23.416, -9.844], [-26.062, -21.868, -13.697], [-29.289, -24.576, -11.995], [-31.526, -26.454, -15.475], [-31.283, -26.25, -10.943], [-34.511, -28.958, -9.241], [-31.133, -26.124, -8.141]] - , [[-29.979, -26.993, -3.456], [-28.196, -25.387, -7.325], [-24.91, -22.429, -6.239], [-27.094, -24.395, -9.717], [-25.311, -22.79, -13.586], [-28.443, -25.611, -11.866], [-30.627, -27.577, -15.343], [-30.38, -27.354, -10.803], [-33.512, -30.175, -9.082], [-30.226, -27.216, -7.996]] - , [[-29.029, -28.033, -3.302], [-27.309, -26.372, -7.188], [-24.12, -23.292, -6.115], [-26.247, -25.346, -9.59], [-24.527, -23.685, -13.475], [-27.561, -26.615, -11.737], [-29.688, -28.669, -15.211], [-29.436, -28.426, -10.662], [-32.47, -31.356, -8.924], [-29.281, -28.276, -7.851]] - , [[-28.043, -29.039, -3.149], [-26.388, -27.326, -7.051], [-23.299, -24.127, -5.992], [-25.366, -26.267, -9.463], [-23.711, -24.554, -13.365], [-26.643, -27.59, -11.608], [-28.71, -29.73, -15.079], [-28.455, -29.466, -10.522], [-31.387, -32.502, -8.765], [-28.297, -29.303, -7.706]] - , [[-27.021, -30.01, -2.996], [-25.434, -28.247, -6.914], [-22.45, -24.933, -5.868], [-24.452, -27.157, -9.336], [-22.865, -25.394, -13.254], [-25.69, -28.532, -11.479], [-27.693, -30.756, -14.946], [-27.436, -30.471, -10.382], [-30.262, -33.609, -8.606], [-27.278, -30.295, -7.56]] - , [[-25.966, -30.945, -2.842], [-24.446, -29.134, -6.777], [-21.572, -25.708, -5.744], [-23.507, -28.015, -9.208], [-21.988, -26.204, -13.143], [-24.704, -29.441, -11.349], [-26.639, -31.747, -14.813], [-26.382, -31.441, -10.241], [-29.098, -34.677, -8.447], [-26.223, -31.252, -7.415]] - , [[-24.878, -31.842, -2.689], [-23.428, -29.987, -6.64], [-20.667, -26.452, -5.621], [-22.532, -28.84, -9.081], [-21.082, -26.984, -13.032], [-23.685, -30.315, -11.22], [-25.55, -32.702, -14.68], [-25.293, -32.374, -10.1], [-27.896, -35.705, -8.288], [-25.135, -32.171, -7.269]] - , [[-23.758, -32.701, -2.536], [-22.38, -30.803, -6.502], [-19.736, -27.164, -5.497], [-21.527, -29.63, -8.954], [-20.149, -27.732, -12.92], [-22.635, -31.154, -11.09], [-24.426, -33.619, -14.547], [-24.171, -33.268, -9.959], [-26.657, -36.69, -8.129], [-24.013, -33.052, -7.124]] - , [[-22.609, -33.519, -2.382], [-21.302, -31.582, -6.365], [-18.781, -27.843, -5.373], [-20.495, -30.385, -8.826], [-19.188, -28.448, -12.809], [-21.554, -31.956, -10.96], [-23.269, -34.497, -14.413], [-23.017, -34.124, -9.818], [-25.383, -37.632, -7.969], [-22.861, -33.893, -6.978]] - , [[-21.431, -34.297, -2.229], [-20.198, -32.323, -6.227], [-17.801, -28.488, -5.25], [-19.436, -31.104, -8.699], [-18.202, -29.13, -12.698], [-20.446, -32.72, -10.831], [-22.08, -35.335, -14.28], [-21.832, -34.939, -9.677], [-24.075, -38.529, -7.809], [-21.679, -34.694, -6.832]] - , [[-20.226, -35.033, -2.075], [-19.067, -33.025, -6.09], [-16.8, -29.098, -5.126], [-18.351, -31.785, -8.571], [-17.192, -29.777, -12.586], [-19.31, -33.445, -10.701], [-20.861, -36.132, -14.146], [-20.618, -35.712, -9.535], [-22.736, -39.38, -7.649], [-20.469, -35.453, -6.686]] - , [[-18.996, -35.726, -1.921], [-17.912, -33.688, -5.952], [-15.777, -29.673, -5.002], [-17.242, -32.428, -8.444], [-16.158, -30.39, -12.475], [-18.148, -34.131, -10.57], [-19.612, -36.886, -14.012], [-19.377, -36.443, -9.394], [-21.366, -40.184, -7.489], [-19.231, -36.169, -6.539]] - , [[-17.741, -36.375, -1.768], [-16.734, -34.309, -5.815], [-14.735, -30.211, -4.879], [-16.111, -33.032, -8.316], [-15.103, -30.965, -12.363], [-16.961, -34.775, -10.44], [-18.337, -37.596, -13.877], [-18.109, -37.13, -9.252], [-19.968, -40.94, -7.329], [-17.969, -36.842, -6.393]] - , [[-16.465, -36.98, -1.614], [-15.533, -34.888, -5.677], [-13.674, -30.712, -4.755], [-14.958, -33.596, -8.188], [-14.027, -31.504, -12.251], [-15.751, -35.378, -10.31], [-17.035, -38.262, -13.743], [-16.817, -37.772, -9.11], [-18.542, -41.646, -7.169], [-16.683, -37.47, -6.247]] - , [[-15.167, -37.539, -1.46], [-14.313, -35.426, -5.539], [-12.596, -31.175, -4.632], [-13.785, -34.119, -8.06], [-12.931, -32.005, -12.139], [-14.52, -35.939, -10.179], [-15.71, -38.882, -13.608], [-15.502, -38.369, -8.968], [-17.091, -42.302, -7.008], [-15.374, -38.052, -6.1]] - , [[-13.85, -38.053, -1.306], [-13.074, -35.92, -5.401], [-11.502, -31.601, -4.508], [-12.594, -34.601, -7.932], [-11.817, -32.468, -12.027], [-13.269, -36.456, -10.049], [-14.361, -39.456, -13.473], [-14.166, -38.92, -8.826], [-15.617, -42.908, -6.847], [-14.045, -38.589, -5.954]] - , [[-12.516, -38.519, -1.152], [-11.817, -36.37, -5.264], [-10.393, -31.987, -4.384], [-11.386, -35.041, -7.804], [-10.687, -32.892, -11.915], [-11.999, -36.929, -9.918], [-12.991, -39.983, -13.338], [-12.81, -39.424, -8.683], [-14.121, -43.461, -6.686], [-12.697, -39.078, -5.807]] - , [[-11.165, -38.938, -0.999], [-10.545, -36.775, -5.126], [-9.272, -32.334, -4.261], [-10.162, -35.439, -7.676], [-9.542, -33.276, -11.803], [-10.712, -37.357, -9.787], [-11.602, -40.462, -13.202], [-11.435, -39.88, -8.541], [-12.606, -43.962, -6.525], [-11.332, -39.52, -5.66]] - , [[-9.801, -39.31, -0.845], [-9.259, -37.136, -4.988], [-8.138, -32.641, -4.138], [-8.924, -35.793, -7.548], [-8.382, -33.619, -11.691], [-9.41, -37.74, -9.656], [-10.196, -40.892, -13.067], [-10.045, -40.288, -8.398], [-11.072, -44.409, -6.363], [-9.952, -39.914, -5.513]] - , [[-8.424, -39.633, -0.691], [-7.961, -37.451, -4.85], [-6.995, -32.908, -4.014], [-7.674, -36.103, -7.42], [-7.21, -33.922, -11.579], [-8.094, -38.078, -9.525], [-8.773, -41.273, -12.931], [-8.64, -40.646, -8.256], [-9.523, -44.802, -6.202], [-8.557, -40.259, -5.366]] - , [[-7.037, -39.907, -0.537], [-6.651, -37.721, -4.712], [-5.843, -33.135, -3.891], [-6.413, -36.37, -7.292], [-6.027, -34.184, -11.467], [-6.765, -38.369, -9.394], [-7.336, -41.603, -12.795], [-7.222, -40.955, -8.113], [-7.959, -45.141, -6.04], [-7.151, -40.555, -5.219]] - , [[-5.64, -40.132, -0.383], [-5.333, -37.944, -4.574], [-4.683, -33.321, -3.767], [-5.143, -36.592, -7.164], [-4.835, -34.404, -11.354], [-5.427, -38.613, -9.263], [-5.886, -41.884, -12.659], [-5.792, -41.214, -7.97], [-6.384, -45.424, -5.878], [-5.734, -40.801, -5.072]] - , [[-4.236, -40.307, -0.229], [-4.007, -38.12, -4.435], [-3.517, -33.466, -3.644], [-3.865, -36.769, -7.035], [-3.635, -34.581, -11.242], [-4.079, -38.81, -9.131], [-4.426, -42.113, -12.523], [-4.354, -41.423, -7.827], [-4.798, -45.652, -5.716], [-4.309, -40.997, -4.925]] - , [[-2.827, -40.433, -0.075], [-2.675, -38.25, -4.297], [-2.347, -33.569, -3.521], [-2.58, -36.901, -6.907], [-2.428, -34.717, -11.129], [-2.724, -38.959, -9], [-2.957, -42.291, -12.386], [-2.908, -41.581, -7.684], [-3.204, -45.823, -5.554], [-2.877, -41.143, -4.777]] - , [[-1.415, -40.509, 0.079], [-1.339, -38.333, -4.159], [-1.174, -33.632, -3.397], [-1.292, -36.987, -6.779], [-1.216, -34.81, -11.017], [-1.364, -39.061, -8.868], [-1.481, -42.417, -12.249], [-1.456, -41.688, -7.54], [-1.604, -45.939, -5.392], [-1.44, -41.238, -4.63]] - , [[0, -40.536, 0.233], [0, -38.368, -4.021], [0, -33.652, -3.274], [0, -37.028, -6.65], [0, -34.861, -10.904], [0, -39.115, -8.737], [0, -42.491, -12.113], [0, -41.744, -7.397], [0, -45.998, -5.229], [0, -41.282, -4.482]] - , [[1.415, -40.512, 0.387], [1.339, -38.356, -3.883], [1.174, -33.632, -3.151], [1.293, -37.024, -6.522], [1.218, -34.868, -10.791], [1.366, -39.121, -8.605], [1.485, -42.513, -11.975], [1.458, -41.748, -7.253], [1.606, -46.001, -5.067], [1.441, -41.276, -4.335]] - , [[2.828, -40.438, 0.541], [2.678, -38.297, -3.744], [2.347, -33.57, -3.028], [2.585, -36.974, -6.393], [2.436, -34.833, -10.679], [2.733, -39.078, -8.473], [2.971, -42.482, -11.838], [2.916, -41.701, -7.11], [3.213, -45.946, -4.904], [2.882, -41.219, -4.187]] - , [[4.237, -40.314, 0.695], [4.014, -38.191, -3.606], [3.517, -33.466, -2.904], [3.876, -36.878, -6.264], [3.653, -34.755, -10.566], [4.098, -38.987, -8.341], [4.456, -42.4, -11.701], [4.373, -41.603, -6.966], [4.817, -45.835, -4.741], [4.321, -41.111, -4.04]] - , [[5.641, -40.141, 0.849], [5.346, -38.038, -3.468], [4.683, -33.322, -2.781], [5.163, -36.737, -6.136], [4.867, -34.634, -10.453], [5.46, -38.848, -8.209], [5.94, -42.264, -11.563], [5.826, -41.453, -6.822], [6.418, -45.668, -4.578], [5.755, -40.952, -3.892]] - , [[7.039, -39.918, 1.003], [6.672, -37.837, -3.329], [5.843, -33.136, -2.658], [6.445, -36.551, -6.007], [6.078, -34.47, -10.34], [6.817, -38.662, -8.077], [7.419, -42.077, -11.425], [7.274, -41.252, -6.678], [8.013, -45.444, -4.415], [7.184, -40.743, -3.744]] - , [[8.427, -39.646, 1.157], [7.99, -37.59, -3.191], [6.995, -32.91, -2.535], [7.72, -36.319, -5.878], [7.283, -34.263, -10.227], [8.168, -38.427, -7.944], [8.893, -41.837, -11.287], [8.715, -41, -6.534], [9.6, -45.163, -4.251], [8.605, -40.483, -3.596]] - , [[9.805, -39.326, 1.312], [9.299, -37.297, -3.052], [8.139, -32.643, -2.412], [8.987, -36.043, -5.749], [8.481, -34.014, -10.113], [9.51, -38.144, -7.812], [10.358, -41.545, -11.149], [10.147, -40.697, -6.389], [11.177, -44.827, -4.088], [10.016, -40.173, -3.448]] - , [[11.171, -38.956, 1.466], [10.597, -36.957, -2.914], [9.272, -32.336, -2.29], [10.243, -35.722, -5.621], [9.67, -33.723, -10], [10.843, -37.815, -7.679], [11.814, -41.201, -11.011], [11.568, -40.344, -6.245], [12.742, -44.435, -3.924], [11.416, -39.814, -3.3]] - , [[12.522, -38.539, 1.62], [11.883, -36.572, -2.775], [10.394, -31.989, -2.167], [11.488, -35.357, -5.492], [10.849, -33.39, -9.887], [12.164, -37.438, -7.547], [13.259, -40.806, -10.872], [12.977, -39.94, -6.101], [14.293, -43.988, -3.761], [12.803, -39.405, -3.152]] - , [[13.858, -38.075, 1.774], [13.155, -36.142, -2.637], [11.502, -31.603, -2.044], [12.72, -34.947, -5.363], [12.016, -33.015, -9.774], [13.472, -37.015, -7.414], [14.69, -40.359, -10.733], [14.372, -39.487, -5.956], [15.828, -43.486, -3.597], [14.176, -38.947, -3.004]] - , [[15.177, -37.563, 1.928], [14.41, -35.667, -2.498], [12.597, -31.178, -1.921], [13.937, -34.495, -5.234], [13.171, -32.599, -9.66], [14.765, -36.545, -7.282], [16.105, -39.862, -10.594], [15.751, -38.984, -5.811], [17.345, -42.93, -3.433], [15.531, -38.441, -2.855]] - , [[16.476, -37.006, 2.082], [15.649, -35.148, -2.36], [13.675, -30.715, -1.798], [15.138, -34, -5.105], [14.311, -32.142, -9.547], [16.042, -36.03, -7.149], [17.504, -39.315, -10.455], [17.111, -38.433, -5.667], [18.843, -42.321, -3.268], [16.869, -37.888, -2.707]] - , [[17.755, -36.403, 2.236], [16.868, -34.585, -2.221], [14.736, -30.214, -1.676], [16.321, -33.462, -4.976], [15.434, -31.645, -9.433], [17.3, -35.47, -7.016], [18.884, -38.718, -10.316], [18.453, -37.834, -5.522], [20.318, -41.659, -3.104], [18.186, -37.287, -2.559]] - , [[19.011, -35.755, 2.39], [18.068, -33.98, -2.083], [15.779, -29.676, -1.553], [17.484, -32.883, -4.847], [16.541, -31.108, -9.32], [18.538, -34.865, -6.883], [20.244, -38.073, -10.177], [19.773, -37.188, -5.377], [21.771, -40.945, -2.94], [19.482, -36.64, -2.41]] - , [[20.244, -35.063, 2.544], [19.245, -33.333, -1.944], [16.802, -29.102, -1.431], [18.627, -32.263, -4.718], [17.628, -30.533, -9.206], [19.755, -34.217, -6.75], [21.581, -37.379, -10.037], [21.07, -36.495, -5.232], [23.198, -40.179, -2.775], [20.755, -35.948, -2.262]] - , [[21.451, -34.329, 2.698], [20.398, -32.644, -1.806], [17.804, -28.492, -1.308], [19.748, -31.603, -4.589], [18.695, -29.919, -9.093], [20.95, -33.527, -6.617], [22.894, -36.638, -9.897], [22.343, -35.756, -5.086], [24.597, -39.364, -2.611], [22.002, -35.211, -2.113]] - , [[22.631, -33.552, 2.852], [21.527, -31.916, -1.667], [18.783, -27.847, -1.186], [20.845, -30.904, -4.46], [19.741, -29.267, -8.979], [22.119, -32.794, -6.483], [24.182, -35.851, -9.757], [23.589, -34.973, -4.941], [25.968, -38.499, -2.446], [23.223, -34.43, -1.965]] - , [[23.783, -32.735, 3.005], [22.63, -31.147, -1.529], [19.739, -27.168, -1.064], [21.917, -30.166, -4.331], [20.764, -28.579, -8.865], [23.263, -32.019, -6.35], [25.442, -35.017, -9.617], [24.808, -34.146, -4.796], [27.308, -37.586, -2.281], [24.417, -33.607, -1.816]] - , [[24.905, -31.877, 3.159], [23.705, -30.341, -1.39], [20.67, -26.456, -0.941], [22.963, -29.391, -4.202], [21.762, -27.855, -8.751], [24.38, -31.205, -6.217], [26.673, -34.14, -9.477], [25.998, -33.275, -4.65], [28.615, -36.626, -2.116], [25.58, -32.741, -1.667]] - , [[25.996, -30.981, 3.313], [24.751, -29.497, -1.252], [21.575, -25.712, -0.819], [23.981, -28.579, -4.073], [22.735, -27.095, -8.637], [25.468, -30.351, -6.083], [27.873, -33.218, -9.337], [27.156, -32.364, -4.505], [29.889, -35.62, -1.951], [26.713, -31.835, -1.519]] - , [[27.054, -30.047, 3.467], [25.766, -28.616, -1.113], [22.453, -24.937, -0.697], [24.97, -27.732, -3.944], [23.682, -26.301, -8.524], [26.525, -29.459, -5.95], [29.042, -32.254, -9.196], [28.283, -31.411, -4.359], [31.126, -34.569, -1.786], [27.813, -30.89, -1.37]] - , [[28.078, -29.076, 3.621], [26.75, -27.7, -0.974], [23.303, -24.131, -0.575], [25.929, -26.85, -3.814], [24.6, -25.474, -8.41], [27.551, -28.53, -5.816], [30.176, -31.248, -9.055], [29.375, -30.419, -4.214], [32.326, -33.475, -1.62], [28.88, -29.906, -1.221]] - , [[29.068, -28.07, 3.775], [27.701, -26.75, -0.836], [24.124, -23.296, -0.453], [26.856, -25.934, -3.685], [25.489, -24.614, -8.296], [28.544, -27.565, -5.683], [31.276, -30.203, -8.915], [30.432, -29.388, -4.068], [33.488, -32.339, -1.455], [29.911, -28.885, -1.072]] - , [[30.02, -27.03, 3.928], [28.617, -25.767, -0.697], [24.915, -22.433, -0.331], [27.75, -24.987, -3.556], [26.348, -23.724, -8.182], [29.503, -26.565, -5.549], [32.339, -29.118, -8.774], [31.453, -28.321, -3.922], [34.608, -31.162, -1.289], [30.906, -27.828, -0.923]] - , [[30.935, -25.958, 4.082], [29.499, -24.753, -0.559], [25.674, -21.543, -0.21], [28.611, -24.008, -3.427], [27.175, -22.803, -8.067], [30.427, -25.531, -5.415], [33.364, -27.995, -8.632], [32.436, -27.217, -3.776], [35.688, -29.945, -1.124], [31.863, -26.736, -0.775]] - , [[31.812, -24.854, 4.235], [30.344, -23.707, -0.42], [26.402, -20.627, -0.088], [29.437, -22.999, -3.298], [27.97, -21.852, -7.953], [31.313, -24.465, -5.281], [34.349, -26.837, -8.491], [33.38, -26.079, -3.63], [36.723, -28.692, -0.958], [32.781, -25.611, -0.626]] - , [[32.648, -23.72, 4.389], [31.152, -22.633, -0.282], [27.096, -19.686, 0.034], [30.227, -21.961, -3.168], [28.731, -20.874, -7.839], [32.163, -23.368, -5.147], [35.294, -25.643, -8.35], [34.283, -24.908, -3.484], [37.715, -27.401, -0.792], [33.659, -24.455, -0.477]] - , [[33.444, -22.558, 4.543], [31.921, -21.531, -0.143], [27.756, -18.722, 0.155], [30.98, -20.897, -3.039], [29.458, -19.87, -7.725], [32.973, -22.241, -5.013], [36.197, -24.415, -8.208], [35.145, -23.706, -3.338], [38.66, -26.077, -0.626], [34.495, -23.267, -0.328]] - , [[34.198, -21.369, 4.696], [32.651, -20.403, -0.005], [28.382, -17.735, 0.277], [31.696, -19.806, -2.91], [30.149, -18.839, -7.611], [33.744, -21.085, -4.879], [37.057, -23.156, -8.066], [35.965, -22.473, -3.191], [39.559, -24.719, -0.46], [35.29, -22.052, -0.179]] - , [[34.909, -20.155, 4.849], [33.341, -19.249, 0.134], [28.973, -16.727, 0.398], [32.372, -18.69, -2.781], [30.804, -17.785, -7.496], [34.473, -19.903, -4.745], [37.873, -21.866, -7.924], [36.741, -21.212, -3.045], [40.409, -23.33, -0.294], [36.041, -20.808, -0.03]] - , [[35.576, -18.916, 5.003], [33.99, -18.073, 0.272], [29.527, -15.7, 0.519], [33.009, -17.551, -2.652], [31.422, -16.708, -7.382], [35.161, -18.695, -4.611], [38.643, -20.547, -7.782], [37.472, -19.924, -2.899], [41.21, -21.912, -0.128], [36.748, -19.539, 0.119]] - , [[36.199, -17.656, 5.156], [34.596, -16.874, 0.411], [30.044, -14.654, 0.641], [33.605, -16.39, -2.522], [32.002, -15.608, -7.268], [35.806, -17.464, -4.477], [39.367, -19.201, -7.64], [38.157, -18.61, -2.752], [41.961, -20.466, 0.038], [37.409, -18.246, 0.268]] - , [[36.777, -16.374, 5.309], [35.16, -15.654, 0.549], [30.524, -13.59, 0.762], [34.16, -15.209, -2.393], [32.543, -14.489, -7.153], [36.408, -16.21, -4.343], [40.044, -17.829, -7.498], [38.796, -17.273, -2.606], [42.661, -18.994, 0.205], [38.025, -16.93, 0.418]] - , [[37.309, -15.074, 5.463], [35.68, -14.416, 0.687], [30.966, -12.511, 0.883], [34.674, -14.009, -2.264], [33.045, -13.351, -7.039], [36.965, -14.935, -4.209], [40.672, -16.433, -7.355], [39.388, -15.914, -2.459], [43.308, -17.498, 0.371], [38.594, -15.593, 0.567]] - , [[37.795, -13.756, 5.616], [36.157, -13.16, 0.826], [31.37, -11.418, 1.004], [35.144, -12.791, -2.135], [33.506, -12.195, -6.925], [37.477, -13.64, -4.074], [41.251, -15.014, -7.212], [39.931, -14.534, -2.313], [43.902, -15.979, 0.538], [39.115, -14.237, 0.716]] - , [[38.233, -12.423, 5.769], [36.588, -11.888, 0.964], [31.734, -10.311, 1.124], [35.572, -11.558, -2.005], [33.926, -11.023, -6.81], [37.943, -12.329, -3.94], [41.781, -13.575, -7.07], [40.426, -13.135, -2.166], [44.443, -14.44, 0.704], [39.588, -12.863, 0.865]] - , [[38.624, -11.075, 5.922], [36.975, -10.602, 1.102], [32.059, -9.193, 1.245], [35.955, -10.31, -1.876], [34.306, -9.837, -6.696], [38.363, -11, -3.805], [42.259, -12.118, -6.927], [40.871, -11.72, -2.019], [44.929, -12.883, 0.871], [40.013, -11.474, 1.014]] - , [[38.967, -9.716, 6.075], [37.316, -9.304, 1.241], [32.344, -8.064, 1.366], [36.295, -9.049, -1.747], [34.643, -8.637, -6.581], [38.736, -9.658, -3.671], [42.687, -10.643, -6.784], [41.266, -10.289, -1.872], [45.359, -11.309, 1.038], [40.388, -10.07, 1.163]] - , [[39.262, -8.345, 6.227], [37.611, -7.994, 1.379], [32.59, -6.927, 1.486], [36.59, -7.777, -1.618], [34.938, -7.426, -6.467], [39.062, -8.303, -3.536], [43.062, -9.153, -6.64], [41.611, -8.845, -1.725], [45.735, -9.721, 1.205], [40.714, -8.654, 1.312]] - , [[39.508, -6.966, 6.38], [37.859, -6.676, 1.517], [32.794, -5.783, 1.607], [36.84, -6.496, -1.489], [35.191, -6.205, -6.352], [39.34, -6.937, -3.402], [43.385, -7.65, -6.497], [41.904, -7.389, -1.578], [46.053, -8.12, 1.372], [40.989, -7.227, 1.461]] - , [[39.705, -5.58, 6.533], [38.061, -5.349, 1.655], [32.958, -4.632, 1.727], [37.044, -5.206, -1.36], [35.4, -4.975, -6.237], [39.569, -5.561, -3.267], [43.655, -6.135, -6.354], [42.146, -5.923, -1.431], [46.316, -6.509, 1.539], [41.214, -5.792, 1.611]] - , [[39.853, -4.189, 6.686], [38.215, -4.017, 1.793], [33.082, -3.477, 1.847], [37.203, -3.91, -1.23], [35.566, -3.738, -6.123], [39.75, -4.178, -3.133], [43.872, -4.611, -6.21], [42.337, -4.45, -1.284], [46.521, -4.89, 1.706], [41.388, -4.35, 1.76]] - , [[39.951, -2.794, 6.838], [38.323, -2.68, 1.931], [33.164, -2.319, 1.967], [37.317, -2.609, -1.101], [35.688, -2.496, -6.008], [39.883, -2.789, -2.998], [44.035, -3.079, -6.066], [42.475, -2.97, -1.137], [46.669, -3.263, 1.873], [41.511, -2.903, 1.909]] - , [[40, -1.397, 6.99], [38.383, -1.34, 2.069], [33.206, -1.16, 2.087], [37.384, -1.305, -0.972], [35.767, -1.249, -5.893], [39.966, -1.396, -2.863], [44.144, -1.542, -5.923], [42.561, -1.486, -0.99], [46.76, -1.633, 2.04], [41.583, -1.452, 2.058]] - , [[40, 0, 7.143], [38.396, 0, 2.207], [33.207, 0, 2.207], [37.405, 0, -0.843], [35.802, 0, -5.779], [40, 0, -2.728], [44.198, 0, -5.779], [42.595, 0, -0.843], [46.793, 0, 2.207], [41.604, 0, 2.207]] - , [[39.95, 1.395, 7.295], [38.362, 1.34, 2.345], [33.167, 1.158, 2.327], [37.381, 1.305, -0.714], [35.792, 1.25, -5.664], [39.985, 1.396, -2.594], [44.199, 1.543, -5.635], [42.576, 1.487, -0.696], [46.769, 1.633, 2.375], [41.573, 1.452, 2.356]] - , [[39.852, 2.787, 7.447], [38.281, 2.677, 2.483], [33.086, 2.314, 2.447], [37.31, 2.609, -0.585], [35.739, 2.499, -5.549], [39.921, 2.792, -2.459], [44.145, 3.087, -5.49], [42.505, 2.972, -0.549], [46.687, 3.265, 2.542], [41.492, 2.901, 2.506]] - , [[39.704, 4.173, 7.599], [38.152, 4.01, 2.621], [32.964, 3.465, 2.566], [37.193, 3.909, -0.456], [35.642, 3.746, -5.435], [39.807, 4.184, -2.324], [44.037, 4.628, -5.346], [42.382, 4.454, -0.401], [46.547, 4.892, 2.709], [41.359, 4.347, 2.655]] - , [[39.507, 5.552, 7.751], [37.977, 5.337, 2.759], [32.802, 4.61, 2.686], [37.031, 5.204, -0.327], [35.501, 4.989, -5.32], [39.645, 5.572, -2.189], [43.874, 6.166, -5.202], [42.206, 5.932, -0.254], [46.35, 6.514, 2.877], [41.175, 5.787, 2.804]] - , [[39.262, 6.923, 7.903], [37.755, 6.657, 2.896], [32.6, 5.748, 2.805], [36.823, 6.493, -0.198], [35.316, 6.227, -5.205], [39.434, 6.953, -2.054], [43.657, 7.698, -5.057], [41.979, 7.402, -0.107], [46.097, 8.128, 3.044], [40.941, 7.219, 2.953]] - , [[38.969, 8.283, 8.055], [37.487, 7.968, 3.034], [32.357, 6.878, 2.924], [36.57, 7.773, -0.069], [35.087, 7.458, -5.09], [39.174, 8.327, -1.919], [43.387, 9.222, -4.912], [41.699, 8.863, 0.041], [45.786, 9.732, 3.212], [40.657, 8.642, 3.102]] - , [[38.629, 9.631, 8.207], [37.172, 9.268, 3.172], [32.076, 7.997, 3.043], [36.272, 9.044, 0.06], [34.816, 8.681, -4.975], [38.866, 9.69, -1.784], [43.062, 10.737, -4.768], [41.369, 10.314, 0.188], [45.419, 11.324, 3.379], [40.322, 10.053, 3.251]] - , [[38.241, 10.965, 8.358], [36.813, 10.556, 3.309], [31.755, 9.106, 3.162], [35.93, 10.303, 0.189], [34.501, 9.893, -4.861], [38.51, 11.042, -1.649], [42.684, 12.24, -4.623], [40.987, 11.753, 0.336], [44.996, 12.902, 3.547], [39.938, 11.452, 3.4]] - , [[37.807, 12.284, 8.51], [36.408, 11.83, 3.447], [31.396, 10.201, 3.281], [35.543, 11.549, 0.317], [34.144, 11.094, -4.746], [38.106, 12.381, -1.514], [42.254, 13.729, -4.478], [40.555, 13.177, 0.483], [44.517, 14.465, 3.715], [39.505, 12.836, 3.549]] - , [[37.326, 13.586, 8.661], [35.958, 13.088, 3.584], [30.998, 11.282, 3.4], [35.113, 12.78, 0.446], [33.745, 12.282, -4.631], [37.656, 13.706, -1.379], [41.771, 15.203, -4.333], [40.073, 14.585, 0.631], [43.984, 16.009, 3.882], [39.024, 14.204, 3.698]] - , [[36.801, 14.868, 8.813], [35.465, 14.329, 3.722], [30.563, 12.348, 3.518], [34.64, 13.995, 0.575], [33.304, 13.456, -4.516], [37.159, 15.013, -1.244], [41.236, 16.66, -4.188], [39.542, 15.976, 0.778], [43.397, 17.534, 4.05], [38.495, 15.553, 3.847]] - , [[36.231, 16.131, 8.964], [34.929, 15.551, 3.859], [30.091, 13.397, 3.637], [34.124, 15.193, 0.704], [32.822, 14.613, -4.401], [36.616, 16.303, -1.109], [40.649, 18.098, -4.042], [38.962, 17.347, 0.926], [42.756, 19.036, 4.218], [37.918, 16.882, 3.996]] - , [[35.617, 17.371, 9.115], [34.35, 16.753, 3.996], [29.582, 14.428, 3.755], [33.566, 16.371, 0.832], [32.299, 15.753, -4.286], [36.029, 17.572, -0.974], [40.013, 19.515, -3.897], [38.334, 18.697, 1.073], [42.063, 20.516, 4.386], [37.296, 18.19, 4.145]] - , [[34.96, 18.589, 9.266], [33.729, 17.934, 4.133], [29.038, 15.44, 3.873], [32.968, 17.529, 0.961], [31.736, 16.875, -4.172], [35.396, 18.821, -0.839], [39.326, 20.91, -3.751], [37.658, 20.023, 1.221], [41.318, 21.969, 4.554], [36.628, 19.475, 4.294]] - , [[34.261, 19.781, 9.417], [33.067, 19.091, 4.27], [28.459, 16.431, 3.991], [32.329, 18.665, 1.09], [31.135, 17.976, -4.057], [34.72, 20.046, -0.704], [38.59, 22.28, -3.606], [36.937, 21.325, 1.368], [40.523, 23.396, 4.721], [35.915, 20.735, 4.443]] - , [[33.521, 20.946, 9.567], [32.365, 20.224, 4.407], [27.846, 17.4, 4.109], [31.651, 19.777, 1.218], [30.494, 19.055, -3.942], [34.002, 21.247, -0.569], [37.806, 23.624, -3.46], [36.17, 22.601, 1.516], [39.677, 24.793, 4.889], [35.158, 21.969, 4.591]] - , [[32.741, 22.084, 9.718], [31.624, 21.331, 4.544], [27.199, 18.346, 4.227], [30.934, 20.865, 1.347], [29.816, 20.111, -3.827], [33.241, 22.422, -0.434], [36.975, 24.94, -3.314], [35.358, 23.849, 1.664], [38.783, 26.16, 5.057], [34.359, 23.175, 4.74]] - , [[31.922, 23.193, 9.869], [30.845, 22.41, 4.681], [26.521, 19.268, 4.345], [30.179, 21.926, 1.475], [29.101, 21.143, -3.712], [32.44, 23.569, -0.298], [36.098, 26.227, -3.168], [34.503, 25.068, 1.811], [37.842, 27.494, 5.225], [33.517, 24.352, 4.889]] - , [[31.065, 24.271, 10.019], [30.028, 23.461, 4.818], [25.81, 20.165, 4.462], [29.388, 22.96, 1.604], [28.35, 22.15, -3.597], [31.598, 24.687, -0.163], [35.176, 27.482, -3.022], [33.606, 26.256, 1.959], [36.854, 28.793, 5.393], [32.635, 25.498, 5.038]] - , [[30.172, 25.317, 10.169], [29.176, 24.482, 4.955], [25.069, 21.036, 4.58], [28.56, 23.965, 1.732], [27.564, 23.129, -3.483], [30.718, 25.776, -0.028], [34.209, 28.705, -2.876], [32.667, 27.411, 2.107], [35.821, 30.057, 5.561], [31.714, 26.611, 5.186]] - , [[29.243, 26.33, 10.319], [28.288, 25.471, 5.091], [24.299, 21.879, 4.697], [27.699, 24.94, 1.86], [26.744, 24.081, -3.368], [29.8, 26.832, 0.107], [33.2, 29.893, -2.73], [31.688, 28.532, 2.254], [34.744, 31.284, 5.729], [30.754, 27.691, 5.335]] - , [[28.279, 27.309, 10.469], [27.367, 26.428, 5.228], [23.499, 22.693, 4.814], [26.803, 25.884, 1.988], [25.891, 25.003, -3.253], [28.845, 27.856, 0.242], [32.149, 31.046, -2.584], [30.671, 29.619, 2.402], [33.625, 32.471, 5.897], [29.757, 28.736, 5.483]] - , [[27.283, 28.252, 10.619], [26.413, 27.351, 5.364], [22.673, 23.478, 4.931], [25.876, 26.795, 2.117], [25.006, 25.894, -3.138], [27.855, 28.845, 0.377], [31.058, 32.161, -2.437], [29.616, 30.668, 2.55], [32.465, 33.618, 6.065], [28.725, 29.745, 5.632]] - , [[26.254, 29.158, 10.769], [25.428, 28.24, 5.501], [21.82, 24.233, 5.048], [24.917, 27.673, 2.245], [24.09, 26.754, -3.023], [26.831, 29.798, 0.512], [29.928, 33.238, -2.291], [28.525, 31.68, 2.698], [31.265, 34.724, 6.233], [27.657, 30.717, 5.78]] - , [[25.196, 30.027, 10.918], [24.412, 29.093, 5.637], [20.941, 24.957, 5.164], [23.928, 28.516, 2.373], [23.144, 27.582, -2.909], [25.773, 30.715, 0.647], [28.76, 34.275, -2.144], [27.398, 32.652, 2.845], [30.028, 35.786, 6.401], [26.557, 31.649, 5.929]] - , [[24.108, 30.857, 11.068], [23.368, 29.909, 5.773], [20.039, 25.648, 5.281], [22.91, 29.323, 2.501], [22.169, 28.375, -2.794], [24.684, 31.595, 0.783], [27.556, 35.27, -1.998], [26.239, 33.584, 2.993], [28.754, 36.803, 6.569], [25.425, 32.542, 6.077]] - , [[22.993, 31.647, 11.217], [22.296, 30.687, 5.909], [19.113, 26.307, 5.397], [21.865, 30.094, 2.629], [21.167, 29.134, -2.679], [23.565, 32.435, 0.918], [26.317, 36.222, -1.851], [25.047, 34.475, 3.141], [27.445, 37.775, 6.737], [24.263, 33.395, 6.225]] - , [[21.852, 32.397, 11.366], [21.198, 31.427, 6.045], [18.166, 26.932, 5.513], [20.793, 30.827, 2.757], [20.139, 29.857, -2.564], [22.417, 33.235, 1.053], [25.045, 37.131, -1.704], [23.825, 35.322, 3.288], [26.103, 38.7, 6.905], [23.071, 34.205, 6.374]] - , [[20.686, 33.105, 11.515], [20.075, 32.127, 6.181], [17.198, 27.522, 5.63], [19.697, 31.522, 2.884], [19.086, 30.544, -2.449], [21.242, 33.994, 1.188], [23.741, 37.994, -1.557], [22.574, 36.126, 3.436], [24.73, 39.576, 7.073], [21.853, 34.972, 6.522]] - , [[19.497, 33.77, 11.664], [18.929, 32.786, 6.317], [16.211, 28.078, 5.745], [18.578, 32.178, 3.012], [18.009, 31.193, -2.335], [20.041, 34.711, 1.323], [22.408, 38.811, -1.41], [21.296, 36.886, 3.584], [23.327, 40.404, 7.241], [20.609, 35.696, 6.67]] - , [[18.287, 34.393, 11.812], [17.761, 33.404, 6.453], [15.206, 28.598, 5.861], [17.436, 32.793, 3.14], [16.911, 31.804, -2.22], [18.815, 35.386, 1.458], [21.046, 39.581, -1.263], [19.992, 37.599, 3.731], [21.896, 41.181, 7.409], [19.341, 36.375, 6.818]] - , [[17.057, 34.971, 11.961], [16.573, 33.98, 6.588], [14.184, 29.081, 5.977], [16.274, 33.367, 3.268], [15.791, 32.376, -2.105], [17.566, 36.017, 1.593], [19.657, 40.303, -1.116], [18.664, 38.266, 3.879], [20.439, 41.907, 7.577], [18.05, 37.008, 6.966]] - , [[15.808, 35.506, 12.109], [15.366, 34.514, 6.724], [13.147, 29.528, 6.092], [15.093, 33.9, 3.395], [14.652, 32.908, -1.991], [16.297, 36.603, 1.728], [18.244, 40.976, -0.969], [17.313, 38.886, 4.027], [18.958, 42.581, 7.745], [16.738, 37.595, 7.114]] - , [[14.543, 35.995, 12.257], [14.142, 35.004, 6.859], [12.095, 29.937, 6.207], [13.895, 34.391, 3.523], [13.495, 33.4, -1.876], [15.007, 37.144, 1.863], [16.807, 41.598, -0.822], [15.942, 39.458, 4.174], [17.455, 43.202, 7.913], [15.408, 38.135, 7.262]] - , [[13.263, 36.439, 12.406], [12.903, 35.45, 6.994], [11.031, 30.309, 6.322], [12.68, 34.839, 3.65], [12.321, 33.851, -1.761], [13.7, 37.639, 1.998], [15.349, 42.17, -0.674], [14.552, 39.981, 4.322], [15.931, 43.769, 8.081], [14.059, 38.628, 7.41]] - , [[11.969, 36.836, 12.553], [11.649, 35.852, 7.129], [9.956, 30.642, 6.437], [11.452, 35.244, 3.777], [11.132, 34.26, -1.647], [12.376, 38.088, 2.133], [13.871, 42.69, -0.527], [13.144, 40.454, 4.469], [14.388, 44.282, 8.249], [12.695, 39.072, 7.557]] - , [[10.663, 37.188, 12.701], [10.383, 36.21, 7.265], [8.871, 30.937, 6.552], [10.21, 35.605, 3.905], [9.929, 34.627, -1.532], [11.037, 38.49, 2.268], [12.375, 43.158, -0.379], [11.721, 40.878, 4.617], [12.829, 44.741, 8.417], [11.317, 39.468, 7.705]] - , [[9.348, 37.492, 12.849], [9.106, 36.522, 7.4], [7.777, 31.194, 6.667], [8.956, 35.922, 4.032], [8.714, 34.952, -1.417], [9.685, 38.845, 2.403], [10.864, 43.573, -0.232], [10.285, 41.251, 4.764], [11.256, 45.143, 8.585], [9.927, 39.815, 7.852]] - , [[8.024, 37.75, 12.996], [7.82, 36.789, 7.534], [6.677, 31.411, 6.781], [7.693, 36.195, 4.159], [7.489, 35.233, -1.303], [8.322, 39.151, 2.538], [9.339, 43.935, -0.084], [8.837, 41.573, 4.912], [9.669, 45.49, 8.753], [8.526, 40.112, 8]] - , [[6.693, 37.96, 13.143], [6.526, 37.01, 7.669], [5.57, 31.589, 6.895], [6.422, 36.422, 4.286], [6.255, 35.472, -1.188], [6.949, 39.409, 2.673], [7.801, 44.243, 0.063], [7.378, 41.843, 5.059], [8.072, 45.781, 8.921], [7.117, 40.36, 8.147]] - , [[5.358, 38.123, 13.29], [5.226, 37.185, 7.804], [4.459, 31.728, 7.01], [5.144, 36.605, 4.413], [5.013, 35.666, -1.074], [5.568, 39.619, 2.808], [6.254, 44.496, 0.211], [5.911, 42.062, 5.207], [6.467, 46.015, 9.089], [5.7, 40.558, 8.294]] - , [[4.019, 38.239, 13.437], [3.922, 37.314, 7.938], [3.345, 31.827, 7.123], [3.862, 36.742, 4.54], [3.765, 35.817, -0.959], [4.181, 39.78, 2.943], [4.698, 44.695, 0.359], [4.438, 42.229, 5.354], [4.855, 46.192, 9.256], [4.278, 40.705, 8.442]] - , [[2.679, 38.307, 13.584], [2.615, 37.397, 8.073], [2.23, 31.887, 7.237], [2.576, 36.834, 4.666], [2.512, 35.924, -0.845], [2.79, 39.892, 3.078], [3.135, 44.84, 0.507], [2.961, 42.344, 5.502], [3.238, 46.312, 9.424], [2.853, 40.802, 8.589]] - , [[1.338, 38.328, 13.73], [1.307, 37.433, 8.207], [1.114, 31.907, 7.351], [1.288, 36.881, 4.793], [1.257, 35.987, -0.73], [1.395, 39.955, 3.212], [1.569, 44.929, 0.655], [1.481, 42.407, 5.649], [1.619, 46.375, 9.592], [1.426, 40.849, 8.736]] - , [[0, 38.301, 13.877], [0, 37.424, 8.341], [0, 31.888, 7.464], [0, 36.882, 4.92], [0, 36.005, -0.616], [0, 39.968, 3.347], [0, 44.962, 0.803], [0, 42.418, 5.796], [0, 46.381, 9.76], [0, 40.845, 8.883]] - , [[-1.335, 38.227, 14.023], [-1.305, 37.368, 8.475], [-1.112, 31.83, 7.577], [-1.286, 36.838, 5.046], [-1.256, 35.98, -0.502], [-1.394, 39.933, 3.482], [-1.569, 44.941, 0.951], [-1.48, 42.376, 5.944], [-1.618, 46.33, 9.927], [-1.424, 40.791, 9.03]] - , [[-2.665, 38.106, 14.169], [-2.606, 37.267, 8.609], [-2.219, 31.733, 7.69], [-2.57, 36.749, 5.173], [-2.511, 35.91, -0.387], [-2.786, 39.848, 3.616], [-3.137, 44.864, 1.099], [-2.957, 42.283, 6.091], [-3.232, 46.221, 10.095], [-2.845, 40.687, 9.176]] - , [[-3.987, 37.938, 14.315], [-3.901, 37.12, 8.743], [-3.321, 31.597, 7.803], [-3.848, 36.614, 5.299], [-3.762, 35.796, -0.273], [-4.174, 39.715, 3.751], [-4.702, 44.732, 1.247], [-4.429, 42.137, 6.238], [-4.841, 46.056, 10.262], [-4.26, 40.533, 9.323]] - , [[-5.302, 37.724, 14.46], [-5.19, 36.927, 8.876], [-4.416, 31.422, 7.916], [-5.121, 36.435, 5.425], [-5.009, 35.638, -0.159], [-5.556, 39.533, 3.886], [-6.26, 44.545, 1.395], [-5.894, 41.94, 6.385], [-6.442, 45.835, 10.43], [-5.668, 40.329, 9.47]] - , [[-6.606, 37.464, 14.606], [-6.469, 36.689, 9.01], [-5.503, 31.209, 8.028], [-6.385, 36.211, 5.551], [-6.248, 35.436, -0.045], [-6.93, 39.302, 4.02], [-7.812, 44.304, 1.543], [-7.351, 41.691, 6.532], [-8.033, 45.557, 10.597], [-7.067, 40.076, 9.616]] - , [[-7.898, 37.158, 14.751], [-7.738, 36.407, 9.143], [-6.58, 30.958, 8.141], [-7.64, 35.942, 5.677], [-7.48, 35.191, 0.069], [-8.295, 39.023, 4.155], [-9.354, 44.008, 1.691], [-8.798, 41.391, 6.68], [-9.613, 45.223, 10.765], [-8.454, 39.774, 9.762]] - , [[-9.177, 36.807, 14.896], [-8.996, 36.08, 9.276], [-7.647, 30.669, 8.253], [-8.884, 35.63, 5.803], [-8.702, 34.903, 0.184], [-9.648, 38.696, 4.289], [-10.885, 43.657, 1.84], [-10.233, 41.041, 6.827], [-11.178, 44.834, 10.932], [-9.829, 39.424, 9.909]] - , [[-10.441, 36.412, 15.041], [-10.239, 35.709, 9.409], [-8.701, 30.344, 8.365], [-10.115, 35.275, 5.929], [-9.913, 34.572, 0.298], [-10.989, 38.322, 4.424], [-12.403, 43.253, 1.988], [-11.653, 40.64, 6.974], [-12.729, 44.391, 11.099], [-11.19, 39.025, 10.055]] - , [[-11.688, 35.973, 15.185], [-11.468, 35.295, 9.542], [-9.742, 29.982, 8.476], [-11.332, 34.876, 6.055], [-11.112, 34.198, 0.412], [-12.315, 37.901, 4.558], [-13.905, 42.796, 2.136], [-13.058, 40.19, 7.12], [-14.262, 43.893, 11.267], [-12.535, 38.579, 10.201]] - , [[-12.918, 35.491, 15.33], [-12.68, 34.839, 9.675], [-10.768, 29.584, 8.588], [-12.534, 34.436, 6.18], [-12.296, 33.783, 0.526], [-13.625, 37.434, 4.692], [-15.391, 42.286, 2.285], [-14.446, 39.691, 7.267], [-15.775, 43.342, 11.434], [-13.862, 38.087, 10.347]] - , [[-14.127, 34.967, 15.474], [-13.874, 34.34, 9.808], [-11.777, 29.15, 8.699], [-13.718, 33.953, 6.306], [-13.465, 33.327, 0.64], [-14.917, 36.921, 4.827], [-16.858, 41.724, 2.433], [-15.815, 39.143, 7.414], [-17.267, 42.738, 11.601], [-15.17, 37.548, 10.493]] - , [[-15.316, 34.4, 15.618], [-15.049, 33.8, 9.94], [-12.77, 28.682, 8.81], [-14.884, 33.429, 6.431], [-14.617, 32.829, 0.754], [-16.19, 36.363, 4.961], [-18.304, 41.111, 2.582], [-17.163, 38.548, 7.561], [-18.736, 42.082, 11.768], [-16.457, 36.964, 10.638]] - , [[-16.482, 33.793, 15.762], [-16.202, 33.22, 10.073], [-13.744, 28.18, 8.921], [-16.03, 32.865, 6.557], [-15.75, 32.292, 0.868], [-17.442, 35.761, 5.095], [-19.727, 40.447, 2.73], [-18.488, 37.906, 7.708], [-20.18, 41.375, 11.935], [-17.722, 36.335, 10.784]] - , [[-17.624, 33.147, 15.905], [-17.334, 32.6, 10.205], [-14.699, 27.644, 9.032], [-17.154, 32.262, 6.682], [-16.863, 31.715, 0.981], [-18.671, 35.116, 5.229], [-21.127, 39.734, 2.879], [-19.789, 37.218, 7.854], [-21.597, 40.618, 12.102], [-18.962, 35.663, 10.929]] - , [[-18.741, 32.461, 16.048], [-18.441, 31.941, 10.337], [-15.632, 27.076, 9.143], [-18.256, 31.62, 6.807], [-17.955, 31.1, 1.095], [-19.877, 34.428, 5.363], [-22.5, 38.971, 3.027], [-21.064, 36.485, 8.001], [-22.986, 39.813, 12.269], [-20.177, 34.948, 11.075]] - , [[-19.831, 31.737, 16.192], [-19.523, 31.244, 10.469], [-16.544, 26.476, 9.253], [-19.333, 30.939, 6.932], [-19.025, 30.446, 1.209], [-21.057, 33.698, 5.497], [-23.846, 38.161, 3.176], [-22.312, 35.707, 8.147], [-24.344, 38.959, 12.436], [-21.365, 34.191, 11.22]] - , [[-20.894, 30.976, 16.335], [-20.579, 30.51, 10.6], [-17.433, 25.845, 9.363], [-20.385, 30.222, 7.057], [-20.071, 29.756, 1.323], [-22.21, 32.927, 5.631], [-25.162, 37.304, 3.324], [-23.532, 34.887, 8.294], [-25.671, 38.058, 12.602], [-22.524, 33.393, 11.365]] - , [[-21.927, 30.18, 16.477], [-21.608, 29.74, 10.732], [-18.297, 25.184, 9.473], [-21.41, 29.469, 7.181], [-21.091, 29.029, 1.436], [-23.334, 32.117, 5.765], [-26.447, 36.401, 3.473], [-24.721, 34.025, 8.44], [-26.964, 37.112, 12.769], [-23.653, 32.556, 11.51]] - , [[-22.929, 29.348, 16.62], [-22.607, 28.935, 10.864], [-19.137, 24.494, 9.583], [-22.407, 28.68, 7.306], [-22.085, 28.267, 1.55], [-24.429, 31.268, 5.899], [-27.7, 35.454, 3.622], [-25.878, 33.122, 8.587], [-28.222, 36.122, 12.936], [-24.751, 31.68, 11.655]] - , [[-23.9, 28.483, 16.762], [-23.576, 28.097, 10.995], [-19.95, 23.776, 9.693], [-23.376, 27.858, 7.43], [-23.051, 27.471, 1.663], [-25.493, 30.381, 6.032], [-28.918, 34.463, 3.77], [-27.001, 32.179, 8.733], [-29.443, 35.089, 13.102], [-25.817, 30.767, 11.8]] - , [[-24.839, 27.586, 16.904], [-24.514, 27.225, 11.126], [-20.736, 23.03, 9.802], [-24.313, 27.003, 7.555], [-23.989, 26.642, 1.777], [-26.524, 29.458, 6.166], [-30.101, 33.43, 3.919], [-28.091, 31.198, 8.879], [-30.626, 34.014, 13.268], [-26.849, 29.818, 11.944]] - , [[-25.743, 26.658, 17.046], [-25.419, 26.323, 11.257], [-21.495, 22.259, 9.911], [-25.219, 26.116, 7.679], [-24.896, 25.781, 1.89], [-27.521, 28.499, 6.3], [-31.246, 32.356, 4.068], [-29.144, 30.18, 9.025], [-31.77, 32.898, 13.435], [-27.845, 28.834, 12.089]] - , [[-26.613, 25.699, 17.188], [-26.292, 25.389, 11.388], [-22.224, 21.462, 10.02], [-26.093, 25.198, 7.803], [-25.772, 24.888, 2.003], [-28.484, 27.507, 6.433], [-32.353, 31.243, 4.217], [-30.16, 29.125, 9.171], [-32.872, 31.744, 13.601], [-28.805, 27.817, 12.233]] - , [[-27.446, 24.713, 17.329], [-27.129, 24.427, 11.518], [-22.924, 20.641, 10.129], [-26.933, 24.251, 7.927], [-26.616, 23.965, 2.117], [-29.411, 26.482, 6.567], [-33.419, 30.091, 4.365], [-31.138, 28.037, 9.317], [-33.933, 30.553, 13.767], [-29.728, 26.767, 12.377]] - , [[-28.243, 23.699, 17.47], [-27.931, 23.437, 11.649], [-23.594, 19.798, 10.237], [-27.739, 23.275, 8.051], [-27.427, 23.014, 2.23], [-30.3, 25.425, 6.7], [-34.445, 28.903, 4.514], [-32.076, 26.915, 9.463], [-34.949, 29.326, 13.933], [-30.612, 25.686, 12.521]] - , [[-29.002, 22.659, 17.611], [-28.697, 22.421, 11.779], [-24.232, 18.932, 10.345], [-28.508, 22.273, 8.175], [-28.203, 22.035, 2.343], [-31.151, 24.338, 6.833], [-35.428, 27.679, 4.663], [-32.973, 25.762, 9.609], [-35.921, 28.065, 14.099], [-31.457, 24.577, 12.665]] - , [[-29.723, 21.595, 17.752], [-29.426, 21.379, 11.909], [-24.839, 18.046, 10.454], [-29.242, 21.245, 8.299], [-28.944, 21.029, 2.456], [-31.963, 23.223, 6.967], [-36.366, 26.422, 4.812], [-33.829, 24.578, 9.754], [-36.848, 26.771, 14.265], [-32.261, 23.439, 12.809]] - , [[-30.404, 20.508, 17.892], [-30.116, 20.314, 12.039], [-25.412, 17.141, 10.561], [-29.938, 20.193, 8.422], [-29.65, 19.999, 2.569], [-32.735, 22.08, 7.1], [-37.26, 25.132, 4.961], [-34.642, 23.366, 9.9], [-37.727, 25.447, 14.431], [-33.023, 22.274, 12.953]] - , [[-31.046, 19.399, 18.032], [-30.768, 19.226, 12.169], [-25.953, 16.217, 10.669], [-30.596, 19.118, 8.545], [-30.318, 18.945, 2.682], [-33.465, 20.911, 7.233], [-38.108, 23.813, 5.109], [-35.411, 22.127, 10.045], [-38.558, 24.094, 14.596], [-33.743, 21.085, 13.096]] - , [[-31.646, 18.271, 18.172], [-31.38, 18.117, 12.299], [-26.46, 15.276, 10.776], [-31.215, 18.022, 8.669], [-30.948, 17.868, 2.795], [-34.154, 19.719, 7.366], [-38.909, 22.464, 5.258], [-36.135, 20.862, 10.191], [-39.34, 22.713, 14.762], [-34.42, 19.873, 13.239]] - , [[-32.205, 17.124, 18.312], [-31.951, 16.989, 12.428], [-26.932, 14.32, 10.884], [-31.794, 16.905, 8.792], [-31.54, 16.77, 2.908], [-34.799, 18.503, 7.499], [-39.662, 21.088, 5.407], [-36.814, 19.574, 10.336], [-40.073, 21.307, 14.927], [-35.053, 18.638, 13.383]] - , [[-32.723, 15.96, 18.451], [-32.482, 15.843, 12.557], [-27.37, 13.349, 10.991], [-32.333, 15.77, 8.915], [-32.093, 15.653, 3.021], [-35.401, 17.266, 7.632], [-40.365, 19.687, 5.556], [-37.446, 18.264, 10.482], [-40.754, 19.877, 15.092], [-35.642, 17.384, 13.526]] - , [[-33.198, 14.781, 18.591], [-32.972, 14.68, 12.686], [-27.772, 12.365, 11.097], [-32.832, 14.618, 9.038], [-32.606, 14.517, 3.134], [-35.959, 16.01, 7.765], [-41.019, 18.263, 5.705], [-38.031, 16.933, 10.627], [-41.384, 18.426, 15.258], [-36.185, 16.111, 13.669]] - , [[-33.63, 13.587, 18.729], [-33.419, 13.502, 12.815], [-28.139, 11.369, 11.204], [-33.289, 13.45, 9.16], [-33.078, 13.364, 3.246], [-36.472, 14.735, 7.897], [-41.622, 16.816, 5.854], [-38.569, 15.583, 10.772], [-41.962, 16.954, 15.423], [-36.682, 14.821, 13.811]] - , [[-34.018, 12.382, 18.868], [-33.824, 12.311, 12.944], [-28.47, 10.362, 11.31], [-33.704, 12.267, 9.283], [-33.509, 12.196, 3.359], [-36.939, 13.445, 8.03], [-42.173, 15.35, 6.002], [-39.058, 14.216, 10.917], [-42.488, 15.464, 15.588], [-37.133, 13.515, 13.954]] - , [[-34.364, 11.165, 19.007], [-34.186, 11.108, 13.073], [-28.764, 9.346, 11.416], [-34.077, 11.072, 9.405], [-33.899, 11.015, 3.471], [-37.36, 12.139, 8.162], [-42.672, 13.865, 6.151], [-39.499, 12.834, 11.062], [-42.959, 13.958, 15.753], [-37.537, 12.197, 14.096]] - , [[-34.665, 9.94, 19.145], [-34.505, 9.894, 13.201], [-29.022, 8.322, 11.522], [-34.407, 9.866, 9.528], [-34.247, 9.82, 3.584], [-37.734, 10.82, 8.295], [-43.119, 12.364, 6.3], [-39.89, 11.438, 11.206], [-43.377, 12.438, 15.917], [-37.894, 10.866, 14.239]] - , [[-34.922, 8.707, 19.283], [-34.781, 8.672, 13.329], [-29.243, 7.291, 11.628], [-34.694, 8.65, 9.65], [-34.552, 8.615, 3.696], [-38.062, 9.49, 8.427], [-43.513, 10.849, 6.449], [-40.231, 10.031, 11.351], [-43.741, 10.906, 16.082], [-38.203, 9.525, 14.381]] - , [[-35.135, 7.468, 19.42], [-35.013, 7.442, 13.457], [-29.428, 6.255, 11.733], [-34.937, 7.426, 9.772], [-34.815, 7.4, 3.808], [-38.343, 8.15, 8.559], [-43.852, 9.321, 6.598], [-40.523, 8.613, 11.496], [-44.05, 9.363, 16.247], [-38.465, 8.176, 14.523]] - , [[-35.304, 6.225, 19.558], [-35.201, 6.207, 13.585], [-29.575, 5.215, 11.838], [-35.138, 6.196, 9.893], [-35.035, 6.178, 3.921], [-38.575, 6.802, 8.691], [-44.138, 7.783, 6.747], [-40.763, 7.188, 11.64], [-44.304, 7.812, 16.411], [-38.678, 6.82, 14.664]] - , [[-35.428, 4.979, 19.695], [-35.345, 4.967, 13.713], [-29.685, 4.172, 11.943], [-35.294, 4.96, 10.015], [-35.211, 4.949, 4.033], [-38.76, 5.447, 8.824], [-44.369, 6.236, 6.895], [-40.954, 5.756, 11.784], [-44.503, 6.254, 16.575], [-38.843, 5.459, 14.806]] - , [[-35.508, 3.732, 19.832], [-35.445, 3.725, 13.84], [-29.759, 3.128, 12.048], [-35.407, 3.721, 10.137], [-35.344, 3.715, 4.145], [-38.897, 4.088, 8.955], [-44.546, 4.682, 7.044], [-41.093, 4.319, 11.929], [-44.647, 4.693, 16.739], [-38.96, 4.095, 14.947]] - , [[-35.543, 2.485, 19.968], [-35.501, 2.482, 13.967], [-29.795, 2.083, 12.152], [-35.476, 2.481, 10.258], [-35.434, 2.478, 4.257], [-38.986, 2.726, 9.087], [-44.667, 3.123, 7.193], [-41.182, 2.88, 12.073], [-44.735, 3.128, 16.903], [-39.028, 2.729, 15.089]] - , [[-35.534, 1.241, 20.105], [-35.514, 1.24, 14.094], [-29.794, 1.04, 12.257], [-35.501, 1.24, 10.379], [-35.48, 1.239, 4.369], [-39.027, 1.363, 9.219], [-44.734, 1.562, 7.342], [-41.22, 1.439, 12.217], [-44.768, 1.563, 17.067], [-39.048, 1.364, 15.23]] - , [[-35.482, 0, 20.241], [-35.482, 0, 14.221], [-29.757, 0, 12.361], [-35.482, 0, 10.5], [-35.482, 0, 4.48], [-39.02, 0, 9.351], [-44.746, 0, 7.49], [-41.207, 0, 12.361], [-44.746, 0, 17.231], [-39.02, 0, 15.371]] - , [[-35.385, -1.236, 20.377], [-35.406, -1.236, 14.348], [-29.682, -1.037, 12.464], [-35.419, -1.237, 10.621], [-35.44, -1.238, 4.592], [-38.965, -1.361, 9.482], [-44.702, -1.561, 7.639], [-41.143, -1.437, 12.504], [-44.668, -1.56, 17.394], [-38.944, -1.36, 15.511]] - , [[-35.246, -2.465, 20.512], [-35.288, -2.468, 14.474], [-29.572, -2.068, 12.568], [-35.314, -2.469, 10.742], [-35.356, -2.472, 4.704], [-38.862, -2.718, 9.614], [-44.604, -3.119, 7.788], [-41.029, -2.869, 12.648], [-44.536, -3.114, 17.558], [-38.82, -2.715, 15.652]] - , [[-35.063, -3.685, 20.647], [-35.126, -3.692, 14.6], [-29.425, -3.093, 12.671], [-35.165, -3.696, 10.863], [-35.228, -3.703, 4.815], [-38.712, -4.069, 9.745], [-44.451, -4.672, 7.937], [-40.865, -4.295, 12.792], [-44.349, -4.661, 17.721], [-38.649, -4.062, 15.792]] - , [[-34.837, -4.896, 20.782], [-34.921, -4.908, 14.726], [-29.243, -4.11, 12.774], [-34.973, -4.915, 10.983], [-35.056, -4.927, 4.927], [-38.514, -5.413, 9.876], [-44.243, -6.218, 8.085], [-40.65, -5.713, 12.935], [-44.108, -6.199, 17.884], [-38.43, -5.401, 15.932]] - , [[-34.569, -6.095, 20.917], [-34.673, -6.114, 14.852], [-29.025, -5.118, 12.877], [-34.738, -6.125, 11.103], [-34.842, -6.144, 5.038], [-38.269, -6.748, 10.007], [-43.982, -7.755, 8.234], [-40.386, -7.121, 13.078], [-43.813, -7.725, 18.047], [-38.164, -6.729, 16.072]] - , [[-34.26, -7.282, 21.051], [-34.384, -7.309, 14.978], [-28.772, -6.116, 12.98], [-34.461, -7.325, 11.224], [-34.586, -7.351, 5.15], [-37.977, -8.072, 10.138], [-43.666, -9.281, 8.382], [-40.073, -8.518, 13.222], [-43.465, -9.239, 18.21], [-37.853, -8.046, 16.212]] - , [[-33.909, -8.454, 21.186], [-34.053, -8.49, 15.103], [-28.485, -7.102, 13.082], [-34.142, -8.513, 11.344], [-34.287, -8.549, 5.261], [-37.639, -9.384, 10.269], [-43.297, -10.795, 8.531], [-39.711, -9.901, 13.365], [-43.063, -10.737, 18.373], [-37.495, -9.349, 16.352]] - , [[-33.518, -9.611, 21.319], [-33.682, -9.658, 15.228], [-28.163, -8.076, 13.184], [-33.783, -9.687, 11.463], [-33.946, -9.734, 5.372], [-37.256, -10.683, 10.4], [-42.875, -12.294, 8.68], [-39.301, -11.269, 13.508], [-42.61, -12.218, 18.536], [-37.092, -10.636, 16.491]] - , [[-33.087, -10.751, 21.453], [-33.269, -10.81, 15.353], [-27.808, -9.035, 13.286], [-33.382, -10.846, 11.583], [-33.564, -10.906, 5.483], [-36.827, -11.966, 10.531], [-42.401, -13.777, 8.828], [-38.843, -12.621, 13.65], [-42.106, -13.681, 18.698], [-36.645, -11.907, 16.631]] - , [[-32.617, -11.872, 21.586], [-32.818, -11.945, 15.478], [-27.42, -9.98, 13.387], [-32.941, -11.99, 11.702], [-33.142, -12.063, 5.594], [-36.354, -13.232, 10.661], [-41.875, -15.241, 8.976], [-38.339, -13.954, 13.793], [-41.55, -15.123, 18.86], [-36.153, -13.159, 16.77]] - , [[-32.109, -12.973, 21.719], [-32.327, -13.061, 15.602], [-27, -10.909, 13.488], [-32.461, -13.115, 11.822], [-32.679, -13.203, 5.705], [-35.837, -14.479, 10.792], [-41.298, -16.685, 9.125], [-37.788, -15.267, 13.935], [-40.945, -16.543, 19.022], [-35.619, -14.391, 16.909]] - , [[-31.563, -14.053, 21.852], [-31.798, -14.157, 15.726], [-26.548, -11.82, 13.59], [-31.942, -14.222, 11.941], [-32.177, -14.326, 5.816], [-35.276, -15.706, 10.922], [-40.671, -18.108, 9.273], [-37.192, -16.559, 14.078], [-40.291, -17.939, 19.184], [-35.042, -15.602, 17.047]] - , [[-30.981, -15.11, 21.984], [-31.231, -15.232, 15.851], [-26.065, -12.713, 13.69], [-31.386, -15.308, 12.06], [-31.636, -15.43, 5.926], [-34.674, -16.912, 11.052], [-39.994, -19.506, 9.422], [-36.551, -17.827, 14.22], [-39.589, -19.309, 19.346], [-34.423, -16.789, 17.186]] - , [[-30.362, -16.144, 22.116], [-30.628, -16.285, 15.974], [-25.552, -13.586, 13.791], [-30.792, -16.372, 12.179], [-31.057, -16.513, 6.037], [-34.03, -18.094, 11.182], [-39.269, -20.88, 9.57], [-35.867, -19.071, 14.362], [-38.84, -20.652, 19.508], [-33.764, -17.953, 17.324]] - , [[-29.71, -17.153, 22.248], [-29.989, -17.314, 16.098], [-25.01, -14.439, 13.891], [-30.161, -17.414, 12.297], [-30.44, -17.575, 6.147], [-33.345, -19.252, 11.312], [-38.497, -22.226, 9.718], [-35.14, -20.288, 14.504], [-38.045, -21.965, 19.669], [-33.066, -19.091, 17.462]] - , [[-29.023, -18.136, 22.379], [-29.315, -18.318, 16.221], [-24.438, -15.271, 13.991], [-29.495, -18.431, 12.416], [-29.787, -18.613, 6.258], [-32.621, -20.384, 11.442], [-37.677, -23.543, 9.866], [-34.372, -21.478, 14.646], [-37.205, -23.248, 19.83], [-32.329, -20.201, 17.6]] - , [[-28.304, -19.091, 22.511], [-28.607, -19.296, 16.345], [-23.839, -16.08, 14.091], [-28.795, -19.422, 12.534], [-29.099, -19.627, 6.368], [-31.858, -21.488, 11.572], [-36.813, -24.831, 10.015], [-33.563, -22.638, 14.788], [-36.322, -24.499, 19.991], [-31.554, -21.283, 17.738]] - , [[-27.552, -20.018, 22.641], [-27.867, -20.246, 16.468], [-23.214, -16.866, 14.19], [-28.061, -20.387, 12.652], [-28.375, -20.616, 6.478], [-31.057, -22.564, 11.701], [-35.904, -26.086, 10.163], [-32.714, -23.768, 14.929], [-35.396, -25.716, 20.152], [-30.743, -22.336, 17.875]] - , [[-26.771, -20.916, 22.772], [-27.094, -21.169, 16.59], [-22.562, -17.627, 14.29], [-27.294, -21.325, 12.77], [-27.618, -21.578, 6.588], [-30.219, -23.61, 11.831], [-34.952, -27.308, 10.311], [-31.827, -24.866, 15.071], [-34.429, -26.899, 20.313], [-29.896, -23.357, 18.012]] - , [[-25.96, -21.783, 22.902], [-26.292, -22.061, 16.713], [-21.885, -18.363, 14.389], [-26.496, -22.233, 12.888], [-26.828, -22.511, 6.698], [-29.347, -24.625, 11.96], [-33.958, -28.494, 10.459], [-30.903, -25.931, 15.212], [-33.422, -28.044, 20.473], [-29.015, -24.347, 18.149]] - , [[-25.121, -22.619, 23.032], [-25.459, -22.923, 16.835], [-21.184, -19.074, 14.487], [-25.668, -23.112, 13.005], [-26.006, -23.416, 6.808], [-28.44, -25.607, 12.089], [-32.924, -29.645, 10.607], [-29.943, -26.961, 15.353], [-32.377, -29.152, 20.634], [-28.101, -25.303, 18.286]] - , [[-24.255, -23.422, 23.162], [-24.598, -23.754, 16.957], [-20.459, -19.757, 14.586], [-24.81, -23.959, 13.122], [-25.154, -24.291, 6.918], [-27.499, -26.556, 12.218], [-31.85, -30.757, 10.755], [-28.949, -27.956, 15.494], [-31.295, -30.221, 20.794], [-27.156, -26.224, 18.423]] - , [[-23.363, -24.193, 23.291], [-23.71, -24.552, 17.079], [-19.713, -20.414, 14.684], [-23.925, -24.775, 13.24], [-24.272, -25.134, 7.028], [-26.527, -27.47, 12.347], [-30.739, -31.831, 10.903], [-27.921, -28.913, 15.635], [-30.177, -31.249, 20.954], [-26.18, -27.11, 18.559]] - , [[-22.446, -24.929, 23.42], [-22.796, -25.317, 17.2], [-18.946, -21.042, 14.782], [-23.012, -25.557, 13.357], [-23.361, -25.945, 7.137], [-25.525, -28.348, 12.476], [-29.591, -32.864, 11.051], [-26.862, -29.833, 15.775], [-29.025, -32.236, 21.114], [-25.175, -27.96, 18.695]] - , [[-21.507, -25.631, 23.549], [-21.857, -26.048, 17.322], [-18.159, -21.641, 14.879], [-22.073, -26.306, 13.473], [-22.424, -26.723, 7.247], [-24.493, -29.189, 12.604], [-28.408, -33.855, 11.198], [-25.772, -30.714, 15.916], [-27.841, -33.18, 21.273], [-24.143, -28.772, 18.831]] - , [[-20.545, -26.297, 23.677], [-20.895, -26.744, 17.443], [-17.352, -22.21, 14.977], [-21.111, -27.02, 13.59], [-21.46, -27.467, 7.356], [-23.433, -29.993, 12.733], [-27.191, -34.803, 11.346], [-24.653, -31.554, 16.056], [-26.626, -34.08, 21.433], [-23.084, -29.546, 18.967]] - , [[-19.563, -26.927, 23.805], [-19.91, -27.404, 17.564], [-16.528, -22.749, 15.074], [-20.125, -27.699, 13.706], [-20.471, -28.176, 7.465], [-22.347, -30.758, 12.861], [-25.943, -35.708, 11.494], [-23.506, -32.354, 16.196], [-25.382, -34.935, 21.592], [-22, -30.281, 19.102]] - , [[-18.562, -27.52, 23.932], [-18.905, -28.028, 17.684], [-15.688, -23.258, 15.171], [-19.117, -28.342, 13.823], [-19.459, -28.85, 7.574], [-21.236, -31.483, 12.989], [-24.665, -36.567, 11.641], [-22.334, -33.111, 16.336], [-24.11, -35.745, 21.751], [-20.893, -30.976, 19.238]] - , [[-17.544, -28.076, 24.06], [-17.88, -28.614, 17.805], [-14.832, -23.736, 15.267], [-18.088, -28.947, 13.939], [-18.425, -29.486, 7.683], [-20.101, -32.168, 13.117], [-23.358, -37.38, 11.789], [-21.137, -33.826, 16.476], [-22.813, -36.508, 21.91], [-19.764, -31.63, 19.373]] - , [[-16.508, -28.593, 24.187], [-16.837, -29.163, 17.925], [-13.961, -24.182, 15.364], [-17.041, -29.516, 14.054], [-17.37, -30.086, 7.792], [-18.944, -32.812, 13.245], [-22.024, -38.146, 11.936], [-19.917, -34.497, 16.615], [-21.491, -37.224, 22.069], [-18.615, -32.242, 19.507]] - , [[-15.458, -29.073, 24.314], [-15.778, -29.674, 18.045], [-13.078, -24.596, 15.46], [-15.976, -30.046, 14.17], [-16.295, -30.647, 7.901], [-17.767, -33.414, 13.373], [-20.664, -38.864, 12.084], [-18.676, -35.124, 16.755], [-20.147, -37.891, 22.227], [-17.447, -32.813, 19.642]] - , [[-14.395, -29.513, 24.44], [-14.703, -30.146, 18.164], [-12.182, -24.977, 15.555], [-14.894, -30.537, 14.285], [-15.203, -31.17, 8.01], [-16.57, -33.973, 13.501], [-19.282, -39.534, 12.231], [-17.415, -35.706, 16.894], [-18.782, -38.51, 22.385], [-16.261, -33.341, 19.776]] - , [[-13.319, -29.915, 24.566], [-13.615, -30.579, 18.283], [-11.276, -25.326, 15.651], [-13.797, -30.989, 14.401], [-14.093, -31.653, 8.118], [-15.356, -34.49, 13.628], [-17.877, -40.153, 12.378], [-16.136, -36.242, 17.033], [-17.399, -39.079, 22.543], [-15.06, -33.826, 19.911]] - , [[-12.233, -30.277, 24.692], [-12.514, -30.972, 18.403], [-10.36, -25.641, 15.746], [-12.687, -31.402, 14.516], [-12.968, -32.097, 8.227], [-14.126, -34.962, 13.755], [-16.453, -40.723, 12.525], [-14.841, -36.733, 17.172], [-15.998, -39.598, 22.701], [-13.845, -34.267, 20.044]] - , [[-11.137, -30.599, 24.817], [-11.402, -31.325, 18.521], [-9.435, -25.924, 15.841], [-11.565, -31.774, 14.631], [-11.829, -32.501, 8.335], [-12.881, -35.39, 13.883], [-15.011, -41.241, 12.672], [-13.531, -37.176, 17.311], [-14.583, -40.066, 22.859], [-12.617, -34.664, 20.178]] - , [[-10.034, -30.881, 24.942], [-10.28, -31.638, 18.64], [-8.504, -26.172, 15.935], [-10.432, -32.106, 14.745], [-10.678, -32.864, 8.443], [-11.624, -35.774, 14.01], [-13.552, -41.708, 12.819], [-12.208, -37.573, 17.45], [-13.154, -40.483, 23.016], [-11.378, -35.017, 20.311]] - , [[-8.925, -31.124, 25.067], [-9.15, -31.911, 18.758], [-7.566, -26.387, 16.03], [-9.29, -32.398, 14.86], [-9.516, -33.185, 8.551], [-10.355, -36.113, 14.136], [-12.079, -42.123, 12.966], [-10.874, -37.922, 17.588], [-11.713, -40.849, 23.173], [-10.129, -35.325, 20.445]] - , [[-7.81, -31.326, 25.191], [-8.014, -32.143, 18.876], [-6.624, -26.569, 16.124], [-8.14, -32.648, 14.974], [-8.344, -33.466, 8.659], [-9.077, -36.406, 14.263], [-10.593, -42.486, 13.113], [-9.53, -38.223, 17.726], [-10.263, -41.163, 23.33], [-8.873, -35.588, 20.578]] - , [[-6.693, -31.488, 25.315], [-6.873, -32.334, 18.994], [-5.679, -26.716, 16.218], [-6.984, -32.858, 15.088], [-7.164, -33.705, 8.767], [-7.791, -36.654, 14.39], [-9.096, -42.795, 13.26], [-8.178, -38.476, 17.864], [-8.805, -41.425, 23.487], [-7.611, -35.807, 20.71]] - , [[-5.574, -31.609, 25.439], [-5.728, -32.485, 19.112], [-4.731, -26.83, 16.311], [-5.823, -33.026, 15.202], [-5.978, -33.902, 8.875], [-6.499, -36.856, 14.516], [-7.591, -43.052, 13.406], [-6.821, -38.681, 18.002], [-7.341, -41.635, 23.643], [-6.344, -35.98, 20.843]] - , [[-4.454, -31.691, 25.562], [-4.581, -32.595, 19.229], [-3.782, -26.91, 16.404], [-4.659, -33.153, 15.315], [-4.786, -34.057, 8.982], [-5.202, -37.012, 14.642], [-6.079, -43.255, 13.553], [-5.458, -38.838, 18.14], [-5.874, -41.793, 23.8], [-5.075, -36.108, 20.975]] - , [[-3.335, -31.732, 25.685], [-3.433, -32.663, 19.346], [-2.833, -26.956, 16.497], [-3.494, -33.239, 15.429], [-3.591, -34.17, 9.09], [-3.902, -37.122, 14.768], [-4.562, -43.405, 13.7], [-4.093, -38.946, 18.277], [-4.404, -41.899, 23.956], [-3.804, -36.191, 21.107]] - , [[-2.219, -31.734, 25.807], [-2.286, -32.691, 19.463], [-1.886, -26.968, 16.59], [-2.327, -33.283, 15.542], [-2.394, -34.24, 9.197], [-2.6, -37.186, 14.894], [-3.042, -43.501, 13.846], [-2.728, -39.006, 18.415], [-2.934, -41.952, 24.112], [-2.533, -36.229, 21.238]] - , [[-1.107, -31.696, 25.93], [-1.141, -32.679, 19.579], [-0.941, -26.947, 16.682], [-1.162, -33.286, 15.655], [-1.197, -34.268, 9.304], [-1.299, -37.204, 15.02], [-1.521, -43.543, 13.992], [-1.363, -39.018, 18.552], [-1.465, -41.954, 24.267], [-1.265, -36.221, 21.37]] - , [[0, -31.619, 26.051], [0, -32.626, 19.696], [0, -26.892, 16.774], [0, -33.248, 15.767], [0, -34.255, 9.412], [0, -37.176, 15.145], [0, -43.532, 14.139], [0, -38.982, 18.689], [0, -41.903, 24.423], [0, -36.169, 21.501]] - , [[1.1, -31.503, 26.173], [1.136, -32.533, 19.811], [0.936, -26.805, 16.866], [1.158, -33.169, 15.88], [1.194, -34.199, 9.518], [1.296, -37.103, 15.271], [1.518, -43.467, 14.285], [1.358, -38.897, 18.826], [1.46, -41.801, 24.578], [1.26, -36.073, 21.632]] - , [[2.192, -31.348, 26.294], [2.266, -32.4, 19.927], [1.866, -26.684, 16.957], [2.311, -33.05, 15.992], [2.385, -34.101, 9.625], [2.586, -36.984, 15.396], [3.031, -43.349, 14.431], [2.711, -38.765, 18.962], [2.912, -41.648, 24.733], [2.513, -35.932, 21.763]] - , [[3.275, -31.155, 26.415], [3.387, -32.227, 20.043], [2.789, -26.531, 17.048], [3.457, -32.89, 16.104], [3.57, -33.962, 9.732], [3.87, -36.819, 15.521], [4.538, -43.178, 14.577], [4.056, -38.586, 19.098], [4.356, -41.444, 24.887], [3.757, -35.748, 21.893]] - , [[4.346, -30.925, 26.535], [4.5, -32.016, 20.158], [3.703, -26.346, 17.139], [4.594, -32.69, 16.216], [4.748, -33.781, 9.839], [5.145, -36.61, 15.646], [6.037, -42.954, 14.723], [5.391, -38.359, 19.235], [5.789, -41.189, 25.042], [4.992, -35.519, 22.023]] - , [[5.406, -30.657, 26.655], [5.601, -31.765, 20.273], [4.607, -26.13, 17.23], [5.722, -32.45, 16.328], [5.917, -33.559, 9.945], [6.411, -36.357, 15.77], [7.525, -42.677, 14.868], [6.716, -38.086, 19.371], [7.209, -40.884, 25.196], [6.215, -35.248, 22.153]] - , [[6.452, -30.353, 26.775], [6.691, -31.477, 20.387], [5.501, -25.882, 17.32], [6.838, -32.172, 16.439], [7.077, -33.296, 10.051], [7.665, -36.059, 15.895], [9.002, -42.349, 15.014], [8.028, -37.767, 19.506], [8.615, -40.53, 25.35], [7.426, -34.935, 22.283]] - , [[7.483, -30.012, 26.894], [7.767, -31.151, 20.501], [6.384, -25.603, 17.41], [7.942, -31.854, 16.55], [8.226, -32.993, 10.158], [8.905, -35.718, 16.019], [10.464, -41.969, 15.16], [9.325, -37.402, 19.642], [10.005, -40.127, 25.503], [8.622, -34.579, 22.412]] - , [[8.498, -29.637, 27.013], [8.828, -30.787, 20.615], [7.253, -25.294, 17.5], [9.032, -31.499, 16.661], [9.362, -32.65, 10.264], [10.132, -35.333, 16.143], [11.911, -41.538, 15.305], [10.607, -36.992, 19.777], [11.377, -39.676, 25.657], [9.802, -34.183, 22.541]] - , [[9.496, -29.226, 27.132], [9.874, -30.388, 20.729], [8.109, -24.955, 17.589], [10.107, -31.106, 16.772], [10.484, -32.267, 10.369], [11.342, -34.907, 16.267], [13.34, -41.057, 15.45], [11.872, -36.538, 19.912], [12.73, -39.177, 25.81], [10.964, -33.745, 22.67]] - , [[10.476, -28.782, 27.25], [10.902, -29.952, 20.843], [8.949, -24.588, 17.678], [11.165, -30.676, 16.883], [11.591, -31.846, 10.475], [12.535, -34.438, 16.391], [14.75, -40.526, 15.596], [13.118, -36.04, 20.047], [14.061, -38.633, 25.963], [12.109, -33.268, 22.798]] - , [[11.436, -28.305, 27.368], [11.911, -29.482, 20.956], [9.774, -24.192, 17.767], [12.205, -30.21, 16.993], [12.681, -31.387, 10.581], [13.708, -33.929, 16.515], [16.14, -39.947, 15.741], [14.343, -35.5, 20.182], [15.37, -38.042, 26.116], [13.233, -32.752, 22.927]] - , [[12.375, -27.795, 27.485], [12.902, -28.977, 21.069], [10.582, -23.768, 17.855], [13.227, -29.708, 17.103], [13.753, -30.89, 10.686], [14.861, -33.379, 16.638], [17.506, -39.319, 15.886], [15.546, -34.918, 20.316], [16.655, -37.407, 26.268], [14.335, -32.197, 23.055]] - , [[13.293, -27.254, 27.602], [13.871, -28.439, 21.181], [11.372, -23.316, 17.944], [14.228, -29.171, 17.213], [14.806, -30.356, 10.792], [15.993, -32.79, 16.761], [18.848, -38.645, 16.031], [16.726, -34.294, 20.451], [17.913, -36.728, 26.42], [15.415, -31.605, 23.182]] - , [[14.188, -26.683, 27.719], [14.818, -27.868, 21.294], [12.144, -22.839, 18.031], [15.207, -28.601, 17.322], [15.838, -29.786, 10.897], [17.101, -32.162, 16.884], [20.165, -37.924, 16.175], [17.882, -33.63, 20.585], [19.145, -36.006, 26.572], [16.471, -30.977, 23.31]] - , [[15.059, -26.082, 27.835], [15.742, -27.266, 21.406], [12.896, -22.336, 18.119], [16.164, -27.997, 17.432], [16.848, -29.181, 11.002], [18.184, -31.496, 17.007], [21.453, -37.158, 16.32], [19.011, -32.927, 20.719], [20.348, -35.243, 26.724], [17.501, -30.313, 23.437]] - , [[15.905, -25.453, 27.951], [16.642, -26.633, 21.517], [13.627, -21.808, 18.206], [17.097, -27.362, 17.541], [17.835, -28.541, 11.107], [19.242, -30.794, 17.13], [22.713, -36.348, 16.465], [20.112, -32.186, 20.852], [21.52, -34.439, 26.875], [18.505, -29.614, 23.564]] - , [[16.725, -24.796, 28.067], [17.517, -25.969, 21.629], [14.337, -21.256, 18.293], [18.006, -26.695, 17.65], [18.797, -27.868, 11.212], [20.273, -30.056, 17.252], [23.942, -35.495, 16.609], [21.185, -31.408, 20.986], [22.661, -33.596, 27.026], [19.482, -28.883, 23.69]] - , [[17.519, -24.112, 28.182], [18.365, -25.277, 21.74], [15.025, -20.681, 18.38], [18.888, -25.997, 17.758], [19.735, -27.162, 11.316], [21.276, -29.283, 17.375], [25.138, -34.6, 16.753], [22.228, -30.594, 21.119], [23.769, -32.715, 27.177], [20.429, -28.118, 23.817]] - , [[18.285, -23.404, 28.297], [19.187, -24.558, 21.851], [15.691, -20.083, 18.466], [19.744, -25.271, 17.867], [20.645, -26.425, 11.421], [22.249, -28.477, 17.497], [26.302, -33.665, 16.897], [23.24, -29.745, 21.252], [24.843, -31.797, 27.327], [21.347, -27.323, 23.943]] - , [[19.023, -22.67, 28.411], [19.98, -23.811, 21.961], [16.333, -19.464, 18.552], [20.571, -24.516, 17.975], [21.529, -25.657, 11.525], [23.191, -27.638, 17.618], [27.43, -32.69, 17.042], [24.219, -28.863, 21.384], [25.881, -30.844, 27.478], [22.234, -26.497, 24.068]] - , [[19.731, -21.914, 28.525], [20.744, -23.039, 22.072], [16.95, -18.825, 18.638], [21.37, -23.734, 18.083], [22.383, -24.859, 11.629], [24.102, -26.768, 17.74], [28.522, -31.677, 17.185], [25.164, -27.948, 21.517], [26.883, -29.857, 27.628], [23.089, -25.643, 24.194]] - , [[20.41, -21.136, 28.639], [21.479, -22.242, 22.182], [17.543, -18.166, 18.723], [22.139, -22.926, 18.191], [23.208, -24.033, 11.733], [24.98, -25.868, 17.862], [29.576, -30.627, 17.329], [26.075, -27.002, 21.649], [27.847, -28.837, 27.777], [23.911, -24.761, 24.319]] - , [[21.059, -20.336, 28.752], [22.183, -21.422, 22.291], [18.11, -17.489, 18.808], [22.878, -22.093, 18.298], [24.002, -23.179, 11.837], [25.824, -24.938, 17.983], [30.592, -29.542, 17.473], [26.951, -26.026, 21.781], [28.773, -27.786, 27.927], [24.7, -23.853, 24.444]] - , [[21.676, -19.517, 28.865], [22.856, -20.58, 22.4], [18.652, -16.794, 18.893], [23.585, -21.236, 18.405], [24.765, -22.299, 11.941], [26.634, -23.982, 18.104], [31.568, -28.424, 17.616], [27.789, -25.022, 21.913], [29.658, -26.705, 28.076], [25.454, -22.919, 24.568]] - , [[22.261, -18.679, 28.977], [23.497, -19.716, 22.51], [19.166, -16.082, 18.977], [24.26, -20.357, 18.512], [25.495, -21.393, 12.045], [27.408, -22.998, 18.225], [32.502, -27.272, 17.76], [28.59, -23.99, 22.045], [30.503, -25.595, 28.225], [26.173, -21.962, 24.693]] - , [[22.815, -17.825, 29.089], [24.105, -18.833, 22.618], [19.654, -15.355, 19.061], [24.902, -19.456, 18.619], [26.193, -20.464, 12.148], [28.146, -21.99, 18.346], [33.394, -26.091, 17.903], [29.353, -22.933, 22.176], [31.307, -24.459, 28.374], [26.856, -20.982, 24.817]] - , [[23.335, -16.954, 29.201], [24.68, -17.931, 22.727], [20.114, -14.614, 19.145], [25.511, -18.535, 18.725], [26.856, -19.512, 12.251], [28.846, -20.958, 18.466], [34.243, -24.879, 18.046], [30.077, -21.852, 22.307], [32.067, -23.298, 28.522], [27.502, -19.981, 24.94]] - , [[23.822, -16.068, 29.312], [25.221, -17.012, 22.835], [20.546, -13.858, 19.229], [26.085, -17.595, 18.832], [27.484, -18.538, 12.354], [29.509, -19.904, 18.586], [35.048, -23.64, 18.189], [30.76, -20.748, 22.438], [32.785, -22.114, 28.67], [28.11, -18.96, 25.064]] - , [[24.276, -15.169, 29.423], [25.728, -16.076, 22.943], [20.95, -13.091, 19.312], [26.625, -16.637, 18.938], [28.077, -17.544, 12.457], [30.132, -18.829, 18.706], [35.808, -22.375, 18.332], [31.403, -19.623, 22.568], [33.458, -20.907, 28.818], [28.68, -17.922, 25.187]] - , [[24.695, -14.258, 29.533], [26.199, -15.126, 23.05], [21.325, -12.312, 19.395], [27.129, -15.663, 19.043], [28.634, -16.532, 12.56], [30.717, -17.734, 18.826], [36.521, -21.086, 18.475], [32.004, -18.478, 22.699], [34.087, -19.68, 28.965], [29.212, -16.866, 25.309]] - , [[25.08, -13.335, 29.643], [26.636, -14.163, 23.157], [21.671, -11.522, 19.477], [27.598, -14.674, 19.149], [29.154, -15.501, 12.663], [31.261, -16.622, 18.946], [37.188, -19.773, 18.618], [32.564, -17.314, 22.829], [34.671, -18.435, 29.112], [29.705, -15.795, 25.432]] - , [[25.431, -12.404, 29.753], [27.037, -13.187, 23.264], [21.987, -10.724, 19.559], [28.03, -13.671, 19.254], [29.637, -14.455, 12.765], [31.765, -15.493, 19.065], [37.808, -18.44, 18.76], [33.08, -16.134, 22.959], [35.209, -17.172, 29.259], [30.159, -14.709, 25.554]] - , [[25.747, -11.463, 29.862], [27.403, -12.2, 23.371], [22.274, -9.917, 19.641], [28.426, -12.656, 19.359], [30.082, -13.393, 12.868], [32.228, -14.349, 19.184], [38.379, -17.088, 18.902], [33.554, -14.939, 23.088], [35.7, -15.895, 29.405], [30.572, -13.612, 25.676]] - , [[26.028, -10.516, 29.971], [27.732, -11.204, 23.477], [22.532, -9.103, 19.723], [28.785, -11.63, 19.464], [30.488, -12.318, 12.97], [32.649, -13.191, 19.303], [38.902, -15.717, 19.044], [33.984, -13.731, 23.218], [36.145, -14.604, 29.552], [30.945, -12.503, 25.797]] - , [[26.274, -9.563, 30.079], [28.024, -10.2, 23.583], [22.76, -8.284, 19.804], [29.106, -10.594, 19.568], [30.857, -11.231, 13.072], [33.029, -12.021, 19.422], [39.375, -14.331, 19.186], [34.371, -12.51, 23.347], [36.543, -13.301, 29.697], [31.278, -11.384, 25.918]] - , [[26.485, -8.605, 30.187], [28.28, -9.189, 23.688], [22.957, -7.459, 19.885], [29.39, -9.549, 19.672], [31.186, -10.133, 13.174], [33.366, -10.841, 19.541], [39.799, -12.931, 19.328], [34.713, -11.279, 23.476], [36.893, -11.987, 29.843], [31.57, -10.258, 26.039]] - , [[26.661, -7.645, 30.295], [28.5, -8.172, 23.794], [23.125, -6.631, 19.965], [29.637, -8.498, 19.776], [31.476, -9.026, 13.275], [33.661, -9.652, 19.659], [40.172, -11.519, 19.47], [35.011, -10.039, 23.605], [37.196, -10.666, 29.988], [31.822, -9.125, 26.16]] - , [[26.801, -6.682, 30.402], [28.682, -7.151, 23.899], [23.263, -5.8, 20.046], [29.845, -7.441, 19.88], [31.726, -7.91, 13.377], [33.913, -8.455, 19.777], [40.495, -10.097, 19.611], [35.265, -8.792, 23.733], [37.452, -9.338, 30.133], [32.032, -7.986, 26.28]] - , [[26.907, -5.719, 30.508], [28.828, -6.128, 24.003], [23.371, -4.968, 20.125], [30.016, -6.38, 19.983], [31.937, -6.788, 13.478], [34.122, -7.253, 19.895], [40.767, -8.665, 19.753], [35.473, -7.54, 23.861], [37.659, -8.005, 30.278], [32.201, -6.845, 26.4]] - , [[26.978, -4.757, 30.614], [28.937, -5.102, 24.108], [23.448, -4.135, 20.205], [30.148, -5.316, 20.086], [32.107, -5.661, 13.579], [34.289, -6.046, 20.013], [40.989, -7.227, 19.894], [35.637, -6.284, 23.989], [37.819, -6.668, 30.422], [32.33, -5.701, 26.52]] - , [[27.015, -3.797, 30.72], [29.01, -4.077, 24.212], [23.496, -3.302, 20.284], [30.243, -4.25, 20.189], [32.238, -4.531, 13.68], [34.412, -4.836, 20.13], [41.159, -5.784, 20.035], [35.756, -5.025, 24.117], [37.931, -5.331, 30.566], [32.417, -4.556, 26.639]] - , [[27.017, -2.84, 30.826], [29.046, -3.053, 24.315], [23.515, -2.472, 20.363], [30.3, -3.185, 20.292], [32.329, -3.398, 13.781], [34.493, -3.625, 20.248], [41.278, -4.338, 20.176], [35.83, -3.766, 24.244], [37.995, -3.993, 30.71], [32.464, -3.412, 26.758]] - , [[26.984, -1.887, 30.931], [29.045, -2.031, 24.419], [23.504, -1.644, 20.442], [30.319, -2.12, 20.394], [32.379, -2.264, 13.882], [34.531, -2.415, 20.365], [41.346, -2.891, 20.317], [35.86, -2.508, 24.371], [38.011, -2.658, 30.853], [32.47, -2.271, 26.877]] - , [[26.918, -0.94, 31.035], [29.008, -1.013, 24.522], [23.463, -0.819, 20.52], [30.3, -1.058, 20.496], [32.39, -1.131, 13.982], [34.525, -1.206, 20.481], [41.362, -1.444, 20.457], [35.845, -1.252, 24.498], [37.98, -1.326, 30.997], [32.435, -1.133, 26.995]] - , [[26.819, 0, 31.139], [28.936, 0, 24.624], [23.394, 0, 20.598], [30.244, 0, 20.598], [32.361, 0, 14.083], [34.478, 0, 20.598], [41.328, 0, 20.598], [35.786, 0, 24.624], [37.903, 0, 31.139], [32.361, 0, 27.113]] - , [[26.686, 0.932, 31.243], [28.827, 1.007, 24.727], [23.295, 0.813, 20.675], [30.151, 1.053, 20.699], [32.292, 1.128, 14.183], [34.387, 1.201, 20.714], [41.243, 1.44, 20.738], [35.682, 1.246, 24.751], [37.778, 1.319, 31.282], [32.246, 1.126, 27.23]] - , [[26.521, 1.855, 31.346], [28.684, 2.006, 24.829], [23.169, 1.62, 20.753], [30.02, 2.099, 20.801], [32.183, 2.25, 14.283], [34.255, 2.395, 20.83], [41.107, 2.874, 20.878], [35.535, 2.485, 24.877], [37.607, 2.63, 31.424], [32.092, 2.244, 27.348]] - , [[26.323, 2.767, 31.449], [28.505, 2.996, 24.93], [23.014, 2.419, 20.83], [29.854, 3.138, 20.902], [32.035, 3.367, 14.383], [34.081, 3.582, 20.946], [40.921, 4.301, 21.018], [35.345, 3.715, 25.002], [37.391, 3.93, 31.566], [31.899, 3.353, 27.465]] - , [[26.094, 3.667, 31.551], [28.292, 3.976, 25.032], [22.831, 3.209, 20.906], [29.651, 4.167, 21.002], [31.849, 4.476, 14.483], [33.865, 4.759, 21.062], [40.685, 5.718, 21.158], [35.112, 4.935, 25.128], [37.129, 5.218, 31.707], [31.667, 4.451, 27.581]] - , [[25.834, 4.555, 31.653], [28.046, 4.945, 25.133], [22.622, 3.989, 20.982], [29.412, 5.186, 21.103], [31.623, 5.576, 14.582], [33.609, 5.926, 21.177], [40.399, 7.124, 21.297], [34.836, 6.143, 25.253], [36.822, 6.493, 31.848], [31.398, 5.536, 27.698]] - , [[25.544, 5.43, 31.755], [27.765, 5.902, 25.233], [22.385, 4.758, 21.058], [29.138, 6.194, 21.203], [31.36, 6.666, 14.681], [33.312, 7.081, 21.292], [40.065, 8.516, 21.437], [34.519, 7.337, 25.378], [36.471, 7.752, 31.989], [31.091, 6.609, 27.814]] - , [[25.224, 6.289, 31.856], [27.452, 6.845, 25.334], [22.122, 5.516, 21.134], [28.83, 7.188, 21.303], [31.058, 7.744, 14.78], [32.975, 8.222, 21.407], [39.683, 9.894, 21.576], [34.16, 8.517, 25.503], [36.077, 8.995, 32.129], [30.747, 7.666, 27.929]] - , [[24.874, 7.133, 31.956], [27.107, 7.773, 25.434], [21.834, 6.261, 21.209], [28.487, 8.169, 21.402], [30.72, 8.809, 14.879], [32.599, 9.348, 21.522], [39.252, 11.255, 21.715], [33.76, 9.681, 25.627], [35.64, 10.219, 32.269], [30.366, 8.707, 28.045]] - , [[24.497, 7.959, 32.057], [26.73, 8.685, 25.533], [21.52, 6.992, 21.284], [28.111, 9.134, 21.502], [30.344, 9.859, 14.978], [32.184, 10.457, 21.636], [38.775, 12.599, 21.854], [33.321, 10.827, 25.751], [35.161, 11.424, 32.409], [29.95, 9.731, 28.16]] - , [[24.091, 8.769, 32.156], [26.323, 9.581, 25.633], [21.182, 7.71, 21.358], [27.702, 10.083, 21.601], [29.933, 10.895, 15.077], [31.731, 11.549, 21.75], [38.251, 13.922, 21.993], [32.842, 11.954, 25.875], [34.641, 12.608, 32.548], [29.5, 10.737, 28.274]] - , [[23.659, 9.559, 32.256], [25.885, 10.458, 25.731], [20.819, 8.412, 21.432], [27.26, 11.014, 21.699], [29.486, 11.913, 15.175], [31.241, 12.622, 21.864], [37.682, 15.224, 22.131], [32.326, 13.06, 25.998], [34.081, 13.769, 32.687], [29.015, 11.723, 28.388]] - , [[23.201, 10.33, 32.354], [25.418, 11.317, 25.83], [20.434, 9.098, 21.506], [26.787, 11.927, 21.798], [29.004, 12.913, 15.273], [30.714, 13.675, 21.978], [37.068, 16.504, 22.269], [31.771, 14.145, 26.122], [33.481, 14.907, 32.826], [28.498, 12.688, 28.502]] - , [[22.718, 11.08, 32.453], [24.922, 12.155, 25.928], [20.026, 9.767, 21.58], [26.284, 12.82, 21.896], [28.488, 13.895, 15.371], [30.152, 14.706, 22.091], [36.41, 17.758, 22.408], [31.18, 15.208, 26.244], [32.844, 16.019, 32.964], [27.948, 13.631, 28.616]] - , [[22.21, 11.809, 32.551], [24.398, 12.973, 26.026], [19.595, 10.419, 21.653], [25.751, 13.692, 21.994], [27.939, 14.855, 15.469], [29.555, 15.714, 22.205], [35.71, 18.987, 22.545], [30.553, 16.245, 26.367], [32.169, 17.105, 33.102], [27.366, 14.551, 28.729]] - , [[21.679, 12.516, 32.648], [23.848, 13.768, 26.124], [19.144, 11.053, 21.726], [25.188, 14.542, 22.091], [27.357, 15.795, 15.567], [28.924, 16.699, 22.317], [34.968, 20.189, 22.683], [29.892, 17.258, 26.49], [31.458, 18.162, 33.24], [26.755, 15.447, 28.842]] - , [[21.125, 13.2, 32.745], [23.271, 14.541, 26.221], [18.672, 11.668, 21.798], [24.597, 15.37, 22.189], [26.744, 16.711, 15.664], [28.26, 17.659, 22.43], [34.185, 21.361, 22.821], [29.196, 18.244, 26.612], [30.712, 19.191, 33.377], [26.113, 16.317, 28.954]] - , [[20.55, 13.861, 32.842], [22.67, 15.291, 26.318], [18.181, 12.263, 21.87], [23.98, 16.174, 22.286], [26.099, 17.604, 15.762], [27.564, 18.592, 22.543], [33.362, 22.503, 22.958], [28.468, 19.202, 26.733], [29.933, 20.19, 33.514], [25.444, 17.162, 29.067]] - , [[19.954, 14.498, 32.938], [22.044, 16.016, 26.414], [17.67, 12.838, 21.942], [23.335, 16.954, 22.382], [25.425, 18.472, 15.859], [26.837, 19.498, 22.655], [32.502, 23.614, 23.095], [27.709, 20.132, 26.855], [29.121, 21.157, 33.651], [24.747, 17.98, 29.178]] - , [[19.339, 15.109, 33.034], [21.395, 16.716, 26.51], [17.142, 13.393, 22.013], [22.666, 17.708, 22.479], [24.722, 19.315, 15.956], [26.08, 20.376, 22.767], [31.604, 24.692, 23.232], [26.919, 21.031, 26.976], [28.277, 22.093, 33.787], [24.024, 18.769, 29.29]] - , [[18.705, 15.696, 33.129], [20.724, 17.389, 26.606], [16.596, 13.926, 22.084], [21.972, 18.436, 22.575], [23.99, 20.13, 16.053], [25.294, 21.224, 22.878], [30.67, 25.735, 23.369], [26.1, 21.9, 27.097], [27.404, 22.994, 33.923], [23.275, 19.53, 29.401]] - , [[18.054, 16.256, 33.223], [20.032, 18.037, 26.702], [16.034, 14.437, 22.155], [21.254, 19.137, 22.671], [23.232, 20.918, 16.149], [24.481, 22.043, 22.99], [29.701, 26.743, 23.506], [25.252, 22.737, 27.218], [26.501, 23.862, 34.058], [22.503, 20.262, 29.512]] - , [[17.386, 16.79, 33.318], [19.32, 18.657, 26.797], [15.456, 14.925, 22.225], [20.515, 19.811, 22.767], [22.448, 21.678, 16.245], [23.641, 22.83, 23.101], [28.7, 27.715, 23.642], [24.378, 23.542, 27.338], [25.571, 24.694, 34.193], [21.708, 20.963, 29.622]] - , [[16.703, 17.296, 33.412], [18.588, 19.249, 26.891], [14.863, 15.391, 22.295], [19.754, 20.455, 22.862], [21.639, 22.408, 16.342], [22.776, 23.585, 23.212], [27.666, 28.649, 23.778], [23.479, 24.313, 27.458], [24.615, 25.49, 34.328], [20.891, 21.633, 29.732]] - , [[16.005, 17.776, 33.505], [17.839, 19.812, 26.986], [14.257, 15.834, 22.365], [18.972, 21.071, 22.957], [20.806, 23.108, 16.438], [21.887, 24.308, 23.322], [26.602, 29.544, 23.914], [22.554, 25.049, 27.578], [23.635, 26.249, 34.462], [20.053, 22.271, 29.842]] - , [[15.295, 18.228, 33.598], [17.073, 20.347, 27.08], [13.638, 16.253, 22.434], [18.172, 21.657, 23.051], [19.951, 23.776, 16.533], [20.975, 24.997, 23.433], [25.509, 30.4, 24.05], [21.607, 25.751, 27.697], [22.631, 26.971, 34.596], [19.196, 22.877, 29.951]] - , [[14.572, 18.651, 33.69], [16.291, 20.852, 27.173], [13.007, 16.648, 22.503], [17.354, 22.212, 23.146], [19.074, 24.413, 16.629], [20.041, 25.651, 23.543], [24.388, 31.215, 24.186], [20.639, 26.416, 27.816], [21.606, 27.654, 34.73], [18.321, 23.45, 30.06]] - , [[13.838, 19.046, 33.782], [15.495, 21.327, 27.267], [12.365, 17.019, 22.572], [16.519, 22.737, 23.24], [18.177, 25.018, 16.724], [19.087, 26.271, 23.653], [23.241, 31.989, 24.321], [19.65, 27.045, 27.935], [20.56, 28.298, 34.863], [17.43, 23.99, 30.168]] - , [[13.094, 19.413, 33.874], [14.685, 21.772, 27.36], [11.713, 17.365, 22.64], [15.669, 23.23, 23.334], [17.26, 25.59, 16.82], [18.114, 26.855, 23.762], [22.07, 32.72, 24.456], [18.642, 27.637, 28.053], [19.495, 28.903, 34.996], [16.523, 24.496, 30.276]] - , [[12.341, 19.75, 33.965], [13.863, 22.186, 27.452], [11.052, 17.686, 22.708], [14.804, 23.692, 23.427], [16.326, 26.128, 16.915], [17.123, 27.403, 23.872], [20.876, 33.409, 24.591], [17.616, 28.192, 28.171], [18.413, 29.467, 35.128], [15.601, 24.967, 30.384]] - , [[11.581, 20.059, 34.055], [13.03, 22.569, 27.544], [10.382, 17.982, 22.775], [13.926, 24.121, 23.52], [15.376, 26.631, 17.009], [16.116, 27.915, 23.981], [19.66, 34.053, 24.726], [16.574, 28.708, 28.289], [17.315, 29.991, 35.261], [14.667, 25.404, 30.492]] - , [[10.814, 20.338, 34.145], [12.187, 22.921, 27.636], [9.705, 18.253, 22.842], [13.036, 24.517, 23.613], [14.409, 27.1, 17.104], [15.095, 28.389, 24.09], [18.425, 34.653, 24.86], [15.518, 29.185, 28.407], [16.203, 30.474, 35.392], [13.721, 25.806, 30.599]] - , [[10.042, 20.588, 34.235], [11.336, 23.241, 27.727], [9.022, 18.499, 22.909], [12.135, 24.881, 23.706], [13.429, 27.534, 17.198], [14.059, 28.825, 24.198], [17.172, 35.208, 24.995], [14.448, 29.624, 28.524], [15.078, 30.915, 35.524], [12.765, 26.172, 30.705]] - , [[9.265, 20.809, 34.324], [10.476, 23.53, 27.819], [8.334, 18.719, 22.976], [11.225, 25.211, 23.798], [12.436, 27.932, 17.293], [13.011, 29.224, 24.306], [15.902, 35.717, 25.129], [13.367, 30.023, 28.641], [13.942, 31.315, 35.654], [11.8, 26.503, 30.812]] - , [[8.485, 21, 34.412], [9.61, 23.787, 27.909], [7.641, 18.913, 23.042], [10.306, 25.508, 23.89], [11.432, 28.295, 17.387], [11.953, 29.585, 24.414], [14.618, 36.18, 25.262], [12.275, 30.382, 28.757], [12.796, 31.672, 35.785], [10.827, 26.799, 30.917]] - , [[7.703, 21.163, 34.501], [8.739, 24.011, 28], [6.945, 19.082, 23.107], [9.38, 25.772, 23.982], [10.417, 28.621, 17.481], [10.885, 29.907, 24.522], [13.32, 36.597, 25.396], [11.174, 30.702, 28.874], [11.643, 31.988, 35.915], [9.848, 27.058, 31.023]] - , [[6.919, 21.296, 34.588], [7.864, 24.204, 28.089], [6.246, 19.225, 23.173], [8.448, 26.002, 24.073], [9.393, 28.91, 17.574], [9.809, 30.19, 24.629], [12.011, 36.967, 25.529], [10.066, 30.981, 28.99], [10.482, 32.261, 36.045], [8.864, 27.282, 31.128]] - , [[6.136, 21.4, 34.675], [6.986, 24.365, 28.179], [5.546, 19.342, 23.238], [7.512, 26.197, 24.164], [8.362, 29.163, 17.668], [8.727, 30.434, 24.736], [10.693, 37.29, 25.663], [8.952, 31.22, 29.105], [9.317, 32.492, 36.174], [7.877, 27.469, 31.233]] - , [[5.354, 21.475, 34.762], [6.107, 24.494, 28.268], [4.845, 19.434, 23.302], [6.572, 26.359, 24.255], [7.325, 29.378, 17.761], [7.639, 30.64, 24.843], [9.366, 37.565, 25.796], [7.834, 31.419, 29.221], [8.148, 32.68, 36.303], [6.887, 27.621, 31.337]] - , [[4.574, 21.521, 34.848], [5.227, 24.59, 28.357], [4.145, 19.5, 23.367], [5.63, 26.487, 24.345], [6.283, 29.557, 17.854], [6.548, 30.806, 24.95], [8.033, 37.793, 25.928], [6.712, 31.578, 29.335], [6.977, 32.827, 36.432], [5.896, 27.736, 31.441]] - , [[3.798, 21.539, 34.934], [4.347, 24.655, 28.445], [3.446, 19.541, 23.43], [4.687, 26.582, 24.435], [5.237, 29.698, 17.947], [5.454, 30.933, 25.056], [6.696, 37.973, 26.061], [5.589, 31.696, 29.45], [5.807, 32.93, 36.56], [4.905, 27.816, 31.545]] - , [[3.026, 21.529, 35.019], [3.47, 24.689, 28.533], [2.749, 19.557, 23.494], [3.744, 26.642, 24.525], [4.188, 29.803, 18.039], [4.36, 31.021, 25.162], [5.355, 38.106, 26.193], [4.466, 31.774, 29.564], [4.637, 32.992, 36.687], [3.916, 27.861, 31.648]] - , [[2.259, 21.491, 35.104], [2.595, 24.691, 28.621], [2.055, 19.548, 23.557], [2.803, 26.669, 24.614], [3.139, 29.87, 18.131], [3.266, 31.07, 25.268], [4.014, 38.191, 26.325], [3.344, 31.812, 29.678], [3.47, 33.012, 36.815], [2.929, 27.87, 31.751]] - , [[1.498, 21.425, 35.188], [1.725, 24.662, 28.708], [1.365, 19.515, 23.62], [1.864, 26.663, 24.704], [2.091, 29.9, 18.224], [2.173, 31.08, 25.373], [2.673, 38.228, 26.457], [2.224, 31.81, 29.792], [2.307, 32.991, 36.942], [1.947, 27.843, 31.853]] - , [[0.745, 21.332, 35.272], [0.859, 24.602, 28.795], [0.679, 19.456, 23.682], [0.93, 26.623, 24.792], [1.044, 29.893, 18.316], [1.084, 31.052, 25.478], [1.335, 38.218, 26.589], [1.109, 31.769, 29.905], [1.15, 32.928, 37.068], [0.97, 27.782, 31.955]] - , [[0, 21.213, 35.355], [0, 24.512, 28.882], [0, 19.374, 23.744], [0, 26.55, 24.881], [0, 29.849, 18.407], [0, 30.985, 25.583], [0, 38.161, 26.72], [0, 31.688, 30.018], [0, 32.824, 37.194], [0, 27.687, 32.057]] - ]; + expected = [[[0, -8.23276, -39.1947], [0, -6.79756, -38.9674], [0, -6.57025, -37.5322], [0, -5.91056, -38.8269], [0, -4.47537, -38.5996], [0, -5.50285, -39.627], [0, -4.84316, -40.9217], [0, -6.13787, -40.2621], [0, -7.16536, -41.2895], [0, -6.93805, -39.8544]], [[0.29253, -8.37695, -39.1637], [0.242096, -6.93273, -38.9399], [0.233937, -6.69908, -37.4964], [0.210927, -6.04016, -38.8017], [0.160494, -4.59594, -38.578], [0.196706, -5.63292, -39.6084], [0.173696, -4.974, -40.9136], [0.219086, -6.27381, -40.2452], [0.255298, -7.31079, -41.2756], [0.247139, -7.07714, -39.8321]], [[0.595109, -8.51046, -39.1321], [0.493614, -7.05901, -38.912], [0.476849, -6.81925, -37.4603], [0.430887, -6.16197, -38.776], [0.329392, -4.71052, -38.556], [0.40248, -5.75574, -39.5892], [0.356518, -5.09845, -40.905], [0.447652, -6.40172, -40.2278], [0.520741, -7.44694, -41.2611], [0.503976, -7.20719, -39.8093]], [[0.907339, -8.63275, -39.1], [0.754217, -7.1759, -38.8836], [0.728405, -6.93031, -37.4236], [0.659583, -6.27551, -38.7499], [0.506462, -4.81866, -38.5336], [0.617049, -5.87083, -39.5697], [0.548228, -5.21604, -40.896], [0.685396, -6.52111, -40.21], [0.795983, -7.57328, -41.246], [0.770171, -7.32768, -39.786]], [[1.22879, -8.74332, -39.0673], [1.02355, -7.28292, -38.8547], [0.988252, -7.03178, -37.3865], [0.896698, -6.38034, -38.7234], [0.691452, -4.91994, -38.5109], [0.840115, -5.97773, -39.5496], [0.748562, -5.32629, -40.8866], [0.931994, -6.63148, -40.1916], [1.08066, -7.68928, -41.2304], [1.04536, -7.43813, -39.7622]], [[1.55903, -8.84167, -39.034], [1.30122, -7.3796, -38.8253], [1.25602, -7.12322, -37.3489], [1.14189, -6.47599, -38.6964], [0.88409, -5.01392, -38.4877], [1.07136, -6.07599, -39.5292], [0.957236, -5.42876, -40.8767], [1.1871, -6.73238, -40.1728], [1.37437, -7.79444, -41.2143], [1.32916, -7.53806, -39.7378]], [[1.89756, -8.92733, -39.0002], [1.58684, -7.4655, -38.7954], [1.5313, -7.20421, -37.3108], [1.3948, -6.56204, -38.6689], [1.08408, -5.10021, -38.4642], [1.31044, -6.16516, -39.5083], [1.17395, -5.52298, -40.8663], [1.45034, -6.82333, -40.1535], [1.6767, -7.88827, -41.1976], [1.62117, -7.62698, -39.713]], [[2.24391, -8.99982, -38.9658], [1.87998, -7.54017, -38.7651], [1.8137, -7.27434, -37.2723], [1.65505, -6.63806, -38.641], [1.29112, -5.17841, -38.4403], [1.55701, -6.24481, -39.4869], [1.39836, -5.60853, -40.8556], [1.72133, -6.90389, -40.1337], [1.98722, -7.97029, -41.1803], [1.92094, -7.70446, -39.6876]], [[2.59755, -9.05872, -38.9308], [2.18018, -7.6032, -38.7342], [2.10276, -7.33321, -37.2333], [1.92224, -6.70364, -38.6126], [1.50487, -5.24812, -38.416], [1.81067, -6.31454, -39.4651], [1.63014, -5.68498, -40.8444], [1.99966, -6.97363, -40.1135], [2.30545, -8.04006, -41.1626], [2.22803, -7.77006, -39.6617]], [[2.95794, -9.1036, -38.8953], [2.48699, -7.65418, -38.7028], [2.39805, -7.38043, -37.1939], [2.19594, -6.75839, -38.5838], [1.72499, -5.30898, -38.3913], [2.07102, -6.37395, -39.4428], [1.86891, -5.75192, -40.8327], [2.28488, -7.03215, -40.0927], [2.63091, -8.09712, -41.1443], [2.54197, -7.82337, -39.6353]], [[3.32453, -9.13406, -38.8592], [2.79993, -7.69274, -38.6709], [2.69908, -7.41565, -37.154], [2.47571, -6.80195, -38.5545], [1.95111, -5.36062, -38.3662], [2.33766, -6.42266, -39.4201], [2.11429, -5.80895, -40.8207], [2.57656, -7.07903, -40.0715], [2.96311, -8.14107, -41.1254], [2.86226, -7.86398, -39.6084]], [[3.69673, -9.14973, -38.8226], [3.11848, -7.7185, -38.6385], [3.00536, -7.43854, -37.1136], [2.7611, -6.83395, -38.5248], [2.18284, -5.40272, -38.3407], [2.61013, -6.4603, -39.397], [2.36586, -5.85571, -40.8082], [2.87421, -7.11391, -40.0497], [3.3015, -8.17149, -41.106], [3.18838, -7.89153, -39.581]], [[4.07396, -9.15026, -38.7854], [3.44212, -7.73113, -38.6057], [3.3164, -7.44876, -37.0727], [3.05162, -6.85406, -38.4946], [2.41979, -5.43493, -38.3149], [2.88798, -6.48652, -39.3733], [2.62321, -5.89182, -40.7952], [3.17735, -7.13643, -40.0275], [3.64554, -8.18802, -41.086], [3.51982, -7.90565, -39.5531]], [[4.45559, -9.13532, -38.7477], [3.77032, -7.73031, -38.5723], [3.63167, -7.44602, -37.0314], [3.3468, -6.86196, -38.4639], [2.66153, -5.45695, -38.2886], [3.17075, -6.501, -39.3493], [2.88588, -5.91694, -40.7818], [3.48546, -7.14625, -40.0048], [3.99467, -8.1903, -41.0655], [3.85602, -7.90601, -39.5246]], [[4.841, -9.1046, -38.7093], [4.10253, -7.71573, -38.5385], [3.95062, -7.43004, -36.9897], [3.64612, -6.85736, -38.4329], [2.90765, -5.46849, -38.262], [3.45793, -6.50342, -39.3248], [3.15343, -5.93074, -40.768], [3.79803, -7.14305, -39.9817], [4.34831, -8.17799, -41.0445], [4.19641, -7.8923, -39.4957]], [[5.22954, -9.05783, -38.6705], [4.43816, -7.68712, -38.5041], [4.27272, -7.40056, -36.9474], [3.94906, -6.83998, -38.4013], [3.15768, -5.46927, -38.235], [3.74903, -6.49351, -39.2999], [3.42538, -5.93293, -40.7537], [4.1145, -7.12653, -39.958], [4.70585, -8.15078, -41.0229], [4.54041, -7.86422, -39.4662]], [[5.62054, -8.99475, -38.6311], [4.77664, -7.64422, -38.4693], [4.59739, -7.35736, -36.9047], [4.25508, -6.80956, -38.3693], [3.41118, -5.45903, -38.2076], [4.04353, -6.471, -39.2745], [3.70122, -5.9232, -40.739], [4.43434, -7.09642, -39.9339], [5.06668, -8.10839, -41.0008], [4.88743, -7.82152, -39.4362]], [[6.01333, -8.91513, -38.5911], [5.11737, -7.58681, -38.434], [4.92405, -7.30021, -36.8616], [4.56364, -6.76587, -38.3369], [3.66767, -5.43755, -38.1798], [4.34089, -6.43563, -39.2486], [3.98047, -5.90129, -40.7239], [4.75695, -7.05247, -39.9092], [5.43017, -8.05055, -40.9781], [5.23685, -7.76395, -39.4057]], [[6.40723, -8.81879, -38.5505], [5.45974, -7.51469, -38.3981], [5.25213, -7.22894, -36.818], [4.87416, -6.7087, -38.304], [3.92667, -5.4046, -38.1516], [4.64056, -6.38718, -39.2224], [4.26259, -5.86695, -40.7083], [5.08177, -6.99445, -39.8841], [5.79566, -7.97704, -40.9549], [5.58805, -7.69129, -39.3747]], [[6.80153, -8.70556, -38.5094], [5.80312, -7.42766, -38.3618], [5.58102, -7.14337, -36.7739], [5.18608, -6.63788, -38.2706], [4.18767, -5.35998, -38.123], [4.94199, -6.32546, -39.1956], [4.54705, -5.81996, -40.6923], [5.40819, -6.92216, -39.8585], [6.1625, -7.88765, -40.9311], [5.9404, -7.60336, -39.3432]], [[7.19552, -8.57529, -38.4678], [6.14689, -7.32558, -38.325], [5.9101, -7.04339, -36.7294], [5.49881, -6.55322, -38.2368], [4.45018, -5.30352, -38.0941], [5.24461, -6.25029, -39.1685], [4.83332, -5.76012, -40.6759], [5.7356, -6.83542, -39.8325], [6.53003, -7.78219, -40.9068], [6.29324, -7.49999, -39.3112]], [[7.58849, -8.42787, -38.4256], [6.49041, -7.20833, -38.2878], [6.23878, -6.92886, -36.6844], [5.81176, -6.45461, -38.2026], [4.71368, -5.23507, -38.0648], [5.54784, -6.1615, -39.1409], [5.12082, -5.68725, -40.659], [6.06339, -6.73407, -39.8059], [6.89755, -7.66051, -40.882], [6.64592, -7.38104, -39.2787]], [[7.9797, -8.26322, -38.3828], [6.83301, -7.07579, -38.25], [6.56641, -6.79972, -36.639], [6.12432, -6.34192, -38.1679], [4.97763, -5.15449, -38.0351], [5.85109, -6.05898, -39.1128], [5.409, -5.60119, -40.6417], [6.39092, -6.61799, -39.7789], [7.26438, -7.52249, -40.8566], [6.99778, -7.24641, -39.2456]], [[8.36843, -8.08129, -38.3395], [7.17405, -6.9279, -38.2117], [6.89238, -6.65589, -36.5931], [6.43589, -6.21507, -38.1328], [5.24152, -5.06167, -38.005], [6.15377, -5.94262, -39.0843], [5.69728, -5.5018, -40.6239], [6.71757, -6.48708, -39.7513], [7.62982, -7.36803, -40.8307], [7.34814, -7.09602, -39.2121]], [[8.75393, -7.88207, -38.2956], [7.51287, -6.76462, -38.173], [7.21604, -6.49735, -36.5468], [6.74585, -6.07399, -38.0972], [5.50479, -4.95654, -37.9745], [6.45526, -5.81234, -39.0554], [5.98507, -5.38899, -40.6057], [7.04268, -6.34126, -39.7233], [7.99315, -7.19707, -40.8042], [7.69632, -6.9298, -39.178]], [[9.13546, -7.66556, -38.2512], [7.84879, -6.58592, -38.1337], [7.53675, -6.32409, -36.5], [7.05358, -5.91866, -38.0611], [5.76691, -4.83901, -37.9437], [6.75496, -5.66809, -39.026], [6.27179, -5.26266, -40.5871], [7.36562, -6.18049, -39.6949], [8.35367, -7.00956, -40.7771], [8.04164, -6.74773, -39.1434]], [[9.51228, -7.43181, -38.2062], [8.18114, -6.39181, -38.094], [7.85389, -6.13613, -36.4528], [7.35846, -5.74906, -38.0247], [6.02732, -4.70906, -37.9125], [7.05226, -5.50983, -38.9961], [6.55683, -5.12276, -40.568], [7.68571, -6.00474, -39.6659], [8.71066, -6.80551, -40.7496], [8.3834, -6.54983, -39.1083]], [[9.88364, -7.18088, -38.1607], [8.50926, -6.18234, -38.0538], [8.16679, -5.93352, -36.4051], [7.65984, -5.5652, -37.9877], [6.28547, -4.56666, -37.8809], [7.34654, -5.33757, -38.9659], [6.83959, -4.96926, -40.5485], [8.00231, -5.81402, -39.6365], [9.06339, -6.58494, -40.7215], [8.72092, -6.33612, -39.0728]], [[10.2488, -6.91289, -38.1146], [8.83246, -5.95757, -38.0131], [8.47481, -5.71633, -36.357], [7.95712, -5.36714, -37.9504], [6.54079, -4.41182, -37.8489], [7.63717, -5.15133, -38.9352], [7.11947, -4.80214, -40.5286], [8.31476, -5.60838, -39.6065], [9.41113, -6.34789, -40.6928], [9.05349, -6.10666, -39.0367]], [[10.607, -6.62797, -38.068], [9.15007, -5.7176, -37.9719], [8.77732, -5.48468, -36.3084], [8.24965, -5.15495, -37.9126], [6.79274, -4.24457, -37.8165], [7.92352, -4.95117, -38.904], [7.39585, -4.62144, -40.5082], [8.62239, -5.38787, -39.5761], [9.75317, -6.09446, -40.6636], [9.38043, -5.86154, -39.0001]], [[10.9575, -6.32629, -38.0208], [9.46141, -5.46255, -37.9303], [9.07367, -5.23869, -36.2593], [8.5368, -4.92872, -37.8743], [7.04074, -4.06498, -37.7838], [8.20499, -4.73715, -38.8724], [7.66812, -4.42719, -40.4874], [8.92453, -5.15258, -39.5452], [10.0888, -5.82476, -40.6339], [9.70104, -5.6009, -38.9629]], [[11.2995, -6.00805, -37.9731], [9.76581, -5.19257, -37.8881], [9.36321, -4.97851, -36.2099], [8.81794, -4.68858, -37.8356], [7.28425, -3.8731, -37.7507], [8.48094, -4.5094, -38.8404], [7.93566, -4.21947, -40.4661], [9.22054, -4.90265, -39.5139], [10.4172, -5.53894, -40.6036], [10.0146, -5.32487, -38.9253]], [[11.6324, -5.67348, -37.9248], [10.0626, -4.90786, -37.8455], [9.64532, -4.70434, -36.1599], [9.09245, -4.43468, -37.7965], [7.52269, -3.66906, -37.7172], [8.75075, -4.26803, -38.8079], [8.19788, -3.99837, -40.4444], [9.50973, -4.63821, -39.482], [10.7378, -5.23717, -40.5728], [10.3205, -5.03365, -38.8872]], [[11.9553, -5.32285, -37.876], [10.3511, -4.60862, -37.8024], [9.91936, -4.41638, -36.1096], [9.3597, -4.16721, -37.7569], [7.75551, -3.45298, -37.6833], [9.0138, -4.0132, -38.775], [8.45414, -3.76402, -40.4223], [9.79147, -4.35944, -39.4497], [11.0498, -4.91967, -40.5414], [10.618, -4.72743, -38.8486]], [[12.2676, -4.95645, -37.8266], [10.6307, -4.29509, -37.7588], [10.1847, -4.11489, -36.0588], [9.61907, -3.88636, -37.7169], [7.98216, -3.225, -37.649], [9.26948, -3.74511, -38.7416], [8.70384, -3.51658, -40.3997], [10.0651, -4.06656, -39.4169], [11.3524, -4.58668, -40.5095], [10.9064, -4.40647, -38.8094]], [[12.5686, -4.5746, -37.7767], [10.9007, -3.96755, -37.7147], [10.4407, -3.80012, -36.0075], [9.86995, -3.59237, -37.6764], [8.20208, -2.98531, -37.6144], [9.51718, -3.46397, -38.7078], [8.94638, -3.25622, -40.3767], [10.33, -3.7598, -39.3836], [11.6451, -4.23845, -40.477], [11.185, -4.07102, -38.7698]], [[12.8575, -4.17767, -37.7262], [11.1605, -3.62628, -37.6702], [10.6869, -3.47237, -35.9558], [10.1117, -3.2855, -37.6355], [8.41473, -2.73411, -37.5794], [9.75629, -3.17001, -38.6736], [9.18116, -2.98314, -40.3533], [10.5854, -3.43941, -39.3498], [11.927, -3.87531, -40.444], [11.4533, -3.7214, -38.7297]], [[13.1337, -3.76604, -37.6752], [11.4095, -3.27161, -37.6251], [10.9225, -3.13196, -35.9037], [10.3438, -2.96604, -37.5942], [8.61956, -2.47162, -37.544], [9.98621, -2.8635, -38.6389], [9.40758, -2.69758, -40.3294], [10.8308, -3.10569, -39.3156], [12.1975, -3.49757, -40.4105], [11.7105, -3.35792, -38.689]], [[13.3965, -3.34012, -37.6237], [11.6469, -2.9039, -37.5796], [11.1469, -2.77924, -35.8511], [10.5656, -2.63431, -37.5524], [8.81606, -2.19809, -37.5083], [10.2064, -2.54473, -38.6038], [9.62504, -2.39979, -40.3051], [11.0656, -2.75897, -39.2809], [12.4559, -3.10561, -40.3764], [11.9559, -2.98095, -38.6479]], [[13.6452, -2.90037, -37.5716], [11.8723, -2.52353, -37.5336], [11.3597, -2.41459, -35.7981], [10.7766, -2.29063, -37.5101], [9.00368, -1.91379, -37.4722], [10.4162, -2.21402, -38.5683], [9.83298, -2.09006, -40.2803], [11.2891, -2.39957, -39.2457], [12.7016, -2.6998, -40.3417], [12.189, -2.59086, -38.6062]], [[13.8791, -2.44726, -37.5189], [12.0849, -2.1309, -37.4871], [11.5603, -2.03839, -35.7446], [10.9761, -1.93538, -37.4675], [9.18192, -1.61902, -37.4357], [10.615, -1.87172, -38.5323], [10.0308, -1.7687, -40.2551], [11.5007, -2.02789, -39.21], [12.9338, -2.28058, -40.3066], [12.4092, -2.18808, -38.5641]], [[14.0977, -1.9813, -37.4658], [12.2843, -1.72645, -37.4402], [11.7481, -1.65108, -35.6907], [11.1636, -1.56894, -37.4244], [9.35027, -1.3141, -37.3988], [10.8024, -1.51818, -38.4958], [10.218, -1.43604, -40.2295], [11.6999, -1.64431, -39.1738], [13.152, -1.8484, -40.2709], [12.6158, -1.77303, -38.5214]], [[14.3003, -1.50302, -37.412], [12.4699, -1.31064, -37.3928], [11.9225, -1.2531, -35.6364], [11.3386, -1.19174, -37.3809], [9.50824, -0.999357, -37.3616], [10.9778, -1.15381, -38.459], [10.3939, -1.09245, -40.2034], [11.886, -1.24927, -39.1372], [13.3556, -1.40373, -40.2346], [12.8082, -1.34619, -38.4783]], [[14.4863, -1.01298, -37.3578], [12.641, -0.883947, -37.3449], [12.0831, -0.84493, -35.5817], [11.5006, -0.8042, -37.3369], [9.65535, -0.675168, -37.324], [11.1406, -0.779028, -38.4217], [10.5582, -0.738298, -40.1769], [12.0586, -0.843217, -39.1001], [13.5438, -0.947077, -40.1978], [12.9859, -0.90806, -38.4346]], [[14.6551, -0.511768, -37.303], [12.7972, -0.446889, -37.2965], [12.2293, -0.427056, -35.5265], [11.649, -0.406792, -37.2925], [9.79112, -0.341914, -37.286], [11.2904, -0.394268, -38.3839], [10.7101, -0.374004, -40.15], [12.217, -0.426625, -39.0625], [13.7162, -0.47898, -40.1605], [13.1483, -0.459147, -38.3904]], [[14.8063, 0, -37.2476], [12.938, 0, -37.2476], [12.3607, 0, -35.4708], [11.7834, 0, -37.2476], [9.91511, 0, -37.2476], [11.4266, 0, -38.3458], [10.8492, 0, -40.1226], [12.3607, 0, -39.0245], [13.8721, 0, -40.1226], [13.2948, 0, -38.3458]], [[14.9391, 0.521686, -37.1918], [13.0628, 0.456164, -37.1983], [12.4768, 0.435698, -35.4148], [11.9032, 0.415668, -37.2024], [10.0269, 0.350146, -37.2089], [11.5487, 0.403289, -38.3072], [10.9751, 0.383259, -40.0948], [12.4892, 0.436133, -38.9859], [14.0111, 0.489277, -40.0842], [13.425, 0.468812, -38.3006]], [[15.0533, 1.05263, -37.1354], [13.1712, 0.92102, -37.1485], [12.5771, 0.879478, -35.3583], [12.008, 0.839683, -37.1567], [10.126, 0.708076, -37.1698], [11.6563, 0.815089, -38.2681], [11.0872, 0.775294, -40.0665], [12.6021, 0.881226, -38.9469], [14.1325, 0.988238, -40.0452], [13.5384, 0.946695, -38.255]], [[15.1482, 1.59214, -37.0784], [13.2627, 1.39397, -37.0983], [12.6613, 1.33076, -35.3014], [12.0974, 1.27149, -37.1105], [10.212, 1.07333, -37.1304], [11.749, 1.23487, -38.2287], [11.1851, 1.1756, -40.0378], [12.6989, 1.3347, -38.9074], [14.2358, 1.49625, -40.0057], [13.6344, 1.43303, -38.2088]], [[15.2233, 2.1395, -37.0209], [13.3369, 1.87438, -37.0475], [12.7289, 1.78893, -35.244], [12.171, 1.71053, -37.064], [10.2846, 1.44541, -37.0906], [11.8262, 1.66207, -38.1888], [11.2684, 1.58366, -40.0087], [12.779, 1.79597, -38.8675], [14.3207, 2.01264, -39.9657], [13.7127, 1.92719, -38.1622]], [[15.2784, 2.69399, -36.9629], [13.3934, 2.36162, -36.9963], [12.7796, 2.25339, -35.1862], [12.2284, 2.15619, -37.017], [10.3434, 1.82382, -37.0504], [11.8877, 2.09613, -38.1484], [11.3365, 1.99893, -39.9791], [12.8422, 2.26442, -38.827], [14.3865, 2.53673, -39.9251], [13.7727, 2.4285, -38.115]], [[15.3129, 3.25486, -36.9043], [13.4318, 2.85501, -36.9446], [12.813, 2.72348, -35.128], [12.2691, 2.60789, -36.9695], [10.388, 2.20803, -37.0098], [11.933, 2.53644, -38.1076], [11.3892, 2.42085, -39.9491], [12.8879, 2.73941, -38.7861], [14.433, 3.06782, -39.884], [13.8142, 2.9363, -38.0674]], [[15.3265, 3.82133, -36.8453], [13.4517, 3.35387, -36.8925], [12.8287, 3.19856, -35.0694], [12.2929, 3.06497, -36.9217], [10.4181, 2.59752, -36.9689], [11.9618, 2.98241, -38.0664], [11.426, 2.84882, -39.9187], [12.9159, 3.22029, -38.7448], [14.4596, 3.60518, -39.8423], [13.8367, 3.44987, -38.0192]], [[15.3189, 4.39261, -36.7856], [13.4528, 3.85752, -36.8399], [12.8265, 3.67795, -35.0103], [12.2994, 3.52681, -36.8734], [10.4333, 2.99171, -36.9276], [11.9737, 3.4334, -38.0248], [11.4466, 3.28226, -39.8878], [12.9257, 3.70638, -38.7029], [14.466, 4.14806, -39.8001], [13.8398, 3.9685, -37.9706]], [[15.2896, 4.9679, -36.7255], [13.4347, 4.36521, -36.7868], [12.8061, 4.16096, -34.9508], [12.2884, 3.99274, -36.8246], [10.4335, 3.39005, -36.8859], [11.9684, 3.88877, -37.9827], [11.4506, 3.72054, -39.8565], [12.917, 4.19699, -38.6606], [14.4519, 4.6957, -39.7574], [13.8233, 4.49145, -37.9214]], [[15.2385, 5.54636, -36.6648], [13.3974, 4.87624, -36.7332], [12.7673, 4.6469, -34.8909], [12.2595, 4.46208, -36.7755], [10.4183, 3.79195, -36.8439], [11.9456, 4.34785, -37.9402], [11.4378, 4.16303, -39.8248], [12.8896, 4.69141, -38.6178], [14.4169, 5.24731, -39.7141], [13.7868, 5.01798, -37.8718]], [[15.1653, 6.12717, -36.6036], [13.3403, 5.38984, -36.6792], [12.7097, 5.13505, -34.8306], [12.2124, 4.93414, -36.7259], [10.3875, 4.19681, -36.8015], [11.9051, 4.80997, -37.8973], [11.4078, 4.60907, -39.7926], [12.8431, 5.18893, -38.5745], [14.3607, 5.8021, -39.6703], [13.7301, 5.54731, -37.8217]], [[15.0697, 6.70947, -36.5418], [13.2634, 5.90526, -36.6247], [12.6333, 5.62469, -34.7699], [12.1471, 5.40823, -36.6759], [10.3408, 4.60402, -36.7588], [11.8466, 5.27445, -37.8539], [11.3604, 5.05799, -39.76], [12.7773, 5.6888, -38.5308], [14.2831, 6.35923, -39.6259], [13.6529, 6.07866, -37.7711]], [[14.9516, 7.29239, -36.4796], [13.1665, 6.42172, -36.5698], [12.5378, 6.11507, -34.7087], [12.0632, 5.88362, -36.6255], [10.2781, 5.01295, -36.7157], [11.7699, 5.74058, -37.8101], [11.2954, 5.50913, -39.7269], [12.6919, 6.19027, -38.4866], [14.1838, 6.9179, -39.581], [13.5551, 6.61125, -37.72]], [[14.8108, 7.87506, -36.4168], [13.0493, 6.93845, -36.5143], [12.4231, 6.60546, -34.6471], [11.9607, 6.35959, -36.5746], [10.1991, 5.42298, -36.6722], [11.6749, 6.20764, -37.7659], [11.2125, 5.96178, -39.6935], [12.5869, 6.69259, -38.4419], [14.0627, 7.47725, -39.5356], [13.4364, 7.14425, -37.6684]], [[14.6472, 8.45659, -36.3534], [12.9118, 7.45464, -36.4585], [12.289, 7.09509, -34.5851], [11.8393, 6.83541, -36.5234], [10.1039, 5.83346, -36.6284], [11.5613, 6.67492, -37.7213], [11.1115, 6.41524, -39.6595], [12.462, 7.19496, -38.3967], [13.9195, 8.03642, -39.4896], [13.2967, 7.67686, -37.6163]], [[14.4608, 9.03608, -36.2896], [12.7539, 7.9695, -36.4021], [12.1357, 7.5832, -34.5227], [11.699, 7.31032, -36.4717], [9.99207, 6.24374, -36.5842], [11.4291, 7.14167, -37.6762], [10.9924, 6.86879, -39.6252], [12.3172, 7.69662, -38.3511], [13.7542, 8.59456, -39.4431], [13.1359, 8.20825, -37.5637]], [[14.2513, 9.61264, -36.2252], [12.5754, 8.48222, -36.3453], [11.9628, 8.06902, -34.4598], [11.5396, 7.78358, -36.4195], [9.8637, 6.65315, -36.5396], [11.2781, 7.60716, -37.6307], [10.8549, 7.32171, -39.5904], [12.1522, 8.19677, -38.305], [13.5666, 9.15078, -39.3961], [12.954, 8.73758, -37.5106]], [[14.0189, 10.1854, -36.1603], [12.3764, 8.99197, -36.288], [11.7705, 8.55179, -34.3966], [11.3612, 8.25442, -36.367], [9.71868, 7.06103, -36.4947], [11.1083, 8.07063, -37.5848], [10.699, 7.77326, -39.5552], [11.9671, 8.6946, -38.2585], [13.3567, 9.7042, -39.3485], [12.7508, 9.26402, -37.457]], [[13.7636, 10.7533, -36.0949], [12.1568, 9.49794, -36.2303], [11.5588, 9.03071, -34.3329], [11.1638, 8.72208, -36.314], [9.55696, 7.46672, -36.4495], [10.9196, 8.53134, -37.5384], [10.5246, 8.22271, -39.5195], [11.7618, 9.18931, -38.2114], [13.1244, 10.2539, -39.3004], [12.5264, 9.7867, -37.403]], [[13.4854, 11.3156, -36.0289], [11.9167, 9.9993, -36.1721], [11.3276, 9.50501, -34.2688], [10.9472, 9.1858, -36.2606], [9.37852, 7.86952, -36.4038], [10.7121, 8.98851, -37.4916], [10.3317, 8.6693, -39.4834], [11.5363, 9.68009, -38.1639], [12.8698, 10.7991, -39.2517], [12.2808, 10.3048, -37.3484]], [[13.1844, 11.8713, -35.9625], [11.6561, 10.4952, -36.1135], [11.0771, 9.97391, -34.2043], [10.7116, 9.64479, -36.2068], [9.18338, 8.26875, -36.3578], [10.4857, 9.44139, -37.4444], [10.1202, 9.11227, -39.4469], [11.2906, 10.1661, -38.116], [12.593, 11.3388, -39.2026], [12.014, 10.8174, -37.2934]], [[12.8607, 12.4195, -35.8955], [11.3752, 10.9849, -36.0544], [10.8074, 10.4366, -34.1394], [10.4571, 10.0983, -36.1526], [8.97157, 8.66375, -36.3115], [10.2406, 9.88921, -37.3968], [9.89023, 9.55089, -39.4099], [11.0249, 10.6466, -38.0675], [12.2939, 11.872, -39.1528], [11.7261, 11.3238, -37.2379]], [[12.5146, 12.9592, -35.828], [11.074, 11.4675, -35.9948], [10.5186, 10.8924, -34.0741], [10.1837, 10.5455, -36.098], [8.74316, 9.05381, -36.2648], [9.97672, 10.3312, -37.3487], [9.64179, 9.98437, -39.3725], [10.7391, 11.1207, -38.0186], [11.9726, 12.398, -39.1026], [11.4173, 11.8229, -37.1819]], [[12.1461, 13.4896, -35.76], [10.7527, 11.9421, -35.9348], [10.2109, 11.3404, -34.0084], [9.8916, 10.9857, -36.0429], [8.49824, 9.43826, -36.2177], [9.69427, 10.7666, -37.3003], [9.37497, 10.412, -39.3347], [10.4335, 11.5875, -37.9693], [11.6295, 12.9158, -39.0518], [11.0876, 12.3141, -37.1254]], [[11.7556, 14.0098, -35.6914], [10.4116, 12.4081, -35.8743], [9.88444, 11.7798, -33.9423], [9.58095, 11.4181, -35.9874], [8.23694, 9.8164, -36.1703], [9.39338, 11.1946, -37.2513], [9.08989, 10.8329, -39.2965], [10.1081, 12.0464, -37.9195], [11.2645, 13.4246, -39.0005], [10.7374, 12.7963, -37.0684]], [[11.3433, 14.5188, -35.6224], [10.0508, 12.8644, -35.8134], [9.53949, 12.21, -33.8758], [9.25194, 11.8419, -35.9315], [7.95939, 10.1876, -36.1226], [9.07423, 11.6145, -37.202], [8.78668, 11.2464, -39.2578], [9.76324, 12.4964, -37.8692], [10.8781, 13.9233, -38.9486], [10.3668, 13.2689, -37.011]], [[10.9096, 15.0158, -35.5528], [9.67057, 13.3104, -35.752], [9.1763, 12.6301, -33.8088], [8.90481, 12.2564, -35.8752], [7.66579, 10.5511, -36.0745], [8.73702, 12.0255, -37.1523], [8.46553, 11.6518, -39.2186], [9.39908, 12.9367, -37.8184], [10.4703, 14.4112, -38.8962], [9.97605, 13.7309, -36.953]], [[10.4547, 15.4998, -35.4827], [9.27126, 13.7452, -35.6902], [8.79517, 13.0394, -33.7415], [8.53982, 12.6608, -35.8185], [7.35633, 10.9062, -36.026], [8.382, 12.4268, -37.1021], [8.12664, 12.0482, -39.1791], [9.0159, 13.3666, -37.7672], [10.0416, 14.8872, -38.8433], [9.56549, 14.1814, -36.8946]], [[9.97918, 15.97, -35.4121], [8.85317, 14.168, -35.6279], [8.39643, 13.4371, -33.6738], [8.15725, 13.0543, -35.7613], [7.03124, 11.2523, -35.9772], [8.00943, 12.8178, -37.0515], [7.77026, 12.435, -39.1391], [8.61399, 13.7853, -37.7155], [9.59218, 15.3507, -38.7899], [9.13544, 14.6198, -36.8357]], [[9.4833, 16.4256, -35.341], [8.41666, 14.5781, -35.5652], [7.98043, 13.8225, -33.6056], [7.75744, 13.4363, -35.7038], [6.6908, 11.5888, -35.928], [7.61963, 13.1976, -37.0005], [7.39664, 12.8114, -39.0987], [8.19367, 14.1919, -37.6633], [9.1225, 15.8006, -38.7359], [8.68627, 15.0451, -36.7763]], [[8.96758, 16.8656, -35.2694], [7.96213, 14.9746, -35.502], [7.54755, 14.1949, -33.5371], [7.34073, 13.8059, -35.6458], [6.33529, 11.9149, -35.8785], [7.21291, 13.5655, -36.9491], [7.00609, 13.1765, -39.0578], [7.75531, 14.5856, -37.6107], [8.63294, 16.2362, -38.6814], [8.21836, 15.4565, -36.7164]], [[8.4325, 17.2892, -35.1972], [7.49001, 15.3568, -35.4384], [7.09821, 14.5535, -33.4681], [6.90751, 14.1625, -35.5874], [5.96501, 12.2301, -35.8286], [6.78965, 13.9208, -36.8972], [6.59894, 13.5298, -39.0165], [7.2993, 14.9658, -37.5577], [8.12394, 16.6565, -38.6263], [7.73215, 15.8532, -36.6561]], [[7.8786, 17.6956, -35.1246], [7.00074, 15.7239, -35.3743], [6.63286, 14.8977, -33.3988], [6.45819, 14.5053, -35.5286], [5.58033, 12.5336, -35.7784], [6.35024, 14.2629, -36.8449], [6.17556, 13.8705, -38.9748], [6.82607, 15.3316, -37.5041], [7.59598, 17.0608, -38.5707], [7.2281, 16.2346, -36.5952]], [[7.30644, 18.0841, -35.0514], [6.49482, 16.0752, -35.3098], [6.15197, 15.2267, -33.329], [5.99321, 14.8337, -35.4694], [5.1816, 12.8249, -35.7278], [5.89509, 14.5909, -36.7923], [5.73633, 14.1979, -38.9326], [6.33606, 15.6823, -37.4501], [7.04956, 17.4483, -38.5146], [6.70671, 16.5997, -36.5339]], [[6.71661, 18.4537, -34.9777], [5.97277, 16.4101, -35.2448], [5.65605, 15.5399, -33.2589], [5.51306, 15.147, -35.4098], [4.76922, 13.1033, -35.6769], [5.42468, 14.9042, -36.7392], [5.28168, 14.5113, -38.8901], [5.82977, 16.0172, -37.3957], [6.48523, 17.818, -38.458], [6.16851, 16.9479, -36.4721]], [[6.10973, 18.8038, -34.9036], [5.43514, 16.7276, -35.1794], [5.14562, 15.8366, -33.1884], [5.01821, 15.4445, -35.3498], [4.34362, 13.3683, -35.6256], [4.93947, 15.2021, -36.6856], [4.81206, 14.81, -38.847], [5.30772, 16.3355, -37.3408], [5.90358, 18.1693, -38.4008], [5.61406, 17.2783, -36.4098]], [[5.48648, 19.1336, -34.8289], [4.8825, 17.0273, -35.1135], [4.62125, 16.1162, -33.1175], [4.50922, 15.7255, -35.2894], [3.90524, 13.6192, -35.574], [4.43998, 15.484, -36.6317], [4.32794, 15.0933, -38.8036], [4.77046, 16.6366, -37.2854], [5.3052, 18.5014, -38.3431], [5.04396, 17.5904, -36.3471]], [[4.84753, 19.4424, -34.7537], [4.31546, 17.3084, -35.0472], [4.08353, 16.3781, -33.0462], [3.98663, 15.9895, -35.2285], [3.45456, 13.8555, -35.522], [3.92674, 15.7493, -36.5773], [3.82984, 15.3606, -38.7597], [4.21856, 16.9197, -37.2296], [4.69075, 18.8136, -38.2849], [4.45881, 17.8833, -36.2839]], [[4.19362, 19.7295, -34.678], [3.73467, 17.5702, -34.9804], [3.53305, 16.6217, -32.9745], [3.45102, 16.2358, -35.1673], [2.99207, 14.0766, -35.4697], [3.40032, 15.9973, -36.5226], [3.31829, 15.6113, -38.7154], [3.65264, 17.1843, -37.1733], [4.06089, 19.105, -38.2262], [3.85928, 18.1565, -36.2202]], [[3.5255, 19.9941, -34.6019], [3.14078, 17.8123, -34.9132], [2.97047, 16.8464, -32.9024], [2.90301, 16.4638, -35.1057], [2.51829, 14.2819, -35.417], [2.86132, 16.2273, -36.4674], [2.79386, 15.8447, -38.6707], [3.07332, 17.4297, -37.1165], [3.41635, 19.3751, -38.1669], [3.24604, 18.4092, -36.156]], [[2.84395, 20.2357, -34.5252], [2.53449, 18.0338, -34.8456], [2.39645, 17.0516, -32.8299], [2.34324, 16.673, -35.0436], [2.03378, 14.4711, -35.364], [2.31035, 16.439, -36.4118], [2.25713, 16.0603, -38.6255], [2.48127, 17.6552, -37.0593], [2.75784, 19.6231, -38.1071], [2.6198, 18.6409, -36.0914]], [[2.14977, 20.4537, -34.448], [1.91651, 18.2344, -34.7775], [1.81167, 17.2369, -32.757], [1.77235, 16.8628, -34.9812], [1.53909, 14.6435, -35.3107], [1.74805, 16.6316, -36.3558], [1.70873, 16.2574, -38.5799], [1.87719, 17.8603, -37.0017], [2.08615, 19.8484, -38.0467], [1.98131, 18.8509, -36.0262]], [[1.44381, 20.6474, -34.3703], [1.28759, 18.4134, -34.709], [1.21685, 17.4017, -32.6838], [1.19104, 17.0327, -34.9183], [1.03482, 14.7986, -35.257], [1.17509, 16.8046, -36.2993], [1.14929, 16.4356, -38.5339], [1.26178, 18.0444, -36.9435], [1.40206, 20.0503, -37.9859], [1.33131, 19.0386, -35.9607]], [[0.726923, 20.8163, -34.2921], [0.648489, 18.5703, -34.64], [0.612704, 17.5455, -32.6101], [0.600014, 17.1822, -34.8551], [0.52158, 14.9361, -35.203], [0.592172, 16.9576, -36.2425], [0.579482, 16.5942, -38.4874], [0.635799, 18.2069, -36.885], [0.706391, 20.2284, -37.9245], [0.670606, 19.2036, -35.8946]], [[0, 20.9599, -34.2134], [0, 18.7046, -34.5706], [0, 17.668, -32.5361], [0, 17.3108, -34.7914], [0, 15.0555, -35.1486], [0, 17.09, -36.1853], [0, 16.7328, -38.4406], [0, 18.3474, -36.8259], [0, 20.382, -37.8626], [0, 19.3453, -35.8281]], [[-0.736049, 21.0777, -34.1343], [-0.657066, 18.8159, -34.5008], [-0.620492, 17.7686, -32.4617], [-0.608252, 17.418, -34.7273], [-0.529269, 15.1563, -35.0939], [-0.600686, 17.2014, -36.1276], [-0.588446, 16.8509, -38.3933], [-0.644825, 18.4654, -36.7665], [-0.716243, 20.5105, -37.8002], [-0.679669, 19.4632, -35.7611]], [[-1.48029, 21.1691, -34.0546], [-1.32187, 18.9037, -34.4305], [-1.24798, 17.847, -32.3869], [-1.22397, 17.5036, -34.6629], [-1.06556, 15.2382, -35.0389], [-1.20913, 17.2914, -36.0695], [-1.18512, 16.948, -38.3455], [-1.29786, 18.5603, -36.7065], [-1.44144, 20.6135, -37.7372], [-1.36754, 19.5568, -35.6936]], [[-2.23177, 21.2339, -33.9744], [-1.99358, 18.9676, -34.3598], [-1.88165, 17.9027, -32.3117], [-1.84636, 17.567, -34.598], [-1.60817, 15.3007, -34.9835], [-1.82455, 17.3595, -36.0111], [-1.78926, 17.0237, -38.2974], [-1.95829, 18.6318, -36.6461], [-2.17467, 20.6906, -37.6737], [-2.06275, 19.6257, -35.6256]], [[-2.98951, 21.2715, -33.8938], [-2.67129, 19.0072, -34.2887], [-2.52069, 17.9356, -32.2362], [-2.47463, 17.6079, -34.5328], [-2.15641, 15.3437, -34.9277], [-2.44616, 17.4053, -35.9522], [-2.4001, 17.0776, -38.2488], [-2.62524, 18.6795, -36.5853], [-2.91498, 20.7412, -37.6097], [-2.76438, 19.6696, -35.5572]], [[-3.75252, 21.2816, -33.8126], [-3.35414, 19.0223, -34.2171], [-3.16423, 17.9453, -32.1603], [-3.10793, 17.626, -34.4671], [-2.70956, 15.3667, -34.8717], [-3.07314, 17.4286, -35.8929], [-3.01684, 17.1094, -38.1998], [-3.29784, 18.703, -36.524], [-3.66143, 20.765, -37.5452], [-3.47152, 19.6879, -35.4884]], [[-4.51979, 21.2639, -33.731], [-4.04122, 19.0124, -34.1451], [-3.81143, 17.9314, -32.084], [-3.74544, 17.6209, -34.4011], [-3.26687, 15.3694, -34.8153], [-3.70466, 17.429, -35.8332], [-3.63866, 17.1186, -38.1503], [-3.97522, 18.702, -36.4623], [-4.41301, 20.7616, -37.4802], [-4.18323, 19.6805, -35.419]], [[-5.29029, 21.2182, -33.6488], [-4.73159, 18.9774, -34.0727], [-4.46142, 17.8938, -32.0073], [-4.3863, 17.5925, -34.3347], [-3.82759, 15.3516, -34.7585], [-4.33986, 17.4062, -35.7731], [-4.26474, 17.1049, -38.1004], [-4.65647, 18.6761, -36.4001], [-5.16874, 20.7307, -37.4146], [-4.89857, 19.6471, -35.3492]], [[-6.06299, 21.1441, -33.5662], [-5.42433, 18.9169, -33.9998], [-5.11331, 17.8322, -31.9302], [-5.02962, 17.5404, -34.2678], [-4.39097, 15.3131, -34.7014], [-4.97791, 17.36, -35.7125], [-4.89422, 17.0682, -38.0501], [-5.34065, 18.6251, -36.3374], [-5.92758, 20.6719, -37.3485], [-5.61656, 19.5873, -35.2789]], [[-6.83682, 21.0416, -33.4831], [-6.1185, 18.8308, -33.9266], [-5.7662, 17.7465, -31.8528], [-5.67455, 17.4645, -34.2006], [-4.95623, 15.2537, -34.644], [-5.6179, 17.2901, -35.6516], [-5.52625, 17.0081, -37.9994], [-6.02684, 18.5487, -36.2743], [-6.68852, 20.5851, -37.2819], [-6.33622, 19.5009, -35.2082]], [[-7.61072, 20.9103, -33.3995], [-6.81312, 18.7189, -33.8528], [-6.41919, 17.6366, -31.775], [-6.32017, 17.3645, -34.133], [-5.52257, 15.1731, -34.5863], [-6.25897, 17.1964, -35.5903], [-6.15995, 16.9243, -37.9483], [-6.71409, 18.4468, -36.2108], [-7.4505, 20.4701, -37.2148], [-7.05657, 19.3878, -35.137]], [[-8.38362, 20.7502, -33.3155], [-7.50723, 18.581, -33.7787], [-7.07138, 17.5023, -31.6969], [-6.96559, 17.2404, -34.065], [-6.08921, 15.0713, -34.5282], [-6.90022, 17.0786, -35.5286], [-6.79443, 16.8168, -37.8967], [-7.40145, 18.3192, -36.1468], [-8.21246, 20.3265, -37.1472], [-7.7766, 19.2478, -35.0653]], [[-9.15442, 20.5612, -33.2309], [-8.19986, 18.4172, -33.7041], [-7.72182, 17.3435, -31.6183], [-7.6099, 17.0921, -33.9966], [-6.65533, 14.9481, -34.4698], [-7.54073, 16.9367, -35.4664], [-7.4288, 16.6854, -37.8447], [-8.08793, 18.1658, -36.0824], [-8.97333, 20.1544, -37.079], [-8.4953, 19.0807, -34.9932]], [[-9.92205, 20.3432, -33.1459], [-8.89001, 18.2272, -33.6291], [-8.36961, 17.1602, -31.5394], [-8.25217, 16.9195, -33.9278], [-7.22013, 14.8035, -34.4111], [-8.17959, 16.7706, -35.4039], [-8.06215, 16.5299, -37.7923], [-8.77257, 17.9864, -36.0175], [-9.73203, 19.9536, -37.0103], [-9.21163, 18.8866, -34.9206]], [[-10.6854, 20.0963, -33.0603], [-9.5767, 18.0112, -33.5537], [-9.01381, 16.9525, -31.4602], [-8.89148, 16.7224, -33.8586], [-7.78278, 14.6373, -34.352], [-8.81588, 16.5803, -35.341], [-8.69356, 16.3502, -37.7394], [-9.45438, 17.7811, -35.9522], [-10.4875, 19.7241, -36.9412], [-9.92459, 18.6654, -34.8476]], [[-11.4434, 19.8205, -32.9743], [-10.2589, 17.769, -33.4779], [-9.65348, 16.7203, -31.3805], [-9.52691, 16.5011, -33.7891], [-8.34246, 14.4496, -34.2926], [-9.44868, 16.3656, -35.2776], [-9.32211, 16.1464, -37.6862], [-10.1324, 17.5498, -35.8864], [-11.2386, 19.4658, -36.8715], [-10.6331, 18.4171, -34.7741]], [[-12.1949, 19.5159, -32.8879], [-10.9357, 17.5008, -33.4016], [-10.2877, 16.4637, -31.3005], [-10.1575, 16.2554, -33.7191], [-8.89835, 14.2403, -34.2329], [-10.077, 16.1266, -35.2139], [-9.94686, 15.9183, -37.6325], [-10.8055, 17.2925, -35.8202], [-11.9842, 19.1788, -36.8012], [-11.3362, 18.1417, -34.7001]], [[-12.9388, 19.1825, -32.8009], [-11.606, 17.2066, -33.3249], [-10.9155, 16.1829, -31.2202], [-10.7823, 15.9855, -33.6488], [-9.44961, 14.0096, -34.1728], [-10.7001, 15.8635, -35.1497], [-10.5669, 15.6661, -37.5784], [-11.4729, 17.0092, -35.7535], [-12.7233, 18.8631, -36.7305], [-12.0328, 17.8394, -34.6257]], [[-13.674, 18.8206, -32.7135], [-12.2689, 16.8867, -33.2478], [-11.536, 15.8779, -31.1394], [-11.4005, 15.6914, -33.5781], [-9.9954, 13.7575, -34.1124], [-11.3168, 15.5762, -35.0852], [-11.1813, 15.3897, -37.5238], [-12.1334, 16.7002, -35.6864], [-13.4548, 18.5189, -36.6592], [-12.7219, 17.5101, -34.5509]], [[-14.3994, 18.4304, -32.6256], [-12.9233, 16.5411, -33.1703], [-12.1482, 15.549, -31.0584], [-12.011, 15.3734, -33.507], [-10.5349, 13.4841, -34.0517], [-11.9262, 15.2649, -35.0203], [-11.789, 15.0893, -37.4689], [-12.7861, 16.3655, -35.6189], [-14.1774, 18.1463, -36.5875], [-13.4023, 17.1542, -34.4755]], [[-15.114, 18.0121, -32.5372], [-13.5683, 16.17, -33.0924], [-12.7512, 15.1963, -30.9769], [-12.613, 15.0316, -33.4355], [-11.0673, 13.1895, -33.9906], [-12.5275, 14.9297, -34.9549], [-12.3893, 14.765, -37.4135], [-13.43, 16.0053, -35.5509], [-14.8903, 17.7455, -36.5152], [-14.0732, 16.7718, -34.3998]], [[-15.8166, 17.5661, -32.4483], [-14.2028, 15.7738, -33.014], [-13.3441, 14.8202, -30.8951], [-13.2054, 14.6661, -33.3636], [-11.5917, 12.8739, -33.9293], [-13.1197, 14.5709, -34.8892], [-12.981, 14.4169, -37.3577], [-14.0641, 15.6198, -35.4825], [-15.5921, 17.3168, -36.4424], [-14.7335, 16.3632, -34.3235]], [[-16.5061, 17.0925, -32.359], [-14.8259, 15.3527, -32.9352], [-13.926, 14.4208, -30.813], [-13.7875, 14.2774, -33.2914], [-12.1073, 12.5375, -33.8676], [-13.7019, 14.1887, -34.8231], [-13.5634, 14.0453, -37.3015], [-14.6874, 15.2092, -35.4136], [-16.2819, 16.8604, -36.3691], [-15.3821, 15.9286, -34.2469]], [[-17.1815, 16.592, -32.2692], [-15.4366, 14.907, -32.8561], [-14.4959, 13.9986, -30.7305], [-14.3582, 13.8656, -33.2187], [-12.6134, 12.1806, -33.8056], [-14.2731, 13.7834, -34.7566], [-14.1354, 13.6504, -37.2448], [-15.2989, 14.774, -35.3443], [-16.9586, 16.3768, -36.2953], [-16.018, 15.4684, -34.1697]], [[-17.8417, 16.0647, -32.179], [-16.0339, 14.437, -32.7765], [-15.053, 13.5538, -30.6476], [-14.9167, 13.4311, -33.1457], [-13.109, 11.8034, -33.7432], [-14.8325, 13.3552, -34.6896], [-14.6961, 13.2324, -37.1878], [-15.8976, 14.3143, -35.2746], [-17.6211, 15.8661, -36.221], [-16.6402, 14.9829, -34.0922]], [[-18.4856, 15.5113, -32.0882], [-16.617, 13.9433, -32.6964], [-15.5964, 13.0869, -30.5644], [-15.462, 12.9742, -33.0723], [-13.5934, 11.4062, -33.6805], [-15.379, 12.9045, -34.6223], [-15.2447, 12.7918, -37.1303], [-16.4826, 13.8306, -35.2044], [-18.2683, 15.3289, -36.1462], [-17.2477, 14.4725, -34.0141]], [[-19.1123, 14.9322, -31.997], [-17.1847, 13.4262, -32.616], [-16.1251, 12.5983, -30.4808], [-15.9934, 12.4954, -32.9986], [-14.0657, 10.9894, -33.6176], [-15.9119, 12.4318, -34.5546], [-15.7801, 12.3288, -37.0724], [-17.0529, 13.3232, -35.1338], [-18.8991, 14.7656, -36.0708], [-17.8395, 13.9378, -33.9356]], [[-19.7207, 14.3279, -31.9054], [-17.7362, 12.8861, -32.5352], [-16.6384, 12.0885, -30.3969], [-16.5098, 11.995, -32.9244], [-14.5253, 10.5532, -33.5542], [-16.4303, 11.9373, -34.4865], [-16.3016, 11.8438, -37.0141], [-17.6076, 12.7927, -35.0627], [-19.5126, 14.1767, -35.995], [-18.4147, 13.3791, -33.8567]], [[-20.3098, 13.6992, -31.8133], [-18.2707, 12.3237, -32.4539], [-17.1354, 11.558, -30.3126], [-17.0104, 11.4737, -32.8499], [-14.9712, 10.0982, -33.4906], [-16.9332, 11.4216, -34.418], [-16.8082, 11.3373, -36.9553], [-18.1457, 12.2394, -34.9912], [-20.1076, 13.5628, -35.9186], [-18.9723, 12.797, -33.7773]], [[-20.8786, 13.0464, -31.7207], [-18.7871, 11.7395, -32.3723], [-17.6152, 11.0072, -30.228], [-17.4944, 10.9317, -32.775], [-15.4028, 9.62476, -33.4267], [-17.4198, 10.8851, -34.3492], [-17.299, 10.8096, -36.8962], [-18.6663, 11.664, -34.9193], [-20.6833, 12.9243, -35.8418], [-19.5113, 12.192, -33.6975]], [[-21.4262, 12.3704, -31.6276], [-19.2846, 11.134, -32.2902], [-18.077, 10.4368, -30.1431], [-17.961, 10.3698, -32.6998], [-15.8193, 9.13329, -33.3624], [-17.8893, 10.3284, -34.2799], [-17.7732, 10.2614, -36.8366], [-19.1685, 11.067, -34.8469], [-21.2385, 12.262, -35.7644], [-20.0309, 11.5648, -33.6173]], [[-21.9516, 11.6719, -31.5341], [-19.7623, 10.5078, -32.2078], [-18.5201, 9.8473, -30.0578], [-18.4093, 9.78838, -32.6241], [-16.22, 8.62431, -33.2978], [-18.3408, 9.75196, -34.2102], [-18.2299, 9.69303, -36.7766], [-19.6515, 10.4489, -34.7741], [-21.7723, 11.5765, -35.6866], [-20.5301, 10.916, -33.5366]], [[-22.4539, 10.9515, -31.4401], [-20.2195, 9.86169, -32.1249], [-18.9436, 9.23942, -29.9721], [-18.8385, 9.18815, -32.5481], [-16.604, 8.09833, -33.2329], [-18.7735, 9.15645, -34.1402], [-18.6684, 9.10517, -36.7162], [-20.1143, 9.81041, -34.7009], [-22.2838, 10.8685, -35.6082], [-21.008, 10.2463, -33.4554]], [[-22.9322, 10.2101, -31.3457], [-20.6552, 9.19628, -32.0417], [-19.3469, 8.61378, -29.8862], [-19.2479, 8.56971, -32.4718], [-16.9708, 7.5559, -33.1677], [-19.1867, 8.54247, -34.0698], [-19.0877, 8.49839, -36.6554], [-20.5562, 9.1522, -34.6273], [-22.772, 10.1388, -35.5293], [-21.4637, 9.55628, -33.3738]], [[-23.3857, 9.44843, -31.2508], [-21.0687, 8.51229, -31.958], [-19.7291, 7.97108, -29.7998], [-19.6367, 7.93373, -32.395], [-17.3197, 6.9976, -33.1022], [-19.5795, 7.91065, -33.9989], [-19.4871, 7.8733, -36.5941], [-20.9762, 8.47495, -34.5532], [-23.2361, 9.388, -35.4499], [-21.8966, 8.84678, -33.2918]], [[-23.8134, 8.66738, -31.1555], [-21.4592, 7.8105, -31.8739], [-20.0896, 7.31202, -29.7132], [-20.0041, 7.28091, -32.3179], [-17.6499, 6.42403, -33.0363], [-19.9513, 7.26168, -33.9277], [-19.8658, 7.23057, -36.5325], [-21.3737, 7.77939, -34.4786], [-23.6751, 8.61704, -35.3701], [-22.3056, 8.11857, -33.2093]], [[-24.2147, 7.86783, -31.0597], [-21.8259, 7.09167, -31.7894], [-20.4277, 6.63737, -29.6262], [-20.3496, 6.61198, -32.2404], [-17.9608, 5.83582, -32.9701], [-20.3013, 6.59629, -33.8561], [-20.2231, 6.5709, -36.4704], [-21.7478, 7.06628, -34.4037], [-24.0883, 7.82675, -35.2897], [-22.6901, 7.37245, -33.1264]], [[-24.5887, 7.05068, -30.9635], [-22.1682, 6.35663, -31.7046], [-20.7427, 5.94789, -29.5388], [-20.6723, 5.92769, -32.1626], [-18.2519, 5.23363, -32.9037], [-20.6288, 5.9152, -33.7842], [-20.5583, 5.895, -36.4079], [-22.0978, 6.33643, -34.3283], [-24.4747, 7.018, -35.2088], [-23.0492, 6.60925, -33.0431]], [[-24.9346, 6.2169, -30.8668], [-22.4854, 5.60623, -31.6193], [-21.0341, 5.24439, -29.4512], [-20.9716, 5.22882, -32.0844], [-18.5224, 4.61815, -32.8369], [-20.9331, 5.2192, -33.7118], [-20.8706, 5.20363, -36.345], [-22.4229, 5.59066, -34.2525], [-24.8336, 6.19171, -35.1274], [-23.3823, 5.82986, -32.9593]], [[-25.2518, 5.36744, -30.7697], [-22.7767, 4.84134, -31.5336], [-21.3011, 4.5277, -29.3631], [-21.247, 4.51619, -32.0058], [-18.7719, 3.99008, -32.7698], [-21.2135, 4.50907, -33.639], [-21.1594, 4.49757, -36.2817], [-22.7226, 4.82983, -34.1763], [-25.1642, 5.34882, -35.0456], [-23.6886, 5.03518, -32.8751]], [[-25.5396, 4.50332, -30.6721], [-23.0416, 4.06286, -31.4476], [-21.5433, 3.79867, -29.2748], [-21.4977, 3.79063, -31.9269], [-18.9997, 3.35016, -32.7024], [-21.4696, 3.78566, -33.5659], [-21.424, 3.77762, -36.218], [-22.996, 4.05482, -34.0996], [-25.4659, 4.49032, -34.9632], [-23.9676, 4.22613, -32.7904]], [[-25.7974, 3.62558, -30.574], [-23.2795, 3.27172, -31.3611], [-21.7601, 3.05819, -29.1861], [-21.7233, 3.05301, -31.8476], [-19.2054, 2.69915, -32.6346], [-21.7006, 3.04982, -33.4924], [-21.6638, 3.04464, -36.1538], [-23.2427, 3.26654, -34.0225], [-25.7378, 3.61722, -34.8803], [-24.2185, 3.40368, -32.7053]], [[-26.0245, 2.73528, -30.4756], [-23.4897, 2.46887, -31.2743], [-21.951, 2.30714, -29.0971], [-21.9232, 2.30422, -31.7679], [-19.3885, 2.03781, -32.5666], [-21.906, 2.30241, -33.4185], [-21.8782, 2.29949, -36.0893], [-23.4619, 2.46595, -33.945], [-25.9795, 2.73055, -34.7969], [-24.4407, 2.56882, -32.6198]], [[-26.2203, 1.8335, -30.3766], [-23.6719, 1.6553, -31.187], [-22.1155, 1.54647, -29.0078], [-22.0968, 1.54516, -31.6879], [-19.5484, 1.36696, -32.4983], [-22.0853, 1.54435, -33.3443], [-22.0666, 1.54305, -36.0243], [-23.6532, 1.65399, -33.8671], [-26.1901, 1.83139, -34.7131], [-24.6338, 1.72256, -32.5339]], [[-26.3844, 0.921365, -30.2773], [-23.8254, 0.832001, -31.0994], [-22.2532, 0.777098, -28.9182], [-22.2438, 0.776771, -31.6075], [-19.6847, 0.687406, -32.4296], [-22.238, 0.776568, -33.2696], [-22.2286, 0.776241, -35.959], [-23.816, 0.831673, -33.7887], [-26.3693, 0.920835, -34.6287], [-24.7971, 0.865933, -32.4475]], [[-26.5163, 0, -30.1775], [-23.9498, 0, -31.0114], [-22.3636, 0, -28.8282], [-22.3636, 0, -31.5268], [-19.7971, 0, -32.3607], [-22.3636, 0, -33.1946], [-22.3636, 0, -35.8932], [-23.9498, 0, -33.71], [-26.5163, 0, -34.5439], [-24.9301, 0, -32.3607]], [[-26.6155, -0.929435, -30.0772], [-24.0448, -0.839661, -30.923], [-22.4465, -0.783848, -28.7379], [-22.4559, -0.784178, -31.4457], [-19.8851, -0.694405, -32.2914], [-22.4618, -0.784382, -33.1192], [-22.4712, -0.784712, -35.827], [-24.0542, -0.839991, -33.6308], [-26.6308, -0.929969, -34.4585], [-25.0325, -0.874156, -32.2734]], [[-26.6816, -1.86576, -29.9766], [-24.1098, -1.68592, -30.8342], [-22.5014, -1.57345, -28.6473], [-22.5203, -1.57477, -31.3642], [-19.9485, -1.39493, -32.2219], [-22.532, -1.57559, -33.0434], [-22.5509, -1.57691, -35.7604], [-24.1287, -1.68724, -33.5512], [-26.7123, -1.8679, -34.3727], [-25.1039, -1.75543, -32.1858]], [[-26.7143, -2.80779, -29.8754], [-24.1446, -2.5377, -30.745], [-22.528, -2.36779, -28.5563], [-22.5564, -2.37078, -31.2824], [-19.9867, -2.10069, -32.152], [-22.574, -2.37262, -32.9673], [-22.6024, -2.37561, -35.6934], [-24.173, -2.54068, -33.4711], [-26.7603, -2.81262, -34.2864], [-25.1437, -2.64271, -32.0977]], [[-26.7132, -3.7543, -29.7739], [-24.1489, -3.3939, -30.6554], [-22.5262, -3.16585, -28.465], [-22.564, -3.17117, -31.2003], [-19.9997, -2.81077, -32.0818], [-22.5874, -3.17445, -32.8907], [-22.6252, -3.17977, -35.626], [-24.1867, -3.39922, -33.3907], [-26.7744, -3.7629, -34.1996], [-25.1518, -3.53485, -32.0092]], [[-26.6781, -4.70407, -29.6719], [-24.1224, -4.25342, -30.5655], [-22.4956, -3.96659, -28.3735], [-22.5428, -3.97491, -31.1178], [-19.9871, -3.52426, -32.0114], [-22.572, -3.98005, -32.8138], [-22.6191, -3.98837, -35.5581], [-24.1695, -4.26174, -33.3098], [-26.7544, -4.71753, -34.1123], [-25.1277, -4.4307, -31.9202]], [[-26.6087, -5.65586, -29.5695], [-24.0648, -5.11513, -30.4752], [-22.4362, -4.76895, -28.2816], [-22.4926, -4.78095, -31.0349], [-19.9487, -4.24022, -31.9406], [-22.5274, -4.78836, -32.7366], [-22.5839, -4.80035, -35.4899], [-24.1212, -5.12712, -33.2285], [-26.7, -5.67526, -34.0245], [-25.0714, -5.32908, -31.8309]], [[-26.5049, -6.60842, -29.4666], [-23.9761, -5.9779, -30.3844], [-22.3476, -5.57189, -28.1893], [-22.4131, -5.58822, -30.9517], [-19.8843, -4.9577, -31.8695], [-22.4536, -5.59831, -32.6589], [-22.5191, -5.61465, -35.4213], [-24.0416, -5.99423, -33.1468], [-26.6109, -6.63484, -33.9362], [-24.9825, -6.22883, -31.7411]], [[-26.3665, -7.56048, -29.3633], [-23.8559, -6.84058, -30.2934], [-22.2299, -6.37432, -28.0968], [-22.3043, -6.39566, -30.8681], [-19.7937, -5.67577, -31.7981], [-22.3503, -6.40885, -32.5809], [-22.4247, -6.43019, -35.3522], [-23.9304, -6.86192, -33.0647], [-26.4869, -7.595, -33.8474], [-24.8609, -7.12875, -31.6509]], [[-26.1935, -8.51078, -29.2596], [-23.7044, -7.70202, -30.2019], [-22.083, -7.17519, -28.004], [-22.1661, -7.20219, -30.7842], [-19.677, -6.39344, -31.7265], [-22.2174, -7.21888, -32.5025], [-22.3005, -7.24588, -35.2828], [-23.7875, -7.72902, -32.9821], [-26.3279, -8.55446, -33.7582], [-24.7065, -8.02763, -31.5603]], [[-25.9857, -9.45803, -29.1555], [-23.5213, -8.56107, -30.11], [-21.9067, -7.9734, -27.9108], [-21.9983, -8.00671, -30.7], [-19.5339, -7.10975, -31.6545], [-22.0548, -8.0273, -32.4237], [-22.1464, -8.06061, -35.2129], [-23.6129, -8.59438, -32.8992], [-26.1338, -9.51193, -33.6684], [-24.5192, -8.92426, -31.4692]], [[-25.7433, -10.401, -29.0509], [-23.3068, -9.41654, -30.0178], [-21.7013, -8.76788, -27.8174], [-21.8009, -8.80815, -30.6154], [-19.3644, -7.82374, -31.5822], [-21.8625, -8.83303, -32.3446], [-21.9622, -8.8733, -35.1426], [-23.4064, -9.45681, -32.8158], [-25.9045, -10.4661, -33.5782], [-24.299, -9.81744, -31.3778]], [[-25.4662, -11.3383, -28.946], [-23.0607, -10.2673, -29.9252], [-21.4666, -9.55754, -27.7236], [-21.5741, -9.60539, -30.5304], [-19.1686, -8.53441, -31.5097], [-21.6405, -9.63496, -32.2651], [-21.7479, -9.68281, -35.072], [-23.1682, -10.3151, -32.732], [-25.6401, -11.4157, -33.4875], [-24.0459, -10.7059, -31.2859]], [[-25.1545, -12.2687, -28.8406], [-22.7832, -11.1121, -29.8322], [-21.2028, -10.3413, -27.6295], [-21.3177, -10.3973, -30.4451], [-18.9464, -9.24078, -31.4368], [-21.3887, -10.432, -32.1853], [-21.5036, -10.488, -35.0009], [-22.8982, -11.1682, -32.6479], [-25.3405, -12.3594, -33.3963], [-23.76, -11.5885, -31.1936]], [[-24.8085, -13.1909, -28.7347], [-22.4745, -11.9499, -29.7389], [-20.91, -11.1181, -27.5351], [-21.032, -11.1829, -30.3595], [-18.6979, -9.94188, -31.3636], [-21.1074, -11.223, -32.1051], [-21.2293, -11.2878, -34.9294], [-22.5965, -12.0147, -32.5633], [-25.0059, -13.2959, -33.3047], [-23.4414, -12.464, -31.1009]], [[-24.4283, -14.1037, -28.6285], [-22.1346, -12.7794, -29.6452], [-20.5884, -11.8867, -27.4404], [-20.717, -11.961, -30.2735], [-18.4233, -10.6367, -31.2902], [-20.7965, -12.0069, -32.0245], [-20.9251, -12.0811, -34.8575], [-22.2632, -12.8537, -32.4783], [-24.6364, -14.2238, -33.2125], [-23.0902, -13.3311, -31.0078]], [[-24.0142, -15.0057, -28.5218], [-21.7638, -13.5995, -29.5511], [-20.2383, -12.6463, -27.3454], [-20.373, -12.7305, -30.1872], [-18.1226, -11.3243, -31.2165], [-20.4563, -12.7825, -31.9435], [-20.591, -12.8667, -34.7853], [-21.8985, -13.6837, -32.3928], [-24.2322, -15.1419, -33.1199], [-22.7066, -14.1887, -30.9143]], [[-23.5664, -15.8957, -28.4148], [-21.3623, -14.4091, -29.4566], [-19.8598, -13.3956, -27.2501], [-20.0002, -13.4903, -30.1005], [-17.7961, -12.0036, -31.1424], [-20.0869, -13.5488, -31.8622], [-20.2273, -13.6435, -34.7126], [-21.5027, -14.5038, -32.307], [-23.7935, -16.0489, -33.0268], [-22.291, -15.0354, -30.8203]], [[-23.0853, -16.7724, -28.3073], [-20.9305, -15.2069, -29.3618], [-19.4532, -14.1336, -27.1546], [-19.5987, -14.2393, -30.0136], [-17.4439, -12.6738, -31.0681], [-19.6887, -14.3047, -31.7805], [-19.8342, -14.4104, -34.6395], [-21.076, -15.3126, -32.2208], [-23.3207, -16.9435, -32.9332], [-21.8435, -15.8702, -30.726]], [[-22.5713, -17.6346, -28.1994], [-20.4686, -15.9918, -29.2666], [-19.019, -14.8592, -27.0587], [-19.1691, -14.9765, -29.9262], [-17.0664, -13.3337, -30.9935], [-19.2618, -15.049, -31.6985], [-19.4119, -15.1662, -34.566], [-20.6187, -16.1091, -32.1342], [-22.8141, -17.8244, -32.8392], [-21.3645, -16.6918, -30.6312]], [[-22.0248, -18.481, -28.091], [-19.9771, -16.7627, -29.1711], [-18.5574, -15.5715, -26.9625], [-18.7115, -15.7008, -29.8386], [-16.6637, -13.9825, -30.9186], [-18.8067, -15.7807, -31.6161], [-18.9607, -15.91, -34.4922], [-20.1311, -16.892, -32.0471], [-22.2741, -18.6902, -32.7446], [-20.8544, -17.499, -30.536]], [[-21.4464, -19.3104, -27.9823], [-19.4563, -17.5185, -29.0751], [-18.0689, -16.2693, -26.866], [-18.2263, -16.4111, -29.7506], [-16.2363, -14.6192, -30.8434], [-18.3236, -16.4987, -31.5333], [-18.4811, -16.6404, -34.4179], [-19.6137, -17.6603, -31.9597], [-21.7011, -19.5397, -32.6496], [-20.3137, -18.2906, -30.4405]], [[-20.8365, -20.1216, -27.8732], [-18.9068, -18.258, -28.9789], [-17.554, -16.9517, -26.7692], [-17.7141, -17.1063, -29.6622], [-15.7844, -15.2428, -30.7679], [-17.8131, -17.2019, -31.4502], [-17.9732, -17.3565, -34.3432], [-19.0669, -18.4127, -31.8719], [-21.0956, -20.3718, -32.5542], [-19.7428, -19.0654, -30.3445]], [[-20.1957, -20.9133, -27.7636], [-18.329, -18.9802, -28.8822], [-17.0131, -17.6176, -26.6721], [-17.1753, -17.7855, -29.5736], [-15.3086, -15.8525, -30.6922], [-17.2755, -17.8893, -31.3667], [-17.4377, -18.0572, -34.2681], [-18.4911, -19.1481, -31.7836], [-20.4581, -21.185, -32.4582], [-19.1422, -19.8224, -30.2481]], [[-19.5247, -21.6844, -27.6537], [-17.7235, -19.684, -28.7852], [-16.4468, -18.266, -26.5748], [-16.6103, -18.4476, -29.4846], [-14.8091, -16.4472, -30.6161], [-16.7114, -18.5598, -31.2829], [-16.8749, -18.7414, -34.1927], [-17.887, -19.8655, -31.695], [-19.7893, -21.9782, -32.3618], [-18.5126, -20.5603, -30.1513]], [[-18.8241, -22.4337, -27.5433], [-17.0909, -20.3682, -28.6879], [-15.8557, -18.896, -26.4771], [-16.0198, -19.0916, -29.3952], [-14.2866, -17.0261, -30.5398], [-16.1212, -19.2125, -31.1987], [-16.2853, -19.4081, -34.1168], [-17.255, -20.5638, -31.606], [-19.0897, -22.7502, -32.2649], [-17.8544, -21.278, -30.0542]], [[-18.0947, -23.1602, -27.4326], [-16.4319, -21.0319, -28.5901], [-15.2403, -19.5067, -26.3792], [-15.4042, -19.7165, -29.3056], [-13.7414, -17.5882, -30.4632], [-15.5056, -19.8462, -31.1142], [-15.6695, -20.0561, -34.0405], [-16.5959, -21.2417, -31.5165], [-18.36, -23.4997, -32.1675], [-17.1684, -21.9745, -29.9566]], [[-17.3372, -23.8626, -27.3214], [-15.7471, -21.674, -28.4921], [-14.6013, -20.0969, -26.281], [-14.7643, -20.3214, -29.2156], [-13.1742, -18.1328, -30.3863], [-14.8651, -20.4601, -31.0293], [-15.0282, -20.6845, -33.9639], [-15.9101, -21.8984, -31.4267], [-17.601, -24.2257, -32.0697], [-16.4552, -22.6487, -29.8586]], [[-16.5524, -24.5399, -27.2098], [-15.0372, -22.2935, -28.3936], [-13.9394, -20.666, -26.1825], [-14.1007, -20.9052, -29.1253], [-12.5855, -18.6588, -30.3091], [-14.2005, -21.053, -30.944], [-14.3618, -21.2923, -33.8868], [-15.1985, -22.5327, -31.3364], [-16.8134, -24.927, -31.9714], [-15.7157, -23.2994, -29.7602]], [[-15.7411, -25.191, -27.0979], [-14.303, -22.8895, -28.2949], [-13.2553, -21.2129, -26.0837], [-13.4141, -21.4671, -29.0346], [-11.976, -19.1656, -30.2316], [-13.5123, -21.6242, -30.8584], [-13.6712, -21.8784, -33.8094], [-14.4618, -23.1437, -31.2458], [-15.9981, -25.6023, -31.8726], [-14.9505, -23.9257, -29.6615]], [[-14.9043, -25.815, -26.9855], [-13.5452, -23.461, -28.1957], [-12.5498, -21.7368, -25.9846], [-12.7053, -22.0062, -28.9437], [-11.3462, -19.6522, -30.1539], [-12.8014, -22.1726, -30.7725], [-12.9569, -22.442, -33.7315], [-13.7007, -23.7304, -31.1548], [-15.1559, -26.2508, -31.7734], [-14.1604, -24.5266, -29.5623]], [[-14.0428, -26.4107, -26.8728], [-12.7648, -24.0071, -28.0963], [-11.8236, -22.2369, -25.8853], [-11.9749, -22.5215, -28.8524], [-10.6969, -20.1179, -30.0758], [-12.0684, -22.6974, -30.6862], [-12.2198, -22.982, -33.6533], [-12.9161, -24.2917, -31.0634], [-14.2877, -26.8712, -31.6737], [-13.3465, -25.1011, -29.4627]], [[-13.1577, -26.9773, -26.7597], [-11.9625, -24.5268, -27.9964], [-11.0776, -22.7124, -25.7856], [-11.2239, -23.0123, -28.7608], [-10.0287, -20.5618, -29.9975], [-11.3143, -23.1977, -30.5995], [-11.4606, -23.4976, -33.5747], [-12.1088, -24.8268, -30.9716], [-13.3944, -27.4626, -31.5736], [-12.5095, -25.6482, -29.3628]], [[-12.2499, -27.5138, -26.6461], [-11.1393, -25.0194, -27.8962], [-10.3126, -23.1624, -25.6857], [-10.453, -23.4777, -28.6688], [-9.34237, -20.9833, -29.919], [-10.5397, -23.6726, -30.5125], [-10.6801, -23.9879, -33.4957], [-11.2797, -25.3347, -30.8794], [-12.4771, -28.024, -31.473], [-11.6503, -26.167, -29.2624]], [[-11.3205, -28.0192, -26.5322], [-10.2962, -25.4839, -27.7957], [-9.52946, -23.5862, -25.5855], [-9.66307, -23.9169, -28.5766], [-8.63872, -21.3816, -29.8401], [-9.74565, -24.1213, -30.4252], [-9.87926, -24.452, -33.4163], [-10.4298, -25.8146, -30.7868], [-11.5367, -28.5543, -31.3719], [-10.77, -26.6567, -29.1617]], [[-10.3705, -28.4928, -26.4179], [-9.43395, -25.9196, -27.6948], [-8.72917, -23.9832, -25.4851], [-8.85511, -24.3292, -28.484], [-7.91852, -21.756, -29.761], [-8.93294, -24.5431, -30.3375], [-9.05889, -24.8891, -33.3365], [-9.55989, -26.2656, -30.6938], [-10.5743, -29.0527, -31.2703], [-9.86953, -27.1163, -29.0606]], [[-9.40114, -28.9337, -26.3032], [-8.55373, -26.3257, -27.5936], [-7.91262, -24.3525, -25.3843], [-8.03, -24.7138, -28.3911], [-7.18259, -22.1057, -29.6816], [-8.10255, -24.9371, -30.2495], [-8.21992, -25.2983, -33.2563], [-8.67111, -26.6869, -30.6004], [-9.59106, -29.5183, -31.1683], [-8.94996, -27.5451, -28.959]], [[-8.41344, -29.3411, -26.1881], [-7.65651, -26.7014, -27.4921], [-7.08079, -24.6936, -25.2833], [-7.18871, -25.07, -28.2979], [-6.43178, -22.4303, -29.6019], [-7.25541, -25.3026, -30.1611], [-7.36333, -25.679, -33.1757], [-7.76443, -27.0778, -30.5067], [-8.58806, -29.9501, -31.0659], [-8.01233, -27.9423, -28.8571]], [[-7.40862, -29.7143, -26.0727], [-6.74337, -27.0462, -27.3902], [-6.23466, -25.0059, -25.182], [-6.33222, -25.3972, -28.2044], [-5.66698, -22.729, -29.5219], [-6.39252, -25.639, -30.0724], [-6.49008, -26.0303, -33.0948], [-6.84093, -27.4375, -30.4126], [-7.56647, -30.3475, -30.963], [-7.05777, -28.3072, -28.7549]], [[-6.38788, -30.0526, -25.9568], [-5.81539, -27.3592, -27.2879], [-5.37527, -25.2886, -25.0805], [-5.46157, -25.6947, -28.1106], [-4.88907, -23.0013, -29.4417], [-5.5149, -25.9456, -29.9833], [-5.6012, -26.3516, -33.0134], [-5.90168, -27.7652, -30.318], [-6.52751, -30.7095, -30.8596], [-6.08739, -28.6389, -28.6522]], [[-5.35245, -30.3553, -25.8406], [-4.87368, -27.64, -27.1853], [-4.50364, -25.5414, -24.9787], [-4.57778, -25.9619, -28.0165], [-4.099, -23.2466, -29.3612], [-4.6236, -26.2217, -29.8939], [-4.69773, -26.6422, -32.9317], [-4.94781, -28.0604, -30.2231], [-5.47241, -31.0356, -30.7558], [-5.10237, -28.937, -28.5491]], [[-4.3036, -30.6217, -25.724], [-3.91938, -27.8879, -27.0824], [-3.62085, -25.7637, -24.8766], [-3.68192, -26.1982, -27.922], [-3.2977, -23.4644, -29.2804], [-3.71967, -26.4668, -29.8042], [-3.78075, -26.9014, -32.8495], [-3.98046, -28.3224, -30.1278], [-4.40243, -31.3249, -30.6515], [-4.10389, -29.2007, -28.4457]], [[-3.24261, -30.8514, -25.607], [-2.95367, -28.1023, -26.9792], [-2.72797, -25.9549, -24.7743], [-2.7751, -26.4033, -27.8272], [-2.48616, -23.6542, -29.1994], [-2.80422, -26.6804, -29.7141], [-2.85134, -27.1287, -32.767], [-3.0008, -28.5507, -30.0322], [-3.31886, -31.5769, -30.5468], [-3.09316, -29.4295, -28.3419]], [[-2.17079, -31.0438, -25.4896], [-1.97773, -28.2828, -26.8756], [-1.82612, -26.1148, -24.6717], [-1.85841, -26.5765, -27.7322], [-1.66535, -23.8156, -29.1181], [-1.87836, -26.8619, -29.6237], [-1.91065, -27.3236, -32.6842], [-2.01002, -28.7446, -29.9361], [-2.22303, -31.7909, -30.4416], [-2.07143, -29.6228, -28.2377]], [[-1.08947, -31.1984, -25.3719], [-0.992762, -28.429, -26.7717], [-0.916418, -26.2428, -24.5688], [-0.932993, -26.7174, -27.6368], [-0.836285, -23.9481, -29.0365], [-0.943237, -27.0108, -29.5329], [-0.959813, -27.4854, -32.6009], [-1.00934, -28.9036, -29.8397], [-1.11629, -31.9664, -30.336], [-1.03995, -29.7801, -28.1331]], [[0, -31.3147, -25.2538], [0, -28.5404, -26.6674], [0, -26.3386, -24.4657], [0, -26.8257, -27.5411], [0, -24.0513, -28.9547], [0, -27.1267, -29.4418], [0, -27.6138, -32.5172], [0, -29.0275, -29.7428], [0, -32.1029, -30.2299], [0, -29.9011, -28.0282]], [[1.09625, -31.3925, -25.1353], [0.999312, -28.6166, -26.5628], [0.921976, -26.4019, -24.3623], [0.939402, -26.9009, -27.4451], [0.842464, -24.125, -28.8726], [0.950171, -27.2093, -29.3504], [0.967597, -27.7083, -32.4332], [1.01674, -29.1156, -29.6457], [1.12445, -32.1999, -30.1234], [1.04711, -29.9853, -27.9229]], [[2.19789, -31.4313, -25.0165], [2.00391, -28.6573, -26.4579], [1.84834, -26.4325, -24.2586], [1.88403, -26.9428, -27.3488], [1.69005, -24.1688, -28.7902], [1.90608, -27.2582, -29.2586], [1.94177, -27.7686, -32.3488], [2.0396, -29.1676, -29.5481], [2.25563, -32.2571, -30.0165], [2.10006, -30.0323, -27.8172]], [[3.30353, -31.431, -24.8973], [3.01253, -28.6623, -26.3527], [2.77792, -26.4301, -24.1548], [2.83268, -26.9511, -27.2522], [2.54168, -24.1824, -28.7076], [2.86652, -27.2732, -29.1665], [2.92129, -27.7942, -32.264], [3.06729, -29.1833, -29.4501], [3.39214, -32.274, -29.9091], [3.15753, -30.0418, -27.7111]], [[4.41174, -31.3912, -24.7777], [4.02387, -28.6313, -26.2471], [3.70951, -26.3945, -24.0506], [3.78415, -26.9256, -27.1553], [3.39627, -24.1657, -28.6247], [3.83027, -27.2538, -29.0741], [3.90491, -27.7849, -32.1788], [4.0985, -29.1624, -29.3518], [4.53251, -32.2505, -29.8012], [4.21815, -30.0137, -27.6047]], [[5.52111, -31.3118, -24.6578], [5.03663, -28.5641, -26.1413], [4.64192, -26.3256, -23.9462], [4.7372, -26.866, -27.0581], [4.25272, -24.1184, -28.5416], [4.79609, -27.2, -28.9813], [4.89137, -27.7404, -32.0932], [5.13191, -29.1045, -29.2531], [5.67528, -32.1861, -29.6929], [5.28057, -29.9476, -27.4979]], [[6.63019, -31.1926, -24.5375], [6.04951, -28.4607, -26.035], [5.57394, -26.2233, -23.8416], [5.69062, -26.7723, -26.9606], [5.10994, -24.0404, -28.4582], [5.76274, -27.1115, -28.8883], [5.87942, -27.6605, -32.0073], [6.16619, -29.0096, -29.1541], [6.81899, -32.0808, -29.5842], [6.34342, -29.8435, -27.3907]], [[7.73755, -31.0336, -24.4168], [7.06118, -28.3209, -25.9285], [6.50436, -26.0876, -23.7367], [6.64317, -26.6443, -26.8628], [5.9668, -23.9315, -28.3745], [6.72895, -26.9883, -28.7948], [6.86775, -27.5451, -31.921], [7.19999, -28.8776, -29.0546], [7.96214, -31.9344, -29.475], [7.40532, -29.7011, -27.2831]], [[8.84174, -30.8348, -24.2958], [8.07034, -28.1446, -25.8217], [7.43196, -25.9183, -23.6315], [7.59358, -26.482, -26.7647], [6.82218, -23.7918, -28.2906], [7.69347, -26.8303, -28.7011], [7.85509, -27.394, -31.8343], [8.23196, -28.7083, -28.9548], [9.10325, -31.7468, -29.3654], [8.46488, -29.5205, -27.1752]], [[9.94131, -30.5962, -24.1744], [9.07564, -27.9319, -25.7145], [8.35552, -25.7156, -23.5261], [8.54063, -26.2853, -26.6663], [7.67496, -23.6211, -28.2064], [8.65503, -26.6374, -28.607], [8.84014, -27.2071, -31.7472], [9.26075, -28.5016, -28.8546], [10.2408, -31.518, -29.2553], [9.5207, -29.3017, -27.067]], [[11.0348, -30.3179, -24.0527], [10.0758, -27.6829, -25.607], [9.27382, -25.4796, -23.4205], [9.48304, -26.0544, -26.5676], [8.52401, -23.4195, -28.1219], [9.61235, -26.4097, -28.5126], [9.82158, -26.9846, -31.6597], [10.285, -28.2578, -28.7541], [11.3733, -31.248, -29.1448], [10.5714, -29.0447, -26.9583]], [[12.1208, -30, -23.9306], [11.0694, -27.3977, -25.4992], [10.1856, -25.2103, -23.3146], [10.4196, -25.7894, -26.4686], [9.36819, -23.1871, -28.0372], [10.5642, -26.1472, -28.4179], [10.7981, -26.7263, -31.5719], [11.3033, -27.9767, -28.6532], [12.4993, -30.9369, -29.0339], [11.6156, -28.7495, -26.8493]], [[13.1978, -29.6427, -23.8082], [12.0552, -27.0763, -25.3911], [11.0898, -24.908, -23.2085], [11.349, -25.4902, -26.3694], [10.2064, -22.9239, -27.9523], [11.5092, -25.8501, -28.3229], [11.7684, -26.4323, -31.4837], [12.3144, -27.6586, -28.5519], [13.6172, -30.5847, -28.9225], [12.6518, -28.4164, -26.74]], [[14.2643, -29.2462, -23.6854], [13.0318, -26.7191, -25.2826], [11.985, -24.5728, -23.1022], [12.27, -25.1572, -26.2698], [11.0375, -22.6301, -27.8671], [12.4462, -25.5184, -28.2275], [12.7312, -26.1029, -31.3952], [13.3168, -27.3035, -28.4503], [14.7255, -30.1918, -28.8107], [13.6787, -28.0456, -26.6303]], [[15.319, -28.8109, -23.5622], [13.9979, -26.3262, -25.1739], [12.8701, -24.2051, -22.9956], [13.1814, -24.7906, -26.1699], [11.8603, -22.3059, -27.7816], [13.3738, -25.1525, -28.1318], [13.6852, -25.738, -31.3062], [14.3092, -26.9118, -28.3483], [15.8228, -29.7584, -28.6985], [14.695, -27.6372, -26.5202]], [[16.3605, -28.3372, -23.4388], [14.9523, -25.8981, -25.0648], [13.7438, -23.805, -22.8887], [14.0819, -24.3906, -26.0698], [12.6737, -21.9515, -27.6959], [14.2909, -24.7525, -28.0358], [14.629, -25.3381, -31.2169], [15.2903, -26.4836, -28.2459], [16.9075, -29.2846, -28.5859], [15.6991, -27.1916, -26.4097]], [[17.3872, -27.8253, -23.3149], [15.8935, -25.4349, -24.9555], [14.6051, -23.3731, -22.7817], [14.9704, -23.9576, -25.9694], [13.4767, -21.5672, -27.6099], [15.1961, -24.3188, -27.9395], [15.5613, -24.9033, -31.1272], [16.2587, -26.0194, -28.1432], [17.9781, -28.771, -28.4728], [16.6898, -26.7092, -26.299]], [[18.3978, -27.2759, -23.1908], [16.8204, -24.9372, -24.8458], [15.4527, -22.9096, -22.6744], [15.8454, -23.4918, -25.8687], [14.268, -21.1532, -27.5237], [16.0882, -23.8517, -27.8429], [16.4809, -24.4339, -31.0372], [17.2131, -25.5195, -28.0401], [19.0333, -28.218, -28.3593], [17.6656, -26.1903, -26.1878]], [[19.3909, -26.6893, -23.0663], [17.7315, -24.4054, -24.7358], [16.2855, -22.415, -22.5668], [16.706, -22.9938, -25.7677], [15.0466, -20.7099, -27.4372], [16.9659, -23.3516, -27.7459], [17.3865, -23.9304, -30.9467], [18.1521, -24.9842, -27.9367], [20.0714, -27.6259, -28.2453], [18.6253, -25.6355, -26.0763]], [[20.3651, -26.0662, -22.9414], [18.6258, -23.8399, -24.6255], [17.1022, -21.8898, -22.4591], [17.5508, -22.464, -25.6664], [15.8115, -20.2378, -27.3505], [17.8281, -22.8189, -27.6486], [18.2767, -23.3931, -30.8559], [19.0744, -24.4141, -27.8329], [21.091, -26.9953, -28.1309], [19.5674, -25.0452, -25.9645]], [[21.3191, -25.4072, -22.8162], [19.5019, -23.2414, -24.515], [17.9018, -21.3345, -22.3511], [18.3787, -21.9029, -25.5648], [16.5615, -19.7372, -27.2636], [18.6735, -22.2542, -27.551], [19.1504, -22.8225, -30.7648], [19.9788, -23.8098, -27.7287], [22.0908, -26.3268, -28.0162], [20.4907, -24.4199, -25.8523]], [[22.2516, -24.7129, -22.6907], [20.3585, -22.6104, -24.4041], [18.6832, -20.7498, -22.2429], [19.1885, -21.311, -25.463], [17.2955, -19.2086, -27.1764], [19.5009, -21.6579, -27.4531], [20.0062, -22.2192, -30.6732], [20.8639, -23.1717, -27.6242], [23.0693, -25.621, -27.9009], [21.3939, -23.7604, -25.7398]], [[23.1611, -23.984, -22.5648], [21.1945, -21.9476, -24.2929], [19.4452, -20.136, -22.1344], [19.9791, -20.689, -25.3609], [18.0125, -18.6525, -27.0889], [20.3091, -21.0307, -27.3549], [20.843, -21.5836, -30.5813], [21.7285, -22.5005, -27.5193], [24.025, -24.8786, -27.7853], [22.2757, -23.0671, -25.6269]], [[24.0464, -23.2214, -22.4386], [22.0087, -21.2535, -24.1814], [20.1867, -19.4941, -22.0258], [20.7493, -20.0374, -25.2585], [18.7115, -18.0695, -27.0012], [21.097, -20.3731, -27.2564], [21.6596, -20.9164, -30.4891], [22.5713, -21.7968, -27.4141], [24.9567, -24.1004, -27.6693], [23.1347, -22.3409, -25.5136]], [[24.9063, -22.4258, -22.3121], [22.7999, -20.5291, -24.0696], [20.9068, -18.8246, -21.9169], [21.498, -19.3569, -25.1558], [19.3915, -17.4602, -26.9133], [21.8634, -19.6859, -27.1576], [22.4546, -20.2182, -30.3965], [23.3911, -21.0614, -27.3085], [25.8629, -23.2871, -27.5528], [23.9699, -21.5826, -25.4001]], [[25.7396, -21.5981, -22.1853], [23.5669, -19.775, -23.9575], [21.6043, -18.1282, -21.8078], [22.2241, -18.6483, -25.0529], [20.0515, -16.8252, -26.8251], [22.6072, -18.9697, -27.0584], [23.227, -19.4898, -30.3035], [24.1867, -20.2951, -27.2026], [26.7424, -22.4396, -27.4359], [24.7799, -20.7928, -25.2861]], [[26.5449, -20.7392, -22.0581], [24.3087, -18.992, -23.8452], [22.2784, -17.4058, -21.6985], [22.9266, -17.9123, -24.9496], [20.6904, -16.1651, -26.7367], [23.3273, -18.2253, -26.959], [23.9756, -18.7318, -30.2101], [24.957, -19.4985, -27.0963], [27.5939, -21.5587, -27.3186], [25.5635, -19.9724, -25.1719]], [[27.3212, -19.85, -21.9306], [25.0241, -18.1811, -23.7325], [22.9279, -16.6581, -21.5889], [23.6045, -17.1496, -24.8461], [21.3074, -15.4807, -26.648], [24.0226, -17.4535, -26.8592], [24.6992, -17.945, -30.1164], [25.7007, -18.6727, -26.9897], [28.416, -20.6454, -27.2009], [26.3197, -19.1224, -25.0573]], [[28.0673, -18.9316, -21.8028], [25.7122, -17.3431, -23.6195], [23.5519, -15.886, -21.4792], [24.2566, -16.3613, -24.7424], [21.9015, -14.7727, -26.5591], [24.6921, -16.6551, -26.7591], [25.3968, -17.1304, -30.0223], [26.4169, -17.8184, -26.8827], [29.2075, -19.7007, -27.0827], [27.0473, -18.2436, -24.9424]], [[28.7821, -17.985, -21.6746], [26.3718, -16.4789, -23.5063], [24.1496, -15.0903, -21.3692], [24.8821, -15.5481, -24.6383], [22.4718, -14.0419, -26.47], [25.3348, -15.8309, -26.6588], [26.0673, -16.2887, -29.9279], [27.1043, -16.9366, -26.7754], [29.9673, -18.7256, -26.9642], [27.7451, -17.3371, -24.8271]], [[29.4645, -17.0113, -21.5461], [27.0019, -15.5896, -23.3928], [24.72, -14.2721, -21.259], [25.48, -14.7109, -24.534], [23.0174, -13.2891, -26.3806], [25.9496, -14.982, -26.5581], [26.7096, -15.4208, -29.8331], [27.7619, -16.0283, -26.6678], [30.6941, -17.7213, -26.8452], [28.4122, -16.4038, -24.7115]], [[30.1135, -16.0116, -21.4173], [27.6017, -14.6761, -23.2789], [25.2623, -13.4322, -21.1486], [26.0493, -13.8507, -24.4294], [23.5375, -12.5151, -26.291], [26.5357, -14.1093, -26.4571], [27.3228, -14.5278, -29.7379], [28.3887, -15.0945, -26.5597], [31.3869, -16.6887, -26.7258], [29.0475, -15.4448, -24.5955]], [[30.7281, -14.9871, -21.2882], [28.1701, -13.7395, -23.1648], [25.7755, -12.5716, -21.038], [26.5892, -12.9684, -24.3246], [24.0313, -11.7208, -26.2012], [27.0921, -13.2137, -26.3558], [27.9057, -13.6105, -29.6424], [28.9838, -14.1363, -26.4514], [32.0446, -15.6292, -26.606], [29.65, -14.4613, -24.4793]], [[31.3073, -13.9389, -21.1588], [28.7063, -12.7809, -23.0504], [26.2591, -11.6913, -20.9272], [27.0989, -12.0652, -24.2195], [24.4979, -10.9072, -26.1111], [27.6178, -12.2963, -26.2543], [28.4576, -12.6701, -29.5465], [29.5461, -13.1548, -26.3427], [32.666, -14.5439, -26.4859], [30.2188, -13.4543, -24.3626]], [[31.8502, -12.8683, -21.0291], [29.2095, -11.8014, -22.9358], [26.7121, -10.7924, -20.8162], [27.5774, -11.142, -24.1141], [24.9367, -10.0751, -26.0208], [28.1122, -11.3581, -26.1524], [28.9774, -11.7076, -29.4503], [30.0748, -12.151, -26.2337], [33.2503, -13.434, -26.3653], [30.7529, -12.425, -24.2457]], [[32.3561, -11.7766, -20.899], [29.6788, -10.8022, -22.8208], [27.134, -9.87595, -20.705], [28.0241, -10.1999, -24.0085], [25.3468, -9.22548, -25.9303], [28.5742, -10.4002, -26.0502], [29.4644, -10.7242, -29.3537], [30.5689, -11.1262, -26.1243], [33.7964, -12.3009, -26.2443], [31.2515, -11.3746, -24.1284]], [[32.8239, -10.6651, -20.7687], [30.1134, -9.78444, -22.7056], [27.5239, -8.94305, -20.5936], [28.4382, -9.24013, -23.9026], [25.7277, -8.35942, -25.8395], [29.0033, -9.42374, -25.9477], [29.9176, -9.72082, -29.2568], [31.0277, -10.0815, -26.0146], [34.3033, -11.1458, -26.1229], [31.7138, -10.3044, -24.0109]], [[33.2531, -9.53517, -20.638], [30.5127, -8.74936, -22.5901], [27.8813, -7.99482, -20.4819], [28.819, -8.26371, -23.7965], [26.0786, -7.47791, -25.7485], [29.3985, -8.42989, -25.845], [30.3363, -8.69878, -29.1595], [31.4504, -9.01825, -25.9046], [34.7704, -9.97024, -26.0011], [32.139, -9.2157, -23.8929]], [[33.6428, -8.38809, -20.5071], [30.8759, -7.69822, -22.4743], [28.2055, -7.03242, -20.3701], [29.1658, -7.27185, -23.6901], [26.3989, -6.58198, -25.6573], [29.7593, -7.41983, -25.7419], [30.7196, -7.65927, -29.0619], [31.8362, -7.93765, -25.7942], [35.1966, -8.7755, -25.8789], [32.5262, -8.1097, -23.7747]], [[33.9923, -7.2253, -20.3758], [31.2024, -6.63227, -22.3582], [28.496, -6.05702, -20.2581], [29.4781, -6.26575, -23.5834], [26.6881, -5.67272, -25.5658], [30.085, -6.39476, -25.6386], [31.067, -6.6035, -28.9639], [32.1844, -6.841, -25.6835], [35.5813, -7.56304, -25.7563], [32.875, -6.98779, -23.6561]], [[34.3012, -6.04822, -20.2442], [31.4916, -5.55281, -22.2419], [28.7523, -5.06981, -20.1459], [29.7551, -5.24663, -23.4765], [26.9456, -4.75123, -25.4741], [30.3749, -5.35592, -25.5349], [31.3777, -5.53274, -28.8655], [32.4944, -5.72963, -25.5725], [35.9237, -6.33432, -25.6333], [33.1845, -5.85132, -23.5373]], [[34.5686, -4.85831, -20.1123], [31.7429, -4.46118, -22.1253], [28.974, -4.07203, -20.0335], [29.9965, -4.21574, -23.3693], [27.1708, -3.81861, -25.3822], [30.6285, -4.30456, -25.431], [31.6511, -4.44827, -28.7668], [32.7655, -4.60489, -25.4611], [36.2232, -5.09084, -25.5099], [33.4542, -4.70169, -23.4181]], [[34.7943, -3.65703, -19.9802], [31.956, -3.35871, -22.0084], [29.1605, -3.06489, -19.9209], [30.2018, -3.17433, -23.2619], [27.3634, -2.87601, -25.2901], [30.8453, -3.24197, -25.3268], [31.8866, -3.35142, -28.6678], [32.9972, -3.46815, -25.3494], [36.4791, -3.83411, -25.3861], [33.6836, -3.54029, -23.2985]], [[34.9776, -2.44587, -19.8477], [32.1302, -2.24676, -21.8912], [29.3115, -2.04966, -19.8081], [30.3704, -2.1237, -23.1542], [27.523, -1.92459, -25.1977], [31.0248, -2.16947, -25.2222], [32.0837, -2.24351, -28.5684], [33.1891, -2.3208, -25.2374], [36.6909, -2.56568, -25.2619], [33.8722, -2.36858, -23.1787]], [[35.1182, -1.22635, -19.715], [32.2652, -1.12673, -21.7738], [29.4267, -1.0276, -19.6951], [30.502, -1.06515, -23.0463], [27.649, -0.965525, -25.1052], [31.1666, -1.08836, -25.1174], [32.2418, -1.12591, -28.4686], [33.3405, -1.16428, -25.125], [36.858, -1.28711, -25.1373], [34.0195, -1.18799, -23.0586]], [[35.2156, 0, -19.5819], [32.3607, 0, -21.6561], [29.5057, 0, -19.5819], [30.5962, 0, -22.9381], [27.7413, 0, -25.0124], [31.2702, 0, -25.0123], [32.3607, 0, -28.3686], [33.4512, 0, -25.0123], [36.9801, 0, -25.0124], [34.1251, 0, -22.9381]], [[35.2697, 1.23165, -19.4486], [32.4163, 1.132, -21.5382], [29.5484, 1.03185, -19.4685], [30.6528, 1.07042, -22.8297], [27.7994, 0.970776, -24.9193], [31.3354, 1.09426, -24.907], [32.4398, 1.13282, -28.2681], [33.5207, 1.17057, -24.8993], [37.0567, 1.29405, -24.887], [34.1888, 1.1939, -22.8173]], [[35.2801, 2.46703, -19.3149], [32.4318, 2.26785, -21.42], [29.5545, 2.06665, -19.355], [30.6715, 2.14476, -22.721], [27.8232, 1.94559, -24.8261], [31.3618, 2.19303, -24.8013], [32.4788, 2.27114, -28.1673], [33.5488, 2.34596, -24.786], [37.0875, 2.59341, -24.7613], [34.2101, 2.3922, -22.6962]], [[35.2467, 3.70458, -19.181], [32.407, 3.40612, -21.3015], [29.5238, 3.10308, -19.2413], [30.652, 3.22166, -22.6121], [27.8124, 2.9232, -24.7326], [31.3493, 3.29494, -24.6954], [32.4775, 3.41352, -28.0662], [33.5352, 3.52469, -24.6724], [37.0721, 3.89644, -24.6351], [34.1889, 3.5934, -22.5749]], [[35.1693, 4.94272, -19.0468], [32.3418, 4.54534, -21.1828], [29.4563, 4.13982, -19.1274], [30.5943, 4.29975, -22.5029], [27.7668, 3.90237, -24.639], [31.2976, 4.39859, -24.5892], [32.4356, 4.55852, -27.9648], [33.4797, 4.70527, -24.5584], [37.0105, 5.20149, -24.5086], [34.1251, 4.79597, -22.4532]], [[35.0478, 6.17987, -18.9123], [32.236, 5.68407, -21.0638], [29.352, 5.17554, -19.0133], [30.4982, 5.37766, -22.3935], [27.6864, 4.88186, -24.5451], [31.2066, 5.50257, -24.4827], [32.3529, 5.70468, -27.8629], [33.3822, 5.88619, -24.4441], [36.9024, 6.50689, -24.3817], [34.0184, 5.99836, -22.3311]], [[34.8822, 7.41444, -18.7775], [32.0896, 6.82086, -20.9446], [29.2107, 6.20892, -18.899], [30.3637, 6.454, -22.2839], [27.5711, 5.86042, -24.451], [31.0763, 6.60547, -24.3759], [32.2293, 6.85054, -27.7608], [33.2426, 7.06593, -24.3295], [36.7478, 7.81098, -24.2544], [33.8689, 7.19905, -22.2088]], [[34.6726, 8.64484, -18.6425], [31.9026, 7.95422, -20.8251], [29.0326, 7.23863, -18.7845], [30.1907, 7.52739, -22.174], [27.4208, 6.83677, -24.3566], [30.9065, 7.70586, -24.2688], [32.0647, 7.99462, -27.6583], [33.0608, 8.24298, -24.2146], [36.5465, 9.11207, -24.1268], [33.6764, 8.39648, -22.0862]], [[34.419, 9.86949, -18.5072], [31.6752, 9.08271, -20.7054], [28.8177, 8.26333, -18.6699], [29.9794, 8.59645, -22.0639], [27.2356, 7.80967, -24.2621], [30.6974, 8.80233, -24.1615], [31.8591, 9.13545, -27.5555], [32.8369, 9.41583, -24.0993], [36.2987, 10.4085, -23.9987], [33.4412, 9.58911, -21.9633]], [[34.1216, 11.0868, -18.3716], [31.4073, 10.2048, -20.5854], [28.5661, 9.2817, -18.5551], [29.7297, 9.65978, -21.9536], [27.0154, 8.77784, -24.1673], [30.4489, 9.89345, -24.0539], [31.6125, 10.2715, -27.4523], [32.5709, 10.5829, -23.9838], [36.0044, 11.6985, -23.8703], [33.1632, 10.7754, -21.8401]], [[33.7806, 12.2951, -18.2357], [31.0992, 11.3192, -20.4651], [28.2781, 10.2924, -18.4402], [29.442, 10.716, -21.843], [26.7605, 9.74003, -24.0724], [30.1612, 10.9778, -23.946], [31.3251, 11.4014, -27.3488], [32.263, 11.7428, -23.8679], [35.6637, 12.9805, -23.7415], [32.8427, 11.9538, -21.7166]], [[33.3963, 13.493, -18.0995], [30.7511, 12.4242, -20.3446], [27.9539, 11.2941, -18.325], [29.1162, 11.7637, -21.7321], [26.471, 10.695, -23.9772], [29.8346, 12.0539, -23.8379], [30.9969, 12.5235, -27.245], [31.9134, 12.8938, -23.7517], [35.2769, 14.2528, -23.6124], [32.4798, 13.1227, -21.5928]], [[32.969, 14.6788, -17.9631], [30.3633, 13.5186, -20.2239], [27.5938, 12.2856, -18.2097], [28.7528, 12.8016, -21.6211], [26.1471, 11.6414, -23.8818], [29.4691, 13.1205, -23.7294], [30.6281, 13.6365, -27.1408], [31.5222, 14.0346, -23.6352], [34.8443, 15.5137, -23.4828], [32.0749, 14.2806, -21.4687]], [[32.4991, 15.8509, -17.8264], [29.936, 14.6008, -20.1029], [27.1981, 13.2654, -18.0943], [28.352, 13.8282, -21.5098], [25.7889, 12.5781, -23.7863], [29.0651, 14.176, -23.6207], [30.219, 14.7388, -27.0363], [31.0899, 15.1636, -23.5184], [34.3661, 16.7615, -23.3529], [31.6282, 15.4261, -21.3443]], [[31.987, 17.0078, -17.6895], [29.4698, 15.6694, -19.9817], [26.7671, 14.2323, -17.9786], [27.9141, 14.8422, -21.3983], [25.3969, 13.5038, -23.6905], [28.623, 15.2191, -23.5118], [29.7699, 15.829, -26.9314], [30.6168, 16.2792, -23.4013], [33.8428, 17.9945, -23.2226], [31.1401, 16.5575, -21.2196]], [[31.4332, 18.148, -17.5523], [28.965, 16.723, -19.8602], [26.3014, 15.1851, -17.8628], [27.4396, 15.8423, -21.2866], [24.9714, 14.4172, -23.5945], [28.143, 16.2484, -23.4025], [29.2812, 16.9055, -26.8263], [30.1032, 17.3801, -23.2839], [33.2748, 19.2112, -23.092], [30.6112, 17.6734, -21.0946]], [[30.8383, 19.2699, -17.4148], [28.4221, 17.7601, -19.7385], [25.8013, 16.1225, -17.7469], [26.9289, 16.827, -21.1746], [24.5127, 15.3172, -23.4983], [27.6257, 17.2624, -23.293], [28.7532, 17.967, -26.7208], [29.5496, 18.4647, -23.1662], [32.6627, 20.4099, -22.961], [30.0419, 18.7722, -20.9694]], [[30.2029, 20.3721, -17.2771], [27.8417, 18.7795, -19.6165], [25.2675, 17.0431, -17.6307], [26.3824, 17.7952, -21.0624], [24.0212, 16.2025, -23.4019], [27.0715, 18.2599, -23.1833], [28.1864, 19.012, -26.6149], [28.9566, 19.5315, -23.0482], [32.0069, 21.5889, -22.8296], [29.4327, 19.8526, -20.8438]], [[29.5276, 21.4531, -17.1391], [27.2243, 19.7796, -19.4943], [24.7004, 17.9459, -17.5145], [25.8008, 18.7454, -20.95], [23.4975, 17.072, -23.3052], [26.4809, 19.2395, -23.0732], [27.5814, 20.039, -26.5087], [28.3248, 20.5792, -22.9298], [31.3082, 22.7467, -22.6978], [28.7842, 20.913, -20.718]], [[28.8133, 22.5114, -17.0008], [26.5707, 20.7593, -19.3719], [24.1007, 18.8295, -17.398], [25.1847, 19.6764, -20.8373], [22.9421, 17.9243, -23.2084], [25.8546, 20.1998, -22.9629], [26.9386, 21.0468, -26.4023], [27.6547, 21.6062, -22.8112], [30.5672, 23.8817, -22.5657], [28.0972, 21.952, -20.5918]], [[28.0605, 23.5456, -16.8623], [25.8814, 21.7171, -19.2493], [23.469, 19.6928, -17.2814], [24.5346, 20.587, -20.7245], [22.3555, 18.7585, -23.1114], [25.1932, 21.1396, -22.8524], [26.2588, 22.0338, -26.2954], [26.947, 22.6112, -22.6923], [29.7847, 24.9924, -22.4333], [27.3723, 22.9681, -20.4654]], [[27.2702, 24.5542, -16.7235], [25.1572, 22.6517, -19.1264], [22.806, 20.5346, -17.1647], [23.8513, 21.4758, -20.6114], [21.7383, 19.5732, -23.0142], [24.4973, 22.0575, -22.7416], [25.5426, 22.9987, -26.1883], [26.2025, 23.5928, -22.5731], [28.9616, 26.0771, -22.3004], [26.6103, 23.9601, -20.3388]], [[26.4433, 25.536, -16.5845], [24.399, 23.5618, -19.0032], [22.1125, 21.3538, -17.0478], [23.1355, 22.3417, -20.4981], [21.0911, 20.3675, -22.9168], [23.7677, 22.9522, -22.6305], [24.7907, 23.9401, -26.0808], [25.4219, 24.5497, -22.4536], [28.0985, 27.1344, -22.1672], [25.8121, 24.9264, -20.2118]], [[25.5807, 26.4896, -16.4453], [23.6075, 24.4463, -18.8799], [21.3893, 22.1492, -16.9307], [22.388, 23.1834, -20.3846], [20.4148, 21.1401, -22.8192], [23.0052, 23.8226, -22.5192], [24.0039, 24.8568, -25.973], [24.6062, 25.4804, -22.3337], [27.1966, 28.1629, -22.0337], [24.9784, 25.8659, -20.0845]], [[24.6833, 27.4136, -16.3058], [22.7836, 25.3038, -18.7563], [20.6371, 22.9198, -16.8135], [21.6096, 23.9999, -20.2708], [19.7099, 21.8901, -22.7214], [22.2106, 24.6673, -22.4076], [23.183, 25.7474, -25.8649], [23.7561, 26.3838, -22.2136], [26.2567, 29.1611, -21.8998], [24.1102, 26.7771, -19.957]], [[23.7522, 28.3067, -16.166], [21.9283, 26.1332, -18.6325], [19.8569, 23.6645, -16.6962], [20.8011, 24.7898, -20.1569], [18.9773, 22.6163, -22.6234], [21.3847, 25.4853, -22.2957], [22.329, 26.6106, -25.7564], [22.8726, 27.2585, -22.0932], [25.28, 30.1275, -21.7656], [23.2085, 27.6589, -19.8292]], [[22.7884, 29.1678, -16.026], [21.0426, 26.9333, -18.5085], [19.0495, 24.3823, -16.5787], [19.9636, 25.5522, -20.0427], [18.2178, 23.3177, -22.5252], [20.5285, 26.2753, -22.1836], [21.4426, 27.4453, -25.6477], [21.9566, 28.1032, -21.9725], [24.2674, 31.0609, -21.631], [22.2744, 28.5099, -19.7012]], [[21.7931, 29.9957, -15.8858], [20.1274, 27.703, -18.3842], [18.216, 25.0721, -16.4611], [19.0979, 26.286, -19.9284], [17.4322, 23.9933, -22.4268], [19.643, 27.0362, -22.0713], [20.5249, 28.2501, -25.5386], [21.0093, 28.9169, -21.8515], [23.2201, 31.9598, -21.496], [21.3087, 29.3289, -19.5728]], [[20.7675, 30.7891, -15.7453], [19.1838, 28.4412, -18.2598], [17.3572, 25.7331, -16.3433], [18.205, 26.9901, -19.8138], [16.6214, 24.6422, -22.3283], [18.729, 27.767, -21.9587], [19.5769, 29.024, -25.4292], [20.0317, 29.6982, -21.7303], [22.1394, 32.823, -21.3607], [20.3127, 30.1149, -19.4442]], [[19.7127, 31.5469, -15.6046], [18.2129, 29.1468, -18.1351], [16.4742, 26.3642, -16.2254], [17.286, 27.6635, -19.699], [15.7863, 25.2633, -22.2295], [17.7878, 28.4664, -21.8458], [18.5997, 29.7657, -25.3194], [19.0248, 30.4461, -21.6087], [21.0263, 33.6492, -21.2251], [19.2876, 30.8666, -19.3154]], [[18.63, 32.2682, -15.4637], [17.2159, 29.8189, -18.0102], [15.568, 26.9646, -16.1073], [16.342, 28.3051, -19.584], [14.9279, 25.8559, -22.1305], [16.8203, 29.1336, -21.7327], [17.5943, 30.4742, -25.2094], [17.9899, 31.1594, -21.4869], [19.8823, 34.4372, -21.0891], [18.2344, 31.5829, -19.1862]], [[17.5207, 32.9517, -15.3225], [16.194, 30.4564, -17.8851], [14.6398, 27.5334, -15.9891], [15.374, 28.9142, -19.4688], [14.0472, 26.4189, -22.0314], [15.8277, 29.7676, -21.6194], [16.5619, 31.1484, -25.099], [16.9281, 31.8372, -21.3647], [18.7087, 35.1859, -20.9527], [17.1545, 32.2629, -19.0568]], [[16.3862, 33.5966, -15.1811], [15.1482, 31.0584, -17.7597], [13.6906, 28.0699, -15.8708], [14.3831, 29.4898, -19.3534], [13.1452, 26.9516, -21.932], [14.8111, 30.3673, -21.5058], [15.5037, 31.7872, -24.9884], [15.8407, 32.4783, -21.2423], [17.5067, 35.894, -20.816], [16.0491, 32.9055, -18.9271]], [[15.2277, 34.2019, -15.0395], [14.08, 31.6241, -17.6342], [12.7216, 28.5732, -15.7524], [13.3706, 30.031, -19.2378], [12.2229, 27.4532, -21.8325], [13.7718, 30.9319, -21.3919], [14.4208, 32.3897, -24.8774], [14.729, 33.0819, -21.1196], [16.2779, 36.5607, -20.679], [14.9195, 33.5097, -18.7972]], [[14.0467, 34.7667, -14.8976], [12.9905, 32.1526, -17.5084], [11.7339, 29.0425, -15.6338], [12.3377, 30.537, -19.122], [11.2816, 27.9228, -21.7328], [12.7109, 31.4606, -21.2778], [13.3147, 32.955, -24.7661], [13.5943, 33.647, -20.9966], [15.0236, 37.1848, -20.5417], [13.7671, 34.0747, -18.667]], [[12.8446, 35.2902, -14.7555], [11.8811, 32.643, -17.3825], [10.7289, 29.4773, -15.515], [11.2856, 31.007, -19.006], [10.3221, 28.3598, -21.6329], [11.6297, 31.9524, -21.1635], [12.1865, 33.4821, -24.6545], [12.4379, 34.1727, -20.8734], [13.7454, 37.7653, -20.404], [12.5932, 34.5996, -18.5366]], [[11.6229, 35.7716, -14.6132], [10.7531, 33.0947, -17.2563], [9.70758, 29.8769, -15.3962], [10.2156, 31.4404, -18.8898], [9.34584, 28.7635, -21.5329], [10.5296, 32.4066, -21.0489], [11.0376, 33.9701, -24.5425], [11.2611, 34.6582, -20.7499], [12.4449, 38.3014, -20.2659], [11.3993, 35.0835, -18.4059]], [[10.3831, 36.2101, -14.4707], [9.60796, 33.5069, -17.1299], [8.67133, 30.2405, -15.2772], [9.12892, 31.8363, -18.7734], [8.35382, 29.1332, -21.4326], [9.41172, 32.8226, -20.9341], [9.86931, 34.4184, -24.4303], [10.0655, 35.1027, -20.6261], [11.1235, 38.7921, -20.1276], [10.1868, 35.5257, -18.2749]], [[9.12665, 36.605, -14.3279], [8.44699, 33.879, -17.0033], [7.62141, 30.5678, -15.1581], [8.02694, 32.1943, -18.6568], [7.34728, 29.4683, -21.3322], [8.27757, 33.1995, -20.8191], [8.6831, 34.826, -24.3177], [8.85252, 35.5055, -20.502], [9.78281, 39.2367, -19.9889], [8.95723, 35.9255, -18.1437]], [[7.8552, 36.9558, -14.185], [7.27164, 34.2104, -16.8765], [6.5591, 30.8581, -15.0389], [6.91099, 32.5136, -18.54], [6.32744, 29.7682, -21.2316], [7.12847, 33.5368, -20.7038], [7.48036, 35.1923, -24.2049], [7.62353, 35.8659, -20.3776], [8.42457, 39.6345, -19.8499], [7.71202, 36.2822, -18.0122]], [[6.57027, 37.2618, -14.0418], [6.08336, 34.5005, -16.7495], [5.48572, 31.1111, -14.9195], [5.78244, 32.7939, -18.423], [5.29554, 30.0325, -21.1308], [5.96583, 33.8339, -20.5883], [6.26255, 35.5167, -24.0917], [6.38009, 36.1833, -20.253], [7.05037, 39.9847, -19.7105], [6.45273, 36.5952, -17.8805]], [[5.27346, 37.5226, -13.8984], [4.88362, 34.7488, -16.6223], [4.40261, 31.3262, -14.8001], [4.64269, 33.0344, -18.3058], [4.25285, 30.2606, -21.0298], [4.79106, 34.0902, -20.4725], [5.03114, 35.7985, -23.9783], [5.1237, 36.457, -20.1281], [5.66192, 40.2866, -19.5708], [5.1809, 36.864, -17.7486]], [[3.96639, 37.7377, -13.7548], [3.6739, 34.9548, -16.495], [3.31111, 31.5031, -14.6805], [3.49313, 33.2349, -18.1885], [3.20064, 30.4521, -20.9286], [3.60563, 34.3053, -20.3565], [3.78765, 36.0371, -23.8645], [3.85592, 36.6867, -20.0029], [4.26091, 40.5398, -19.4308], [3.89812, 37.0881, -17.6163]], [[2.65069, 37.9066, -13.611], [2.45571, 35.1182, -16.3674], [2.21259, 31.6415, -14.5608], [2.3352, 33.395, -18.0709], [2.14022, 30.6066, -20.8273], [2.41098, 34.4786, -20.2403], [2.5336, 36.2321, -23.7504], [2.57832, 36.8717, -19.8775], [2.84908, 40.7437, -19.2905], [2.60596, 37.267, -17.4839]], [[1.328, 38.0291, -13.467], [1.23056, 35.2387, -16.2396], [1.10842, 31.7411, -14.441], [1.17034, 33.5142, -17.9532], [1.0729, 30.7238, -20.7258], [1.20861, 34.61, -20.1238], [1.27052, 36.383, -23.636], [1.29248, 37.0118, -19.7518], [1.42819, 40.8979, -19.1498], [1.30605, 37.4003, -17.3512]], [[0, 38.1048, -13.3227], [0, 35.3159, -16.1116], [0, 31.8017, -14.321], [0, 33.5923, -17.8352], [0, 30.8034, -20.6241], [0, 34.6989, -20.0071], [0, 36.4895, -23.5214], [0, 37.1065, -19.6258], [0, 41.002, -19.0088], [0, 37.4878, -17.2183]], [[-1.33165, 38.1335, -13.1783], [-1.23443, 35.3496, -15.9835], [-1.11129, 31.8231, -14.201], [-1.17435, 33.629, -17.7171], [-1.07713, 30.8451, -20.5223], [-1.21333, 34.7452, -19.8902], [-1.27639, 36.5511, -23.4064], [-1.2975, 37.1555, -19.4996], [-1.43369, 41.0556, -18.8675], [-1.31055, 37.5291, -17.0851]], [[-2.66527, 38.1152, -13.0337], [-2.47119, 35.3396, -15.8551], [-2.22403, 31.8051, -14.0808], [-2.35124, 33.6243, -17.5988], [-2.15715, 30.8487, -20.4203], [-2.42985, 34.7485, -19.7731], [-2.55706, 36.5676, -23.2911], [-2.59839, 37.1587, -19.3731], [-2.87109, 41.0586, -18.7259], [-2.62394, 37.5241, -16.9517]], [[-3.99917, 38.0496, -12.8888], [-3.7087, 35.2859, -15.7266], [-3.33683, 31.7478, -13.9606], [-3.52917, 33.5778, -17.4804], [-3.2387, 30.8142, -20.3181], [-3.64805, 34.7089, -19.6557], [-3.84039, 36.5389, -23.1755], [-3.90104, 37.1159, -19.2464], [-4.31039, 41.0106, -18.584], [-3.93852, 37.4725, -16.818]], [[-5.33165, 37.9367, -12.7438], [-4.94539, 35.1883, -15.5978], [-4.44827, 31.6511, -13.8402], [-4.70667, 33.4897, -17.3617], [-4.32041, 30.7413, -20.2157], [-4.86637, 34.626, -19.5381], [-5.12477, 36.4646, -23.0596], [-5.20379, 37.0269, -19.1194], [-5.74975, 40.9116, -18.4418], [-5.25263, 37.3744, -16.6841]], [[-6.66103, 37.7766, -12.5986], [-6.1797, 35.0468, -15.4689], [-5.55693, 31.5149, -13.7197], [-5.88223, 33.3598, -17.2429], [-5.4009, 30.63, -20.1132], [-6.08327, 34.4999, -19.4203], [-6.40856, 36.3448, -22.9435], [-6.505, 36.8917, -18.9921], [-7.18736, 40.7616, -18.2992], [-6.56459, 37.2297, -16.55]], [[-7.9856, 37.5693, -12.4532], [-7.41006, 34.8616, -15.3398], [-6.66141, 31.3395, -13.5992], [-7.05436, 33.1881, -17.1239], [-6.47882, 30.4804, -20.0105], [-7.29721, 34.3307, -19.3023], [-7.69015, 36.1793, -22.827], [-7.803, 36.7102, -18.8646], [-8.62139, 40.5604, -18.1563], [-7.87274, 37.0383, -16.4156]], [[-9.30367, 37.315, -12.3076], [-8.63488, 34.6326, -15.2106], [-7.7603, 31.1249, -13.4785], [-8.22155, 32.9749, -17.0047], [-7.55277, 30.2925, -19.9077], [-8.50662, 34.1182, -19.184], [-8.96788, 35.9682, -22.7102], [-9.09614, 36.4826, -18.7368], [-10.05, 40.3083, -18.0132], [-9.17541, 36.8005, -16.2811]], [[-10.6136, 37.0139, -12.1618], [-9.85261, 34.3602, -15.0811], [-8.85219, 30.8712, -13.3577], [-9.38233, 32.7201, -16.8853], [-8.62139, 30.0664, -19.8046], [-9.70998, 33.8627, -19.0655], [-10.2401, 35.7115, -22.5932], [-10.3828, 36.209, -18.6088], [-11.4713, 40.0053, -17.8697], [-10.4709, 36.5164, -16.1462]], [[-11.9136, 36.6662, -12.0158], [-11.0617, 34.0444, -14.9515], [-9.93567, 30.5789, -13.2368], [-10.5352, 32.424, -16.7658], [-9.68331, 29.8022, -19.7015], [-10.9057, 33.5643, -18.9469], [-11.5052, 35.4095, -22.4758], [-11.6612, 35.8895, -18.4805], [-12.8836, 39.6517, -17.7259], [-11.7576, 36.1862, -16.0112]], [[-13.202, 36.2723, -11.8697], [-12.2605, 33.6855, -14.8217], [-11.0094, 30.248, -13.1158], [-11.6787, 32.0868, -16.6461], [-10.7371, 29.5001, -19.5981], [-12.0923, 33.2233, -18.8279], [-12.7616, 35.0621, -22.3582], [-12.9298, 35.5244, -18.352], [-14.285, 39.2476, -17.5818], [-13.0338, 35.8101, -15.8759]], [[-14.4773, 35.8326, -11.7233], [-13.4476, 33.284, -14.6917], [-12.0719, 29.879, -12.9948], [-12.8112, 31.7089, -16.5263], [-11.7815, 29.1603, -19.4946], [-13.2682, 32.8399, -18.7088], [-14.0075, 34.6699, -22.2403], [-14.187, 35.114, -18.2232], [-15.6736, 38.7935, -17.4374], [-14.2979, 35.3885, -15.7405]], [[-15.7377, 35.3475, -11.5768], [-14.6214, 32.8402, -14.5616], [-13.1219, 29.4722, -12.8736], [-13.9315, 31.2906, -16.4062], [-12.8152, 28.7833, -19.3909], [-14.4318, 32.4145, -18.5895], [-15.2415, 34.2329, -22.1221], [-15.431, 34.6586, -18.0942], [-17.0477, 38.2898, -17.2927], [-15.5482, 34.9218, -15.6048]], [[-16.9817, 34.8176, -11.4301], [-15.7804, 32.3545, -14.4312], [-14.1579, 29.0281, -12.7524], [-15.0379, 30.8323, -16.286], [-13.8366, 28.3693, -19.2871], [-15.5818, 31.9474, -18.4699], [-16.4618, 33.7516, -22.0036], [-16.6603, 34.1588, -17.9649], [-18.4055, 37.7369, -17.1477], [-16.7831, 34.4104, -15.4688]], [[-18.2075, 34.2433, -11.2833], [-16.923, 31.8275, -14.3007], [-15.1788, 28.5471, -12.631], [-16.1291, 30.3345, -16.1656], [-14.8446, 27.9186, -19.1831], [-16.7165, 31.4391, -18.3502], [-17.6668, 33.2264, -21.8848], [-17.8733, 33.6149, -17.8354], [-19.7452, 37.1353, -17.0024], [-18.001, 33.8549, -15.3327]], [[-19.4136, 33.6254, -11.1362], [-18.0478, 31.2597, -14.1701], [-16.183, 28.0298, -12.5096], [-17.2036, 29.7976, -16.0451], [-15.8378, 27.4319, -19.079], [-17.8344, 30.8901, -18.2302], [-18.855, 32.6579, -21.7657], [-19.0684, 33.0275, -17.7056], [-21.065, 36.4857, -16.8568], [-19.2003, 33.2559, -15.1963]], [[-20.5985, 32.9645, -10.989], [-19.1533, 30.6517, -14.0393], [-17.1694, 27.4768, -12.3881], [-18.2601, 29.2223, -15.9244], [-16.8149, 26.9094, -18.9747], [-18.9342, 30.301, -18.11], [-20.0249, 32.0465, -21.6464], [-20.244, 32.3971, -17.5756], [-22.3633, 35.7887, -16.7109], [-20.3794, 32.6139, -15.0597]], [[-21.7606, 32.2614, -10.8416], [-20.2381, 30.0041, -13.9083], [-18.1366, 26.8887, -12.2665], [-19.2971, 28.6091, -15.8036], [-17.7746, 26.3519, -18.8702], [-20.0143, 29.6724, -17.9896], [-21.1747, 31.3928, -21.5267], [-21.3985, 31.7246, -17.4454], [-23.6382, 35.0451, -16.5648], [-21.5368, 31.9296, -14.923]], [[-22.8983, 31.5168, -10.694], [-21.3006, 29.3178, -13.7771], [-19.0834, 26.2661, -12.1448], [-20.3132, 27.9588, -15.6826], [-18.7156, 25.7598, -18.7656], [-21.0733, 29.0049, -17.869], [-22.3031, 30.6975, -21.4068], [-22.5304, 31.0105, -17.3149], [-24.8881, 34.2556, -16.4183], [-22.6709, 31.2039, -14.786]], [[-24.0102, 30.7316, -10.5463], [-22.3397, 28.5935, -13.6458], [-20.0086, 25.6098, -12.023], [-21.3072, 27.272, -15.5614], [-19.6367, 25.1338, -18.6609], [-22.1098, 28.2992, -17.7482], [-23.4084, 29.9614, -21.2866], [-23.6383, 30.2556, -17.1842], [-26.1114, 33.4211, -16.2715], [-23.7803, 30.4374, -14.6488]], [[-25.0948, 29.9068, -10.3984], [-23.3537, 27.8319, -13.5143], [-20.9109, 24.9206, -11.9012], [-22.2777, 26.5495, -15.4401], [-20.5366, 24.4746, -18.556], [-23.1224, 27.5562, -17.6272], [-24.4892, 29.1851, -21.1661], [-24.7205, 29.4608, -17.0532], [-27.3063, 32.5424, -16.1245], [-24.8635, 29.6311, -14.5113]], [[-26.1506, 29.0432, -10.2504], [-24.3415, 27.034, -13.3827], [-21.7891, 24.1992, -11.7792], [-23.2234, 25.7922, -15.3186], [-21.4142, 23.7829, -18.4509], [-24.1098, 26.7766, -17.506], [-25.5441, 28.3696, -21.0454], [-25.7758, 28.6269, -16.9221], [-28.4714, 31.6207, -15.9772], [-25.919, 28.7859, -14.3737]], [[-27.1764, 28.142, -10.1022], [-25.3016, 26.2006, -13.2509], [-22.6421, 23.4465, -11.6572], [-24.143, 25.0008, -15.197], [-22.2682, 23.0594, -18.3457], [-25.0706, 25.9614, -17.3846], [-26.5715, 27.5156, -20.9244], [-26.8026, 27.7549, -16.7907], [-29.6049, 30.6568, -15.8296], [-26.9453, 27.9027, -14.2359]], [[-28.1706, 27.2041, -9.95382], [-26.2329, 25.3328, -13.119], [-23.4687, 22.6635, -11.5352], [-25.0353, 24.1763, -15.0752], [-23.0976, 22.3051, -18.2403], [-26.0035, 25.1113, -17.263], [-27.5701, 26.6242, -20.803], [-27.7995, 26.8457, -16.659], [-30.7055, 29.6519, -15.6817], [-27.9413, 26.9826, -14.0979]], [[-29.1321, 26.2307, -9.80531], [-27.134, 24.4316, -12.9869], [-24.2679, 21.8509, -11.413], [-25.8992, 23.3197, -14.9532], [-23.9011, 21.5206, -18.1348], [-26.9073, 24.2275, -17.1412], [-28.5386, 25.6962, -20.6815], [-28.7653, 25.9004, -16.5271], [-31.7715, 28.6072, -15.5335], [-28.9054, 26.0265, -13.9596]], [[-30.0595, 25.2229, -9.65664], [-28.0038, 23.498, -12.8547], [-25.0386, 21.0099, -11.2908], [-26.7334, 22.4319, -14.8312], [-24.6777, 20.707, -18.0292], [-27.7807, 23.3108, -17.0192], [-29.4754, 24.7328, -20.5596], [-29.6985, 24.92, -16.395], [-32.8016, 27.5238, -15.3851], [-29.8364, 25.0357, -13.8212]], [[-30.9515, 24.182, -9.50781], [-28.8411, 22.5331, -12.7223], [-25.7798, 20.1414, -11.1685], [-27.5367, 21.5141, -14.7089], [-25.4263, 19.8652, -17.9234], [-28.6226, 22.3624, -16.897], [-30.3795, 23.735, -20.4375], [-30.598, 23.9058, -16.2627], [-33.7942, 26.403, -15.2364], [-30.733, 24.0113, -13.6826]], [[-31.807, 23.1092, -9.35884], [-29.6447, 21.5381, -12.5898], [-26.4905, 19.2465, -11.0461], [-28.3083, 20.5671, -14.5866], [-26.1459, 18.9961, -17.8175], [-29.4317, 21.3834, -16.7747], [-31.2494, 22.704, -20.3151], [-31.4624, 22.8588, -16.1302], [-34.7482, 25.246, -15.0874], [-31.594, 22.9544, -13.5438]], [[-32.6249, 22.0058, -9.20973], [-30.4135, 20.5142, -12.4571], [-27.1698, 18.3262, -10.9237], [-29.0468, 19.5923, -14.464], [-26.8354, 18.1007, -17.7114], [-30.2069, 20.3748, -16.6521], [-32.0839, 21.6409, -20.1924], [-32.2906, 21.7803, -15.9974], [-35.662, 24.0543, -14.9381], [-32.4183, 21.8664, -13.4047]], [[-33.404, 20.8731, -9.06046], [-31.1466, 19.4625, -12.3243], [-27.8166, 17.3817, -10.8012], [-29.7514, 18.5907, -14.3414], [-27.494, 17.1802, -17.6052], [-30.9472, 19.3379, -16.5293], [-32.882, 20.5469, -20.0695], [-33.0814, 20.6715, -15.8644], [-36.5345, 22.8293, -14.7886], [-33.2046, 20.7485, -13.2655]], [[-34.1432, 19.7126, -8.91106], [-31.8428, 18.3844, -12.1913], [-28.4302, 16.4142, -10.6787], [-30.4211, 17.5636, -14.2186], [-28.1207, 16.2355, -17.4988], [-31.6515, 18.274, -16.4064], [-33.6423, 19.4234, -19.9463], [-33.8337, 19.5339, -15.7312], [-37.3645, 21.5724, -14.6388], [-33.9519, 19.6021, -13.1261]], [[-34.8416, 18.5256, -8.76152], [-32.5013, 17.2812, -12.0582], [-29.0097, 15.4247, -10.5561], [-31.0548, 16.5122, -14.0956], [-28.7145, 15.2678, -17.3923], [-32.3188, 17.1842, -16.2832], [-34.3639, 18.2716, -19.8228], [-34.5464, 18.3686, -15.5978], [-38.1507, 20.2851, -14.4887], [-34.6591, 18.4286, -12.9866]], [[-35.4982, 17.3136, -8.61183], [-33.121, 16.1542, -11.9249], [-29.5544, 14.4146, -10.4334], [-31.6519, 15.4377, -13.9726], [-29.2747, 14.2782, -17.2857], [-32.9482, 16.0699, -16.1599], [-35.0457, 17.0929, -19.6991], [-35.2185, 17.1772, -15.4641], [-38.892, 18.9689, -14.3384], [-35.3253, 17.2293, -12.8468]], [[-36.1121, 16.0781, -8.46201], [-33.7013, 15.0048, -11.7916], [-30.0634, 13.3851, -10.3106], [-32.2113, 14.3414, -13.8493], [-29.8005, 13.268, -17.1789], [-33.5387, 14.9324, -16.0364], [-35.6866, 15.8887, -19.5751], [-35.8491, 15.961, -15.3303], [-39.5874, 17.6254, -14.1878], [-35.9496, 16.0058, -12.7068]], [[-36.6824, 14.8207, -8.31206], [-34.2411, 13.8343, -11.6581], [-30.5362, 12.3374, -10.1879], [-32.7323, 13.2247, -13.726], [-30.291, 12.2384, -17.072], [-34.0896, 13.7731, -15.9127], [-36.2857, 14.6604, -19.4508], [-36.4372, 14.7216, -15.1962], [-40.2358, 16.2563, -14.0369], [-36.5309, 14.7594, -12.5667]], [[-37.2084, 13.5428, -8.16198], [-34.7398, 12.6443, -11.5244], [-30.972, 11.2729, -10.065], [-33.2142, 12.089, -13.6025], [-30.7456, 11.1905, -16.965], [-34.5999, 12.5933, -15.7888], [-36.8421, 13.4094, -19.3263], [-36.982, 13.4604, -15.0619], [-40.8364, 14.8632, -13.8858], [-37.0685, 13.4918, -12.4264]], [[-37.6894, 12.246, -8.01176], [-35.1967, 11.4361, -11.3906], [-31.3702, 10.1928, -9.94212], [-33.6562, 10.9356, -13.4789], [-31.1635, 10.1256, -16.8578], [-35.069, 11.3946, -15.6648], [-37.3549, 12.1374, -19.2015], [-37.4827, 12.1789, -14.9274], [-41.3881, 13.4478, -13.7344], [-37.5616, 12.2045, -12.2859]], [[-38.1245, 10.932, -7.86142], [-35.6111, 10.2113, -11.2567], [-31.7303, 9.09853, -9.81917], [-34.0577, 9.76588, -13.3552], [-31.5442, 9.04516, -16.7505], [-35.4961, 10.1783, -15.5405], [-37.8234, 10.8457, -19.0765], [-37.9384, 10.8787, -14.7927], [-41.8903, 12.0118, -13.5828], [-38.0095, 10.8991, -12.1452]], [[-38.5133, 9.60245, -7.71095], [-35.9823, 8.9714, -11.1227], [-32.0518, 7.99141, -9.69618], [-34.4181, 8.58139, -13.2313], [-31.8871, 7.95034, -16.643], [-35.8805, 8.94601, -15.4161], [-38.2468, 9.53599, -18.9512], [-38.3486, 9.56137, -14.6578], [-42.342, 10.557, -13.4309], [-38.4115, 9.57706, -12.0043]], [[-38.8552, 8.25892, -7.56036], [-36.3099, 7.7179, -10.9885], [-32.3342, 6.87285, -9.57313], [-34.7368, 7.38354, -13.1073], [-32.1915, 6.84252, -16.5355], [-36.2217, 7.69916, -15.2915], [-38.6243, 8.20986, -18.8256], [-38.7125, 8.2286, -14.5227], [-42.7427, 9.08524, -13.2787], [-38.767, 8.24018, -11.8633]], [[-39.1495, 6.90312, -7.40965], [-36.5933, 6.45238, -10.8543], [-32.5771, 5.74422, -9.45005], [-35.0134, 6.17381, -12.9832], [-32.4571, 5.72307, -16.4278], [-36.5191, 6.43931, -15.1667], [-38.9555, 6.8689, -18.6998], [-39.0296, 6.88197, -14.3874], [-43.0916, 7.59821, -13.1263], [-39.0754, 6.89005, -11.7221]], [[-39.396, 5.53675, -7.25882], [-36.832, 5.17641, -10.7199], [-32.7801, 4.60694, -9.32691], [-35.2474, 4.9537, -12.8589], [-32.6834, 4.59335, -16.3199], [-36.7723, 5.16801, -15.0418], [-39.2396, 5.51476, -18.5738], [-39.2993, 5.52316, -14.2518], [-43.3882, 6.09781, -12.9737], [-39.3363, 5.52835, -11.5807]], [[-39.5942, 4.16152, -7.10787], [-37.0258, 3.89157, -10.5853], [-32.943, 3.46244, -9.20374], [-35.4384, 3.72473, -12.7345], [-32.87, 3.45477, -16.212], [-36.9807, 3.88683, -14.9167], [-39.4761, 4.14911, -18.4475], [-39.5213, 4.15385, -14.1161], [-43.632, 4.58591, -12.8208], [-39.5491, 4.15678, -11.4392]], [[-39.7439, 2.77916, -6.9568], [-37.1742, 2.59948, -10.4507], [-33.0654, 2.31216, -9.08052], [-35.5861, 2.48842, -12.61], [-33.0165, 2.30874, -16.1039], [-37.144, 2.59736, -14.7914], [-39.6647, 2.77363, -18.3209], [-39.695, 2.77574, -13.9802], [-43.8225, 3.06437, -12.6677], [-39.7136, 2.77705, -11.2975]], [[-39.8446, 1.39141, -6.80563], [-37.2771, 1.30174, -10.3159], [-33.1472, 1.15752, -8.95726], [-35.6902, 1.24633, -12.4854], [-33.1226, 1.15667, -15.9957], [-37.2619, 1.30121, -14.6659], [-39.8049, 1.39002, -18.1941], [-39.8201, 1.39055, -13.8441], [-43.9594, 1.53509, -12.5143], [-39.8295, 1.39088, -11.1556]], [[-39.8964, 0, -6.65434], [-37.3341, 0, -10.1811], [-33.1882, 0, -8.83397], [-35.7505, 0, -12.3607], [-33.1882, 0, -15.8874], [-37.3341, 0, -14.5403], [-39.8964, 0, -18.067], [-39.8964, 0, -13.7078], [-44.0423, 0, -12.3607], [-39.8964, 0, -11.0136]], [[-39.8989, -1.3933, -6.50295], [-37.3451, -1.30412, -10.0461], [-33.1883, -1.15896, -8.71064], [-35.7667, -1.249, -12.2358], [-33.2129, -1.15982, -15.7789], [-37.3603, -1.30465, -14.4145], [-39.9388, -1.39469, -17.9397], [-39.9236, -1.39416, -13.5713], [-44.071, -1.53899, -12.2068], [-39.9141, -1.39383, -10.8714]], [[-39.8522, -2.78674, -6.35144], [-37.3101, -2.60897, -9.91096], [-33.1474, -2.31789, -8.58727], [-35.7389, -2.49911, -12.1109], [-33.1968, -2.32134, -15.6704], [-37.3405, -2.61111, -14.2886], [-39.932, -2.79232, -17.8121], [-39.9015, -2.79019, -13.4345], [-44.0453, -3.07995, -12.0527], [-39.8827, -2.78887, -10.729]], [[-39.7563, -4.17855, -6.19984], [-37.2289, -3.91292, -9.77575], [-33.0657, -3.47534, -8.46388], [-35.6669, -3.74875, -11.9858], [-33.1396, -3.48311, -15.5617], [-37.2746, -3.91772, -14.1624], [-39.8759, -4.19112, -17.6843], [-39.8302, -4.18632, -13.2977], [-43.9652, -4.62093, -11.8984], [-39.8019, -4.18335, -10.5865]], [[-39.6111, -5.56698, -6.04813], [-37.1017, -5.2143, -9.64043], [-32.943, -4.62984, -8.34045], [-35.5508, -4.99634, -11.8606], [-33.0414, -4.64366, -15.4529], [-37.1625, -5.22285, -14.0362], [-39.7703, -5.58934, -17.5563], [-39.7095, -5.5808, -13.1606], [-43.8306, -6.15999, -11.7438], [-39.6719, -5.57552, -10.4439]], [[-39.4169, -6.95027, -5.89632], [-36.9285, -6.51149, -9.505], [-32.7796, -5.77993, -8.21699], [-35.3905, -6.24031, -11.7353], [-32.9021, -5.80153, -15.344], [-37.0042, -6.52484, -13.9097], [-39.6151, -6.98522, -17.428], [-39.5394, -6.97187, -13.0233], [-43.6415, -7.69518, -11.589], [-39.4926, -6.96362, -10.301]], [[-39.1738, -8.32665, -5.74442], [-36.7094, -7.80282, -9.36947], [-32.5756, -6.92415, -8.09351], [-35.1863, -7.47908, -11.6099], [-32.7219, -6.95525, -15.2349], [-36.7998, -7.82205, -13.7831], [-39.4106, -8.37698, -17.2995], [-39.3201, -8.35776, -12.8858], [-43.3981, -9.22455, -11.434], [-39.2643, -8.34588, -10.1581]], [[-38.8821, -9.6944, -5.59242], [-36.4447, -9.08668, -9.23384], [-32.3311, -8.06106, -7.97], [-34.9383, -8.71109, -11.4844], [-32.5008, -8.10337, -15.1258], [-36.5495, -9.11283, -13.6564], [-39.1567, -9.76285, -17.1707], [-39.0518, -9.73671, -12.7482], [-43.1005, -10.7462, -11.2788], [-38.987, -9.72055, -10.0149]], [[-38.5421, -11.0518, -5.44032], [-36.1346, -10.3614, -9.0981], [-32.0466, -9.18921, -7.84646], [-34.6466, -9.93476, -11.3587], [-32.2391, -9.24442, -15.0165], [-36.2535, -10.3955, -13.5294], [-38.8536, -11.1411, -17.0417], [-38.7346, -11.107, -12.6104], [-42.749, -12.2581, -11.1233], [-38.661, -11.0859, -9.87165]], [[-38.1541, -12.397, -5.28813], [-35.7794, -11.6254, -8.96226], [-31.7222, -10.3072, -7.72291], [-34.3117, -11.1485, -11.233], [-31.937, -10.3769, -14.9071], [-35.9121, -11.6685, -13.4024], [-38.5015, -12.5099, -16.9125], [-38.3688, -12.4668, -12.4724], [-42.3439, -13.7584, -10.9676], [-38.2868, -12.4401, -9.72823]], [[-37.7186, -13.7284, -5.13586], [-35.3795, -12.8771, -8.82633], [-31.3584, -11.4135, -7.59933], [-33.9338, -12.3509, -11.1072], [-31.5947, -11.4995, -14.7976], [-35.5254, -12.9302, -13.2751], [-38.1008, -13.8676, -16.783], [-37.9548, -13.8144, -12.3342], [-41.8856, -15.2451, -10.8117], [-37.8646, -13.7816, -9.58466]], [[-37.2361, -15.0444, -4.9835], [-34.9353, -14.1148, -8.6903], [-30.9556, -12.5069, -7.47573], [-33.5133, -13.5403, -10.9812], [-31.2125, -12.6107, -14.688], [-35.0941, -14.1789, -13.1478], [-37.6518, -15.2123, -16.6533], [-37.493, -15.1482, -12.1958], [-41.3745, -16.7164, -10.6555], [-37.3949, -15.1085, -9.44095]], [[-36.7072, -16.3431, -4.83105], [-34.4474, -15.337, -8.55418], [-30.5143, -13.5858, -7.35212], [-33.0508, -14.7151, -10.8552], [-30.791, -13.709, -14.5783], [-34.6184, -15.4131, -13.0202], [-37.1549, -16.5424, -16.5233], [-36.9839, -16.4663, -12.0573], [-40.8113, -18.1703, -10.4992], [-36.8782, -16.4192, -9.2971]], [[-36.1324, -17.623, -4.67852], [-33.9162, -16.5421, -8.41796], [-30.0349, -14.649, -7.22849], [-32.5466, -15.874, -10.7291], [-30.3304, -14.7931, -14.4685], [-34.0989, -16.6311, -12.8925], [-36.6105, -17.8561, -16.3931], [-36.4279, -17.7671, -11.9185], [-40.1964, -19.6051, -10.3426], [-36.315, -17.712, -9.1531]], [[-35.5125, -18.8823, -4.52591], [-33.3425, -17.7285, -8.28166], [-29.5181, -15.6951, -7.10484], [-32.0014, -17.0154, -10.6028], [-29.8313, -15.8616, -14.3586], [-33.5361, -17.8315, -12.7647], [-36.0193, -19.1518, -16.2627], [-35.8258, -19.0489, -11.7797], [-39.5305, -21.0187, -10.1858], [-35.7061, -18.9853, -9.00897]], [[-34.8482, -20.1196, -4.37322], [-32.7268, -18.8948, -8.14526], [-28.9644, -16.7226, -6.98119], [-31.4157, -18.1379, -10.4765], [-29.2943, -16.9131, -14.2486], [-32.9307, -19.0125, -12.6367], [-35.3819, -20.4277, -16.1321], [-35.178, -20.3101, -11.6406], [-38.8144, -22.4095, -10.0288], [-35.0521, -20.2373, -8.8647]], [[-34.1403, -21.3332, -4.22046], [-32.0699, -20.0395, -8.00878], [-28.3746, -17.7304, -6.85752], [-30.7903, -19.2399, -10.3501], [-28.7198, -17.9462, -14.1384], [-32.2832, -20.1728, -12.5086], [-34.6989, -21.6823, -16.0012], [-34.4855, -21.5489, -11.5014], [-38.0489, -23.7756, -9.87156], [-34.3537, -21.4665, -8.7203]], [[-33.3897, -22.5216, -4.06762], [-31.3725, -21.161, -7.87221], [-27.7494, -18.7172, -6.73384], [-30.1258, -20.3201, -10.2236], [-28.1086, -18.9595, -14.0282], [-31.5945, -21.3108, -12.3804], [-33.971, -22.9137, -15.8701], [-33.7489, -22.7639, -11.362], [-37.2348, -25.1152, -9.71413], [-33.6117, -22.6714, -8.57576]], [[-32.5972, -23.6832, -3.91471], [-30.6355, -22.258, -7.73556], [-27.0894, -19.6816, -6.61016], [-29.4231, -21.3771, -10.097], [-27.4614, -19.9519, -13.9178], [-30.8653, -22.425, -12.252], [-33.199, -24.1205, -15.7388], [-32.9691, -23.9535, -11.2224], [-36.3731, -26.4266, -9.5565], [-32.827, -23.8502, -8.4311]], [[-31.7638, -24.8166, -3.76173], [-29.8597, -23.3289, -7.59883], [-26.3956, -20.6225, -6.48647], [-28.6829, -22.4095, -9.97029], [-26.7788, -20.9219, -13.8074], [-30.0965, -23.514, -12.1234], [-32.3838, -25.301, -15.6072], [-32.147, -25.116, -11.0826], [-35.4647, -27.7081, -9.39866], [-32.0006, -25.0016, -8.2863]], [[-30.8906, -25.9203, -3.60868], [-29.0461, -24.3726, -7.46202], [-25.6687, -21.5386, -6.36278], [-27.9061, -23.416, -9.84351], [-26.0616, -21.8683, -13.6968], [-29.2889, -24.5763, -11.9947], [-31.5263, -26.4537, -15.4755], [-31.2835, -26.2499, -10.9427], [-34.5107, -28.9579, -9.24062], [-31.1334, -26.124, -8.14138]], [[-29.9786, -26.9928, -3.45556], [-28.1956, -25.3875, -7.32512], [-24.9097, -22.4288, -6.23908], [-27.0937, -24.3953, -9.71665], [-25.3107, -22.7899, -13.5862], [-28.4434, -25.6106, -11.8659], [-30.6274, -27.577, -15.3435], [-30.3796, -27.3539, -10.8027], [-33.5123, -30.1746, -9.08238], [-30.2264, -27.216, -7.99634]], [[-29.0289, -28.0329, -3.30239], [-27.3093, -26.3723, -7.18816], [-24.1196, -23.292, -6.11538], [-26.2466, -25.346, -9.5897], [-24.5269, -23.6854, -13.4755], [-27.5611, -26.6155, -11.7369], [-29.6881, -28.6695, -15.2112], [-29.4363, -28.4263, -10.6625], [-32.4705, -31.3564, -8.92394], [-29.2807, -28.2761, -7.85117]], [[-28.0428, -29.0392, -3.14915], [-26.3883, -27.3259, -7.05111], [-23.2991, -24.127, -5.99169], [-25.3657, -26.267, -9.46266], [-23.7112, -24.5537, -13.3646], [-26.643, -27.5896, -11.6078], [-28.7096, -29.7296, -15.0788], [-28.4549, -29.4659, -10.5221], [-31.3866, -32.5018, -8.7653], [-28.2975, -29.3029, -7.70588]], [[-27.0214, -30.0103, -2.99585], [-25.4336, -28.2469, -6.914], [-22.4495, -24.9327, -5.868], [-24.4523, -27.157, -9.33555], [-22.8645, -25.3936, -13.2537], [-25.6901, -28.5317, -11.4786], [-27.6929, -30.7561, -14.9462], [-27.4364, -30.4712, -10.3815], [-30.262, -33.6093, -8.60647], [-27.2779, -30.2952, -7.56046]], [[-25.966, -30.9451, -2.8425], [-24.4465, -29.1342, -6.77681], [-21.5717, -25.7082, -5.74431], [-23.5073, -28.015, -9.20835], [-21.9878, -26.204, -13.1427], [-24.7036, -29.4406, -11.3493], [-26.6392, -31.7474, -14.8133], [-26.3821, -31.4409, -10.2409], [-29.0979, -34.6775, -8.44744], [-26.2231, -31.2515, -7.41494]], [[-24.8779, -31.8423, -2.68909], [-23.428, -29.9865, -6.63956], [-20.6669, -26.4524, -5.62063], [-22.532, -28.8396, -9.08108], [-21.0821, -26.9839, -13.0315], [-23.6847, -30.315, -11.2198], [-25.5498, -32.7022, -14.6802], [-25.2931, -32.3737, -10.1], [-27.8957, -35.7048, -8.28822], [-25.1345, -32.1707, -7.26929]], [[-23.7585, -32.7007, -2.53563], [-22.3796, -30.8029, -6.50223], [-19.7361, -27.1644, -5.49695], [-21.5274, -29.63, -8.95373], [-20.1486, -27.7322, -12.9203], [-22.6345, -31.1538, -11.0901], [-24.4258, -33.6193, -14.5469], [-24.1709, -33.2684, -9.95901], [-26.6569, -36.69, -8.12881], [-24.0134, -33.0516, -7.12353]], [[-22.6091, -33.5194, -2.38212], [-21.3025, -31.5822, -6.36485], [-18.7806, -27.8433, -5.37329], [-20.4949, -30.385, -8.82631], [-19.1883, -28.4478, -12.809], [-21.5544, -31.9557, -10.9604], [-23.2688, -34.4974, -14.4134], [-23.0168, -34.1238, -9.81786], [-25.3829, -37.6318, -7.96922], [-22.8611, -33.8929, -6.97766]], [[-21.4312, -34.2971, -2.22856], [-20.1979, -32.3234, -6.22739], [-17.8014, -28.4882, -5.24963], [-19.4357, -31.1035, -8.69881], [-18.2023, -29.1298, -12.6976], [-20.4457, -32.7199, -10.8305], [-22.0799, -35.3352, -14.2797], [-21.8321, -34.9387, -9.67657], [-24.0754, -38.5288, -7.80944], [-21.679, -34.6936, -6.83168]], [[-20.2263, -35.033, -2.07495], [-19.0673, -33.0255, -6.08988], [-16.7999, -29.0983, -5.12599], [-18.351, -31.7848, -8.57124], [-17.192, -29.7774, -12.5862], [-19.3096, -33.4452, -10.7005], [-20.8606, -36.1317, -14.1458], [-20.6183, -35.712, -9.53512], [-22.736, -39.3798, -7.64948], [-20.4686, -35.4526, -6.68559]], [[-18.9958, -35.726, -1.92131], [-17.912, -33.6876, -5.9523], [-15.7773, -29.6728, -5.00236], [-17.2422, -32.4279, -8.44359], [-16.1584, -30.3895, -12.4746], [-18.1476, -34.1306, -10.5704], [-19.6125, -36.8857, -14.0116], [-19.3769, -36.4427, -9.39353], [-21.3661, -40.1838, -7.48933], [-19.2314, -36.1689, -6.53939]], [[-17.7414, -36.3753, -1.76762], [-16.7336, -34.3089, -5.81467], [-14.7348, -30.2109, -4.87875], [-16.1107, -33.0318, -8.31588], [-15.1029, -30.9654, -12.3629], [-16.961, -34.7752, -10.4401], [-18.3368, -37.5961, -13.8773], [-18.1094, -37.1298, -9.2518], [-19.9676, -40.9396, -7.32901], [-17.9688, -36.8416, -6.39309]], [[-16.4645, -36.98, -1.61389], [-15.5333, -34.8885, -5.67698], [-13.6739, -30.712, -4.75516], [-14.9578, -33.5959, -8.1881], [-14.0266, -31.5044, -12.2512], [-15.7514, -35.3782, -10.3098], [-17.0353, -38.262, -13.7427], [-16.8173, -37.7723, -9.10992], [-18.542, -41.6461, -7.16851], [-16.6826, -37.4697, -6.24669]], [[-15.1669, -37.5393, -1.46012], [-14.3129, -35.4256, -5.53923], [-12.5957, -31.1754, -4.63158], [-13.7851, -34.1192, -8.06026], [-12.9311, -32.0055, -12.1394], [-14.5201, -35.9386, -10.1793], [-15.7095, -38.8824, -13.608], [-15.5022, -38.3694, -8.9679], [-17.0913, -42.3025, -7.00783], [-15.3741, -38.0523, -6.10018]], [[-13.85, -38.0526, -1.30632], [-13.0736, -35.9196, -5.40143], [-11.5017, -31.6006, -4.50803], [-12.5938, -34.6012, -7.93235], [-11.8175, -32.4682, -12.0275], [-13.2688, -36.4558, -10.0487], [-14.361, -39.4564, -13.473], [-14.1658, -38.9202, -8.82575], [-15.6172, -42.9078, -6.84698], [-14.0452, -38.5888, -5.95358]], [[-12.5156, -38.5192, -1.15248], [-11.8172, -36.3697, -5.26358], [-10.3932, -31.9869, -4.3845], [-11.3856, -35.0412, -7.80438], [-10.6872, -32.8918, -11.9155], [-11.9989, -36.9289, -9.91797], [-12.9913, -39.9832, -13.3378], [-12.8096, -39.424, -8.68345], [-14.1214, -43.4611, -6.68596], [-12.6973, -39.0784, -5.80688]], [[-11.1654, -38.9384, -0.998618], [-10.5452, -36.7754, -5.12568], [-9.27161, -32.334, -4.26099], [-10.1619, -35.4386, -7.67634], [-9.54163, -33.2756, -11.8034], [-10.712, -37.3573, -9.78714], [-11.6023, -40.462, -13.2025], [-11.4354, -39.88, -8.54103], [-12.6058, -43.9617, -6.52477], [-11.3323, -39.5203, -5.66008]], [[-9.801, -39.3097, -0.844725], [-9.25907, -37.1361, -4.98773], [-8.13837, -32.6412, -4.13751], [-8.92414, -35.7928, -7.54825], [-8.3822, -33.6192, -11.6913], [-9.40976, -37.7405, -9.6562], [-10.1955, -40.892, -13.0669], [-10.0448, -40.2876, -8.39846], [-11.0724, -44.4089, -6.36341], [-9.9517, -39.9141, -5.51319]], [[-8.42417, -39.6326, -0.690805], [-7.96053, -37.4513, -4.84973], [-6.99489, -32.9084, -4.01406], [-7.67398, -36.1033, -7.42009], [-7.21034, -33.922, -11.579], [-8.09369, -38.0778, -9.52514], [-8.77278, -41.2727, -12.9312], [-8.63963, -40.6462, -8.25577], [-9.52297, -44.8021, -6.20189], [-8.55733, -40.2591, -5.36621]], [[-7.03664, -39.9068, -0.536861], [-6.65118, -37.7207, -4.7117], [-5.84259, -33.135, -3.89064], [-6.41295, -36.3696, -7.29189], [-6.02748, -34.1836, -11.4667], [-6.76545, -38.3688, -9.39397], [-7.3358, -41.6034, -12.7952], [-7.22153, -40.9553, -8.11294], [-7.9595, -45.1405, -6.0402], [-7.15091, -40.5548, -5.21914]], [[-5.64016, -40.1318, -0.382895], [-5.33265, -37.9438, -4.57361], [-4.68294, -33.3208, -3.76724], [-5.1426, -36.5915, -7.16362], [-4.8351, -34.4035, -11.3543], [-5.42669, -38.6129, -9.2627], [-5.88636, -41.8836, -12.6591], [-5.79232, -41.2145, -7.96999], [-6.38391, -45.4239, -5.87835], [-5.7342, -40.8009, -5.07198]], [[-4.23648, -40.3074, -0.228909], [-4.0066, -38.1203, -4.43549], [-3.51738, -33.4656, -3.64388], [-3.86453, -36.7686, -7.0353], [-3.63466, -34.5815, -11.2419], [-4.07908, -38.8099, -9.13131], [-4.42624, -42.1128, -12.5227], [-4.35375, -41.4232, -7.82691], [-4.79818, -45.6516, -5.71634], [-4.30896, -40.997, -4.92473]], [[-2.82737, -40.4333, -0.0749058], [-2.6747, -38.2499, -4.29733], [-2.34739, -33.5692, -3.52056], [-2.58034, -36.9005, -6.90693], [-2.42766, -34.7172, -11.1294], [-2.72431, -38.9594, -8.99983], [-2.95725, -42.2907, -12.3862], [-2.90764, -41.5812, -7.6837], [-3.20429, -45.8234, -5.55418], [-2.87698, -41.1427, -4.7774]], [[-1.41462, -40.5094, 0.0791129], [-1.3386, -38.3325, -4.15913], [-1.17444, -33.6315, -3.39727], [-1.29162, -36.9872, -6.77851], [-1.2156, -34.8104, -11.0168], [-1.36404, -39.0611, -8.86823], [-1.48123, -42.4168, -12.2495], [-1.45578, -41.6882, -7.54037], [-1.60422, -45.939, -5.39186], [-1.44006, -41.2379, -4.62999]], [[0, -40.5355, 0.233145], [0, -38.368, -4.0209], [0, -33.6523, -3.27401], [0, -37.0284, -6.65004], [0, -34.8608, -10.9041], [0, -39.1149, -8.73654], [0, -42.4909, -12.1126], [0, -41.744, -7.39692], [0, -45.9981, -5.22938], [0, -41.2824, -4.4825]], [[1.4147, -40.5117, 0.387188], [1.33943, -38.3562, -3.88263], [1.17445, -33.6317, -3.1508], [1.29291, -37.024, -6.52152], [1.21763, -34.8685, -10.7913], [1.36612, -39.1205, -8.60474], [1.48458, -42.5128, -11.9755], [1.45789, -41.7485, -7.25335], [1.60637, -46.0005, -5.06676], [1.44139, -41.2761, -4.33492]], [[2.8277, -40.438, 0.541239], [2.678, -38.2971, -3.74433], [2.34742, -33.5697, -3.02762], [2.58548, -36.974, -6.39296], [2.43578, -34.8332, -10.6785], [2.7326, -39.078, -8.47285], [2.97066, -42.4824, -11.8382], [2.91605, -41.7015, -7.10966], [3.21288, -45.9463, -4.90398], [2.8823, -41.2189, -4.18728]], [[4.23721, -40.3144, 0.695298], [4.01402, -38.1909, -3.606], [3.51745, -33.4663, -2.90449], [3.87609, -36.8785, -6.26435], [3.6529, -34.755, -10.5656], [4.09773, -38.9873, -8.34085], [4.45637, -42.3995, -11.7007], [4.37266, -41.6031, -6.96585], [4.81749, -45.8354, -4.74106], [4.32092, -41.1108, -4.03955]], [[5.64146, -40.1411, 0.849361], [5.34583, -38.0375, -3.46764], [4.68306, -33.3217, -2.78141], [5.16311, -36.7375, -6.1357], [4.86748, -34.6339, -10.4527], [5.4598, -38.8485, -8.20876], [5.93985, -42.2642, -11.563], [5.82587, -41.4532, -6.82193], [6.4182, -45.6678, -4.57799], [5.75543, -40.952, -3.89176]], [[7.03868, -39.9183, 1.00343], [6.67173, -37.8372, -3.32926], [5.84279, -33.1361, -2.65837], [6.44494, -36.5511, -6.007], [6.07799, -34.47, -10.3397], [6.81708, -38.6616, -8.07657], [7.41923, -42.0765, -11.4252], [7.27387, -41.2522, -6.67789], [8.01297, -45.4438, -4.41478], [7.18403, -40.7427, -3.74389]], [[8.4271, -39.6464, 1.15749], [7.99005, -37.5902, -3.19085], [6.99518, -32.9097, -2.53537], [7.71994, -36.3195, -5.87827], [7.2829, -34.2633, -10.2266], [8.16788, -38.4268, -7.94429], [8.89264, -41.8366, -11.2872], [8.71482, -41, -6.53375], [9.5998, -45.1635, -4.25143], [8.60492, -40.483, -3.59595]], [[9.80497, -39.3256, 1.31155], [9.29915, -37.2968, -3.05242], [8.13877, -32.6428, -2.41243], [8.98653, -36.043, -5.7495], [8.4807, -34.0142, -10.1135], [9.51047, -38.1444, -7.81192], [10.3582, -41.5446, -11.149], [10.1469, -40.697, -6.38949], [11.1767, -44.8272, -4.08794], [10.0163, -40.1732, -3.44795]], [[11.1706, -38.9564, 1.46561], [10.5974, -36.9574, -2.91396], [9.27213, -32.3358, -2.28953], [10.2431, -35.7219, -5.62069], [9.66988, -33.7229, -10.0003], [10.8432, -37.8147, -7.67946], [11.8141, -41.2008, -11.0106], [11.5683, -40.3435, -6.24512], [12.7416, -44.4353, -3.92431], [11.4164, -39.8137, -3.29988]], [[12.5222, -38.5392, 1.61967], [11.883, -36.5722, -2.77549], [10.3938, -31.9889, -2.16669], [11.488, -35.3566, -5.49185], [10.8489, -33.3896, -9.88701], [12.1643, -37.4379, -7.54691], [13.2585, -40.8055, -10.8721], [12.9772, -39.9399, -6.10065], [14.2926, -43.9882, -3.76055], [12.8034, -39.4049, -3.15175]], [[13.858, -38.0746, 1.77371], [13.1546, -36.1419, -2.637], [11.5025, -31.6028, -2.0439], [12.7198, -34.9474, -5.36297], [12.0164, -33.0147, -9.77368], [13.4722, -37.0145, -7.41427], [14.6895, -40.3591, -10.7333], [14.3719, -39.4865, -5.95607], [15.8277, -43.4863, -3.59666], [14.1756, -38.9472, -3.00356]], [[15.1765, -37.5632, 1.92774], [14.4104, -35.6669, -2.4985], [12.5967, -31.1779, -1.92117], [13.9369, -34.495, -5.23406], [13.1707, -32.5987, -9.6603], [14.7652, -36.545, -7.28154], [16.1053, -39.8621, -10.5944], [15.7506, -38.984, -5.81139], [17.345, -42.9304, -3.43263], [15.5313, -38.4413, -2.8553]], [[16.476, -37.0056, 2.08176], [15.6488, -35.1479, -2.35998], [13.675, -30.7147, -1.79849], [15.1376, -33.9997, -5.10512], [14.3105, -32.1419, -9.54686], [16.0416, -36.03, -7.14873], [17.5042, -39.315, -10.4554], [17.1114, -38.4329, -5.66661], [18.8425, -42.321, -3.26848], [16.8687, -37.8878, -2.70699]], [[17.7547, -36.4026, 2.23577], [16.8684, -34.5854, -2.22144], [14.7362, -30.2138, -1.67588], [16.3206, -33.4622, -4.97615], [15.4343, -31.645, -9.43337], [17.2998, -35.4699, -7.01584], [18.8842, -38.7184, -10.3161], [18.4528, -37.8338, -5.52172], [20.3183, -41.6588, -3.10419], [18.1862, -37.2872, -2.55863]], [[19.0112, -35.7549, 2.38976], [18.0675, -33.9801, -2.0829], [15.7789, -29.6758, -1.55332], [17.4843, -32.8832, -4.84716], [16.5406, -31.1084, -9.31982], [18.5383, -34.8655, -6.88286], [20.2437, -38.0729, -10.1767], [19.7729, -37.1875, -5.37674], [21.7706, -40.9446, -2.93979], [19.482, -36.6403, -2.4102]], [[20.2438, -35.0634, 2.54372], [19.2447, -33.3329, -1.94435], [16.8018, -29.1015, -1.43082], [18.6273, -32.2633, -4.71814], [17.6281, -30.5328, -9.20621], [19.7554, -34.2174, -6.74981], [21.5809, -37.3792, -10.0371], [21.0702, -36.4947, -5.23167], [23.1975, -40.1793, -2.77526], [20.7546, -35.948, -2.26173]], [[21.451, -34.3289, 2.69767], [20.3985, -32.6444, -1.8058], [17.8036, -28.4916, -1.30839], [19.748, -31.6034, -4.58909], [18.6954, -29.9189, -9.09256], [20.9497, -33.5265, -6.61667], [22.8941, -36.6382, -9.89737], [22.3429, -35.7561, -5.08649], [24.5972, -39.3637, -2.61061], [22.0022, -35.211, -2.11321]], [[22.6313, -33.5523, 2.85159], [21.5274, -31.9156, -1.66723], [18.783, -27.8469, -1.18603], [20.8451, -30.9041, -4.46002], [19.7411, -29.2674, -8.97885], [22.1195, -32.7935, -6.48346], [24.1816, -35.8507, -9.75746], [23.5894, -34.9728, -4.94123], [25.9678, -38.4989, -2.44584], [23.2235, -34.4302, -1.96464]], [[23.7832, -32.7348, 3.00549], [22.6299, -31.1474, -1.52867], [19.7389, -27.1682, -1.06373], [21.9171, -30.1664, -4.33093], [20.7638, -28.579, -8.86509], [23.2634, -32.0193, -6.35017], [25.4417, -35.0175, -9.61738], [24.8082, -34.1456, -4.79587], [27.3077, -37.5859, -2.28096], [24.4167, -33.6067, -1.81602]], [[24.9052, -31.8773, 3.15936], [23.7048, -30.3407, -1.3901], [20.67, -26.4563, -0.941495], [22.9628, -29.3911, -4.20182], [21.7624, -27.8545, -8.75128], [24.3799, -31.2049, -6.21681], [26.6728, -34.1396, -9.47714], [25.9976, -33.2755, -4.65043], [28.6152, -36.6258, -2.11596], [25.5804, -32.7414, -1.66735]], [[25.996, -30.9809, 3.31319], [24.7506, -29.4966, -1.25153], [21.5751, -25.7123, -0.819334], [23.9808, -28.5792, -4.07269], [22.7354, -27.0949, -8.63742], [25.4676, -30.3511, -6.08338], [27.8733, -33.2181, -9.33674], [27.1562, -32.3635, -4.50489], [29.8885, -35.6197, -1.95085], [26.7131, -31.8354, -1.51865]], [[27.0542, -30.0468, 3.467], [25.766, -28.616, -1.11297], [22.4533, -24.9369, -0.697245], [24.9698, -27.7318, -3.94355], [23.6816, -26.3011, -8.52352], [26.5251, -29.4591, -5.94987], [29.0416, -32.254, -9.19618], [28.2825, -31.4109, -4.35927], [31.126, -34.569, -1.78563], [27.8133, -30.8899, -1.3699]], [[28.0785, -29.0761, 3.62077], [26.7498, -27.7002, -0.974411], [23.3033, -24.1313, -0.575229], [25.9286, -26.8498, -3.81439], [24.5998, -25.4739, -8.40957], [27.551, -28.5299, -5.8163], [30.1763, -31.2485, -9.05546], [29.375, -30.4187, -4.21357], [32.3262, -33.4748, -1.6203], [28.8798, -29.9059, -1.22112]], [[29.0676, -28.0702, 3.7745], [27.7006, -26.7502, -0.835856], [24.1241, -23.2964, -0.453287], [26.8558, -25.9344, -3.68521], [25.4889, -24.6143, -8.29557], [28.5441, -27.5647, -5.68266], [31.2758, -30.2027, -8.91458], [30.4323, -29.3882, -4.06778], [33.4875, -32.3385, -1.45487], [29.911, -28.8848, -1.0723]], [[30.0202, -27.0303, 3.9282], [28.6174, -25.7672, -0.697309], [24.9148, -22.4333, -0.331422], [27.7505, -24.9866, -3.55603], [26.3477, -23.7236, -8.18154], [29.503, -26.5646, -5.54895], [32.3387, -29.1179, -8.77355], [31.4531, -28.3205, -3.92192], [34.6085, -31.1616, -1.28933], [30.9058, -27.8277, -0.92344]], [[30.9353, -25.9578, 4.08185], [29.499, -24.7526, -0.558772], [25.6742, -21.5432, -0.209635], [28.6113, -24.0077, -3.42683], [27.175, -22.8026, -8.06745], [30.4265, -25.5309, -5.41517], [33.3636, -27.9954, -8.63237], [32.4361, -27.2171, -3.77597], [35.6876, -29.9454, -1.12369], [31.8628, -26.7361, -0.77455]], [[31.8116, -24.8539, 4.23546], [30.3442, -23.7075, -0.420245], [26.4015, -20.6271, -0.0879282], [29.4373, -22.9989, -3.29763], [27.9699, -21.8525, -7.95333], [31.3135, -24.4648, -5.28133], [34.3492, -26.8365, -8.49103], [33.3799, -26.0792, -3.62995], [36.7235, -28.6915, -0.957946], [32.7809, -25.6112, -0.625629]], [[32.6481, -23.7202, 4.38902], [31.152, -22.6332, -0.281732], [27.0959, -19.6863, 0.0336978], [30.2273, -21.9614, -3.16842], [28.7312, -20.8745, -7.83917], [32.1627, -23.3675, -5.14743], [35.2941, -25.6427, -8.34955], [34.2834, -24.9084, -3.48385], [37.7149, -27.4015, -0.792108], [33.6588, -24.4545, -0.476678]], [[33.4437, -22.5581, 4.54254], [31.9213, -21.5312, -0.143233], [27.7563, -18.7219, 0.155241], [30.9804, -20.8966, -3.0392], [29.458, -19.8697, -7.72497], [32.973, -22.2406, -5.01347], [36.1971, -24.4153, -8.20791], [35.1454, -23.7059, -3.33767], [38.6604, -26.0768, -0.626175], [34.4954, -23.2675, -0.3277]], [[34.1976, -21.369, 4.696], [32.6513, -20.4028, -0.00475105], [28.3821, -17.7351, 0.2767], [31.6957, -19.8057, -2.90998], [30.1494, -18.8395, -7.61073], [33.7435, -21.0853, -4.87945], [37.0571, -23.1558, -8.06613], [35.9648, -22.4733, -3.19143], [39.559, -24.7192, -0.460148], [35.2898, -22.0515, -0.178697]], [[34.9087, -20.1545, 4.84941], [33.341, -19.2494, 0.133713], [28.9725, -16.7273, 0.398072], [32.3721, -18.69, -2.78075], [30.8044, -17.785, -7.49645], [34.4732, -19.9031, -4.74537], [37.8728, -21.8659, -7.9242], [36.7406, -21.2122, -3.04511], [40.4093, -23.3303, -0.29403], [36.0408, -20.8082, -0.0296702]], [[35.5762, -18.9162, 5.00277], [33.9895, -18.0725, 0.272157], [29.5267, -15.6996, 0.519358], [33.0089, -17.5511, -2.65153], [31.4223, -16.7075, -7.38214], [35.161, -18.6954, -4.61124], [38.6431, -20.5469, -7.78212], [37.4717, -19.924, -2.89873], [41.2104, -21.912, -0.127822], [36.7476, -19.5391, 0.119378]], [[36.1992, -17.6556, 5.15608], [34.5961, -16.8736, 0.410579], [30.0442, -14.6535, 0.640554], [33.6052, -16.3904, -2.5223], [32.002, -15.6084, -7.2678], [35.8061, -17.4638, -4.47705], [39.3671, -19.2006, -7.6399], [38.1571, -18.6105, -2.75227], [41.9612, -20.4658, 0.0384719], [37.4093, -18.2457, 0.268447]], [[36.7772, -16.3743, 5.30932], [35.1599, -15.6542, 0.548977], [30.5242, -13.5902, 0.761659], [34.1603, -15.2092, -2.39308], [32.543, -14.4891, -7.15342], [36.4076, -16.2097, -4.34281], [40.0438, -17.8286, -7.49754], [38.7961, -17.2731, -2.60576], [42.6606, -18.9937, 0.204851], [38.0249, -16.9298, 0.417533]], [[37.3093, -15.0739, 5.4625], [35.6803, -14.4158, 0.68735], [30.9662, -12.5111, 0.882671], [34.6735, -14.009, -2.26386], [33.0446, -13.3509, -7.03901], [36.9648, -14.9348, -4.20852], [40.6722, -16.4326, -7.35504], [39.3877, -15.9136, -2.45918], [43.3079, -17.4975, 0.371314], [38.5938, -15.5929, 0.566635]], [[37.7949, -13.7562, 5.61562], [36.1566, -13.1599, 0.825696], [31.3696, -11.4176, 1.00359], [35.1441, -12.7914, -2.13464], [33.5059, -12.1951, -6.92456], [37.4769, -13.6405, -4.07417], [41.2514, -15.0143, -7.2124], [39.9312, -14.5338, -2.31253], [43.9022, -15.9791, 0.537857], [39.1152, -14.2368, 0.715751]], [[38.2335, -12.4228, 5.76867], [36.5883, -11.8883, 0.964013], [31.7341, -10.311, 1.12441], [35.5716, -11.5579, -2.00543], [33.9265, -11.0234, -6.81009], [37.9433, -12.3285, -3.93978], [41.7808, -13.5754, -7.06963], [40.4258, -13.1351, -2.16583], [44.4426, -14.4403, 0.704478], [39.5884, -12.8631, 0.864879]], [[38.6245, -11.0754, 5.92166], [36.9748, -10.6024, 1.1023], [32.0592, -9.19281, 1.24514], [35.9553, -10.31, -1.87623], [34.3057, -9.837, -6.69559], [38.3633, -11.0005, -3.80534], [42.2595, -12.1177, -6.92671], [40.871, -11.7196, -2.01907], [44.9286, -12.8831, 0.871177], [40.0129, -11.4735, 1.01402]], [[38.9675, -9.71568, 6.07458], [37.3157, -9.30385, 1.24055], [32.3444, -8.06437, 1.36577], [36.2949, -9.04933, -1.74704], [34.6431, -8.6375, -6.58106], [38.7364, -9.65806, -3.67086], [42.6868, -10.643, -6.78366], [41.2661, -10.2888, -1.87225], [45.3594, -11.3094, 1.03795], [40.3881, -10.0699, 1.16316]], [[39.2621, -8.34541, 6.22742], [37.6105, -7.99436, 1.37877], [32.5896, -6.92712, 1.48629], [36.5898, -7.7774, -1.61786], [34.9382, -7.42634, -6.46651], [39.062, -8.30289, -3.53633], [43.0622, -9.15316, -6.64048], [41.6107, -8.84463, -1.72538], [45.7346, -9.72118, 1.20479], [40.7136, -8.65395, 1.31232]], [[39.508, -6.96632, 6.38019], [37.8589, -6.67554, 1.51695], [32.7943, -5.78252, 1.60672], [36.8397, -6.49583, -1.48869], [35.1906, -6.20505, -6.35193], [39.3398, -6.93667, -3.40176], [43.3852, -7.64998, -6.49717], [41.9042, -7.38884, -1.57846], [46.0535, -8.12047, 1.37171], [40.9889, -7.22746, 1.46148]], [[39.7049, -5.58016, 6.53288], [38.0605, -5.34906, 1.6551], [32.9585, -4.63201, 1.72704], [37.0443, -5.20623, -1.35954], [35.3999, -4.97513, -6.23733], [39.5694, -5.56112, -3.26715], [43.6552, -6.13533, -6.35373], [42.1463, -5.92328, -1.43148], [46.3158, -6.50926, 1.53869], [41.2138, -5.79222, 1.61064]], [[39.8527, -4.18869, 6.6855], [38.2153, -4.01659, 1.7932], [33.0819, -3.47705, 1.84726], [37.2033, -3.91022, -1.2304], [35.5659, -3.73812, -6.1227], [39.7504, -4.17794, -3.1325], [43.8718, -4.61111, -6.21016], [42.3366, -4.44976, -1.28446], [46.5212, -4.88958, 1.70574], [41.3879, -4.35004, 1.7598]], [[39.9512, -2.79366, 6.83804], [38.3229, -2.6798, 1.93127], [33.1645, -2.31908, 1.96737], [37.3165, -2.60943, -1.10128], [35.6882, -2.49557, -6.00805], [39.8827, -2.78887, -2.99781], [44.0347, -3.07921, -6.06646], [42.4749, -2.97014, -1.13738], [46.6694, -3.26344, 1.87286], [41.5109, -2.90273, 1.90896]], [[40.0003, -1.39684, 6.99049], [38.3832, -1.34037, 2.06929], [33.2061, -1.15958, 2.08737], [37.3839, -1.30547, -0.972181], [35.7668, -1.24901, -5.89338], [39.9659, -1.39564, -2.86309], [44.1437, -1.54153, -5.92264], [42.561, -1.48626, -0.990263], [46.7601, -1.6329, 2.04003], [41.5829, -1.45211, 2.05811]], [[40, 0, 7.14286], [38.3963, 0, 2.20726], [33.2067, 0, 2.20726], [37.4052, 0, -0.8431], [35.8015, 0, -5.77869], [40, 0, -2.72833], [44.1985, 0, -5.77869], [42.5948, 0, -0.8431], [46.7933, 0, 2.20726], [41.6037, 0, 2.20726]], [[39.9504, 1.3951, 7.29514], [38.3621, 1.33964, 2.34519], [33.1665, 1.1582, 2.32705], [37.3805, 1.30536, -0.714041], [35.7922, 1.24989, -5.66399], [39.9849, 1.3963, -2.59354], [44.1989, 1.54346, -5.63462], [42.5761, 1.48679, -0.695894], [46.7688, 1.6332, 2.37456], [41.5732, 1.45177, 2.35641]], [[39.8517, 2.7867, 7.44733], [38.2807, 2.67685, 2.48307], [33.0855, 2.31356, 2.44671], [37.3099, 2.60896, -0.585006], [35.739, 2.49911, -5.54926], [39.9207, 2.79152, -2.45871], [44.145, 3.08692, -5.49043], [42.5051, 2.97225, -0.548647], [46.6868, 3.26466, 2.5419], [41.4916, 2.90137, 2.50554]], [[39.7039, 4.17305, 7.59943], [38.1523, 4.00997, 2.6209], [32.9639, 3.46464, 2.56627], [37.1933, 3.90918, -0.455996], [35.6417, 3.74609, -5.43452], [39.8073, 4.18391, -2.32386], [44.0367, 4.62844, -5.34612], [42.3817, 4.4545, -0.401362], [46.5473, 4.89232, 2.7093], [41.3589, 4.34699, 2.65467]], [[39.5074, 5.5524, 7.75144], [37.9769, 5.33731, 2.75868], [32.8018, 4.60999, 2.68571], [37.031, 5.20437, -0.327012], [35.5006, 4.98928, -5.31977], [39.6449, 5.57172, -2.18897], [43.8741, 6.1661, -5.20169], [42.2062, 5.93169, -0.254039], [46.3505, 6.51413, 2.87675], [41.1753, 5.78681, 2.80378]], [[39.2625, 6.92303, 7.90335], [37.7549, 6.65721, 2.8964], [32.5995, 5.74818, 2.80503], [36.8232, 6.49293, -0.198056], [35.3157, 6.22711, -5.205], [39.4336, 6.95321, -2.05406], [43.6573, 7.69796, -5.05715], [41.9786, 7.40196, -0.10668], [46.0965, 8.12806, 3.04425], [40.9411, 7.21903, 2.95288]], [[38.9694, 8.28321, 8.05516], [37.4866, 7.96803, 3.03407], [32.3574, 6.87778, 2.92423], [36.5702, 7.77323, -0.0691303], [35.0873, 7.45805, -5.09022], [39.1738, 8.32665, -1.91913], [43.3866, 9.2221, -4.91249], [41.6994, 8.86348, 0.0407115], [45.7858, 9.73208, 3.2118], [40.6566, 8.64184, 3.10196]], [[38.6288, 9.63124, 8.20687], [37.1723, 9.2681, 3.17168], [32.0758, 7.99738, 3.04331], [36.2722, 9.04367, 0.0597646], [34.8157, 8.68053, -4.97543], [38.8657, 9.69031, -1.78417], [43.0622, 10.7366, -4.76772], [41.3688, 10.3144, 0.188135], [45.4188, 11.3242, 3.37939], [40.3222, 10.0535, 3.25102]], [[38.241, 10.9654, 8.35849], [36.8125, 10.5558, 3.30924], [31.755, 9.1056, 3.16227], [35.9297, 10.3027, 0.188627], [34.5012, 9.89305, -4.86062], [38.5097, 11.0425, -1.64919], [42.6844, 12.2396, -4.62283], [40.9872, 11.7529, 0.335589], [44.9958, 12.9023, 3.54703], [39.9383, 11.4521, 3.40006]], [[37.8067, 12.2841, 8.50999], [36.4077, 11.8296, 3.44673], [31.3956, 10.201, 3.28111], [35.543, 11.5486, 0.317455], [34.144, 11.0941, -4.74581], [38.1063, 12.3815, -1.51418], [42.2537, 13.7291, -4.47784], [40.5551, 13.1772, 0.483072], [44.5174, 14.4646, 3.7147], [39.5053, 12.8361, 3.54908]], [[37.3264, 13.5857, 8.66139], [35.9583, 13.0878, 3.58415], [30.998, 11.2824, 3.39982], [35.1128, 12.78, 0.446247], [33.7447, 12.2821, -4.63099], [37.6559, 13.7056, -1.37916], [41.7706, 15.2033, -4.33273], [40.0731, 14.5854, 0.630581], [43.9842, 16.009, 3.88241], [39.0239, 14.2036, 3.69808]], [[36.8008, 14.8685, 8.81268], [35.4651, 14.3288, 3.72152], [30.5629, 12.3482, 3.5184], [34.6395, 13.9953, 0.575002], [33.3038, 13.4556, -4.51616], [37.159, 15.0132, -1.24412], [41.2357, 16.6603, -4.18752], [39.5417, 15.9759, 0.778115], [43.397, 17.5335, 4.05016], [38.4948, 15.5529, 3.84705]], [[36.2307, 16.1309, 8.96387], [34.9286, 15.5512, 3.85881], [30.0907, 13.3973, 3.63686], [34.1238, 15.1929, 0.703719], [32.8217, 14.6131, -4.40133], [36.6164, 16.3027, -1.10906], [40.6494, 18.0983, -4.0422], [38.9616, 17.3468, 0.925672], [42.7563, 19.0363, 4.21794], [37.9185, 16.8824, 3.99599]], [[35.6168, 17.3715, 9.11493], [34.3495, 16.7534, 3.99604], [29.5823, 14.4282, 3.75519], [33.5663, 16.3714, 0.832395], [32.299, 15.7533, -4.2865], [36.0286, 17.5723, -0.97399], [40.0126, 19.5154, -3.89678], [38.3335, 18.6965, 1.07325], [42.0631, 20.5155, 4.38576], [37.2958, 18.1904, 4.1449]], [[34.96, 18.5886, 9.26589], [33.7287, 17.9339, 4.1332], [29.0381, 15.4398, 3.87338], [32.9677, 17.5292, 0.961029], [31.7364, 16.8746, -4.17166], [35.3963, 18.8206, -0.838905], [39.3259, 20.91, -3.75126], [37.6583, 20.0233, 1.22085], [41.3182, 21.9693, 4.5536], [36.6276, 19.4753, 4.29378]], [[34.2612, 19.7807, 9.41672], [33.0669, 19.0912, 4.27029], [28.4591, 16.4309, 3.99144], [32.3289, 18.6651, 1.08962], [31.1346, 17.9756, -4.05681], [34.7205, 20.0459, -0.703807], [38.5903, 22.2801, -3.60563], [36.9367, 21.3254, 1.36846], [40.5226, 23.3957, 4.72147], [35.9147, 20.7354, 4.44263]], [[33.5213, 20.9464, 9.56744], [32.3651, 20.2239, 4.4073], [27.8459, 17.4001, 4.10937], [31.6505, 19.7774, 1.21817], [30.4943, 19.055, -3.94197], [34.0019, 21.2467, -0.568699], [37.8064, 23.6241, -3.45991], [36.1697, 22.6013, 1.5161], [39.6772, 24.7931, 4.88937], [35.1581, 21.9692, 4.59144]], [[32.7413, 22.0843, 9.71803], [31.6241, 21.3307, 4.54424], [27.1995, 18.3463, 4.22717], [30.9335, 20.8649, 1.34666], [29.8163, 20.1113, -3.82712], [33.2413, 22.4216, -0.433582], [36.9754, 24.9402, -3.31408], [35.3581, 23.8494, 1.66374], [38.7832, 26.1596, 5.05728], [34.3586, 23.1752, 4.74021]], [[31.9224, 23.193, 9.8685], [30.8448, 22.4101, 4.68111], [26.5206, 19.2683, 4.34482], [30.1789, 21.9262, 1.47512], [29.1014, 21.1434, -3.71228], [32.4399, 23.5689, -0.298458], [36.0982, 26.2269, -3.16816], [34.5032, 25.068, 1.8114], [37.8417, 27.4936, 5.22522], [33.5174, 24.3518, 4.88894]], [[31.0655, 24.271, 10.0188], [30.0284, 23.4608, 4.81789], [25.8101, 20.1651, 4.46234], [29.3875, 22.96, 1.60352], [28.3504, 22.1498, -3.59744], [31.5984, 24.6874, -0.163329], [35.1758, 27.4823, -3.02215], [33.6058, 26.2557, 1.95907], [36.8538, 28.7933, 5.39318], [32.6355, 25.4976, 5.03763]], [[30.1719, 25.3172, 10.1691], [29.1759, 24.4815, 4.95459], [25.0691, 21.0355, 4.57971], [28.5604, 23.965, 1.73187], [27.5645, 23.1293, -3.4826], [30.7181, 25.7756, -0.0281945], [34.2094, 28.7051, -2.87604], [32.6672, 27.411, 2.10675], [35.8208, 30.0573, 5.56116], [31.7141, 26.6113, 5.18628]], [[29.2427, 26.3302, 10.3192], [28.2884, 25.471, 5.09121], [24.2986, 21.8785, 4.69695], [27.6986, 24.94, 1.86017], [26.7444, 24.0807, -3.36777], [29.8, 26.832, 0.106942], [33.2001, 29.8935, -2.72984], [31.6885, 28.5324, 2.25443], [34.7441, 31.2838, 5.72915], [30.7543, 27.6913, 5.33488]], [[28.2792, 27.3089, 10.4691], [27.367, 26.428, 5.22775], [23.4994, 22.6931, 4.81404], [26.8033, 25.8837, 1.98841], [25.8912, 25.0028, -3.25295], [28.8452, 27.8555, 0.24208], [32.1492, 31.0461, -2.58355], [30.671, 29.6186, 2.40212], [33.625, 32.4713, 5.89715], [29.7574, 28.7364, 5.48344]], [[27.2826, 28.252, 10.6189], [26.413, 27.3515, 5.3642], [22.6727, 23.4783, 4.93098], [25.8756, 26.7949, 2.1166], [25.006, 25.8944, -3.13813], [27.855, 28.8447, 0.377218], [31.0579, 32.1614, -2.43717], [29.6159, 30.6681, 2.54982], [32.465, 33.6185, 6.06516], [28.7247, 29.7453, 5.63194]], [[26.2544, 29.1584, 10.7686], [25.4276, 28.2402, 5.50057], [21.8196, 24.2331, 5.04778], [24.9166, 27.6727, 2.24473], [24.0898, 26.7544, -3.02331], [26.8306, 29.7984, 0.512353], [29.9276, 33.238, -2.2907], [28.5246, 31.6797, 2.69752], [31.2654, 34.7237, 6.23318], [27.6574, 30.7167, 5.7804]], [[25.1957, 30.0271, 10.9182], [24.412, 29.0931, 5.63684], [20.9412, 24.9567, 5.16444], [23.9276, 28.5158, 2.37281], [23.1439, 27.5818, -2.90851], [25.7733, 30.7154, 0.647486], [28.7597, 34.2745, -2.14414], [27.3984, 32.6521, 2.84521], [30.0279, 35.7858, 6.40121], [26.557, 31.6495, 5.9288]], [[24.1081, 30.857, 11.0676], [23.3675, 29.9091, 5.77302], [20.0386, 25.6482, 5.28094], [22.9098, 29.3233, 2.50082], [22.1693, 28.3754, -2.79372], [24.6844, 31.5946, 0.782613], [27.5556, 35.2696, -1.99751], [26.2388, 33.5841, 2.99291], [28.7539, 36.8033, 6.56924], [25.425, 32.5425, 6.07715]], [[22.993, 31.6471, 11.2168], [22.2956, 30.6873, 5.90912], [19.113, 26.3068, 5.39729], [21.8646, 30.0941, 2.62877], [21.1673, 29.1343, -2.67894], [23.5652, 32.4348, 0.917734], [26.3168, 36.222, -1.85078], [25.0472, 34.4746, 3.1406], [27.4452, 37.7751, 6.73727], [24.2626, 33.3946, 6.22544]], [[21.8518, 32.3966, 11.3659], [21.1976, 31.4268, 6.04511], [18.1657, 26.9318, 5.51349], [20.7933, 30.8274, 2.75666], [20.1391, 29.8575, -2.56417], [22.4173, 33.2349, 1.05285], [25.0448, 37.1305, -1.70398], [23.8252, 35.3223, 3.28828], [26.1033, 38.6998, 6.9053], [23.0714, 34.2048, 6.37367]], [[20.686, 33.1046, 11.5149], [20.0749, 32.1266, 6.18101], [17.1979, 27.5223, 5.62954], [19.6972, 31.5221, 2.88448], [19.0861, 30.5441, -2.44941], [21.2419, 33.9941, 1.18795], [23.7412, 37.9939, -1.5571], [22.5743, 36.1264, 3.43596], [24.7301, 39.5764, 7.07333], [21.853, 34.9721, 6.52185]], [[19.4972, 33.7702, 11.6637], [18.929, 32.7859, 6.31682], [16.2107, 28.0778, 5.74543], [18.5777, 32.1776, 3.01224], [18.0095, 31.1933, -2.33467], [20.0406, 34.7114, 1.32304], [22.4076, 38.8112, -1.41014], [21.296, 36.8857, 3.58363], [23.3271, 40.4037, 7.24135], [20.6089, 35.6957, 6.66996]], [[18.2869, 34.3927, 11.8124], [17.7612, 33.404, 6.45252], [15.2056, 28.5976, 5.86116], [17.4363, 32.793, 3.13993], [16.9106, 31.8043, -2.21995], [18.815, 35.3858, 1.45812], [21.0457, 39.5812, -1.26311], [19.9919, 37.5993, 3.73129], [21.8963, 41.1809, 7.40936], [19.3407, 36.3745, 6.818]], [[17.0567, 34.9714, 11.9609], [16.5732, 33.9801, 6.58812], [14.1838, 29.0811, 5.97674], [16.2744, 33.3675, 3.26755], [15.7909, 32.3762, -2.10524], [17.5665, 36.0166, 1.59319], [19.6571, 40.303, -1.11599], [18.6638, 38.2665, 3.87894], [20.4393, 41.9069, 7.57737], [18.0499, 37.0079, 6.96598]], [[15.8081, 35.5056, 12.1093], [15.3664, 34.5136, 6.72362], [13.1466, 29.5278, 6.09215], [15.0935, 33.9005, 3.3951], [14.6518, 32.9084, -1.99055], [16.2967, 36.6029, 1.72824], [18.2435, 40.9756, -0.96881], [17.3133, 38.8863, 4.02657], [18.9582, 42.5808, 7.74536], [16.7384, 37.595, 7.11389]], [[14.5429, 35.9949, 12.2575], [14.1425, 35.0038, 6.85902], [12.0954, 29.9372, 6.20741], [13.895, 34.3913, 3.52258], [13.4946, 33.4002, -1.87588], [15.0072, 37.1441, 1.86327], [16.8068, 41.5982, -0.821554], [15.942, 39.4579, 4.17419], [17.4547, 43.2018, 7.91334], [15.4076, 38.1352, 7.26173]], [[13.2626, 36.4386, 12.4055], [12.9028, 35.4502, 6.9943], [11.0315, 30.3088, 6.3225], [12.6805, 34.8394, 3.64999], [12.3207, 33.851, -1.76123], [13.6996, 37.6394, 1.99828], [15.3486, 42.17, -0.674228], [14.5518, 39.9808, 4.32179], [15.9307, 43.7693, 8.08131], [14.0594, 38.6278, 7.4095]], [[11.9689, 36.8364, 12.5534], [11.6491, 35.8523, 7.12948], [9.95628, 30.6423, 6.43743], [11.4515, 35.2442, 3.77732], [11.1318, 34.2602, -1.6466], [12.3756, 38.0883, 2.13328], [13.8709, 42.6902, -0.526833], [13.1444, 40.4542, 4.46937], [14.3882, 44.2824, 8.24925], [12.6954, 39.0723, 7.5572]], [[10.6634, 37.1877, 12.7011], [10.383, 36.2097, 7.26455], [8.87113, 30.9373, 6.55219], [10.2096, 35.6053, 3.90457], [9.9292, 34.6273, -1.532], [11.0369, 38.4902, 2.26825], [12.3754, 43.1582, -0.37937], [11.7215, 40.8777, 4.61693], [12.8292, 44.7406, 8.41718], [11.3173, 39.4682, 7.70482]], [[9.34789, 37.4923, 12.8487], [9.10594, 36.5219, 7.39951], [7.77742, 31.1935, 6.66679], [8.95641, 35.9222, 4.03174], [8.71446, 34.9518, -1.41741], [9.68506, 38.8447, 2.4032], [10.864, 43.5733, -0.231842], [10.2849, 41.2506, 4.76447], [11.2555, 45.1435, 8.58508], [9.92701, 39.8151, 7.85236]], [[8.024, 37.7499, 12.996], [7.81968, 36.7887, 7.53435], [6.67657, 31.4108, 6.78121], [7.69341, 36.1946, 4.15884], [7.48909, 35.2334, -1.30286], [8.32184, 39.1512, 2.53812], [9.33868, 43.935, -0.0842508], [8.83652, 41.5725, 4.91198], [9.66927, 45.4904, 8.75296], [8.52616, 40.1124, 7.99982]], [[6.69343, 37.9603, 13.1433], [6.52582, 37.0098, 7.66908], [5.56997, 31.5888, 6.89547], [6.42223, 36.4223, 4.28585], [6.25462, 35.4717, -1.18833], [6.94895, 39.4095, 2.67302], [7.80122, 44.2429, 0.0634033], [7.37808, 41.8432, 5.05946], [8.07242, 45.781, 8.92081], [7.11657, 40.3601, 8.1472]], [[5.35789, 38.1234, 13.2903], [5.22599, 37.1849, 7.80369], [4.45902, 31.7276, 7.00956], [5.14448, 36.6049, 4.41278], [5.01258, 35.6664, -1.07382], [5.56811, 39.6192, 2.80789], [6.25357, 44.4965, 0.211118], [5.91145, 42.0622, 5.20692], [6.46698, 46.015, 9.08863], [5.70001, 40.5577, 8.2945]], [[4.01907, 38.2389, 13.4372], [3.92185, 37.3139, 7.93819], [3.34514, 31.8269, 7.12347], [3.86177, 36.7422, 4.53963], [3.76455, 35.8173, -0.959346], [4.18106, 39.7801, 2.94273], [4.69768, 44.6954, 0.358892], [4.43847, 42.2293, 5.35435], [4.85499, 46.1921, 9.25643], [4.27828, 40.7051, 8.44171]], [[2.67868, 38.307, 13.5839], [2.61504, 37.3968, 8.07256], [2.22974, 31.8867, 7.23721], [2.5757, 36.8343, 4.66639], [2.51206, 35.9241, -0.8449], [2.78952, 39.892, 3.07754], [3.13549, 44.8395, 0.506724], [2.961, 42.3443, 5.50174], [3.23847, 46.3122, 9.42418], [2.85317, 40.8022, 8.58883]], [[1.33843, 38.3275, 13.7304], [1.30721, 37.4335, 8.20681], [1.11422, 31.9072, 7.35077], [1.28791, 36.8809, 4.79307], [1.25669, 35.9868, -0.730484], [1.39525, 39.9548, 3.21232], [1.56894, 44.9285, 0.654612], [1.48089, 42.4072, 5.6491], [1.61946, 46.3752, 9.59191], [1.42648, 40.8489, 8.73587]], [[0, 38.3008, 13.8767], [0, 37.424, 8.34094], [0, 31.8882, 7.46416], [0, 36.8821, 4.91965], [0, 36.0053, -0.6161], [0, 39.9685, 3.34706], [0, 44.9624, 0.802555], [0, 42.4178, 5.79643], [0, 46.381, 9.75959], [0, 40.8453, 8.88281]], [[-1.33491, 38.2268, 14.0228], [-1.30493, 37.3684, 8.47494], [-1.11153, 31.83, 7.57737], [-1.28641, 36.8379, 5.04615], [-1.25644, 35.9796, -0.501749], [-1.39449, 39.933, 3.48177], [-1.56937, 44.9409, 0.95055], [-1.47981, 42.3763, 5.94372], [-1.61787, 46.3297, 9.92724], [-1.42446, 40.7913, 9.02967]], [[-2.66461, 38.1057, 14.1688], [-2.60596, 37.2669, 8.60881], [-2.21897, 31.7327, 7.69039], [-2.56971, 36.7485, 5.17255], [-2.51105, 35.9097, -0.387431], [-2.78647, 39.8484, 3.61644], [-3.13721, 44.8642, 1.0986], [-2.95669, 42.2827, 6.09097], [-3.23212, 46.2214, 10.0948], [-2.84513, 40.6872, 9.17642]], [[-3.98745, 37.938, 14.3146], [-3.90144, 37.1197, 8.74256], [-3.32093, 31.5966, 7.80324], [-3.84828, 36.614, 5.29886], [-3.76228, 35.7957, -0.273149], [-4.1742, 39.7149, 3.75107], [-4.70155, 44.7323, 1.24669], [-4.42879, 42.1371, 6.23818], [-4.84072, 46.0563, 10.2624], [-4.26021, 40.5332, 9.32308]], [[-5.30175, 37.7239, 14.4602], [-5.18976, 36.9271, 8.87617], [-4.41605, 31.4218, 7.9159], [-5.12055, 36.4346, 5.42508], [-5.00856, 35.6378, -0.158902], [-5.55595, 39.5326, 3.88566], [-6.26045, 44.5454, 1.39484], [-5.89426, 41.9398, 6.38534], [-6.44165, 45.8347, 10.4299], [-5.66794, 40.3295, 9.46965]], [[-6.60587, 37.4638, 14.6055], [-6.46931, 36.6893, 9.00965], [-5.50295, 31.2088, 8.02838], [-6.38491, 36.2106, 5.5512], [-6.24834, 35.4361, -0.044693], [-6.92998, 39.3019, 4.02021], [-7.81194, 44.3037, 1.54303], [-7.35126, 41.6911, 6.53246], [-8.03291, 45.5569, 10.5974], [-7.06655, 40.0764, 9.61611]], [[-7.8982, 37.1581, 14.7507], [-7.73849, 36.4067, 9.143], [-6.58029, 30.9578, 8.14068], [-7.63978, 35.9424, 5.67722], [-7.48007, 35.191, 0.069478], [-8.29459, 39.023, 4.15472], [-9.35409, 44.0075, 1.69126], [-8.79799, 41.3913, 6.67954], [-9.61251, 45.2233, 10.7648], [-8.4543, 39.7744, 9.76247]], [[-9.17712, 36.8074, 14.8957], [-8.99573, 36.0799, 9.27621], [-7.64672, 30.6693, 8.25278], [-8.88362, 35.6303, 5.80315], [-8.70223, 34.9027, 0.183609], [-9.64806, 38.6963, 4.28918], [-10.885, 43.6572, 1.83954], [-10.2326, 41.0408, 6.82657], [-11.1785, 44.8344, 10.9321], [-9.82946, 39.4238, 9.90872]], [[-10.4411, 36.4123, 15.0406], [-10.2395, 35.7092, 9.40928], [-8.70094, 30.3438, 8.3647], [-10.1149, 35.2747, 5.92897], [-9.91327, 34.5717, 0.2977], [-10.9887, 38.3222, 4.4236], [-12.4026, 43.2531, 1.98786], [-11.6534, 40.6402, 6.97355], [-12.7288, 44.3907, 11.0994], [-11.1903, 39.0253, 10.0549]], [[-11.6884, 35.9733, 15.1852], [-11.4681, 35.2953, 9.54222], [-9.74165, 29.9817, 8.47643], [-11.332, 34.8763, 6.05469], [-11.1117, 34.1983, 0.41175], [-12.3149, 37.9013, 4.55797], [-13.9052, 42.7959, 2.13623], [-13.0585, 40.1899, 7.12047], [-14.2617, 43.8929, 11.2667], [-12.5352, 38.5793, 10.2009]], [[-12.9177, 35.4912, 15.3296], [-12.6803, 34.8387, 9.67501], [-10.7676, 29.5836, 8.58797], [-12.5335, 34.4355, 6.18031], [-12.296, 33.7831, 0.525756], [-13.6249, 37.4341, 4.69229], [-15.3908, 42.286, 2.28463], [-14.4462, 39.6906, 7.26735], [-15.7751, 43.3416, 11.4339], [-13.8624, 38.0866, 10.3468]], [[-14.1274, 34.9666, 15.4738], [-13.8743, 34.3402, 9.80766], [-11.7774, 29.1502, 8.69931], [-13.7179, 33.953, 6.30582], [-13.4648, 33.3266, 0.639719], [-14.9172, 36.9213, 4.82656], [-16.8576, 41.7241, 2.43306], [-15.8148, 39.143, 7.41417], [-17.2672, 42.7377, 11.601], [-15.1703, 37.5477, 10.4927]], [[-15.3161, 34.4004, 15.6178], [-15.0489, 33.8003, 9.94017], [-12.77, 28.682, 8.81047], [-14.8837, 33.4294, 6.43123], [-14.6165, 32.8293, 0.753637], [-16.1901, 36.3635, 4.96078], [-18.3037, 41.1109, 2.58154], [-17.1625, 38.5477, 7.56093], [-18.7361, 42.0819, 11.7681], [-16.4573, 36.9636, 10.6384]], [[-16.4822, 33.7934, 15.7615], [-16.2024, 33.2199, 10.0725], [-13.7441, 28.1797, 8.92142], [-16.0295, 32.8654, 6.55653], [-15.7498, 32.2919, 0.867508], [-17.442, 35.7614, 5.09494], [-19.7274, 40.4471, 2.73004], [-18.4878, 37.9057, 7.70763], [-20.18, 41.3752, 11.9351], [-17.7217, 36.3349, 10.784]], [[-17.6243, 33.1466, 15.9051], [-17.3336, 32.5998, 10.2047], [-14.6986, 27.644, 9.03218], [-17.1539, 32.2619, 6.68171], [-16.8632, 31.7151, 0.981333], [-18.6714, 35.1158, 5.22905], [-21.1268, 39.7337, 2.87858], [-19.789, 37.2176, 7.85428], [-21.5972, 40.6184, 12.102], [-18.9621, 35.6626, 10.9294]], [[-18.7412, 32.4607, 16.0485], [-18.441, 31.9408, 10.3368], [-15.6322, 27.0758, 9.14274], [-18.2555, 31.6195, 6.80679], [-17.9554, 31.0996, 1.09511], [-19.8768, 34.4277, 5.3631], [-22.5001, 38.9714, 3.02715], [-21.0644, 36.4845, 8.00086], [-22.9858, 39.8126, 12.2688], [-20.177, 34.9476, 11.0748]], [[-19.8314, 31.7369, 16.1916], [-19.5234, 31.2439, 10.4687], [-16.5439, 26.4758, 9.2531], [-19.333, 30.9393, 6.93176], [-19.0249, 30.4463, 1.20884], [-21.0567, 33.6978, 5.49709], [-23.8458, 38.1612, 3.17575], [-22.3124, 35.7074, 8.14738], [-24.3442, 38.9589, 12.4356], [-21.3648, 34.1908, 11.22]], [[-20.8937, 30.9762, 16.3346], [-20.5793, 30.5101, 10.6005], [-17.4326, 25.8449, 9.36326], [-20.385, 30.222, 7.05661], [-20.0706, 29.7559, 1.32251], [-22.2097, 32.9272, 5.63102], [-25.162, 37.3042, 3.32437], [-23.5317, 34.8871, 8.29383], [-25.6707, 38.0584, 12.6023], [-22.524, 33.3933, 11.3651]], [[-21.9267, 30.1796, 16.4773], [-21.6075, 29.7402, 10.7321], [-18.2972, 25.1839, 9.47322], [-21.4102, 29.4687, 7.18135], [-21.091, 29.0293, 1.43614], [-23.3342, 32.1168, 5.76489], [-26.4472, 36.4015, 3.47302], [-24.7205, 34.0249, 8.44021], [-26.9637, 37.1124, 12.769], [-23.6534, 32.5561, 11.5101]], [[-22.9293, 29.3482, 16.6198], [-22.6068, 28.9354, 10.8635], [-19.1367, 24.4939, 9.58297], [-22.4075, 28.6803, 7.30597], [-22.085, 28.2675, 1.54971], [-24.429, 31.2676, 5.8987], [-27.6997, 35.4541, 3.6217], [-25.8776, 33.1218, 8.58653], [-28.2216, 36.122, 12.9355], [-24.7515, 31.6804, 11.655]], [[-23.9003, 28.4833, 16.7621], [-23.576, 28.0968, 10.9948], [-19.9501, 23.7756, 9.69252], [-23.3756, 27.8579, 7.43047], [-23.0512, 27.4714, 1.66323], [-25.4926, 30.3809, 6.03245], [-28.9181, 34.4632, 3.7704], [-27.0015, 32.1791, 8.73277], [-29.4428, 35.0886, 13.102], [-25.8169, 30.7674, 11.7997]], [[-24.8386, 27.5861, 16.9041], [-24.5139, 27.2255, 11.126], [-20.7365, 23.0302, 9.80186], [-24.3133, 27.0026, 7.55485], [-23.9886, 26.6421, 1.77669], [-26.5239, 29.4577, 6.16613], [-30.1006, 33.4301, 3.91912], [-28.0907, 31.1979, 8.87895], [-30.626, 34.0136, 13.2684], [-26.8485, 29.8183, 11.9443]], [[-25.743, 26.6577, 17.0459], [-25.4195, 26.3226, 11.2569], [-21.4949, 22.2586, 9.911], [-25.2195, 26.1156, 7.67912], [-24.8959, 25.7805, 1.8901], [-27.5214, 28.4993, 6.29974], [-31.246, 32.3562, 4.06785], [-29.144, 30.1795, 9.02504], [-31.7695, 32.8983, 13.4347], [-27.845, 28.8343, 12.0888]], [[-26.6126, 25.6994, 17.1875], [-26.2915, 25.3894, 11.3877], [-22.2245, 21.4619, 10.0199], [-26.0931, 25.1979, 7.80326], [-25.7721, 24.8878, 2.00345], [-28.4841, 27.5068, 6.43328], [-32.3527, 31.2427, 4.21661], [-30.1602, 29.1253, 9.17107], [-32.8722, 31.7443, 13.6009], [-28.8051, 27.8168, 12.2331]], [[-27.4462, 24.7127, 17.3289], [-27.1291, 24.4272, 11.5184], [-22.9244, 20.6412, 10.1286], [-26.9332, 24.2507, 7.92727], [-26.6161, 23.9652, 2.11674], [-29.4107, 26.4815, 6.56675], [-33.4194, 30.091, 4.36538], [-31.1379, 28.0367, 9.31701], [-33.9325, 30.553, 13.767], [-29.7278, 26.767, 12.3773]], [[-28.2431, 23.6988, 17.47], [-27.9313, 23.4371, 11.6489], [-23.5939, 19.7976, 10.2371], [-27.7386, 23.2754, 8.05116], [-27.4268, 23.0138, 2.22997], [-30.3001, 25.4248, 6.70015], [-34.4448, 28.9026, 4.51417], [-32.076, 26.9149, 9.46287], [-34.9494, 29.326, 13.9331], [-30.612, 25.6865, 12.5213]], [[-29.0023, 22.6591, 17.6109], [-28.6971, 22.4206, 11.7792], [-24.2322, 18.9322, 10.3454], [-28.5084, 22.2732, 8.17492], [-28.2032, 22.0348, 2.34314], [-31.1513, 24.3381, 6.83348], [-35.4276, 27.679, 4.66297], [-32.9733, 25.7616, 9.60865], [-35.9214, 28.0649, 14.099], [-31.4565, 24.5765, 12.6653]], [[-29.723, 21.595, 17.7516], [-29.4256, 21.3789, 11.9093], [-24.8385, 18.0462, 10.4535], [-29.2418, 21.2454, 8.29856], [-28.9444, 21.0294, 2.45625], [-31.9632, 23.2226, 6.96673], [-36.3665, 26.4218, 4.81178], [-33.8289, 24.5781, 9.75435], [-36.8477, 26.7714, 14.2648], [-32.2606, 23.4387, 12.809]], [[-30.4043, 20.508, 17.892], [-30.116, 20.3135, 12.0393], [-25.4123, 17.1408, 10.5614], [-29.9379, 20.1933, 8.42206], [-29.6496, 19.9989, 2.5693], [-32.7348, 22.0799, 7.0999], [-37.2604, 25.1325, 4.9606], [-34.6416, 23.3661, 9.89997], [-37.7269, 25.4471, 14.4306], [-33.0231, 22.2744, 12.9527]], [[-31.0456, 19.3994, 18.0322], [-30.7676, 19.2257, 12.1691], [-25.9528, 16.2171, 10.669], [-30.5958, 19.1184, 8.54544], [-30.3178, 18.9447, 2.68229], [-33.4653, 20.9114, 7.233], [-38.1083, 23.8127, 5.10943], [-35.4106, 22.127, 10.0455], [-38.5581, 24.0938, 14.5962], [-33.7433, 21.0851, 13.0962]], [[-31.6462, 18.2709, 18.1722], [-31.3796, 18.117, 12.2987], [-26.4596, 15.2764, 10.7764], [-31.2148, 18.0219, 8.66868], [-30.9483, 17.868, 2.79521], [-34.1537, 19.7187, 7.36602], [-38.909, 22.4641, 5.25826], [-36.1348, 20.8624, 10.1909], [-39.3403, 22.7131, 14.7617], [-34.4203, 19.8726, 13.2395]], [[-32.2054, 17.1239, 18.3119], [-31.9513, 16.9888, 12.4281], [-26.932, 14.32, 10.8836], [-31.7943, 16.9053, 8.79179], [-31.5402, 16.7702, 2.90806], [-34.7993, 18.5031, 7.49895], [-39.6615, 21.0884, 5.4071], [-36.8135, 19.5741, 10.3363], [-40.0727, 21.307, 14.9272], [-35.0534, 18.6382, 13.3827]], [[-32.7227, 15.9599, 18.4513], [-32.4821, 15.8426, 12.5574], [-27.3697, 13.3491, 10.9906], [-32.3335, 15.7701, 8.91476], [-32.0929, 15.6528, 3.02085], [-35.4013, 17.2664, 7.63181], [-40.3651, 19.6874, 5.55595], [-37.4459, 18.2636, 10.4815], [-40.7543, 19.8772, 15.0925], [-35.6418, 17.3837, 13.5257]], [[-33.1976, 14.7805, 18.5905], [-32.9715, 14.6799, 12.6865], [-27.7721, 12.3649, 11.0974], [-32.8318, 14.6177, 9.0376], [-32.6058, 14.517, 3.13357], [-35.9589, 16.0099, 7.76458], [-41.0187, 18.2627, 5.70479], [-38.0313, 16.9326, 10.6267], [-41.3845, 18.4255, 15.2577], [-36.185, 16.1106, 13.6686]], [[-33.6296, 13.5872, 18.7295], [-33.419, 13.5021, 12.8154], [-28.1388, 11.3688, 11.2039], [-33.2888, 13.4495, 9.16029], [-33.0781, 13.3644, 3.24622], [-36.4716, 14.7355, 7.89726], [-41.6216, 16.8162, 5.85363], [-38.5689, 15.5829, 10.7718], [-41.9624, 16.9539, 15.4228], [-36.6823, 14.8206, 13.8113]], [[-34.0184, 12.3817, 18.8682], [-33.824, 12.3109, 12.9441], [-28.4696, 10.3621, 11.3102], [-33.7039, 12.2672, 9.28285], [-33.5095, 12.1964, 3.3588], [-36.9388, 13.4446, 8.02986], [-42.1731, 15.3497, 6.00248], [-39.0583, 14.216, 10.9167], [-42.4876, 15.4642, 15.5878], [-37.1332, 13.5154, 13.9539]], [[-34.3636, 11.1654, 19.0066], [-34.1862, 11.1078, 13.0727], [-28.7641, 9.34602, 11.4163], [-34.0766, 11.0722, 9.40527], [-33.8992, 11.0145, 3.4713], [-37.3599, 12.139, 8.16237], [-42.6724, 13.8651, 6.15132], [-39.4987, 12.8339, 11.0616], [-42.9594, 13.9584, 15.7527], [-37.5373, 12.1966, 14.0963]], [[-34.6649, 9.93999, 19.1448], [-34.5053, 9.89423, 13.201], [-29.022, 8.32194, 11.5222], [-34.4066, 9.86595, 9.52754], [-34.247, 9.82018, 3.58374], [-37.7345, 10.8202, 8.29479], [-43.1191, 12.3642, 6.30015], [-39.8899, 11.4382, 11.2064], [-43.3773, 12.4382, 15.9174], [-37.8941, 10.866, 14.2386]], [[-34.9221, 8.70705, 19.2827], [-34.7809, 8.67185, 13.3292], [-29.2433, 7.29117, 11.6278], [-34.6936, 8.6501, 9.64967], [-34.5525, 8.6149, 3.6961], [-38.0621, 9.48996, 8.42711], [-43.5125, 10.8489, 6.44898], [-40.2313, 10.0308, 11.351], [-43.7409, 10.9058, 16.0821], [-38.2033, 9.52516, 14.3807]], [[-35.135, 7.46818, 19.4204], [-35.0128, 7.44221, 13.4571], [-29.4276, 6.25503, 11.7332], [-34.9373, 7.42616, 9.77165], [-34.8152, 7.40019, 3.80839], [-38.3425, 8.14995, 8.55935], [-43.8522, 9.32108, 6.5978], [-40.5226, 8.61333, 11.4956], [-44.0499, 9.3631, 16.2466], [-38.4647, 8.17592, 14.5226]], [[-35.3036, 6.22498, 19.5578], [-35.201, 6.20688, 13.5849], [-29.575, 5.21487, 11.8384], [-35.1375, 6.19569, 9.89349], [-35.0348, 6.17759, 3.9206], [-38.5753, 6.80187, 8.69149], [-44.1378, 7.78269, 6.74661], [-40.7635, 7.1877, 11.6401], [-44.304, 7.81199, 16.4109], [-38.678, 6.81998, 14.6644]], [[-35.4278, 4.97906, 19.695], [-35.3451, 4.96743, 13.7125], [-29.6853, 4.17199, 11.9433], [-35.294, 4.96025, 10.0152], [-35.2113, 4.94862, 4.03274], [-38.7604, 5.44741, 8.82353], [-44.3691, 6.23566, 6.89541], [-40.9538, 5.75568, 11.7844], [-44.5029, 6.25448, 16.5752], [-38.8431, 5.45904, 14.806]], [[-35.5077, 3.732, 19.8318], [-35.4452, 3.72545, 13.8399], [-29.7585, 3.12775, 12.048], [-35.4067, 3.72139, 10.1367], [-35.3443, 3.71483, 4.1448], [-38.8974, 4.08828, 8.95548], [-44.5456, 4.68193, 7.0442], [-41.0934, 4.31909, 11.9286], [-44.6466, 4.69254, 16.7393], [-38.9598, 4.09484, 14.9474]], [[-35.5432, 2.48542, 19.9685], [-35.5014, 2.4825, 13.9671], [-29.7948, 2.08345, 12.1525], [-35.4755, 2.48069, 10.2581], [-35.4337, 2.47777, 4.25678], [-38.9865, 2.7262, 9.08733], [-44.6672, 3.12344, 7.19297], [-41.1821, 2.87974, 12.0728], [-44.7349, 3.12817, 16.9033], [-39.0282, 2.72912, 15.0887]], [[-35.5345, 1.24089, 20.1048], [-35.5135, 1.24016, 14.0941], [-29.794, 1.04043, 12.2567], [-35.5006, 1.23971, 10.3793], [-35.4796, 1.23897, 4.36868], [-39.0274, 1.36287, 9.21907], [-44.7339, 1.56214, 7.34172], [-41.22, 1.43944, 12.2168], [-44.7678, 1.56333, 17.0672], [-39.0484, 1.3636, 15.2297]], [[-35.4818, 0, 20.2409], [-35.4818, 0, 14.2209], [-29.7565, 0, 12.3607], [-35.4818, 0, 10.5004], [-35.4818, 0, 4.4805], [-39.0203, 0, 9.35072], [-44.7455, 0, 7.49046], [-41.2071, 0, 12.3607], [-44.7455, 0, 17.2309], [-39.0203, 0, 15.3706]], [[-35.3854, -1.23569, 20.3767], [-35.4065, -1.23642, 14.3475], [-29.6824, -1.03653, 12.4644], [-35.4195, -1.23687, 10.6213], [-35.4405, -1.23761, 4.59223], [-38.9651, -1.36069, 9.48226], [-44.7022, -1.56103, 7.63918], [-41.1435, -1.43676, 12.5045], [-44.6681, -1.55985, 17.3945], [-38.9441, -1.35996, 15.5114]], [[-35.2456, -2.46461, 20.5122], [-35.2876, -2.46755, 14.4739], [-29.5719, -2.06787, 12.5679], [-35.3136, -2.46937, 10.7421], [-35.3557, -2.47231, 4.70389], [-38.8622, -2.71751, 9.6137], [-44.6039, -3.11901, 7.78787], [-41.0293, -2.86905, 12.6481], [-44.5359, -3.11425, 17.5579], [-38.8201, -2.71457, 15.6519]], [[-35.0626, -3.68523, 20.6474], [-35.1256, -3.69185, 14.6001], [-29.4253, -3.09272, 12.6712], [-35.1646, -3.69594, 10.8627], [-35.2275, -3.70256, 4.81546], [-38.7116, -4.06875, 9.74503], [-44.4509, -4.67197, 7.93655], [-40.8649, -4.29507, 12.7917], [-44.349, -4.66126, 17.7212], [-38.6486, -4.06213, 15.7923]], [[-34.837, -4.89603, 20.7824], [-34.9208, -4.9078, 14.7261], [-29.2429, -4.10982, 12.7742], [-34.9725, -4.91507, 10.9832], [-35.0563, -4.92684, 4.92694], [-38.5137, -5.41274, 9.87625], [-44.2433, -6.21799, 8.08519], [-40.6504, -5.71304, 12.9351], [-44.1078, -6.19895, 17.8844], [-38.4299, -5.40097, 15.9325]], [[-34.5692, -6.09549, 20.9171], [-34.6735, -6.11387, 14.8519], [-29.025, -5.1179, 12.877], [-34.7379, -6.12523, 11.1035], [-34.8422, -6.14362, 5.03834], [-38.2687, -6.7478, 10.0074], [-43.9815, -7.75513, 8.23382], [-40.3863, -7.1212, 13.0784], [-43.8128, -7.72539, 18.0474], [-38.1644, -6.72941, 16.0725]], [[-34.2597, -7.28213, 21.0515], [-34.3842, -7.30858, 14.9775], [-28.7722, -6.11572, 12.9795], [-34.4611, -7.32493, 11.2236], [-34.5855, -7.35138, 5.14965], [-37.977, -8.07226, 10.1384], [-43.6659, -9.28147, 8.38241], [-40.0731, -8.51779, 13.2216], [-43.4645, -9.23867, 18.2103], [-37.8526, -8.04581, 16.2123]], [[-33.9091, -8.45449, 21.1856], [-34.0533, -8.49045, 15.1029], [-28.4848, -7.10205, 13.0818], [-34.1425, -8.51268, 11.3436], [-34.2867, -8.54864, 5.26087], [-37.6392, -9.3845, 10.2693], [-43.2969, -10.7951, 8.53098], [-39.7111, -9.90108, 13.3646], [-43.0635, -10.7369, 18.373], [-37.4949, -9.34853, 16.3519]], [[-33.518, -9.61113, 21.3194], [-33.6816, -9.65803, 15.228], [-28.1633, -8.0757, 13.1839], [-33.7826, -9.68702, 11.4634], [-33.9462, -9.73392, 5.37201], [-37.2556, -10.6829, 10.4], [-42.8749, -12.2942, 8.67951], [-39.3009, -11.2694, 13.5075], [-42.6103, -12.2183, 18.5355], [-37.092, -10.636, 16.4914]], [[-33.0871, -10.7506, 21.4529], [-33.2694, -10.8099, 15.353], [-27.8083, -9.03546, 13.2857], [-33.3821, -10.8465, 11.583], [-33.5644, -10.9057, 5.48305], [-36.8269, -11.9658, 10.5307], [-42.4007, -13.7768, 8.82802], [-38.8432, -12.6209, 13.6503], [-42.1057, -13.681, 18.6979], [-36.6446, -11.9065, 16.6306]], [[-32.6171, -11.8717, 21.5862], [-32.8175, -11.9446, 15.4777], [-27.4204, -9.98019, 13.3872], [-32.9414, -11.9897, 11.7025], [-33.1419, -12.0627, 5.594], [-36.3536, -13.2316, 10.6612], [-41.8747, -15.2412, 8.97648], [-38.3386, -13.9541, 13.7929], [-41.5504, -15.1231, 18.8602], [-36.1532, -13.1587, 16.7697]], [[-32.1088, -12.9728, 21.7191], [-32.3267, -13.0608, 15.6022], [-27.0001, -10.9087, 13.4885], [-32.4613, -13.1152, 11.8218], [-32.6792, -13.2033, 5.70486], [-35.8366, -14.4789, 10.7917], [-41.2978, -16.6854, 9.12492], [-37.7879, -15.2673, 13.9355], [-40.9453, -16.543, 19.0223], [-35.6187, -14.3909, 16.9086]], [[-31.563, -14.0527, 21.8518], [-31.7975, -14.1572, 15.7265], [-26.5482, -11.82, 13.5895], [-31.9425, -14.2217, 11.9409], [-32.177, -14.3261, 5.81563], [-35.2763, -15.706, 10.922], [-40.6706, -18.1077, 9.27331], [-37.1918, -16.5589, 14.0778], [-40.2912, -17.9388, 19.1842], [-35.0418, -15.6016, 17.0472]], [[-30.9806, -15.1102, 21.9841], [-31.2309, -15.2323, 15.8506], [-26.0653, -12.7129, 13.6903], [-31.3856, -15.3078, 12.0598], [-31.636, -15.4299, 5.9263], [-34.6738, -16.9115, 11.0521], [-39.9941, -19.5064, 9.42167], [-36.5512, -17.8272, 14.2201], [-39.589, -19.3089, 19.3459], [-34.4234, -16.7894, 17.1857]], [[-30.3624, -16.144, 22.1162], [-30.6277, -16.285, 15.9744], [-25.5522, -13.5863, 13.7908], [-30.7916, -16.3722, 12.1786], [-31.0568, -16.5132, 6.03687], [-34.0297, -18.0939, 11.1822], [-39.2691, -20.8797, 9.56998], [-35.867, -19.0708, 14.3622], [-38.8399, -20.6516, 19.5075], [-33.7645, -17.9529, 17.324]], [[-29.7095, -17.1528, 22.2479], [-29.9887, -17.314, 16.0981], [-25.0096, -14.4393, 13.8911], [-30.1612, -17.4136, 12.2972], [-30.4403, -17.5747, 6.14735], [-33.345, -19.2517, 11.3121], [-38.4965, -22.226, 9.71825], [-35.1402, -20.2882, 14.5042], [-38.0449, -21.9652, 19.669], [-33.0659, -19.0906, 17.462]], [[-29.0229, -18.1355, 22.3794], [-29.3149, -18.318, 16.2215], [-24.4385, -15.2708, 13.9911], [-29.4953, -18.4307, 12.4156], [-29.7873, -18.6132, 6.25773], [-32.6206, -20.3836, 11.442], [-37.6774, -23.5435, 9.86648], [-34.3717, -21.4778, 14.646], [-37.205, -23.2483, 19.8302], [-32.3286, -20.2012, 17.5999]], [[-28.3035, -19.091, 22.5105], [-28.6072, -19.2958, 16.3446], [-23.8395, -16.0799, 14.0909], [-28.7949, -19.4224, 12.5339], [-29.0986, -19.6272, 6.36801], [-31.8575, -21.4882, 11.5716], [-36.8129, -24.8306, 10.0147], [-33.5626, -22.6383, 14.7877], [-36.3215, -24.4992, 19.9913], [-31.5538, -21.2833, 17.7375]], [[-27.5525, -20.0181, 22.6414], [-27.8667, -20.2464, 16.4676], [-23.2136, -16.8657, 14.1904], [-28.0609, -20.3875, 12.652], [-28.3752, -20.6158, 6.47819], [-31.0568, -22.5641, 11.7012], [-35.9041, -26.0859, 10.1628], [-32.7141, -23.7682, 14.9292], [-35.3957, -25.7164, 20.1522], [-30.7425, -22.3357, 17.875]], [[-26.7709, -20.9157, 22.7719], [-27.0945, -21.1685, 16.5903], [-22.5617, -17.6271, 14.2896], [-27.2944, -21.3247, 12.7699], [-27.618, -21.5775, 6.58827], [-30.2194, -23.61, 11.8306], [-34.9521, -27.3076, 10.3109], [-31.8272, -24.8661, 15.0706], [-34.4286, -26.8986, 20.3129], [-29.8959, -23.3572, 18.0122]], [[-25.96, -21.783, 22.9021], [-26.2915, -22.0612, 16.7128], [-21.8847, -18.3635, 14.3886], [-26.4964, -22.2331, 12.8876], [-26.828, -22.5113, 6.69825], [-29.3466, -24.6247, 11.9599], [-33.9583, -28.4944, 10.4589], [-30.9032, -25.9309, 15.2118], [-33.4219, -28.0443, 20.4735], [-29.0151, -24.3465, 18.1492]], [[-25.1208, -22.6189, 23.032], [-25.459, -22.9234, 16.835], [-21.1836, -19.0738, 14.4873], [-25.668, -23.1116, 13.0051], [-26.0062, -23.4161, 6.80812], [-28.4395, -25.607, 12.0891], [-32.9239, -29.6448, 10.6069], [-29.9434, -26.9611, 15.3529], [-32.3767, -29.1521, 20.6338], [-28.1013, -25.3025, 18.2861]], [[-24.2547, -23.4225, 23.1616], [-24.5981, -23.7541, 16.9571], [-20.4595, -19.7575, 14.5857], [-24.8103, -23.9591, 13.1224], [-25.1538, -24.2907, 6.91789], [-27.4993, -26.5558, 12.2181], [-31.8502, -30.7574, 10.7548], [-28.9489, -27.9557, 15.4938], [-31.2945, -30.2208, 20.794], [-27.1559, -26.2241, 18.4227]], [[-23.3628, -24.1928, 23.2909], [-23.71, -24.5524, 17.0789], [-19.7132, -20.4136, 14.6839], [-23.9245, -24.7746, 13.2396], [-24.2717, -25.1341, 7.02756], [-26.5273, -27.4698, 12.347], [-30.7386, -31.8308, 10.9027], [-27.9213, -28.9133, 15.6346], [-30.1768, -31.249, 20.954], [-26.1801, -27.1103, 18.559]], [[-22.4464, -24.9292, 23.4199], [-22.7958, -25.3173, 17.2004], [-18.9459, -21.0415, 14.7818], [-23.0118, -25.5572, 13.3566], [-23.3613, -25.9453, 7.13712], [-25.5247, -28.3481, 12.4757], [-29.5906, -32.8637, 11.0505], [-26.8618, -29.833, 15.7752], [-29.0252, -32.2357, 21.1138], [-25.1752, -27.9599, 18.6952]], [[-21.5068, -25.6308, 23.5485], [-21.857, -26.0481, 17.3217], [-18.1586, -21.6406, 14.8794], [-22.0734, -26.3061, 13.4734], [-22.4236, -26.7234, 7.24657], [-24.4929, -29.1895, 12.6044], [-28.4077, -33.855, 11.1983], [-25.7718, -30.7136, 15.9156], [-27.8411, -33.1798, 21.2734], [-24.1427, -28.7722, 18.8311]], [[-20.5454, -26.2969, 23.6768], [-20.8947, -26.744, 17.4428], [-17.3524, -22.2101, 14.9768], [-21.1106, -27.0203, 13.5899], [-21.4599, -27.4674, 7.35591], [-23.4332, -29.9932, 12.7328], [-27.1914, -34.8034, 11.346], [-24.6528, -31.5542, 16.0559], [-26.6262, -34.08, 21.4329], [-23.0839, -29.5461, 18.9669]], [[-19.5635, -26.9268, 23.8048], [-19.9102, -27.4041, 17.5636], [-16.5285, -22.7495, 15.0739], [-20.1246, -27.6991, 13.7064], [-20.4713, -28.1764, 7.46515], [-22.3471, -30.7581, 12.8612], [-25.9432, -35.7077, 11.4936], [-23.5063, -32.3537, 16.1961], [-25.3821, -34.9354, 21.5921], [-22.0003, -30.2808, 19.1024]], [[-18.5624, -27.5199, 23.9325], [-18.905, -28.0278, 17.6842], [-15.6879, -23.2582, 15.1707], [-19.1167, -28.3417, 13.8226], [-19.4593, -28.8496, 7.57427], [-21.2359, -31.4835, 12.9893], [-24.6647, -36.567, 11.6412], [-22.3338, -33.1113, 16.336], [-24.1104, -35.7451, 21.7511], [-20.8933, -30.9756, 19.2376]], [[-17.5436, -28.0756, 24.0598], [-17.8803, -28.6144, 17.8046], [-14.8318, -23.7358, 15.2673], [-18.0884, -28.9474, 13.9386], [-18.4251, -29.4863, 7.68329], [-20.1011, -32.1684, 13.1174], [-23.3577, -37.3801, 11.7887], [-21.1369, -33.8261, 16.4759], [-22.8129, -36.5082, 21.91], [-19.7644, -31.6296, 19.3727]], [[-16.5084, -28.5934, 24.1869], [-16.8375, -29.1634, 17.9247], [-13.9613, -24.1817, 15.3636], [-17.0409, -29.5156, 14.0544], [-17.37, -30.0857, 7.79219], [-18.9441, -32.8122, 13.2453], [-22.0237, -38.1461, 11.9361], [-19.917, -34.4973, 16.6155], [-21.4912, -37.2239, 22.0686], [-18.615, -32.2422, 19.5075]], [[-15.4583, -29.0728, 24.3135], [-15.778, -29.6741, 18.0445], [-13.0777, -24.5956, 15.4596], [-15.9756, -30.0457, 14.17], [-16.2953, -30.647, 7.90097], [-17.7666, -33.4141, 13.373], [-20.6645, -38.8642, 12.0835], [-18.6759, -35.1242, 16.755], [-20.1471, -37.8913, 22.227], [-17.4469, -32.8128, 19.6421]], [[-14.3946, -29.5134, 24.4399], [-14.7032, -30.1461, 18.1641], [-12.1821, -24.977, 15.5553], [-14.8939, -30.5371, 14.2854], [-15.2025, -31.1698, 8.00965], [-16.5699, -33.9734, 13.5006], [-19.2818, -39.5335, 12.2308], [-17.4151, -35.7061, 16.8943], [-18.7825, -38.5098, 22.3853], [-16.2614, -33.3407, 19.7764]], [[-13.3189, -29.9148, 24.5659], [-13.6146, -30.5789, 18.2834], [-11.2757, -25.3256, 15.6507], [-13.7973, -30.9893, 14.4007], [-14.093, -31.6533, 8.11821], [-15.3558, -34.4896, 13.6281], [-17.8774, -40.1532, 12.378], [-16.1362, -36.2425, 17.0334], [-17.399, -39.0787, 22.5433], [-15.0601, -33.8255, 19.9106]], [[-12.2326, -30.2768, 24.6916], [-12.5135, -30.9721, 18.4025], [-10.3597, -25.6412, 15.7459], [-12.6872, -31.4018, 14.5157], [-12.9681, -32.0971, 8.22665], [-14.1256, -34.962, 13.7554], [-16.453, -40.7226, 12.5252], [-14.841, -36.7327, 17.1723], [-15.9985, -39.5976, 22.7011], [-13.8447, -34.2667, 20.0444]], [[-11.1371, -30.599, 24.8169], [-11.4015, -31.3254, 18.5214], [-9.43539, -25.9235, 15.8408], [-11.5649, -31.7743, 14.6305], [-11.8293, -32.5007, 8.33497], [-12.881, -35.3903, 13.8825], [-15.0105, -41.2411, 12.6723], [-13.531, -37.1762, 17.3111], [-14.5828, -40.0658, 22.8587], [-12.6166, -34.6639, 20.1781]], [[-10.034, -30.8813, 24.9419], [-10.28, -31.6385, 18.64], [-8.50389, -26.1723, 15.9354], [-10.432, -32.1064, 14.7451], [-10.678, -32.8636, 8.44318], [-11.6237, -35.774, 14.0095], [-13.5518, -41.7081, 12.8193], [-12.2081, -37.5726, 17.4497], [-13.1537, -40.483, 23.0161], [-11.3776, -35.0168, 20.3115]], [[-8.92454, -31.1236, 25.0666], [-9.15038, -31.9112, 18.7583], [-7.56646, -26.3874, 16.0297], [-9.28995, -32.3979, 14.8596], [-9.51578, -33.1855, 8.55126], [-10.3551, -36.1126, 14.1364], [-12.0786, -42.1231, 12.9662], [-10.8739, -37.9217, 17.5881], [-11.7132, -40.8488, 23.1732], [-10.1293, -35.325, 20.4447]], [[-7.81037, -31.3257, 25.1909], [-8.0142, -32.1432, 18.8764], [-6.62432, -26.5687, 16.1238], [-8.14017, -32.6484, 14.9738], [-8.344, -33.466, 8.65923], [-9.07701, -36.4059, 14.263], [-10.5929, -42.4856, 13.113], [-9.53004, -38.2229, 17.7264], [-10.2631, -41.1629, 23.3302], [-8.87318, -35.5884, 20.5776]], [[-6.69289, -31.4876, 25.3149], [-6.8729, -32.3345, 18.9942], [-5.6787, -26.7162, 16.2175], [-6.98416, -32.8579, 15.0878], [-7.16418, -33.7048, 8.76707], [-7.79098, -36.6537, 14.3896], [-9.09643, -42.7954, 13.2598], [-8.17836, -38.4762, 17.8644], [-8.80516, -41.425, 23.4869], [-7.61096, -35.8068, 20.7103]], [[-5.57356, -31.6093, 25.4385], [-5.72797, -32.4849, 19.1117], [-4.73082, -26.8298, 16.311], [-5.82339, -33.0261, 15.2016], [-5.9778, -33.9018, 8.87479], [-6.49864, -36.8556, 14.5159], [-7.59122, -43.0519, 13.4065], [-6.82054, -38.6812, 18.0023], [-7.34139, -41.6351, 23.6434], [-6.34424, -35.98, 20.8427]], [[-4.45386, -31.6908, 25.5618], [-4.58086, -32.5945, 19.229], [-3.78189, -26.9096, 16.4042], [-4.65935, -33.153, 15.3152], [-4.78636, -34.0567, 8.98239], [-5.20166, -37.0117, 14.6421], [-6.07912, -43.2552, 13.5531], [-5.45832, -38.838, 18.14], [-5.87362, -41.793, 23.7997], [-5.07465, -36.108, 20.9749]], [[-3.33521, -31.7324, 25.6847], [-3.43305, -32.6633, 19.3461], [-2.83314, -26.9555, 16.4971], [-3.49352, -33.2386, 15.4285], [-3.59136, -34.1695, 9.08986], [-3.90166, -37.1218, 14.7681], [-4.56203, -43.4049, 13.6996], [-4.09343, -38.9464, 18.2775], [-4.40373, -41.8987, 23.9558], [-3.80382, -36.1909, 21.1068]], [[-2.21907, -31.7342, 25.8073], [-2.286, -32.6914, 19.4628], [-1.88578, -26.9679, 16.5897], [-2.32737, -33.2829, 15.5417], [-2.3943, -34.2401, 9.19721], [-2.60029, -37.1858, 14.894], [-3.04188, -43.5009, 13.846], [-2.72759, -39.0064, 18.4148], [-2.93358, -41.9522, 24.1116], [-2.53336, -36.2287, 21.2385]], [[-1.10686, -31.6964, 25.9295], [-1.14117, -32.6788, 19.5793], [-0.940999, -26.9467, 16.682], [-1.16237, -33.286, 15.6547], [-1.19668, -34.2685, 9.30443], [-1.29919, -37.2039, 15.0197], [-1.52056, -43.5433, 13.9923], [-1.36254, -39.0182, 18.5519], [-1.46505, -41.9536, 24.2672], [-1.26488, -36.2215, 21.3699]], [[0, -31.6192, 26.0514], [0, -32.6259, 19.6955], [0, -26.8922, 16.7741], [0, -33.248, 15.7674], [0, -34.2547, 9.41152], [0, -37.1762, 15.1452], [0, -43.532, 14.1386], [0, -38.9817, 18.6889], [0, -41.9032, 24.4226], [0, -36.1695, 21.5011]], [[1.10011, -31.5031, 26.1729], [1.13607, -32.5328, 19.8115], [0.936036, -26.8046, 16.8658], [1.15829, -33.1692, 15.8799], [1.19425, -34.1989, 9.51849], [1.29565, -37.1027, 15.2706], [1.51791, -43.4673, 14.2847], [1.35833, -38.8973, 18.8256], [1.45973, -41.8012, 24.5777], [1.2597, -36.073, 21.632]], [[2.19209, -31.3483, 26.294], [2.26561, -32.3998, 19.9272], [1.86594, -26.6842, 16.9572], [2.31106, -33.0496, 15.9922], [2.38458, -34.1011, 9.62532], [2.58615, -36.9837, 15.3958], [3.03127, -43.3491, 14.4308], [2.71073, -38.7652, 18.9621], [2.9123, -41.6478, 24.7326], [2.51263, -35.9322, 21.7627]], [[3.27456, -31.1554, 26.4148], [3.38722, -32.2273, 20.0426], [2.78855, -26.5313, 17.0484], [3.45685, -32.8897, 16.1043], [3.56951, -33.9616, 9.73203], [3.86988, -36.8195, 15.5208], [4.53818, -43.1779, 14.5767], [4.05552, -38.5857, 19.0985], [4.35589, -41.4435, 24.8872], [3.75722, -35.7476, 21.8931]], [[4.34619, -30.9248, 26.5353], [4.49951, -32.0157, 20.1577], [3.70274, -26.3464, 17.1392], [4.59426, -32.6899, 16.2162], [4.74757, -33.7807, 9.8386], [5.14525, -36.6103, 15.6457], [6.03677, -42.9538, 14.7226], [5.39103, -38.3591, 19.2346], [5.7887, -41.1888, 25.0417], [4.99194, -35.5195, 22.0232]], [[5.40565, -30.657, 26.6553], [5.60109, -31.7653, 20.2726], [4.60737, -26.1297, 17.2298], [5.72187, -32.4503, 16.3278], [5.9173, -33.5587, 9.94504], [6.41067, -36.3567, 15.7703], [7.52517, -42.6773, 14.8683], [6.71559, -38.086, 19.3705], [7.20895, -40.884, 25.1958], [6.21524, -35.2484, 22.1531]], [[6.45164, -30.3526, 26.775], [6.69061, -31.4768, 20.3871], [5.50134, -25.8818, 17.3201], [6.8383, -32.1717, 16.4392], [7.07726, -33.2959, 10.0514], [7.66458, -36.059, 15.8948], [9.00153, -42.3489, 15.014], [8.02756, -37.7667, 19.5063], [8.61488, -40.5298, 25.3498], [7.42561, -34.9348, 22.2827]], [[7.48288, -30.0122, 26.8943], [7.76674, -31.1507, 20.5014], [6.38356, -25.6031, 17.41], [7.94217, -31.8543, 16.5504], [8.22602, -32.9927, 10.1575], [8.90543, -35.7177, 16.0191], [10.464, -41.9689, 15.1595], [9.32534, -37.4019, 19.6418], [10.0048, -40.1269, 25.5034], [8.62158, -34.5793, 22.412]], [[8.49813, -29.6365, 27.0133], [8.82816, -30.7875, 20.6155], [7.25297, -25.2941, 17.4997], [9.03213, -31.4988, 16.6614], [9.36215, -32.6497, 10.2636], [10.1317, -35.3335, 16.1433], [11.9109, -41.5381, 15.305], [10.6073, -36.9921, 19.7771], [11.3769, -39.6758, 25.6569], [9.80168, -34.1825, 22.5411]], [[9.49617, -29.2262, 27.1319], [9.87359, -30.3878, 20.7292], [8.10853, -24.9555, 17.5891], [10.1069, -31.1057, 16.7721], [10.4843, -32.2673, 10.3695], [11.3419, -34.9068, 16.2672], [13.3402, -41.057, 15.4503], [11.8719, -36.538, 19.9123], [12.7295, -39.1775, 25.81], [10.9645, -33.7452, 22.6699]], [[10.4758, -28.782, 27.2501], [10.9018, -29.9524, 20.8427], [8.9492, -24.5877, 17.6781], [11.1651, -30.6757, 16.8826], [11.591, -31.8461, 10.4752], [12.5345, -34.4383, 16.391], [14.7504, -40.5263, 15.5955], [13.1176, -36.0404, 20.0472], [14.0611, -38.6326, 25.963], [12.1085, -33.2679, 22.7984]], [[11.4359, -28.3048, 27.3679], [11.9115, -29.482, 20.9558], [9.77401, -24.1915, 17.7669], [12.2054, -30.2095, 16.9929], [12.681, -31.3867, 10.5809], [13.7081, -33.9288, 16.5146], [16.1395, -39.9468, 15.7406], [14.3429, -35.4999, 20.1819], [15.37, -38.0421, 26.1156], [13.2325, -32.7516, 22.9267]], [[12.3753, -27.7953, 27.4854], [12.9015, -28.9773, 21.0687], [10.582, -23.7675, 17.8553], [13.2268, -29.7078, 17.103], [13.753, -30.8897, 10.6863], [14.8613, -33.379, 16.638], [17.5061, -39.3193, 15.8857], [15.5463, -34.9175, 20.3164], [16.6546, -37.4068, 26.268], [14.3351, -32.1971, 23.0547]], [[13.2929, -27.2544, 27.6025], [13.8707, -28.4391, 21.1813], [11.3722, -23.3164, 17.9435], [14.2278, -29.1713, 17.2128], [14.8056, -30.356, 10.7917], [15.9927, -32.7898, 16.7612], [18.8483, -38.6447, 16.0306], [16.7263, -34.294, 20.4506], [17.9134, -36.7279, 26.4202], [15.4149, -31.6051, 23.1824]], [[14.1877, -26.6831, 27.7192], [14.8179, -27.8684, 21.2936], [12.1436, -22.8389, 18.0314], [15.2074, -28.6009, 17.3224], [15.8376, -29.7861, 10.8969], [17.1008, -32.162, 16.8843], [20.1645, -37.924, 16.1753], [17.8816, -33.6303, 20.5847], [19.1448, -36.0062, 26.5721], [16.4706, -30.9767, 23.3098]], [[15.0586, -26.0823, 27.8355], [15.742, -27.2659, 21.4056], [12.8956, -22.3358, 18.1189], [16.1643, -27.9974, 17.4318], [16.8476, -29.181, 11.0019], [18.1845, -31.4964, 17.0071], [21.4532, -37.1581, 16.32], [19.0107, -32.9275, 20.7185], [20.3475, -35.243, 26.7237], [17.5011, -30.3128, 23.437]], [[15.9047, -25.4529, 27.9514], [16.6419, -26.6326, 21.5174], [13.627, -21.8078, 18.2061], [17.0975, -27.3617, 17.5409], [17.8346, -28.5414, 11.1069], [19.2423, -30.7942, 17.1298], [22.7128, -36.348, 16.4645], [20.1123, -32.1864, 20.8521], [21.52, -34.4392, 26.875], [18.5052, -29.6145, 23.5638]], [[16.7251, -24.7959, 28.067], [17.5166, -25.9694, 21.6288], [14.3372, -21.2558, 18.2931], [18.0058, -26.6947, 17.6498], [18.7974, -27.8682, 11.2116], [20.2731, -30.0561, 17.2522], [23.9417, -35.495, 16.609], [21.1852, -31.4083, 20.9855], [22.6609, -33.5962, 27.0261], [19.4816, -28.8826, 23.6904]], [[17.5187, -24.1125, 28.1821], [18.3652, -25.2775, 21.7399], [15.0254, -20.6807, 18.3797], [18.8883, -25.9975, 17.7584], [19.7347, -27.1625, 11.3163], [21.2756, -29.2834, 17.3745], [25.1385, -34.6001, 16.7533], [22.228, -30.5942, 21.1187], [23.769, -32.7152, 27.177], [20.4292, -28.1184, 23.8167]], [[18.2849, -23.4036, 28.2969], [19.1866, -24.5577, 21.8508], [15.6908, -20.0833, 18.466], [19.7438, -25.2709, 17.8669], [20.6455, -26.425, 11.4207], [22.2487, -28.477, 17.4966], [26.3017, -33.6647, 16.8975], [23.2396, -29.7453, 21.2517], [24.8428, -31.7974, 27.3275], [21.3471, -27.323, 23.9427]], [[19.0227, -22.6704, 28.4113], [19.9799, -23.8111, 21.9613], [16.3327, -19.4645, 18.552], [20.5715, -24.5161, 17.975], [21.5286, -25.6568, 11.5251], [23.1912, -27.6382, 17.6185], [27.43, -32.6898, 17.0415], [24.2187, -28.8627, 21.3844], [25.8813, -30.8441, 27.4778], [22.234, -26.4975, 24.0684]], [[19.7315, -21.914, 28.5253], [20.7443, -23.0389, 22.0716], [16.9503, -18.8252, 18.6376], [21.3703, -23.7341, 18.083], [22.3832, -24.859, 11.6293], [24.102, -26.768, 17.7401], [28.522, -31.6769, 17.1855], [25.1643, -27.9478, 21.5169], [26.8832, -29.8568, 27.6278], [23.0891, -25.6431, 24.1938]], [[20.4103, -21.1355, 28.6389], [21.479, -22.2421, 22.1815], [17.5431, -18.1664, 18.723], [22.1394, -22.926, 18.1907], [23.208, -24.0326, 11.7333], [24.9801, -25.8677, 17.8616], [29.5764, -30.6273, 17.3293], [26.0753, -27.0018, 21.6491], [27.8474, -28.8368, 27.7775], [23.9115, -24.7611, 24.319]], [[21.0587, -20.3361, 28.7521], [22.1831, -21.4219, 22.2912], [18.1104, -17.489, 18.8081], [22.878, -22.093, 18.2981], [24.0023, -23.1788, 11.8372], [25.8245, -24.9384, 17.9829], [30.592, -29.5424, 17.4729], [26.9506, -26.0259, 21.7812], [28.7728, -27.7855, 27.9269], [24.7001, -23.8526, 24.4438]], [[21.6759, -19.5171, 28.8649], [22.8559, -20.5795, 22.4005], [18.6516, -16.794, 18.8928], [23.5851, -21.2361, 18.4053], [24.7651, -22.2986, 11.9409], [26.6342, -23.9815, 18.104], [31.5676, -28.4236, 17.6165], [27.7893, -25.0216, 21.913], [29.6584, -26.7046, 28.0761], [25.4542, -22.9191, 24.5684]], [[22.2613, -18.6795, 28.9773], [23.4967, -19.716, 22.5095], [19.1663, -16.0824, 18.9772], [24.2601, -20.3567, 18.5123], [25.4954, -21.3932, 12.0445], [27.4083, -22.9983, 18.2249], [32.5021, -27.2725, 17.7599], [28.5905, -23.9903, 22.0446], [30.5033, -25.5953, 28.2249], [26.173, -21.9617, 24.6926]], [[22.8145, -17.8247, 29.0893], [24.1048, -18.8327, 22.6183], [19.6539, -15.3553, 19.0613], [24.9023, -19.4558, 18.619], [26.1926, -20.4639, 12.1479], [28.1459, -21.99, 18.3456], [33.3943, -26.0905, 17.9032], [29.3532, -22.9332, 22.1759], [31.3066, -24.4594, 28.3735], [26.8556, -20.9819, 24.8166]], [[23.3349, -16.9538, 29.2009], [24.6797, -17.9309, 22.7267], [20.1139, -14.6136, 19.1451], [25.5109, -18.5347, 18.7254], [26.8557, -19.5118, 12.2512], [28.8464, -20.9581, 18.466], [34.2433, -24.8792, 18.0463], [30.0767, -21.852, 22.307], [32.0673, -23.2983, 28.5218], [27.5015, -19.981, 24.9402]], [[23.822, -16.0682, 29.3121], [25.2208, -17.0116, 22.8348], [20.5459, -13.8584, 19.2286], [26.0853, -17.5947, 18.8316], [27.484, -18.5382, 12.3544], [29.5088, -19.9039, 18.5863], [35.0481, -23.6402, 18.1893], [30.7601, -20.748, 22.4378], [32.7849, -22.1137, 28.6698], [28.11, -18.9604, 25.0636]], [[24.2755, -15.169, 29.4229], [25.7275, -16.0763, 22.9426], [20.9496, -13.0908, 19.3117], [26.6249, -16.6371, 18.9376], [28.0769, -17.5444, 12.4573], [30.1324, -18.8288, 18.7063], [35.8077, -22.3752, 18.3322], [31.4028, -19.6227, 22.5685], [33.4584, -20.9071, 28.8175], [28.6805, -17.9215, 25.1866]], [[24.6951, -14.2577, 29.5333], [26.1995, -15.1263, 23.0501], [21.3246, -12.3118, 19.3946], [27.1293, -15.6631, 19.0433], [28.6337, -16.5317, 12.5601], [30.7168, -17.7343, 18.8262], [36.5214, -21.0857, 18.4749], [32.0042, -18.4776, 22.6988], [34.0872, -19.6803, 28.9649], [29.2123, -16.8657, 25.3094]], [[25.0803, -13.3354, 29.6433], [26.6362, -14.1627, 23.1573], [21.6705, -11.5224, 19.4771], [27.5978, -14.674, 19.1487], [29.1538, -15.5013, 12.6628], [31.2611, -16.6218, 18.9458], [37.1884, -19.7734, 18.6175], [32.5635, -17.3143, 22.829], [34.6708, -18.4348, 29.112], [29.7052, -15.7945, 25.4318]], [[25.431, -12.4035, 29.7528], [27.0374, -13.187, 23.2642], [21.9872, -10.7239, 19.5593], [28.0302, -13.6712, 19.2539], [29.6366, -14.4547, 12.7653], [31.7649, -15.4928, 19.0653], [37.8079, -18.4401, 18.7599], [33.0803, -16.1343, 22.9589], [35.2087, -17.1724, 29.2588], [30.1585, -14.7093, 25.5539]], [[25.7469, -11.4633, 29.862], [27.4026, -12.2004, 23.3707], [22.2744, -9.9172, 19.6411], [28.4259, -12.656, 19.3589], [30.0816, -13.3932, 12.8676], [32.2277, -14.3487, 19.1845], [38.3792, -17.0875, 18.9022], [33.5541, -14.9392, 23.0885], [35.7002, -15.8948, 29.4054], [30.572, -13.6115, 25.6757]], [[26.0279, -10.516, 29.9707], [27.7317, -11.2043, 23.477], [22.5319, -9.10348, 19.7226], [28.7846, -11.6298, 19.4636], [30.4884, -12.3181, 12.9698], [32.6491, -13.1911, 19.3035], [38.9018, -15.7173, 19.0444], [33.9844, -13.7306, 23.2179], [36.1451, -14.6036, 29.5516], [30.9453, -12.5027, 25.7972]], [[26.2739, -9.56292, 30.0791], [28.0243, -10.2, 23.5829], [22.7596, -8.28381, 19.8038], [29.1062, -10.5938, 19.568], [30.8566, -11.2309, 13.0718], [33.0286, -12.0214, 19.4222], [39.3751, -14.3314, 19.1864], [34.3709, -12.51, 23.347], [36.5429, -13.3005, 29.6975], [31.2781, -11.3843, 25.9184]], [[26.4848, -8.60545, 30.187], [28.2804, -9.18887, 23.6885], [22.9573, -7.45929, 19.8847], [29.3902, -9.54945, 19.6722], [31.1858, -10.1329, 13.1736], [33.3659, -10.8412, 19.5408], [39.7987, -12.9314, 19.3282], [34.7133, -11.279, 23.4759], [36.8934, -11.9874, 29.8431], [31.5703, -10.2578, 26.0393]], [[26.6607, -7.64483, 30.2945], [28.4998, -8.1722, 23.7938], [23.1251, -6.63102, 19.9653], [29.6365, -8.49813, 19.7761], [31.4757, -9.0255, 13.2753], [33.6608, -9.65207, 19.6591], [40.1722, -11.5192, 19.4699], [35.0112, -10.0393, 23.6045], [37.1964, -10.6659, 29.9884], [31.8216, -9.1247, 26.1599]], [[26.8015, -6.68236, 30.4016], [28.6825, -7.15135, 23.8987], [23.2629, -5.80008, 20.0455], [29.845, -7.4412, 19.8797], [31.726, -7.91019, 13.3769], [33.913, -8.45546, 19.7773], [40.4951, -10.0966, 19.6115], [35.2646, -8.79246, 23.7329], [37.4516, -9.33774, 30.1333], [32.032, -7.98647, 26.2801]], [[26.9073, -5.71933, 30.5082], [28.8283, -6.12765, 24.0034], [23.3706, -4.96758, 20.1254], [30.0156, -6.38001, 19.9831], [31.9366, -6.78834, 13.4782], [34.1224, -7.25294, 19.8952], [40.7674, -8.66537, 19.7529], [35.4733, -7.54008, 23.861], [37.6591, -8.00469, 30.278], [32.2014, -6.84462, 26.4001]], [[26.9783, -4.757, 30.6145], [28.9374, -5.10245, 24.1077], [23.4485, -4.1346, 20.205], [30.1482, -5.31594, 20.0862], [32.1073, -5.66139, 13.5794], [34.2889, -6.04606, 20.0128], [40.9886, -7.2274, 19.8941], [35.6372, -6.28379, 23.9889], [37.8187, -6.66846, 30.4223], [32.3298, -5.70061, 26.5197]], [[27.0147, -3.79666, 30.7203], [29.0098, -4.07706, 24.2116], [23.4965, -3.30222, 20.2842], [30.2429, -4.25036, 20.1891], [32.238, -4.53076, 13.6804], [34.4124, -4.83634, 20.1303], [41.1588, -5.78449, 20.0352], [35.7562, -5.02521, 24.1165], [37.9305, -5.33079, 30.5664], [32.4172, -4.55594, 26.6389]], [[27.0166, -2.83956, 30.8257], [29.0456, -3.05282, 24.3153], [23.5148, -2.47151, 20.3631], [30.2997, -3.18462, 20.2917], [32.3287, -3.39788, 13.7813], [34.4929, -3.62535, 20.2475], [41.2777, -4.33847, 20.1761], [35.8305, -3.76593, 24.2439], [37.9947, -3.9934, 30.7101], [32.4639, -3.41209, 26.7579]], [[26.9843, -1.88693, 30.9306], [29.045, -2.03103, 24.4186], [23.5036, -1.64353, 20.4417], [30.3186, -2.12008, 20.394], [32.3793, -2.26418, 13.882], [34.5305, -2.41461, 20.3645], [41.3455, -2.89116, 20.3168], [35.86, -2.50758, 24.3709], [38.0112, -2.658, 30.8535], [32.4698, -2.27051, 26.8765]], [[26.9183, -0.940006, 31.0352], [29.0083, -1.01299, 24.5216], [23.4631, -0.81935, 20.5199], [30.2999, -1.0581, 20.496], [32.3899, -1.13108, 13.9825], [34.5253, -1.20565, 20.4813], [41.3622, -1.4444, 20.4574], [35.8451, -1.25174, 24.4978], [37.9805, -1.32631, 30.9965], [32.4353, -1.13267, 26.9948]], [[26.8187, 0, 31.1393], [28.9356, 0, 24.6243], [23.3936, 0, 20.5978], [30.2438, 0, 20.5978], [32.3607, 0, 14.0828], [34.4775, 0, 20.5978], [41.3278, 0, 20.5978], [35.7858, 0, 24.6243], [37.9027, 0, 31.1393], [32.3607, 0, 27.1128]], [[26.6861, 0.931898, 31.243], [28.8272, 1.00667, 24.7266], [23.2953, 0.813489, 20.6754], [30.1505, 1.05288, 20.6993], [32.2917, 1.12765, 14.183], [34.3873, 1.20083, 20.7141], [41.2426, 1.44022, 20.7381], [35.6825, 1.24606, 24.7506], [37.7781, 1.31924, 31.2817], [32.2462, 1.12606, 27.2304]], [[26.5208, 1.85452, 31.3462], [28.6836, 2.00576, 24.8286], [23.1685, 1.6201, 20.7526], [30.0203, 2.09923, 20.8006], [32.1832, 2.25047, 14.283], [34.255, 2.39534, 20.8302], [41.1068, 2.87447, 20.8782], [35.5355, 2.48488, 24.8766], [37.6073, 2.62976, 31.4238], [32.0922, 2.2441, 27.3478]], [[26.3234, 2.76671, 31.449], [28.5052, 2.99602, 24.9303], [23.0137, 2.41884, 20.8295], [29.8536, 3.13774, 20.9015], [32.0354, 3.36705, 14.3828], [34.0809, 3.58205, 20.9461], [40.9208, 4.30095, 21.0181], [35.3451, 3.71492, 25.0023], [37.3906, 3.92991, 31.5655], [31.8991, 3.35273, 27.4647]], [[26.0944, 3.66734, 31.5514], [28.2923, 3.97623, 25.0316], [22.8312, 3.20872, 20.9061], [29.6507, 4.16714, 21.0022], [31.8486, 4.47603, 14.4825], [33.8654, 4.75947, 21.0617], [40.6849, 5.71788, 21.1578], [35.1118, 4.93464, 25.1278], [37.1286, 5.21808, 31.707], [31.6675, 4.45057, 27.5814]], [[25.8344, 4.5553, 31.6533], [28.0456, 4.94519, 25.1326], [22.6215, 3.98878, 20.9823], [29.4121, 5.18615, 21.1026], [31.6232, 5.57603, 14.582], [33.6089, 5.92616, 21.177], [40.3995, 7.12352, 21.2974], [34.8361, 6.14255, 25.253], [36.8218, 6.49268, 31.848], [31.3978, 5.53628, 27.6977]], [[25.544, 5.42954, 31.7548], [27.7654, 5.90171, 25.2333], [22.385, 4.75808, 21.0582], [29.1383, 6.19353, 21.2028], [31.3597, 6.6657, 14.6813], [33.312, 7.08068, 21.2922], [40.0652, 8.51612, 21.4368], [34.5186, 7.33715, 25.3779], [36.4709, 7.75213, 31.9888], [31.0906, 6.60851, 27.8137]], [[25.2237, 6.28898, 31.8558], [27.4523, 6.84464, 25.3336], [22.1223, 5.5157, 21.1337], [28.8297, 7.18805, 21.3026], [31.0583, 7.74371, 14.7804], [32.9751, 8.22162, 21.4071], [39.6826, 9.89397, 21.576], [34.1598, 8.51699, 25.5026], [36.0766, 8.9949, 32.1292], [30.7465, 7.66596, 27.9293]], [[24.8744, 7.13261, 31.9565], [27.1071, 7.77283, 25.4336], [21.8337, 6.26072, 21.2089], [28.487, 8.16851, 21.4022], [30.7197, 8.80873, 14.8794], [32.5989, 9.34759, 21.5217], [39.2522, 11.2554, 21.715], [33.7603, 9.68062, 25.6269], [35.6396, 10.2195, 32.2693], [30.3662, 8.70737, 28.0446]], [[24.4967, 7.95945, 32.0566], [26.7303, 8.6852, 25.5332], [21.52, 6.99228, 21.2838], [28.1107, 9.13373, 21.5015], [30.3444, 9.85948, 14.9781], [32.184, 10.4572, 21.6361], [38.7747, 12.5987, 21.8539], [33.321, 10.8266, 25.751], [35.1606, 11.4244, 32.409], [29.9504, 9.73147, 28.1595]], [[24.0913, 8.76852, 32.1563], [26.3226, 9.58064, 25.6325], [21.1817, 7.70952, 21.3583], [27.7016, 10.0826, 21.6006], [29.9329, 10.8947, 15.0767], [31.7311, 11.5492, 21.7503], [38.251, 13.9222, 21.9926], [32.8425, 11.9537, 25.8748], [34.6407, 12.6082, 32.5484], [29.4998, 10.7371, 28.2741]], [[23.6591, 9.55891, 32.2556], [25.8848, 10.4581, 25.7315], [20.8195, 8.41162, 21.4324], [27.2603, 11.0139, 21.6993], [29.4859, 11.9131, 15.1751], [31.2409, 12.6221, 21.8642], [37.6817, 15.2244, 22.1311], [32.3256, 13.0604, 25.9983], [34.0805, 13.7694, 32.6874], [29.0153, 11.7229, 28.3884]], [[23.2009, 10.3297, 32.3544], [25.4175, 11.3166, 25.83], [20.4339, 9.09776, 21.5063], [26.7875, 11.9266, 21.7978], [29.0041, 12.9135, 15.2734], [30.7142, 13.6748, 21.9779], [37.0678, 16.5036, 22.2694], [31.7711, 14.1454, 26.1215], [33.4812, 14.9068, 32.8261], [28.4976, 12.6879, 28.5023]], [[22.7175, 11.0801, 32.4528], [24.9217, 12.1551, 25.9283], [20.0257, 9.76717, 21.5797], [26.284, 12.8196, 21.8959], [28.4882, 13.8946, 15.3714], [30.1518, 14.706, 22.0913], [36.4102, 17.7584, 22.4075], [31.18, 15.2075, 26.2445], [32.8437, 16.0189, 32.9644], [27.9476, 13.631, 28.6159]], [[22.2098, 11.8092, 32.5507], [24.3981, 12.9727, 26.0262], [19.5955, 10.4191, 21.6529], [25.7506, 13.6918, 21.9938], [27.9389, 14.8554, 15.4693], [29.5547, 15.7145, 22.2045], [35.7098, 18.9872, 22.5455], [30.5532, 16.2454, 26.3671], [32.169, 17.1045, 33.1024], [27.3663, 14.5509, 28.7291]], [[21.6787, 12.5162, 32.6482], [23.8476, 13.7684, 26.1238], [19.1441, 11.0528, 21.7257], [25.1881, 14.5424, 22.0914], [27.3571, 15.7946, 15.567], [28.9236, 16.699, 22.3175], [34.9676, 20.1886, 22.6832], [29.8917, 17.258, 26.4895], [31.4582, 18.1624, 33.24], [26.7546, 15.4468, 28.8419]], [[21.1251, 13.2004, 32.7452], [23.2711, 14.5414, 26.221], [18.6722, 11.6677, 21.7981], [24.5975, 15.3702, 22.1887], [26.7436, 16.7112, 15.6644], [28.2595, 17.6585, 22.4302], [34.1848, 21.361, 22.8208], [29.1964, 18.244, 26.6116], [30.7124, 19.1912, 33.3773], [26.1134, 16.3175, 28.9544]], [[20.55, 13.8611, 32.8418], [22.6696, 15.2908, 26.3178], [18.1806, 12.263, 21.8702], [23.9796, 16.1744, 22.2858], [26.0992, 17.6041, 15.7618], [27.5635, 18.5918, 22.5426], [33.3624, 22.5032, 22.9582], [28.4685, 19.2022, 26.7334], [29.9328, 20.1899, 33.5142], [25.4439, 17.1621, 29.0666]], [[19.9543, 14.4976, 32.9379], [22.0439, 16.0158, 26.4143], [17.6702, 12.8381, 21.9419], [23.3353, 16.9541, 22.3825], [25.4249, 18.4723, 15.8589], [26.8365, 19.4979, 22.6548], [32.5017, 23.6138, 23.0953], [27.709, 20.1318, 26.8549], [29.1206, 21.1574, 33.6508], [24.747, 17.9797, 29.1784]], [[19.339, 15.1093, 33.0336], [21.395, 16.7156, 26.5104], [17.1416, 13.3925, 22.0133], [22.6657, 17.7084, 22.4789], [24.7216, 19.3147, 15.9558], [26.0797, 20.3757, 22.7667], [31.6037, 24.6915, 23.2323], [26.919, 21.0315, 26.9761], [28.2771, 22.0925, 33.7869], [24.0237, 18.7694, 29.2898]], [[18.7052, 15.6956, 33.1288], [20.724, 17.3895, 26.6062], [16.5958, 13.9255, 22.0844], [21.9716, 18.4364, 22.5751], [23.9904, 20.1303, 16.0526], [25.2941, 21.2242, 22.8784], [30.6699, 25.7351, 23.3691], [26.0998, 21.9003, 27.0969], [27.4035, 22.9943, 33.9228], [23.2753, 19.5303, 29.4009]], [[18.0539, 16.2558, 33.2235], [20.0318, 18.0367, 26.7017], [16.0336, 14.4367, 22.155], [21.2542, 19.1374, 22.6709], [23.2321, 20.9183, 16.1491], [24.4808, 22.0426, 22.9898], [29.7014, 26.7433, 23.5057], [25.2525, 22.7374, 27.2175], [26.5011, 23.8617, 34.0582], [22.5029, 20.2617, 29.5116]], [[17.3862, 16.7896, 33.3178], [19.3196, 18.6567, 26.7967], [15.4558, 14.9255, 22.2254], [20.5145, 19.8106, 22.7665], [22.4479, 21.6777, 16.2455], [23.641, 22.8298, 23.1009], [28.6997, 27.715, 23.642], [24.3783, 23.5419, 27.3378], [25.5713, 24.694, 34.1933], [21.7076, 20.9627, 29.622]], [[16.703, 17.2965, 33.4116], [18.5884, 19.2488, 26.8914], [14.8634, 15.3915, 22.2954], [19.7536, 20.4554, 22.8618], [21.6389, 22.4078, 16.3416], [22.7759, 23.5851, 23.2118], [27.6661, 28.649, 23.7782], [23.4785, 24.3127, 27.4578], [24.6155, 25.4901, 34.328], [20.8905, 21.6328, 29.732]], [[16.0055, 17.7759, 33.5049], [17.8392, 19.8124, 26.9858], [14.2572, 15.8342, 22.365], [18.9725, 21.071, 22.9568], [20.8061, 23.1075, 16.4376], [21.8867, 24.3076, 23.3225], [26.6019, 29.5444, 23.9142], [22.5545, 25.0493, 27.5775], [23.635, 26.2493, 34.4624], [20.053, 22.2711, 29.8416]], [[15.2948, 18.2276, 33.5978], [17.0732, 20.347, 27.0798], [13.6381, 16.2532, 22.4343], [18.1723, 21.6569, 23.0514], [19.9507, 23.7763, 16.5334], [20.9746, 24.9965, 23.4328], [25.5088, 30.4002, 24.05], [21.6074, 25.7507, 27.6969], [22.6312, 26.9709, 34.5963], [19.1962, 22.8771, 29.9508]], [[14.5719, 18.6511, 33.6902], [16.2915, 20.8521, 27.1734], [13.0071, 16.6483, 22.5032], [17.3542, 22.2124, 23.1458], [19.0738, 24.4134, 16.629], [20.0409, 25.6512, 23.5429], [24.3881, 31.2153, 24.1855], [20.6386, 26.4162, 27.816], [21.6057, 27.654, 34.7299], [18.3213, 23.4502, 30.0597]], [[13.8379, 19.0463, 33.7821], [15.4952, 21.3273, 27.2667], [12.365, 17.019, 22.5718], [16.5194, 22.737, 23.2399], [18.1767, 25.0181, 16.7244], [19.087, 26.271, 23.6528], [23.2413, 31.989, 24.3209], [19.6496, 27.0453, 27.9348], [20.5599, 28.2982, 34.8632], [17.4297, 23.9899, 30.1683]], [[13.0941, 19.4127, 33.8736], [14.6855, 21.7721, 27.3596], [11.7129, 17.3651, 22.64], [15.669, 23.2303, 23.3337], [17.2604, 25.5896, 16.8196], [18.114, 26.8551, 23.7624], [22.0701, 32.7203, 24.456], [18.6416, 27.6373, 28.0532], [19.4952, 28.9028, 34.996], [16.5226, 24.4958, 30.2764]], [[12.3414, 19.7503, 33.9646], [13.8635, 22.1862, 27.4521], [11.0516, 17.6863, 22.7078], [14.8042, 23.6917, 23.4271], [16.3263, 26.1276, 16.9146], [17.1234, 27.4032, 23.8717], [20.876, 33.4085, 24.591], [17.616, 28.1915, 28.1714], [18.4131, 29.4672, 35.1285], [15.6013, 24.9673, 30.3842]], [[11.581, 20.0588, 34.0551], [13.0304, 22.5693, 27.5442], [10.3822, 17.9824, 22.7753], [13.9262, 24.1208, 23.5203], [15.3756, 26.6313, 17.0094], [16.1165, 27.9146, 23.9807], [19.6605, 34.0529, 24.7257], [16.5744, 28.7077, 28.2892], [17.3153, 29.9909, 35.2605], [14.6671, 25.4041, 30.4916]], [[10.814, 20.3382, 34.1452], [12.1873, 22.9211, 27.636], [9.70545, 18.2533, 22.8425], [13.0361, 24.5174, 23.6132], [14.4095, 27.1003, 17.1041], [15.0946, 28.3888, 24.0895], [18.4253, 34.6529, 24.8602], [15.518, 29.1852, 28.4068], [16.2031, 30.4737, 35.3922], [13.7212, 25.8059, 30.5986]], [[10.0416, 20.5882, 34.2347], [11.3355, 23.2413, 27.7275], [9.02243, 18.4987, 22.9092], [12.1353, 24.881, 23.7057], [13.4293, 27.5341, 17.1985], [14.0591, 28.8255, 24.198], [17.172, 35.2078, 24.9945], [14.4484, 29.6236, 28.524], [15.0783, 30.915, 35.5235], [12.7651, 26.1724, 30.7053]], [[9.26476, 20.809, 34.3238], [10.4762, 23.5299, 27.8185], [8.33406, 18.7186, 22.9757], [11.2249, 25.2115, 23.798], [12.4363, 27.9323, 17.2927], [13.0115, 29.2242, 24.3062], [15.9023, 35.7171, 25.1286], [13.367, 30.0227, 28.6409], [13.9422, 31.3146, 35.6544], [11.8001, 26.5034, 30.8116]], [[8.48472, 21.0004, 34.4125], [9.61039, 23.7865, 27.9092], [7.64131, 18.9129, 23.0417], [10.3061, 25.5085, 23.89], [11.4318, 28.2946, 17.3867], [11.953, 29.5847, 24.4142], [14.6178, 36.1803, 25.2624], [12.2752, 30.3821, 28.7574], [12.7964, 31.6723, 35.7849], [10.8273, 26.7986, 30.9175]], [[7.70256, 21.1626, 34.5006], [8.73939, 24.0113, 27.9995], [6.94511, 19.0815, 23.1074], [9.3802, 25.7719, 23.9816], [10.417, 28.6206, 17.4805], [10.8852, 29.9067, 24.5219], [13.3202, 36.597, 25.3961], [11.1745, 30.7016, 28.8737], [11.6426, 31.9878, 35.9151], [9.84832, 27.058, 31.023]], [[6.91936, 21.2956, 34.5883], [7.86437, 24.204, 28.0894], [6.24643, 19.2245, 23.1727], [8.44841, 26.0015, 24.0729], [9.39342, 28.91, 17.5741], [9.80931, 30.19, 24.6293], [12.0113, 36.967, 25.5295], [10.0663, 30.981, 28.9896], [10.4822, 32.261, 36.0448], [8.8643, 27.2815, 31.1281]], [[6.13621, 21.3995, 34.6754], [6.98648, 24.3648, 28.179], [5.54621, 19.3419, 23.2377], [7.51198, 26.1974, 24.164], [8.36225, 29.1626, 17.6675], [8.72689, 30.4343, 24.7364], [10.6927, 37.2897, 25.6627], [8.95225, 31.2202, 29.1052], [9.3169, 32.4919, 36.1741], [7.87662, 27.469, 31.2329]], [[5.35421, 21.4746, 34.7621], [6.10692, 24.4935, 28.2682], [4.84538, 19.4338, 23.3023], [6.57212, 26.3593, 24.2547], [7.32483, 29.3783, 17.7607], [7.63931, 30.6396, 24.8433], [9.36604, 37.5652, 25.7956], [7.83366, 31.4191, 29.2205], [8.14813, 32.6804, 36.3031], [6.88659, 27.6206, 31.3372]], [[4.57441, 21.5209, 34.8483], [5.22685, 24.5904, 28.357], [4.14489, 19.5002, 23.3666], [5.63008, 26.4874, 24.3451], [6.28251, 29.5569, 17.8537], [6.54797, 30.8058, 24.9499], [8.03316, 37.7931, 25.9284], [6.71204, 31.5777, 29.3355], [6.9775, 32.8266, 36.4316], [5.89554, 27.7363, 31.4412]], [[3.79788, 21.5388, 34.9341], [4.34743, 24.6555, 28.4454], [3.44565, 19.5413, 23.4305], [4.68707, 26.5817, 24.4352], [5.23662, 29.6983, 17.9465], [5.45431, 30.9329, 25.0561], [6.69572, 37.9733, 26.0609], [5.58885, 31.6959, 29.4501], [5.80654, 32.9305, 36.5598], [4.90476, 27.8163, 31.5448]], [[3.02565, 21.5286, 35.0193], [3.46981, 24.689, 28.5334], [2.74859, 19.5572, 23.494], [3.74432, 26.6422, 24.525], [4.18848, 29.8026, 18.0391], [4.35971, 31.021, 25.1622], [5.35544, 38.106, 26.1932], [4.46554, 31.774, 29.5644], [4.63678, 32.9924, 36.6875], [3.91555, 27.8606, 31.648]], [[2.25875, 21.4906, 35.104], [2.59514, 24.6911, 28.6211], [2.0546, 19.5482, 23.5571], [2.80304, 26.6691, 24.6144], [3.13943, 29.8696, 18.1315], [3.26559, 31.0701, 25.2679], [4.01403, 38.1909, 26.3252], [3.34357, 31.812, 29.6784], [3.46974, 33.0124, 36.8148], [2.92921, 27.8695, 31.7508]], [[1.49818, 21.425, 35.1883], [1.72454, 24.662, 28.7084], [1.36459, 19.5146, 23.6199], [1.86443, 26.6626, 24.7036], [2.09078, 29.8996, 18.2237], [2.17335, 31.0803, 25.3733], [2.67319, 38.2284, 26.457], [2.22438, 31.8101, 29.7921], [2.30694, 32.9908, 36.9417], [1.947, 27.8433, 31.8532]], [[0.744945, 21.3324, 35.2721], [0.859124, 24.6021, 28.7953], [0.679434, 19.4564, 23.6823], [0.929691, 26.6229, 24.7924], [1.04387, 29.8925, 18.3156], [1.08436, 31.0519, 25.4785], [1.33461, 38.2184, 26.5886], [1.10938, 31.7685, 29.9054], [1.14987, 32.9279, 37.0682], [0.970179, 27.7823, 31.9553]], [[0, 21.2132, 35.3553], [0, 24.5116, 28.8818], [0, 19.3742, 23.7444], [0, 26.5502, 24.8809], [0, 29.8486, 18.4074], [0, 30.9852, 25.5834], [0, 38.1612, 26.7199], [0, 31.6876, 30.0184], [0, 32.8242, 37.1943], [0, 27.6867, 32.0569]]]; + for(i = [0:len(sections) - 1]) { - assertEqualPoints(expected[i], sections[i], float_digits = 3); - //round_echo_pts(sections[i], float_digits = 3); + assertEqualPoints(expected[i], sections[i]); } } diff --git a/test/test_split_str.scad b/test/test_split_str.scad deleted file mode 100644 index eea83793..00000000 --- a/test/test_split_str.scad +++ /dev/null @@ -1,11 +0,0 @@ -module test_split_str() { - echo("==== test_split_str ===="); - - include ; - include ; - include ; - - assertEqual(["hello", "world"], split_str("hello,world", ",")); -} - -test_split_str(); \ No newline at end of file diff --git a/test/test_sub_str.scad b/test/test_sub_str.scad deleted file mode 100644 index 61a5e8cb..00000000 --- a/test/test_sub_str.scad +++ /dev/null @@ -1,11 +0,0 @@ -module test_sub_str() { - echo("==== test_sub_str ===="); - - include ; - include ; - - assertEqual("hello", sub_str("helloworld", 0, 5)); - assertEqual("world", sub_str("helloworld", 5)); -} - -test_sub_str(); \ No newline at end of file diff --git a/test/test_torus_knot.scad b/test/test_torus_knot.scad new file mode 100644 index 00000000..77857f4e --- /dev/null +++ b/test/test_torus_knot.scad @@ -0,0 +1,18 @@ +include ; +include ; + +module test_torus_knot() { + echo("==== test_torus_knot ===="); + + p = 2; + q = 3; + phi_step = 0.05; + star_radius = 0.5; + + expected = [[3, 0, 0], [2.97384, 0.298379, -0.149438], [2.89643, 0.587135, -0.29552], [2.7709, 0.857141, -0.434966], [2.60231, 1.10024, -0.564642], [2.39728, 1.30964, -0.681639], [2.16371, 1.48027, -0.783327], [1.91025, 1.60898, -0.867423], [1.64587, 1.69465, -0.932039], [1.37936, 1.73821, -0.975723], [1.11882, 1.74247, -0.997495], [0.871303, 1.7119, -0.996865], [0.642387, 1.65232, -0.973848], [0.435975, 1.57043, -0.92896], [0.254127, 1.4734, -0.863209], [0.0970392, 1.36839, -0.778073], [-0.0368675, 1.26207, -0.675463], [-0.150741, 1.16019, -0.557684], [-0.248997, 1.06727, -0.42738], [-0.336937, 0.986246, -0.287478], [-0.420311, 0.918397, -0.14112], [-0.504864, 0.86324, 0.00840725], [-0.595869, 0.818619, 0.157746], [-0.697712, 0.780889, 0.303542], [-0.813523, 0.745199, 0.44252], [-0.944901, 0.705862, 0.571561], [-1.09173, 0.656784, 0.687766], [-1.25214, 0.59192, 0.788525], [-1.42251, 0.505745, 0.871576], [-1.5977, 0.393683, 0.935053], [-1.7713, 0.252493, 0.97753], [-1.93598, 0.0805688, 0.998054], [-2.08394, -0.121856, 0.996165], [-2.20739, -0.352622, 0.971903], [-2.29902, -0.607671, 0.925815], [-2.35246, -0.881197, 0.858934], [-2.36268, -1.16591, 0.772764], [-2.32638, -1.45337, 0.66924], [-2.24217, -1.73444, 0.550686], [-2.11074, -1.99977, 0.419764], [-1.9349, -2.24026, 0.279415], [-1.71938, -2.44758, 0.132792], [-1.47071, -2.6146, -0.0168139], [-1.19683, -2.73578, -0.166042], [-0.906703, -2.80745, -0.311541], [-0.609834, -2.828, -0.450044], [-0.315791, -2.79796, -0.57844], [-0.0336987, -2.71992, -0.693845], [0.228228, -2.59835, -0.793668], [0.463095, -2.43935, -0.875667], [0.665652, -2.25025, -0.938], [0.832522, -2.03917, -0.979268], [0.962312, -1.81458, -0.998543], [1.0556, -1.58474, -0.995394], [1.11481, -1.35733, -0.96989], [1.14397, -1.13892, -0.922604], [1.14839, -0.934724, -0.854599], [1.13424, -0.74829, -0.767401], [1.1081, -0.581381, -0.662969], [1.07651, -0.433954, -0.543648], [1.0455, -0.304247, -0.412118], [1.02016, -0.188996, -0.271333], [1.00429, -0.0837354, -0.124454], [1.00018, 0.0168192, 0.0252194], [1.00839, 0.118334, 0.174327], [1.02778, 0.226397, 0.319519], [1.05553, 0.346063, 0.457536], [1.08735, 0.481434, 0.585277], [1.11781, 0.635299, 0.699875], [1.14066, 0.808857, 0.798754], [1.1493, 1.00155, 0.879696], [1.13721, 1.21101, 0.940881], [1.09848, 1.4331, 0.980936], [1.02819, 1.66213, 0.998962], [0.922807, 1.89109, 0.994553], [0.780515, 2.11208, 0.967808], [0.601388, 2.31671, 0.919329], [0.387492, 2.49656, 0.850203], [0.142852, 2.64374, 0.761984], [-0.126699, 2.75128, 0.656652], [-0.413781, 2.81359, 0.536573], [-0.709825, 2.8268, 0.404444], [-1.0055, 2.78901, 0.263232], [-1.29121, 2.70041, 0.116108], [-1.55757, 2.56331, -0.033623], [-1.79591, 2.38204, -0.182599], [-1.99874, 2.1627, -0.327474], [-2.16008, 1.91287, -0.464995], [-2.27583, 1.64121, -0.592074], [-2.34391, 1.35694, -0.705855], [-2.36431, 1.06941, -0.803784], [-2.33909, 0.787574, -0.883663], [-2.27218, 0.519515, -0.943696], [-2.16908, 0.272067, -0.982535], [-2.03653, 0.0504715, -0.999309], [-1.88207, -0.141841, -0.993641], [-1.71354, -0.30336, -0.965658], [-1.53862, -0.434489, -0.915988], [-1.36439, -0.537411, -0.845747], [-1.19687, -0.615853, -0.756512], [-1.04071, -0.674756, -0.650288], [-0.898953, -0.719872, -0.529459], [-0.772885, -0.757313, -0.396741], [-0.66203, -0.793087, -0.255112], [-0.564251, -0.832646, -0.107754], [-0.475957, -0.880473, 0.0420244], [-0.392422, -0.939738, 0.190859], [-0.308163, -1.01205, 0.335407], [-0.217383, -1.0973, 0.472422], [-0.114431, -1.19365, 0.598828], [0.0057428, -1.29759, 0.711785], [0.147166, -1.40417, 0.808758], [0.31249, -1.50727, 0.887567], [0.502712, -1.60001, 0.946444], [0.717015, -1.67519, 0.984065], [0.952712, -1.72573, 0.999586], [1.20531, -1.74517, 0.992659], [1.4687, -1.72812, 0.963439], [1.73544, -1.67063, 0.912582], [1.99715, -1.57049, 0.841231], [2.24492, -1.42745, 0.750987], [2.46983, -1.24333, 0.643878], [2.66343, -1.02194, 0.522309], [2.81821, -0.768962, 0.389009], [2.92803, -0.491682, 0.246974], [2.98845, -0.198637, 0.0993915]]; + actual = torus_knot(p, q, phi_step); + + assertEqualPoints(expected, actual); +} + +test_torus_knot(); \ No newline at end of file diff --git a/test/test_triangulate.scad b/test/test_triangulate.scad new file mode 100644 index 00000000..39261d27 --- /dev/null +++ b/test/test_triangulate.scad @@ -0,0 +1,26 @@ +include ; +include ; + +module test_triangulate() { + echo("==== test_triangulate ===="); + + + shape = [ + [0, 0], + [10, 0], + [12, 5], + [5, 10], + [10, 15], + [0, 20], + [-5, 18], + [-18, 3], + [-4, 10] + ]; + + expected = [[8, 0, 1], [1, 2, 3], [3, 4, 5], [5, 6, 7], [8, 1, 3], [5, 7, 8], [8, 3, 5]]; + actual = triangulate(shape); + + assertEqualPoints(expected, actual); +} + +test_triangulate(); \ No newline at end of file diff --git a/test/test_trim_shape.scad b/test/test_trim_shape.scad new file mode 100644 index 00000000..5c5411b1 --- /dev/null +++ b/test/test_trim_shape.scad @@ -0,0 +1,18 @@ +include ; +include ; +include ; +include ; + +module test_trim_shape() { + echo("==== test_trim_shape ===="); + + taiwan = shape_taiwan(50); + offseted = bijection_offset(taiwan, -2); + + expected = [[10.6338, 19.2796], [10.0046, 20.2443], [9.90826, 20.5883], [8.70107, 20.8781], [7.92074, 21.1601], [7.86725, 21.2196], [7.27987, 21.0324], [7.09336, 21.4286], [6.37935, 19.021], [4.68179, 20.5971], [4.5527, 20.5497], [2.93485, 20.2511], [2.81634, 20.2087], [2.73817, 20.1409], [2.18145, 19.775], [1.37773, 19.5192], [1.2485, 19.3686], [0.910901, 18.828], [0.76564, 17.6214], [0.347453, 17.4878], [0.384341, 17.2143], [-0.098055, 16.5572], [-0.218527, 16.3137], [-0.405555, 15.5988], [-0.698227, 15.3605], [-0.7087, 15.33], [-0.320271, 13.0644], [-2.60331, 13.5214], [-2.98653, 13.1043], [-3.10016, 12.8995], [-3.142, 12.5466], [-3.51015, 11.7766], [-4.57544, 10.6037], [-4.70456, 10.1567], [-5.14938, 9.39273], [-5.2474, 8.94799], [-5.59061, 7.97586], [-5.62525, 7.94754], [-5.62269, 7.96175], [-6.33, 7.144], [-6.34104, 6.89284], [-6.7609, 5.93534], [-6.87067, 5.84916], [-6.91022, 5.65005], [-7.61745, 5.02019], [-7.82187, 4.44883], [-8.03107, 4.06493], [-8.21974, 3.51881], [-8.61249, 3.00185], [-8.69757, 2.91941], [-8.73113, 2.77248], [-9.10025, 2.07081], [-9.3238, 1.86887], [-9.30876, 1.91017], [-9.59926, 1.52971], [-9.69857, 1.16721], [-10.0582, 0.403593], [-10.3384, -0.0369127], [-10.3854, -0.132622], [-10.3951, -0.194325], [-10.2707, -0.739663], [-10.249, -0.964726], [-10.2079, -1.03632], [-9.93828, -2.07816], [-10.1738, -2.69596], [-9.679, -2.94903], [-10.1969, -5.13922], [-10.45, -5.40183], [-10.7508, -6.14493], [-10.6782, -6.47661], [-10.715, -6.55157], [-10.0504, -6.65196], [-9.57877, -8.84089], [-10.2006, -8.19261], [-9.81559, -8.91674], [-9.65581, -9.94319], [-9.12163, -10.7459], [-9.22681, -11.5141], [-9.01465, -11.8442], [-8.73247, -12.4252], [-8.48376, -13.4262], [-8.48489, -13.4305], [-8.0699, -13.8936], [-7.7349, -14.5209], [-7.41546, -14.6692], [-7.0645, -14.8905], [-6.80517, -15.1143], [-6.79263, -15.1225], [-6.16377, -15.4209], [-5.49479, -15.9866], [-5.4225, -16.0949], [-5.53602, -16.0266], [-4.80354, -16.6014], [-4.40453, -17.1464], [-4.19976, -17.6117], [-4.00409, -17.8586], [-3.97777, -17.9015], [-3.83889, -17.3565], [-3.33584, -16.4856], [-3.19723, -15.9876], [-3.05908, -15.1064], [-2.63023, -14.3537], [-2.24981, -13.8734], [-1.91247, -13.0155], [-1.33334, -12.2667], [-1.12254, -12.1685], [-0.675112, -11.6726], [0.101845, -11.1595], [0.270335, -10.2843], [0.880024, -9.55879], [1.38186, -9.13658], [1.33812, -9.23203], [1.80844, -8.5697], [1.98972, -7.7937], [2.26128, -7.29646], [2.33773, -7.04836], [2.59675, -6.51487], [3.01217, -6.07782], [3.00479, -5.62291], [3.13547, -4.69461], [3.35489, -4.05881], [3.63333, -3.5265], [3.8947, -3.17889], [4.68681, 1.37928], [4.94669, 1.90737], [5.34344, 3.84582], [5.66428, 4.72607], [5.77584, 5.26262], [5.79433, 5.62233], [5.88933, 6.02115], [5.79416, 6.3079], [5.7619, 7.19402], [6.03794, 8.02087], [6.36442, 8.50081], [6.47507, 8.97173], [6.74051, 9.5319], [6.76126, 9.47511], [7.6015, 10.6679], [7.85706, 10.8721], [7.92577, 10.9651], [7.92595, 10.9508], [7.96742, 11.5364], [8.08626, 11.9958], [8.08561, 12.006], [8.1501, 12.7625], [10.5031, 12.7536], [9.26392, 13.5338], [8.58567, 14.7305], [8.55847, 16.0185], [8.5956, 16.121], [8.48033, 16.6489], [8.46518, 17.3066], [8.50618, 17.927], [8.63904, 18.5685], [8.86699, 19.2643], [9.22929, 19.8277]]; + actual = trim_shape(offseted, 3, len(offseted) - 6); + + assertEqualPoints(expected, actual); +} + +test_trim_shape(); \ No newline at end of file diff --git a/test/util/test_parse_number.scad b/test/util/test_parse_number.scad new file mode 100644 index 00000000..1e5d30ce --- /dev/null +++ b/test/util/test_parse_number.scad @@ -0,0 +1,13 @@ +module test_parse_number() { + echo("==== test_parse_number ===="); + + include ; + include ; + include ; + include ; + + assertEqualNum(11, parse_number("10") + 1); + assertEqualNum(-0.1, parse_number("-1.1") + 1); +} + +test_parse_number(); diff --git a/test/util/test_slice.scad b/test/util/test_slice.scad new file mode 100644 index 00000000..a8cb0dd5 --- /dev/null +++ b/test/util/test_slice.scad @@ -0,0 +1,15 @@ +module test_slice() { + echo("==== test_slice ===="); + + include ; + include ; + + lt = [for(c = "helloworld") c]; + expected1 = [for(c = "hello") c]; + expected2 = [for(c = "world") c]; + + assert(expected1 == slice(lt, 0, 5)); + assert(expected2 == slice(lt, 5)); +} + +test_slice(); \ No newline at end of file diff --git a/test/util/test_sort.scad b/test/util/test_sort.scad new file mode 100644 index 00000000..354568ce --- /dev/null +++ b/test/util/test_sort.scad @@ -0,0 +1,23 @@ +module test_sort() { + echo("==== test_sort ===="); + + include ; + include ; + + assertEqualPoints( + [[2, 0, 0], [5, 0, 0], [7, 0, 0], [9, 0, 0], [10, 0, 0]], + sort([[10, 0, 0], [5, 0, 0], [7, 0, 0], [2, 0, 0], [9, 0, 0]], by = "x") + ); + + assertEqualPoints( + [[2, 0, 0], [5, 0, 0], [7, 0, 0], [9, 0, 0], [10, 0, 0]], + sort([[10, 0, 0], [5, 0, 0], [7, 0, 0], [2, 0, 0], [9, 0, 0]], by = "idx", idx = 0) + ); + + assertEqualPoints( + [[0, 2, 0], [0, 5, 0], [0, 7, 0], [0, 9, 0], [0, 10, 0]], + sort([[0, 10, 0], [0, 5, 0], [0, 7, 0], [0, 2, 0], [0, 9, 0]], by = "y") + ); +} + +test_sort(); diff --git a/test/util/test_split_str.scad b/test/util/test_split_str.scad new file mode 100644 index 00000000..1e02a232 --- /dev/null +++ b/test/util/test_split_str.scad @@ -0,0 +1,11 @@ +module test_split_str() { + echo("==== test_split_str ===="); + + include ; + include ; + include ; + + assert(["hello", "world","abc", "xyz"] == split_str("hello,world,abc,xyz", ",")); +} + +test_split_str(); \ No newline at end of file diff --git a/test/util/test_sub_str.scad b/test/util/test_sub_str.scad new file mode 100644 index 00000000..88a7c3ce --- /dev/null +++ b/test/util/test_sub_str.scad @@ -0,0 +1,11 @@ +module test_sub_str() { + echo("==== test_sub_str ===="); + + include ; + include ; + + assert("hello" == sub_str("helloworld", 0, 5)); + assert("world" == sub_str("helloworld", 5)); +} + +test_sub_str(); \ No newline at end of file