Генерация трехмерной ветвящейся структуры - PullRequest
1 голос
/ 26 июня 2019

Я хочу создать самоподобную структуру разветвления с фиксированным углом в 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 голосов
/ 27 июня 2019

Это будет довольно сложно в сыром openscad.Поскольку это широкий вопрос, я собираюсь дать широкий ответ.На мой взгляд, есть три различных подхода, которые вы можете использовать.

Вы можете использовать relativity.scad .Это облегчает позиционирование объектов относительно других объектов.

Вы можете использовать рекурсивные модули .Это простой openscad, никаких странных библиотек и, возможно, самое чистое решение.Они будут требовать от вас, чтобы вы на самом деле думали о том, что вы делаете.

Наконец, когда все остальное терпит неудачу, я опускаюсь до solidpython и просто заставляю его работать.Не так уж много вы не можете сделать, если используете язык программирования общего назначения вместо ограниченной разметки openscad.

...