Я пытаюсь напечатать 300 мм полый шар на моем Printrbot, сформировав внутреннюю полость сферы как обычный, ограниченный многогранник и разбив сферу на основе сторон описанного многогранника , Сначала я попытался сделать это с помощью куба, в результате получив 6 сторон с плоскими основаниями для 3D-печати, однако из-за ограниченного объема сборки принтера (150x150x150 мм) края 175 мм в результате получившейся стороны не поместились.Сплит полый шар на основе ограниченных сторон Dodecahedron
Следующий разумный шаг, казалось, изменил описанный многогранник на додекаэдр и распечатал 12 сторон, а не 6, однако у меня возникли проблемы с выяснением того, как правильно проецировать пентагональную сторону на сферу и нарезать ее соответственно. Есть ли способ получить пересечение сферы и проецируемой стороны додекаэдра? Мой текущий код ниже.
$fn = 72;
diameter=300;
side();
module side()
{
difference()
{
hollow_sphere(diameter);
rotate([180,0,0])
fiveSideMask();
}
}
// A cubic mask to remove all sides but one from the circle
module fiveSideMask()
{
union()
{
rotate([45,0,0])
translate([0,-diameter/4, 0])
cube([diameter, diameter/2, diameter], center=true);
rotate([-45,0,0])
translate([0,-diameter/4, 0])
cube([diameter, diameter/2, diameter], center=true);
rotate([0,0,45])
translate([0,-diameter/4, 0])
cube([diameter, diameter/2, diameter], center=true);
rotate([0,0,-45])
translate([0,-diameter/4, 0])
cube([diameter, diameter/2, diameter], center=true);
}
}
module hollow_sphere(diameter=300, shell_thickness=5)
{
difference()
{
sphere(d=diameter, center=true);
//Sphere internal cavity
//sphere(d=(diameter-(shell_thickness*2)), center=true);
//Cube internal cavity
cube(CubeEdgeFromDiag(diameter - shell_thickness * 2), center=true);
//Dodecahedron internal cavity
//rotate([90,0,0])
//dodecahedron(225);
}
}
function CubeEdgeFromDiag(diagLength) = (sqrt(3) * diagLength)/3;
module dodecahedron(size)
{
dihedral = 116.565;
intersection()
{
box(size);
intersection_for(i=[1:5])
{
rotate([dihedral, 0, 360/5 * i]) box(size);
}
}
}
module box(size)
{
cube([2*size, 2*size, size], center = true);
}