SEED = 49384758; ANGLE = 26; NUM_CRYSTALS = 60; MIN_HEIGHT = 10; MAX_HEIGHT = 70; module Crystal(HEIGHT) { cylinder(d1=7, d2=10, h=HEIGHT, $fn=5); translate([0, 0, HEIGHT]) { cylinder(d1=10, d2=0, h=10, $fn=5); } } difference() { union() { for(i=[1:NUM_CRYSTALS]) { rx = rands(-ANGLE, ANGLE, 1, i*SEED)[0]; ry = rands(-ANGLE, ANGLE, 1, rx*SEED)[0]; rz = rands(-ANGLE, ANGLE, 1, ry*SEED)[0]; rotate([rx, ry, rz]) { HEIGHT = rands(MIN_HEIGHT, MAX_HEIGHT, 1, SEED*i)[0]; Crystal(HEIGHT); } } cylinder(d=30, h=5, $fn=100); } translate([0, 0, -4.9]) { cylinder(d=30, h=5, $fn=10); } }