From c71b612d0125c0aa0252c71e6b98db89f8716651 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Mon, 29 Jul 2019 20:46:06 +0800 Subject: [PATCH] add sierpinski_triangle --- examples/sierpinski_triangle.scad | 56 +++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 examples/sierpinski_triangle.scad diff --git a/examples/sierpinski_triangle.scad b/examples/sierpinski_triangle.scad new file mode 100644 index 00000000..ec6c9ada --- /dev/null +++ b/examples/sierpinski_triangle.scad @@ -0,0 +1,56 @@ +include ; +include ; + +module triangle(t, side_leng, width) { + $fn = 48; + angle = 120; + t_p1 = turtle2d("forward", t, side_leng); + line2d( + turtle2d("pt", t), turtle2d("pt", t_p1), + width, p1Style = "CAP_ROUND", p2Style = "CAP_ROUND" + ); + + t_p2 = turtle2d("forward", turtle2d("turn", t_p1, angle), side_leng); + line2d( + turtle2d("pt", t_p1), turtle2d("pt", t_p2), + width, p1Style = "CAP_ROUND", p2Style = "CAP_ROUND" + ); + + t_p3 = turtle2d("forward", turtle2d("turn", t_p2, angle), side_leng); + line2d( + turtle2d("pt", t_p2), turtle2d("pt", t_p3), + width, p1Style = "CAP_ROUND", p2Style = "CAP_ROUND" + ); +} + +module two_triangles(t, side_len, len_limit, width) { + angle = 60; + triangle(t, side_len, width); + next_t = turtle2d("turn", turtle2d("forward", t, side_len / 2), angle); + triangle(next_t, side_len / 2, width); +} + +module sierpinski_triangle(t, side_len, len_limit, width) { + if(side_len >= len_limit) { + two_triangles(t, side_len, len_limit, width); + + sierpinski_triangle(t, side_len / 2, len_limit, width); + + sierpinski_triangle( + turtle2d("forward", t, side_len / 2), + side_len / 2, len_limit, width + ); + + sierpinski_triangle( + turtle2d("turn", turtle2d("forward", turtle2d("turn", t, 60), side_len / 2), -60), + side_len / 2, len_limit, width + ); + } +} + +side_len = 150; +len_limit = 4; +width = 0.5; +t = turtle2d("create", 0, 0, 0); + +sierpinski_triangle(t, side_len, len_limit, width); \ No newline at end of file