diff --git a/README.md b/README.md index 78d6ea4f..66836c98 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ Too many dependencies? Because OpenSCAD doesn't provide namespace management, I - [shape_trapezium](https://openhome.cc/eGossip/OpenSCAD/lib-shape_trapezium.html) - [shape_cyclicpolygon](https://openhome.cc/eGossip/OpenSCAD/lib-shape_cyclicpolygon.html) - [shape_pentagram](https://openhome.cc/eGossip/OpenSCAD/lib-shape_pentagram.html) + - [shape_starburst](https://openhome.cc/eGossip/OpenSCAD/lib-shape_starburst.html) - [shape_superformula](https://openhome.cc/eGossip/OpenSCAD/lib-shape_superformula.html) - [shape_glued2circles](https://openhome.cc/eGossip/OpenSCAD/lib-shape_glued2circles.html) - [shape_path_extend](https://openhome.cc/eGossip/OpenSCAD/lib-shape_path_extend.html) diff --git a/docs/images/lib-shape_starburst-1.JPG b/docs/images/lib-shape_starburst-1.JPG new file mode 100644 index 00000000..ff2b3c58 Binary files /dev/null and b/docs/images/lib-shape_starburst-1.JPG differ diff --git a/docs/images/lib-shape_starburst-2.JPG b/docs/images/lib-shape_starburst-2.JPG new file mode 100644 index 00000000..4bfa58fc Binary files /dev/null and b/docs/images/lib-shape_starburst-2.JPG differ diff --git a/docs/lib-shape_starburst.md b/docs/lib-shape_starburst.md new file mode 100644 index 00000000..35b0670f --- /dev/null +++ b/docs/lib-shape_starburst.md @@ -0,0 +1,39 @@ +# shape_starburst + +Returns shape points of a star. They can be used with xxx_extrude modules of dotSCAD. The shape points can be also used with the built-in polygon module. + +## Parameters + +- `r1` : The outer radius of the starburst. +- `r2` : The inner radius of the starburst. +- `n` : The number of vertices. + + +## Examples + + include ; + + polygon(shape_starburst(30, 12, 6)); + +![shape_starburst](images/lib-shape_starburst-1.JPG) + + include ; + include ; + include ; + include ; + include ; + include ; + include ; + + shape_pts = shape_starburst(5, 2, 8); + + golden_spiral_extrude( + shape_pts, + from = 5, + to = 10, + point_distance = 1, + scale = 10 + ); + +![shape_pentagram](images/lib-shape_starburst-2.JPG) + diff --git a/src/shape_starburst.scad b/src/shape_starburst.scad new file mode 100644 index 00000000..280104fa --- /dev/null +++ b/src/shape_starburst.scad @@ -0,0 +1,31 @@ +/** +* shape_star.scad +* +* Returns shape points of a starburst. +* They can be used with xxx_extrude modules of dotSCAD. +* The shape points can be also used with the built-in polygon module. +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-shape_starburst.html +* +**/ + +function __outer_points(r1, r2, n) = + let( + a = 360 / n + ) + [for(i = [0:n-1]) [r1 * cos(a * i), r1 * sin(a * i)]]; +function __inner_points(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)]]; + +function __one_by_one(outer_points, inner_points, i = 0) = + len(outer_points) == i ? [] : + concat([outer_points[i], inner_points[i]], __one_by_one(outer_points, inner_points, i + 1)); + +function shape_starburst(r1, r2, n) = __one_by_one(__outer_points(r1, r2, n), __inner_points(r1, r2, n)); \ No newline at end of file