2015-05-01 10 views
0

Я пытаюсь напечатать 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); 
} 

ответ

0

Вы можете использовать технику, аналогичную существующей fiveSideMask модуля, но вместо того, чтобы резать вокруг квадратной пирамиды, вы будете резки вокруг пятиугольной пирамиды:

// A mask to remove everything from the sphere but the projection of the face. 
module sideMask() { 
    union() { 
     radius = diameter/2; 

     dihedral_angle = acos(-1/sqrt(5)); 
     // Five slabs adjacent to the pentagonal-pyramind that projects out 
     // around the face. 
     for (theta = [0:360/5:359]) { 
      rotate([90 - dihedral_angle,0,theta]) 
       translate([-diameter/2,0, 0]) 
        cube([diameter, radius, diameter]); 
     } 
     // We also want to mask out the opposite side of the sphere. 
     translate([-radius, -radius, -radius]) 
      cube([diameter, diameter, radius]); 
    } 
} 

Вы можете также упростите hollow_sphere (и уточните его название), используя hull в side. Это более дорого стоит вычислить, но значительно упрощает код. shell_thickness передается hollow_sphere будет в конечном итоге минимальная толщина, в вершинах додекаэдра:

module side() { 
    // hull() is pretty expensive, but it nicely flattens out the bottom of the 
    // shape, making for something easily printable. 
    hull() difference() { 
     hollow_sphere(diameter); 
     rotate([180,0,0]) 
     sideMask(); 
    } 
} 

module hollow_sphere(diameter=300, shell_thickness=15) { 
    difference() { 
     sphere(d=diameter); 
     sphere(d=diameter - shell_thickness); 
    } 
} 

Единственный материал, который Вы должны держать это в несколько строк в верхней части файла ...

$fn = 72; 

diameter=300; 

side(); 

... и вы получите что-то вроде этого:

OpenSCAD screenshot

 Смежные вопросы

  • Нет связанных вопросов^_^