From 1f9682ecd3eb325b0b288005f98ef1d0f48710ac Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Tue, 28 Mar 2017 20:56:13 +0800 Subject: [PATCH] added rotate_p --- README.md | 3 ++ docs/images/lib-rotate_p-1.JPG | Bin 0 -> 33202 bytes docs/images/lib-rotate_p-2.JPG | Bin 0 -> 32727 bytes docs/lib-rotate_p.md | 57 +++++++++++++++++++++++++++++++++ src/rotate_p.scad | 50 +++++++++++++++++++++++++++++ 5 files changed, 110 insertions(+) create mode 100644 docs/images/lib-rotate_p-1.JPG create mode 100644 docs/images/lib-rotate_p-2.JPG create mode 100644 docs/lib-rotate_p.md create mode 100644 src/rotate_p.scad diff --git a/README.md b/README.md index b75d0910..6146c085 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,9 @@ Some modules may depend on other modules. For example, the `polyline2d` module d - [hollow_out](https://openhome.cc/eGossip/OpenSCAD/lib-hollow_out.html) - [bend](https://openhome.cc/eGossip/OpenSCAD/lib-bend.html) +- Functon + - [rotate_p](https://openhome.cc/eGossip/OpenSCAD/lib-rotate_p.html) + - Path - [circle_path](https://openhome.cc/eGossip/OpenSCAD/lib-circle_path.html) - [bezier](https://openhome.cc/eGossip/OpenSCAD/lib-bezier.html) diff --git a/docs/images/lib-rotate_p-1.JPG b/docs/images/lib-rotate_p-1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..e1b91901b15fd9a2f85df503aa8a9f15b7cf95ba GIT binary patch literal 33202 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 Pe{reopFRWnzm5MNdADA< literal 0 HcmV?d00001 diff --git a/docs/images/lib-rotate_p-2.JPG b/docs/images/lib-rotate_p-2.JPG new file mode 100644 index 0000000000000000000000000000000000000000..c1f1f971257e5b338e00c373a31463c4fa2d9536 GIT binary patch literal 32727 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/lib-rotate_p.md b/docs/lib-rotate_p.md new file mode 100644 index 00000000..c7149ae6 --- /dev/null +++ b/docs/lib-rotate_p.md @@ -0,0 +1,57 @@ +# rotate_p + +Rotates a point `a` degrees around an arbitrary axis. The rotation is applied in the following order: `x`, `y`, `z`. + +## Parameters + +- `point` : The point `[x, y, z]`. +- `a` : An array `[deg_x, deg_y, deg_z]`. The same as the `a` parameter of the built-in `rotate`. + +## Examples + +You can use the code below to create a line. + + hull() { + sphere(1); + rotate([0, -45, 45]) + translate([20, 0, 0]) + sphere(1); + } + +The following code have the same effect. + + point = [20, 0, 0]; + a = [0, -45, 45]; + + hull() { + sphere(1); + translate(rotate_p(point, a)) + rotate(a) + sphere(1); + } + +![rotate_p](images/lib-rotate_p-1.JPG) + +The `rotate_p` function is useful in some situations. For examples, you probably want to get all points on the path of a spiral around a sphere. + + radius = 40; + step_angle = 10; + z_circles = 20; + + points_angles = [for(a = [0:step_angle:90 * z_circles]) + rotate_p( + [radius, 0, 0], + [0, -90 + 2 * a / z_circles, a] + ) + ]; + + // Once you get all points on the path, you can place anything at each point. + // I just place a sphere as a simple demonstration. + for(pa = points_angles) { + translate(pa[0]) + sphere(1); + } + + %sphere(radius); + +![rotate_p](images/lib-rotate_p-2.JPG) \ No newline at end of file diff --git a/src/rotate_p.scad b/src/rotate_p.scad new file mode 100644 index 00000000..9e0b61ad --- /dev/null +++ b/src/rotate_p.scad @@ -0,0 +1,50 @@ +/** +* rotate_p.scad +* +* Rotates a point 'a' degrees around an arbitrary axis. +* The rotation is applied in the following order: x, y, z. +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-rotate_p.html +* +**/ + +module arc(radius, angles, width, width_mode = "LINE_CROSS") { + w_offset = width_mode == "LINE_CROSS" ? [width / 2, -width / 2] : ( + width_mode == "LINE_INWARD" ? [0, -width] : [width, 0] + ); + + difference() { + circular_sector(radius + w_offset[0], angles); + circular_sector(radius + w_offset[1], angles); + } +} + +function _rotx(pt, a) = + let(cosa = cos(a), sina = sin(a)) + [ + pt[0], + pt[1] * cosa - pt[2] * sina, + pt[1] * sina + pt[2] * cosa + ]; + +function _roty(pt, a) = + let(cosa = cos(a), sina = sin(a)) + [ + pt[0] * cosa + pt[2] * sina, + pt[1], + -pt[0] * sina + pt[2] * cosa, + ]; + +function _rotz(pt, a) = + let(cosa = cos(a), sina = sin(a)) + [ + pt[0] * cosa - pt[1] * sina, + pt[0] * sina + pt[1] * cosa, + pt[2] + ]; + +function rotate_p(point, a) = + _rotz(_roty(_rotx(point, a[0]), a[1]), a[2]); \ No newline at end of file