// 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 nose_cone(inner_radius=inner_radius, wall_thickness=wall_thickness) { radius = inner_radius+wall_thickness; difference() { sphere(r=radius); translate([0,0,-1.75*radius]) cylinder(h=radius, r=radius); } } module fin(width=25, height=115, thickness=3) { rotate([80,0,0]) translate([-7,-4,11]) linear_extrude(height=thickness, center=true) polygon(points=[ [0,0], [width,0], [width,height/2], [0,height], ]); } difference() { // clear everything below the build plate difference() { // clear center of rocket body union() { //assemble the rocket 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-5]) color("red") inner_taper(taper_height=5); translate([0,0,body_length+10]) color("blue") nose_cone(inner_radius=inner_radius*1.5); for (i=[0,90,180,270]) { rotate(i) translate([outer_diameter-0.1, 0, 0]) fin(); } } translate([0,0,5]) cylinder(r=inner_radius+0.4, h=body_length-10); } // build plate translate([-100,-100,-200]) cube([200,200,200]); }