我试图在我的 Printrbot 上打印出一个 300 毫米的空心球体,方法是将球体的内腔塑造为规则的外接多面体,并根据外接多面体的侧面分割球体。我首先用一个立方体进行了尝试,得到了 6 面和可 3d 打印的平底,但是由于打印机的构建体积有限(150x150x150 毫米),生成的边约 175 毫米的边缘不适合。
下一个合理的步骤似乎是将外接多面体更改为十二面体并打印出 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);
}