// A fixed fin stomp rocket version // Units mm g s use $fa = 1; $fs = 0.5; inner_radius = 17.5/2; body_length = 150; wall_thickness = 1.8; outer_diameter = inner_radius + wall_thickness; module inner_taper(taper_height=5) { difference() { cylinder(r=inner_radius, h=taper_height); cylinder(r1=inner_radius, r2=1, h=taper_height-0.1); } } module fairing(inner_radius=inner_radius, wall_thickness=wall_thickness) { union() { translate([0,0,50]) sphere(r=outer_diameter*1.5); translate([0,0,10]) cylinder(r=outer_diameter*1.5,h=40); cylinder(r2=outer_diameter*1.5,r1=outer_diameter,h=10); } } module booster(width=20, height=75, thickness=3) { union() { translate([(width)/2+1,0,0]) cylinder(d=width, h=height); translate([(width)/2+1,0,height]) cylinder(d1=width, d2=0, h=10); translate([(width)/2+1,0,0]) cylinder(d1=width*1.15, d2=width, h=10); for (i=[0.25*height, 0.75*height]) { translate([(width)/2+1,0,i]) cylinder(d=1.15*width, h=5); } } } union() { difference() { union() { translate([0,0,body_length]) rotate([0,180,0]) color("gray") rocket_body(inner_radius = inner_radius, wall_thickness=wall_thickness); translate([0,0,body_length-20]) color("red") fairing(); } translate([0,0,5]) cylinder(r=inner_radius+0.4, h=body_length-10); } translate([0,0,body_length-10]) color("blue") inner_taper(taper_height=5); for (i=[0,90,180,270]) { rotate(i) translate([outer_diameter-0.1, 0, 0]) booster(); } }