3dprint/diamond2.scad

76 lines
2.0 KiB
OpenSCAD

// Brilliant cut diamond (57 faces)
// Inspired by thing:50915 by takuya, but rewritten to be more correct
// (original script produces incorrect results with diameter != 20)
// (c) Vitaliy Filippov 2014, license: CC-BY-SA 4.0
// Diamond_size_d
dd=40;
// Diamond_height_ratio
hr=0.615;
// Cut angles.
// FIXME: Crown angles are in fact dependent - one of them isn't a true
// parameter (it's just matched by hand here) and should be calculated from the other two.
// cag4 should be calculated from cag3 and cag5 if trying to resemble real cutting process...
pag1=42.45; // Pavillion_angle1
pag2=40.75; // Pavillion_angle2
cag3=40.16; // Crown_angle3
cag4=34.5; // Crown_angle4
cag5=24.6; // Crown_angle5 [was 23.45 in original script?!]
dh=dd*hr; // Diamond height
difference() {
translate([0,0,-dd*0.431]) cylinder(h=dh,r=dd/2,$fn=48);
union() {
for (i = [0 : 16-1]) {
rotate([0,0,360/16*i])
translate([dd/2,0,0])
rotate([0,90-pag1,0])
translate([0, -dd/4, -dd])
cube(size=[dd/2,dd/2,1.1*dd], center=false);
}
}
union() {
for (i = [0 : 8-1]) {
rotate([0,0,360/8*i+11.25])
translate([dd/2 + /*compensation for elliptical cut*/dd/2*(1-cos(360/32))*tan(90-pag1),0,0])
rotate([0,90-pag2,0])
translate([0, -dd/4, -dd])
cube(size=[dd/2,dd/2,1.1*dd], center=false);
}
}
union() {
for (i = [0 : 16-1]) {
rotate([0,0,360/16*i])
translate([dd/2,0,0])
rotate([0,-90+cag3,0])
translate([0, -dd/4, -0])
cube(size=[dd/2,dd/2,dd], center=false);
}
}
union() {
for (i = [0 : 8-1]) {
rotate([0,0,360/8*i+11.25])
translate([dd/2,0,dd/2*(1-cos(360/32))*tan(cag3)])
rotate([0,-90+cag4,0])
translate([0, -dd/4, -dd/2])
cube(size=[dd/2,dd/2,dd], center=false);
}
}
union() {
for (i = [0 : 8-1] ) {
rotate([0,0,360/8*i-11.25])
translate([cos(22.5)*(dd/2-((dh-dd*0.431)-(dd/2*(1-cos(360/32))*tan(cag3)))/tan(cag4)),0,dh-dd*0.431])
rotate([0,-90+cag5,0])
translate([0, -dd/4, -dd])
cube(size=[dd/2,dd/2,dd], center=false);
}
}
}