From d2ad4ff38878d26851c8cb2da20b7eeb374ab3d6 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Mon, 14 Mar 2022 17:12:04 +0800 Subject: [PATCH] update example --- examples/turtle/tree.scad | 86 +++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 31 deletions(-) diff --git a/examples/turtle/tree.scad b/examples/turtle/tree.scad index 50cf0930..419ccb01 100644 --- a/examples/turtle/tree.scad +++ b/examples/turtle/tree.scad @@ -1,38 +1,62 @@ -use ; +use ; use ; +use ; -module tree(t, leng, leng_scale1, leng_scale2, leng_limit, - angleZ, angleX, diameter) { - if(leng > leng_limit) { - t2 = t3d(t, "xforward", leng = leng); +trunk_leng = 50; +branch_scale = 0.7; +branch_angle = 30; +width = 2; +$fn = 4; - line3d( - t3d(t, "point"), t3d(t2, "point"), - diameter); - - tree( - t3d(t2, "zturn", angle = angleZ), - leng * leng_scale1, leng_scale1, leng_scale2, leng_limit, - angleZ, angleX, - diameter); - - tree( - t3d(t2, "xturn", angle = angleX), - leng * leng_scale2, leng_scale1, leng_scale2, leng_limit, - angleZ, angleX, - diameter); - } +module line(t1, t2, start_width, end_width) { + polyline_join([t3d(t1, "point"), t3d(t2, "point")]) { + sphere(start_width / 2); + sphere(end_width / 2); + } } -leng = 20; -leng_limit = 1; -leng_scale1 = 0.4; -leng_scale2 = 0.9; -angleZ = 60; -angleX = 135; -diameter = 2; +module shoot(t, trunk_leng, branch_scale, branch_angle, width) { + t2 = t3d(t, "forward", leng = trunk_leng); + line(t, t2, width, width); -t = t3d(point = [0, 0, 0]); + branch_leng = trunk_leng * branch_scale; + + color("green") { + t3 = t3d(t2, "turn", angle = branch_angle); + line( + t2, + t3d(t3, "forward", leng = branch_leng), + width, + width * rand(1, 3) + ); -tree(t, leng, leng_scale1, leng_scale2, leng_limit, - angleZ, angleX, diameter); \ No newline at end of file + t4 = t3d(t2, "turn", angle = -branch_angle); + line( + t2, + t3d(t4, "forward", leng = branch_leng), + width, + width * rand(1, 3) + ); + } +} + +module tree(t, trunk_leng, branch_scale, branch_angle, width) { + if(trunk_leng > width * 2) { + t2 = t3d(t, "forward", leng = trunk_leng * rand(0.6, 1)); + line(t, t2, trunk_leng / 3, trunk_leng / 3 * branch_scale); + + rolled = t3d(t2, "roll", angle = 120 * rand(0.6, 1)); + branch_leng = trunk_leng * branch_scale; + + t3 = t3d(rolled, "turn", angle = branch_angle * rand(0.6, 1)); + tree(t3, branch_leng, branch_scale, branch_angle, width); + + t4 = t3d(rolled, "turn", angle = -branch_angle * rand(0.6, 1)); + tree(t4, branch_leng, branch_scale, branch_angle, width); + } + else { + shoot(t, trunk_leng, branch_scale, branch_angle, width); + } +} + +tree(t3d(), trunk_leng, branch_scale, branch_angle, width); \ No newline at end of file