From ca5f3904c8485b24917354d14dc7a3254d6977df Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Thu, 30 Mar 2017 14:14:05 +0800 Subject: [PATCH] added turtle2d --- README.md | 2 + docs/images/lib-turtle2d-1.JPG | Bin 0 -> 27639 bytes docs/images/lib-turtle2d-2.JPG | Bin 0 -> 58100 bytes docs/lib-turtle2d.md | 86 +++++++++++++++++++++++++++++++++ src/turtle2d.scad | 64 ++++++++++++++++++++++++ 5 files changed, 152 insertions(+) create mode 100644 docs/images/lib-turtle2d-1.JPG create mode 100644 docs/images/lib-turtle2d-2.JPG create mode 100644 docs/lib-turtle2d.md create mode 100644 src/turtle2d.scad diff --git a/README.md b/README.md index d7b4739e..a7677387 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,8 @@ Some modules may depend on other modules. For example, the `polyline2d` module d - Other - [box_extrude](https://openhome.cc/eGossip/OpenSCAD/lib-box_extrude.html) - [stereographic_extrude](https://openhome.cc/eGossip/OpenSCAD/lib-stereographic_extrude.html) + - [turtle2d](https://openhome.cc/eGossip/OpenSCAD/lib-turtle2d.html) + ## Bugs and Feedback diff --git a/docs/images/lib-turtle2d-1.JPG b/docs/images/lib-turtle2d-1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..25219bbb9c53a4dcab77e23dead2f7947170edfb GIT binary patch literal 27639 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 J0lLgKyUZn%2tBhg(Ph zE@1K6i10P*;*{lp==xh~SBZY97aXa+-044iBK*6^x;@eo(ozHD(E$dmOMkHt zze6pK%H7Gf0pQ-OyO3?1wNvo~x1rqX-X+6V&a;Y;lwy4>kP2FCVTZfqUpFevr#&rA z1(J<(C=?f&1XJOjjs!Z%5CnGygE>GUYAvigm^^rLCXt>QvtRbp7j(GDz1-$!5#occ z$o{<6<%ihdc9*Eh*?n(49HQsp7s3YkTOLG#`EY<4z*mFDEm&RY1 z9h0A8?K0AOq2il{k{t4O^ZfAk7z^VkN;zwrB2(V!J$v6&R>rT-=0#C1jkd-83E$^l zBE9jsO85+#HxA7GAn;#R$UoQsTDmt(yNRYw$(`Qv{b6dLE+p1-+>kvVmjcnweWT3g z-u?@(zme`*P*I+C@lMzBzQyjGTR3#y)o${q;5AmH=Vpg7& ziYV9drgm}}eW!%Z9K)HKf2QWQ(kM(DAO36ybLymFmLl@J_Lole0Fw}c=)Q3COqj(2 zN4m^tK+9yg+NTDXdPi{N^hEcqa_CKo#Byyz8*nk4CT~EkmPO0?CL;o_&oa=X?AE-5 z^x{LPuc_BKvwVq@%j6!|TGW+r+w*Q@hU`NFgU5!$6Q27e8T}_s`M+W+M-oFL5#r(Z zyk-yEY&>Y0Jyo>%iBm5@0D3HC1EHLYM69Zbh7Pk{U%AWry^ulAO{J_@{lp1eOcV|H zsfcFAmzu2{oq?oi;rrK=4{zN5M)V}^Gzf?E1W9OvaAYlrzAva0ntgrDOTYbPx?ISQ zGXKPqk9m4VMOCle^-I(N_^ZiuB;I06$Vrjq*h|kDFrW;=EFa)E9a$>yo4^mp)i<(Q zP!S?il+z`{TH3z8vhIb8Kzm8r&)_gc!={v8qB*8Gm}NG7l~%g-#5zX_KC|%_mzS!0 zHOgF??4lq6!(okfr1C|Q2Xd^AOgldyH`yv7kpVNSCo7S*mB*u3)lUTX<5D?pb4e!Z dHWR{V-Ww^orObruw)~0p-~Ynae*1Oke*oOX5C8xG literal 0 HcmV?d00001 diff --git a/docs/images/lib-turtle2d-2.JPG b/docs/images/lib-turtle2d-2.JPG new file mode 100644 index 0000000000000000000000000000000000000000..35f384f1808dc833ee7aa3ebf5efed51480cbaf9 GIT binary patch literal 58100 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 z'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 literal 0 HcmV?d00001 diff --git a/docs/lib-turtle2d.md b/docs/lib-turtle2d.md new file mode 100644 index 00000000..688eb453 --- /dev/null +++ b/docs/lib-turtle2d.md @@ -0,0 +1,86 @@ +# turtle2d + +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 + +- `cmd` : A string command. Different commands use different numbers of arguments. + - `"create"` : Creates a turtle data. The command needs three arguments `x`, `y` and `angle`. For example, use `turtle2d("create", 5, 10, 30)` to create a turtle located at `[0, 0]` with an angle `30` degrees. + - `"set_x"` : Sets the `x` coordinate of a turtle. The command needs two arguments. The first one is a turtle data, and the second one is the `x` coordinate. For example, `turtle2d("set_x", turtle, 20)`. + - `"set_y"` : Sets the `y` coordinate of a turtle. The command needs two arguments. The first one is a turtle data, and the second one is the `y` coordinate. For example, `turtle2d("set_y", turtle, 20)`. + - `"set_a"` : Sets the angle of a turtle. The command needs two arguments. The first one is a turtle data, and the second one is the angle. For example, `turtle2d("set_a", turtle, 45)`. + - `"set_pt"` : Sets `[x, y]` of a turtle. The command needs two arguments. The first one is a turtle data, and the second one is `[x, y]`. For example, `turtle2d("set_pt", turtle, [x, y])`. + - `"forward"` : Forwards a turtle. The command needs two arguments. The first one is a turtle data, and the second one is the length. For example, `turtle2d("forward", turtle, 100)`. + - `"forward"` : Turns a turtle. The command needs two arguments. The first one is a turtle data, and the second one is the angle. For example, `turtle2d("turn", turtle, 180)`. + - `"get_x"`, `"get_y"`, `"get_a"`, `"get_pt"` : All these commands needs only one argument, the turtle data. + +## Examples + + include ; + include ; + + module turtle_spiral(t_before, times, side_leng, angle, width) { + $fn = 24; + if(times != 0) { + t_after_tr = turtle2d("turn", t_before, angle); + t_after_fd = turtle2d("forward", t_after_tr, side_leng); + + line2d( + turtle2d("get_pt", t_before), + turtle2d("get_pt", t_after_fd), + width, + p1Style = "CAP_ROUND", + p2Style = "CAP_ROUND" + ); + + turtle_spiral(t_after_fd, times - 1, side_leng, angle, width); + } + + } + + side_leng = 10; + angle = 144; + width = 1; + times = 5; + + turtle_spiral(turtle2d("create", 0, 0, 0), times, side_leng, angle, width); + +![turtle2d](images/lib-turtle2d-1.JPG) + + include ; + + module turtle_spiral(t_before, side_leng, d_step, min_leng, angle, width) { + $fn = 24; + if(side_leng > min_leng) { + t_after = turtle2d("forward", turtle2d("turn", t_before, angle), side_leng); + + line2d( + turtle2d("get_pt", t_before), + turtle2d("get_pt", t_after), + width, + p1Style = "CAP_ROUND", + p2Style = "CAP_ROUND" + ); + + + turtle_spiral(t_after, side_leng - d_step, d_step, min_leng, angle, width); + } + + } + + side_leng = 50; + d_step = 1; + min_leng = 1; + angle = 90; + width = 1; + + turtle_spiral( + turtle2d("create", 0, 0, 0), + side_leng, + d_step, + min_leng, + angle, + width + ); + +![turtle2d](images/lib-turtle2d-2.JPG) diff --git a/src/turtle2d.scad b/src/turtle2d.scad new file mode 100644 index 00000000..b9c5f867 --- /dev/null +++ b/src/turtle2d.scad @@ -0,0 +1,64 @@ +/** +* turtle2d.scad +* +* An OpenSCAD implementation of Turtle Graphics. +* It moves on the xy plane. +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-turtle2d.html +* +**/ + +include ; + +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) = + cmd == "set_pt" ? _turtle2d_set_point(arg1, arg2) : ( + cmd == "set_x" ? _turtle2d_set_x(arg1, arg2) : ( + cmd == "set_y" ? _turtle2d_set_y(arg1, arg2) : ( + cmd == "set_a" ? _turtle2d_set_angle(arg1, arg2) : ( + cmd == "forward" ? _turtle2d_forward(arg1, arg2) : ( + cmd == "turn" ? _turtle2d_turn(arg1, arg2) : _turtle2d_one_arg_command(cmd, arg1) + ) + ) + ) + ) + ); + +function _turtle2d_one_arg_command(cmd, arg) = + cmd == "get_x" ? _turtle2d_get_x(arg) : ( + cmd == "get_y" ? _turtle2d_get_y(arg) : ( + cmd == "get_a" ? _turtle2d_get_angle(arg) : ( + cmd == "get_pt" ? _turtle2d_get_pt(arg) : undef + ) + ) + ); + +function turtle2d(cmd, arg1, arg2, arg3) = + _turtle2d_three_args_command(cmd, arg1, arg2, arg3);