生成3D分支结构

时间:2019-06-26 07:32:52

标签: openscad

我想在OpenScad中生成自相似的,尺寸减小的固定角度分支结构。生成的树将模拟肺部。

我设法生成了树的第一个部分(“世代”),但是如果我想走得更远的话,我会陷入困境...

h = 0.79;
angle = 30;

diametreTubeBase = 13.5;
diametreTube = diametreTubeBase * 0.8 * 0.8; // deux niveau plus bas

diametreSphere = diametreTube*0.75;
rayonGrappe = 2.25*diametreSphere;

hFermeture = 3 ;
diamAimant = 4 + 0.2; // 0.2 pour l'épaisseur du matériel lors de l'impression
hAimant = 2 + 1;

resol = 18;

difference()
{

union(){
// 1ere génération
difference()
{
    cylinder(h=rayonGrappe*1.5, d=diametreTube, center=false, $fn=resol);
    {
    translate([0,0,rayonGrappe*1.5 - hAimant])
        cylinder(h=hAimant+1, d=diamAimant, center=false, $fn=resol);
    }
}

for(i = [2,3]){
    for(j = [1,pow(2,i-1)]){
               echo(pow(-1,j));
    translate([0,pow(-1,j)*(i-2)*sin(angle)*rayonGrappe*1.5*pow(h,i-2),-(i-2)*cos(angle)*rayonGrappe*1.5*pow(h,i-2)]){
rotate(a=[180,pow(-1,j)*angle,(i-2)*90+pow(-1,i)*90]){
cylinder(h=rayonGrappe*1.5*pow(h,i-1), d=diametreTube*pow(h,i-1), center=false, $fn=resol);
                         }
                 }
         }
}

}
}

我希望我能够以固定的角度划分(30°)和比前一个轴旋转90度的角度生成其他代。

感谢您的见解。

1 个答案:

答案 0 :(得分:0)

在原始的opencad中,这将是非常具有挑战性的。由于这是一个广泛的问题,因此我将给出一个广泛的答案。我的看法是,您可以采用3种不同的方法。

您可以使用relativity.scad。这样可以更轻松地相对于其他对象定位对象。

您可以使用recursive modules。它们是简单的openscad,没有怪异的库,也许是最干净的解决方案。他们会要求您实际考虑自己在做什么。

最后,当所有其他方法都失败时,我进入solidpython并使其正常工作。当您使用通用编程语言而不是openscad的有限标记时,您可以做很多事情。