use use spirals = 10; petals_per_spiral = 4; module petal(radius, thickness) { translate([-radius * 1.5, 0, radius * 2]) rotate([90, 120, 90]) intersection() { crystal_ball( radius = radius * 2, theta = 360, phi = 90, thickness = thickness ); linear_extrude(radius * 5) hull() { translate([radius * 1.25, 0, 0]) circle(radius / 3); translate([-1.1 * radius, 0, 0]) circle(radius / 3); circle(radius * 0.85); } } } module petals(fibseq, i = 0) { if(i < len(fibseq) - 1) { f1 = fibseq[i]; f2 = fibseq[i + 1]; offset = f1 - f2; translate([0, 0, offset * 1.8]) rotate([-5, 40, 10]) petal(-offset, -offset / 6); translate([0, offset, 0]) rotate(90) petals(fibseq, i + 1); } } module lotus_like_flower(spirals, petals_per_spiral) { step_angle = 360 / spirals; fibseq = fibseq(1, petals_per_spiral + 1); for(i = [0:spirals - 1]) { rotate(i * step_angle) petals(fibseq); } fib_diff = fibseq[petals_per_spiral - 1] - fibseq[petals_per_spiral - 2]; translate([0, 0, -fib_diff]) scale([1, 1, fib_diff]) sphere(1); translate([0, 0, -fib_diff * 2.25]) crystal_ball( radius = fib_diff, theta = 360, phi = 90 ); } lotus_like_flower(spirals, petals_per_spiral + 1, $fn = 24);