La figure montre les 4 premières étapes, au dela la taille des bosses devient inférieure au pixel !
Ceci est général, même si d'un point de vue mathématique la récursion est à poursuivre à l'infini,
on ne peut obtenir qu'une visualisation approchée d'une fractale : personne n'en a jamais réellement vu une !
Dans la pratique, après quelques étapes, on a une bonne idée de l'allure de la courbe.
Prenons l'exemple de la courbe de Koch ci-dessus, où α = 60°.
En parcourant la courbe, chaque segment 'F' est remplacé par 'F+F--F+F'
Le L-System est alors défini par son état de départ appelé son "axiome" : F
et par la ou les règles de transformation : F → F+F--F+F
Koch { Angle 6 ; 1/6 tour = 60° Axiom F F=F+F--F+F }on obtient ainsi successivement à partir du segment initial 'F'
Divers programmes permettent de tracer des fractales à partir de leur définition en L-system.
On obtient des structures arborescentes en plaçant des '[' et ']'.
'[' mémorise la position actuelle et ']' y revient.
Les détails de syntaxe pour le programme fractint sont en annexe.
(x) → (a b)(x) + (e) (y) (c d)(y) (f)mais ce n'est pas obligatoire. L'important est qu'elle soit contractante c'est à dire la distance f(z)-f(z') est inférieure à celle de z-z'.
Le 'S' de IFS = Iterated Function System, est pour système de fonctions itérées
On définit donc un système de telles fonctions fi
Le résultat consiste à chercher l'ensemble S des points fixes de l'ensemble des fi.
c'est à dire S = ∪fi(S)
Dans la pratique pour tracer cet attracteur, on prend un point au hasard,
on lui applique itérativement une des fonctions fi au hasard et on trace le point 'final'.
On peut aussi partir d'un point donné une fois pour toutes, et appliquer toutes les séquences
de fi jusqu'à une profondeur fixée.
(on peut les tirer au hasard, chacune étant alors affectée d'une probabilité).
Définissons ainsi par exemple le dragon de Levy.
f1 transformera le triangle rouge en triangle bleu
f2 le triangle rouge en triangle vert
f1 : (x) = (0.5 -0.5)(x) + (-0.5) (y) (0.5 0.5)(y) ( 0.5) f2 : (x) = (0.5 0.5)(x) + (0.5) (y) (-0.5 0.5)(y) (0.5)
Attention à l'orientation des triangles ! (indiquée par le point)
Et finallement :
Ce dragon de Levy est décrit en L-system beaucoup plus simplement
Levy { Angle 8 ; 45° Axiom F F=+F--F+ }Bon, on finit par avoir un bon paquet de '++++++++...' de cette façon, alors qu'on pourrait les annuler modulo 8 (45° = 360/8), là on tourne sur place avant de tracer effectivement le segment. Et puis '-+' = ... rien du tout !
MonDragon { Angle 4 ; 90° Axiom FX X=X-YF- Y=+FX+Y }Les 'X' et 'Y' permettent de dupliquer le demi dragon par "pliage" et rotation, ils n'ont aucun effet sur le tracé proprement dit qui ne trace que les 'F' et tourne sur les + et -
et en IFS :
f1 : (x) = (0.5 -0.5)(x) + (-0.5) (y) (0.5 0.5)(y) ( 0.5) f2 : (x) = (-0.5 -0.5)(x) + (0.5) (y) (0.5 -0.5)(y) (0.5)
On obtient ainsi le "dragon de Heighway".
Mais il y a bien d'autres "dragons" de ce genre...
Prenons comme exemple z → z² + c, pour c donné (complexe)
L'ensemble des points z pour lesquels f(f(f(f(...(f(z) est borné
est l'ensemble de Julia pour cette valeur de c.
La frontière entre les points "prisonniers" et ceux qui "s'échappent" en fait.
La figure montre en noir les prisonniers (ensemble de Julia rempli) pour c = -0.1 + 0.7i
Les couleurs sont les points qui s'échappent, selon leur vitesse de fuite
(et à fortiori à l'extérieur de la figure).
Le célèbrissime ensemble de Mandelbrot part de la même fonction
complexe itérée z → z² + c
mais s'intéresse cette fois aux valeurs de c pour lesquelles le point 0 + 0i
diverge ou est borné après itération.
Là aussi, les points noirs sont les valeurs de c pour lesquelles f(n)(0) reste bornée et les couleurs les valeurs de c qui divergent, selon leur vitesse de fuite.
Jouer avec un programme affichant des zooms sur des parties choisies de l'ensemble de Mandelbrot
est une exploration peu couteuse d'un univers riche et infiniment renouvelé...
L'autosimilarité se manifeste de façon flagrante chez certaines plantes, citons l'archi connu chou "romanesco".
Certaines fougères montrent aussi une autosimilarité à un niveau appréciable.
D'où l'idée de simuler la croissance des plantes par les procédés construisant des fractales.
Bien sûr en s'arrêtant à un niveau de récursion raisonnable.
Ceci conduit à des programmes dessinant des plantes imaginaires tout à fait réalistes.
Cette "fougère" et cet "arbre" sont tracés par quelques lignes en IFS et en L-system.
On peut de même avec ces procédés fondés sur l'autosimilarité dessiner des montagnes,
des nuages etc... artificiels d'un réalisme saisissant.
Comme les objets naturels ont une nette propension à être autosimilaires,
on a même étudié des algorithmes de compression d'images naturelles efficace utilisant ce procédé.
Enfin on peut composer de la "musique" (!) à partir de ces règles d'autosimilarité.
Nous en resterons là.
L-system idem en L-systems
L-systems un autre
L-systems et encore un
Plus d'autres, payants ou en shareware...
Les seuls que j'ai pu tester sont ceux cités ci-dessus.
Un petit bestiaire de fractales (avec codes IFS)