Vous ne pouvez pas modifier cette page, pour les raisons suivantes :
Documentation:
=Mise en œuvre= == Concept général : arrêt de la récursion == OpenSCAD vous fait rapidement savoir quand votre calcul est infini, il faut donc prévoir une condition d'arrêt. Si l'on construit l'objet en diminuant à chaque itération la taille de l'élément, taille du plus petit élément souhaité semble une bonne option. Sinon prévoir un compteur global avec un nombre d’itération maximum est une sécurité. == Cube de Cube de Cube (etc.) == Pas une fractale à proprement parler, c'est essentiellement un test "simple" pour valider le fonctionnement de la récursion sur le logiciel.<br> L'idée est de créer une fonction créant un cube de taille t et de centre [x,y,z], puis de se rappeler en communicant comme taille t/2 et comme centre les cordonnées de chaque sommet du cube précédemment créé. <br> La variable ''scale'' est la taille du cube de la première itération, ''min_rec'' est la taille du plus petit cube formé. <br> scale = 20; min_rec = 2; rec_cube(scale, [0,0,0]); module rec_cube(local_scale){ if(local_scale>min_rec){ cube(local_scale,center=true); translate([local_scale/2,local_scale/2,local_scale/2]){ rec_cube(local_scale/2); }; translate([-local_scale/2,local_scale/2,local_scale/2]){ rec_cube(local_scale/2); }; translate([local_scale/2,-local_scale/2,local_scale/2]){ rec_cube(local_scale/2); }; translate([local_scale/2,local_scale/2,-local_scale/2]){ rec_cube(local_scale/2); }; translate([-local_scale/2,-local_scale/2,local_scale/2]){ rec_cube(local_scale/2); }; translate([-local_scale/2,local_scale/2,-local_scale/2]){ rec_cube(local_scale/2); }; translate([local_scale/2,-local_scale/2,-local_scale/2]){ rec_cube(local_scale/2); }; translate([-local_scale/2,-local_scale/2,-local_scale/2]){ rec_cube(local_scale/2); }; } } <gallery> File:cube_de_cube_it1.PNG|Itération 1 File:cube_de_cube_it2.PNG|Itération 2 File:cube_de_cube_it3.PNG|Itération 3 File:cube_de_cube_it4.PNG|Itération 4 </gallery> == Éponge de Menger == Wikipedia présente très bien [https://fr.wikipedia.org/wiki/%C3%89ponge_de_Menger l'éponge_de_Menger], enfin beaucoup mieux que je ne pourrais le faire moi-même. <br> L'idée générale de algorithme de construction est une différence entre un cube de dimension max et de l'ensemble des "croix" de dimension 3. Le truc pas très classe c'est que chaque itération est appelé 20 fois. <br> C'est un peu lourd, la compilation en pâtit... scale = 20; min_rec = 6; difference() { cube(scale,center=true); rec_cube(scale, [0,0,0]); }; module rec_cube(local_scale){ if(local_scale>min_rec){ tiers_scale = local_scale/3; cube([local_scale,tiers_scale,tiers_scale],center=true); cube([tiers_scale,local_scale,tiers_scale],center=true); cube([tiers_scale,tiers_scale,local_scale],center=true); translate([tiers_scale,tiers_scale,tiers_scale]){ rec_cube(tiers_scale); }; translate([tiers_scale,-tiers_scale,tiers_scale]){ rec_cube(tiers_scale); }; translate([-tiers_scale,tiers_scale,tiers_scale]){ rec_cube(tiers_scale); }; translate([-tiers_scale,-tiers_scale,tiers_scale]){ rec_cube(tiers_scale); }; translate([-tiers_scale,tiers_scale,-tiers_scale]){ rec_cube(tiers_scale); }; translate([tiers_scale,-tiers_scale,-tiers_scale]){ rec_cube(tiers_scale); }; translate([tiers_scale,tiers_scale,-tiers_scale]){ rec_cube(tiers_scale); }; translate([-tiers_scale,-tiers_scale,-tiers_scale]){ rec_cube(tiers_scale); }; translate([0,tiers_scale,tiers_scale]){ rec_cube(tiers_scale); }; translate([tiers_scale,0,tiers_scale]){ rec_cube(tiers_scale); }; translate([tiers_scale,tiers_scale,0]){ rec_cube(tiers_scale); }; translate([0,-tiers_scale,tiers_scale]){ rec_cube(tiers_scale); }; translate([-tiers_scale,0,tiers_scale]){ rec_cube(tiers_scale); }; translate([tiers_scale,-tiers_scale,0]){ rec_cube(tiers_scale); }; translate([tiers_scale,0,-tiers_scale]){ rec_cube(tiers_scale); }; translate([-tiers_scale,tiers_scale,0]){ rec_cube(tiers_scale); }; translate([-tiers_scale,-tiers_scale,0]){ rec_cube(tiers_scale); }; translate([tiers_scale,0,-tiers_scale]){ rec_cube(tiers_scale); }; translate([0,-tiers_scale,-tiers_scale]){ rec_cube(tiers_scale); }; translate([-tiers_scale,0,-tiers_scale]){ rec_cube(tiers_scale); }; translate([0,tiers_scale,-tiers_scale]){ rec_cube(tiers_scale); }; } } ''Rédaction en cours...''
Résumé :
Modification mineure Suivre cette page
Annuler