1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-12 09:44:16 +02:00
This commit is contained in:
Justin Lin
2019-09-28 09:58:34 +08:00
parent ea401ce009
commit df97574a66

View File

@@ -1,56 +1,38 @@
include <line2d.scad>; include <line2d.scad>;
include <polyline2d.scad>;
include <turtle/turtle2d.scad>; include <turtle/turtle2d.scad>;
module triangle(t, side_leng, width) { side_len = 100;
$fn = 48; min_len = 4;
angle = 120; thickness = 0.5;
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); sierpinski_triangle(
line2d( turtle2d("create", 0, 0, 0),
turtle2d("pt", t_p1), turtle2d("pt", t_p2), side_len, min_len, thickness, $fn = 12
width, p1Style = "CAP_ROUND", p2Style = "CAP_ROUND" );
);
t_p3 = turtle2d("forward", turtle2d("turn", t_p2, angle), side_leng); module triangle(t, side_leng, thickness) {
line2d( t2 = turtle2d("forward", t, side_leng);
turtle2d("pt", t_p2), turtle2d("pt", t_p3), t3 = turtle2d("forward", turtle2d("turn", t2, 120), side_leng);
width, p1Style = "CAP_ROUND", p2Style = "CAP_ROUND"
); polyline2d([
turtle2d("pt", t),
turtle2d("pt", t2),
turtle2d("pt", t3),
turtle2d("pt", t)
], thickness, startingStyle = "CAP_ROUND", endingStyle = "CAP_ROUND");
} }
module two_triangles(t, side_len, len_limit, width) { module sierpinski_triangle(t, side_len, min_len, thickness) {
angle = 60; triangle(t, side_len, thickness);
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 >= min_len) {
if(side_len >= len_limit) { half_len = side_len / 2;
two_triangles(t, side_len, len_limit, width); t2 = turtle2d("forward", t, half_len);
t3 = turtle2d("turn", turtle2d("forward", turtle2d("turn", t, 60), half_len), -60);
sierpinski_triangle(t, side_len / 2, len_limit, width); for(turtle = [t, t2, t3]) {
sierpinski_triangle(turtle, half_len, min_len, thickness);
sierpinski_triangle( }
turtle2d("forward", t, side_len / 2), sierpinski_triangle(t3, half_len, min_len, thickness);
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);