les Fractales 

---
Cube1 Cube2 Cube3 Cube4

Exemples de récursivité

Retour à la lettre
 
Introduction
De nombreuses méthodes récursives permettent de générer des objets fractals que ce soit sur un plan comme en 3 dimensions. L'"éponge", ci-contre, est un exemple de récursivité dont la convergence est très rapide, en effet au bout de quelques transformations, l'objet atteint un volume quasiment nul.
 
Alors que l'IFS décrit un ensemble à partir d'une diffusion aléatoire de points ayant subi des transformations successives, la récursivté suit plus clairement la logique des fractales, elle construit l'ensemble en appliquant des transformations à des échelles variables.
 
En résumé cette méthode respecte invariablement une quantité de lois qui, comme dans la nature, peuvent connaître de légères variations (que l´on peut appeler erreurs). Mais qu'il s'agisse d'IFS ou de récursivité, on tendra toujours vers les même ensembles (attracteurs) .

    Algorithme
Les algorithmes sont tous très simples, l'invariant consistant à appeler une transformation pour chaque sous objet résultant de la transformation précédente. Mais la transformation peut, quant à elle, être assez complexe. C'est pourquoi, selon les cas, la méthode itérative sera préférable.
 
Reste qu'il est nécessaire de trouver une condition d'arrêt pendant le calcul ou l'affichage d'un ensemble. Une solution courrament utilisée consiste à retenir la profondeur de récursion (celle-ci permettant en général de décrire le facteur d'échelle qui s'applique sur l´objet en cours de transformation), et de tester si celle-ci n'excède pas un nombre limite.
 
Ainsi, contrairement à la méthode itérative, la récursivité peut faire converger le résultat très vite vers l'attracteur. Selon le rapport d'échelle, on peut obtenir en peu de temps un ensemble quasi semblable à la réalité, bien que celle-ci soit difficilement modélisable dans son intégralité.
 

 

 


    Méthodes d'édition
Pour ce qui est des atuces de constructions, une des plus faciles à implémenter est la méthode de substitution par matrices.
 
Par exemple avec une matrice 2x2 de ce type:
( 0 1 )
( 1 1 )

Pour chaque 1 rencontré on remplace le coefficient par cette matrice, et pour chaque 0 on le remplace par une matrice nulle. Au bout d'un certain nombre de substititions (profondeur de récursion), on obtient une matrice NxN, où N est un nombre en puissance de 2 (l'exposant étant précisément la profondeur de récursion globale). Ansi 3 étapes nous donneront dans cette exemple une matrice 8x8.
 
Au final, on obtiendra....le triangle de Sierpinski (voir image).
    Programme: Recursion
      Documentation

    Pour obtenir une aide au sujet des options, tappez juste le nom de l'exécutable.

    >recursion

    Usage: recursion <fichier.ppm> [options]

     
    Options Defauts Valeurs:
    -l <largeur> (256)  {>=1}
    -h <hauteur> (256) {>=1}
    -i <fichier.rec> (stdin) 
    -r <recursions> (8) {>=1}

    Un fichier .rec doit avoir la syntaxe suivante:

    > 3 nombres (largeur, hauteur, nombre de matrices)
    > les coefficients des matrices à la suite, séparés par des espaces ou des retours à la ligne.


      n m c

      x11 x12 ... x1n
      x21 ...
      ...
      xm1 xm2 ... xmn

      y11 y12 ... y1n
      y21 ...
      ...
      ym1 ym2 ... ymn

      ...


    Les coefficients sont des nombres indexant la matrice à appeler à la prochaine récursion. Il y a deux nombres particuliers: 
     

      0 désigne la non appartenance à l'ensemble
      -1 signifie l'inverse


    exemples de fichier .rec:
     

    • carre.rec
    • triangle.rec
    • matrice.rec
Sierpinski 3D

Eponge de Sierpinski

Cet objet est basé sur la méthode de construction du tapis de Sierpinski:

Carré
carre.rec


On subdivise le carré en 9 parties égales, on enlève le carré central, puis on continue l'opération pour chaque carré restant.



Arbres construits récursivement


Voici des arbres représentés en fonction de la profondeur de récursion:
Arbre0 p=1 Arbre1 p=2
Arbre2 p=3 Arbre3 p=4
Arbre4 p=5 Arbre5 p=6
Arbre6 p=7 Arbre7 p=8

Remarque: pour rendre l'arbre plus réaliste on applique une erreur aléatoire de plus ou moins grande amplitude sur chaque paramètre de la transformation. Par exemple ici sur l'inclinaison des branches, leur épaisseur et leur longueur.

Arbre

 

Dans cette animation, seul un paramètre change, il s'agit du facteur de réduction entre deux étapes récursives. Il évolue de 0 à 0.7, cela signifie qu'à la fin, un branche fille est 0.7 fois plus petite que sa mère.
Arbre grand format avec 8 niveaux de récursivité.



Le triangle de Sierpinski en 3D
Triangle 1
profondeur: 1
Triangle 2
profondeur: 2
Triangle 3 profondeur: 3 Triangle 4 profondeur: 4


La transformation est similaire au triangle. Ici on subdivise le cube en 8 parties identiques, on supprime le cube en haut à gauche le plus proche de nous, on réitère pour chaque sous-cube.

Triangle

triangle.rec

 

Triangle de Sierpinski. En 2D, c'est de carré dont il s'agit. On reconnait une des faces de l'objet 3D plus haut.
Retour à la lettre

 

phpMyVisites | Open source web analytics Statistics