Étape 1: La technologie
Introduction de récursivité
Notre arbre fractal va utiliser un concept appelé la récursivité. Récursivité signifie essentiellement qu'une fonction appelle lui-même, maintes et maintes fois, jusqu'à ce qu’une condition d’arrêt est rencontrée. Un exemple commun d’un algorithme récursif est le calcul de la séquence de Fibonacci. La séquence de Fibonacci va de 0, 1, 1, 2, 3, 5, 8, 13... Les deux premiers éléments sont 0 et 1, et puis chaque élément après qui est la somme des deux derniers éléments. Donc nous pouvons écrire une fonction Fib(n) où n est l’index (à l’aide de la syntaxe C/Java) comme :
int Fib(n)
{
retour n < 2 ? n: Fib(n-1) + Fib(n-2) ;
}
Permet de dire, nous voulons trouver le cinquième élément, Fib(5) appelle donc Fib(4) et Fib(3), et ainsi de suite dans ce mode jusqu'à ce que Fib(0) ou Fib(1) appelé. Il s’agit de la « condition d’arrêt » dans lequel elle retourne 0 ou 1 au lieu d’appeler Fib() à nouveau.
Récursivité vraie n’est pas possible en OpenSCAD, parce qu’il n’est pas un langage de programmation fonctionnel. OpenSCAD utilise des Modules, qui sont semblables aux fonctions ou méthodes, mais sont compilées de manière différente. Dans la programmation traditionnelle, le compilateur transforme votre code en un ensemble d’instructions pour l’ordinateur d’exécuter. Dans OpenSCAD, le compilateur transforme vos instructions dans un modèle 3D.
Lorsque vous écrivez un programme en C, par exemple, qui calcule les quelques premiers éléments de la séquence de Fibonacci, il compile vers le bas pour la même taille que celui qui calcule les premier million des éléments de la séquence. Lorsque vous faites quelque chose comme ceci dans OpenSCAD, votre sortie est un million de fois plus grand et prend un million de fois plus longtemps pour compiler.
Pour cette raison, il faut être très attention de ne pas passer trop d’itérations !
Dans la plupart des versions de OpenSCAD, il ne vous laissera pas compiler un module qui appelle son auto directement, donc j’utilise le modèle suivant pour le contourner :
- Tout d’abord créer un module et générer une géométrie qu’il contient.
- Appelez ensuite à l’intérieur de A, module B.
- Maintenant créer module B.
- Qu’il contient, ne font rien sauf appeler module A.
- A est maintenant un module récursive de fait. (Assurez-vous d’avoir une condition d’arrêt afin d’éviter une boucle infinie).