Vous êtes sur la page 1sur 6

Informatique / Introduction aux fractales (French) 1 de 6

INTRODUCTION AUX FRACTALES

INTRODUCTION

Ce document est une introduction aux fractales. Il montre comment, avec le simple concept
de récursivité, des figures complexes peuvent être dessinées très facilement. La construction
de trois figures est détaillée ici: le "dragon", le "flocon de neige" et la "vague". Elle est
illustrée par l'applet Fractal écrite en Java, pour laquelle le code source est disponible.

LA FRACTALE "DRAGON"

La construction des fractales est basée sur une idée de récursivité. Si on regarde une fractale à
des échelles différentes, on retrouve le même motif. C'est ce motif qui est la base de la
fractale. En effet, pour construire une fractale, on considère une forme très simple. Dans le
cas du dragon, il s'agit du motif suivant.

ABC forme un triangle isocèle rectangle en C, C se trouvant à gauche du vecteur AB. Pour
dessiner le dragon, on se base sur la récursivité suivante.

Pour dessiner un dragon du point A au point B, il faut dessiner un dragon du


point C au point A et un dragon du point C au point B, C étant tel que le triangle
ABC est isocèle rectangle en C et que C se trouve à gauche du vecteur AB.

Tentons de dessiner un dragon à partir de cette récursivité. On choisit deux points A et B.

Tracer un dragon de A à B revient à tracer un dragon de C à A et un autre de C à B.


Informatique / Introduction aux fractales (French) 2 de 6

Tracer un dragon de C à A revient à tracer un dragon de D à C et un autre de D à A. De


même, tracer un dragon de C à B revient à tracer un dragon de E à C et un autre de E à B.

Tracer un dragon de D à C revient à tracer un dragon de G à D et un autre de G à C. De


même, tracer un dragon de D à A revient à... On pourrait continuer indéfiniment la
récursivité. La première chose à faire quand on dessine une fractale est de fixer une
profondeur de récursivité, c'est-à-dire le nombre de fois que l'on applique la récursivité. Ici,
on va s'arrêter à trois, ce qui correspond au moment où il faut tracer les dragons suivants: F à
A, F à D, G à D, G à C, H à C, H à E, I à E, I à B. Et au lieu de continuer à appliquer la
récursivité, on décide qu'un dragon se dessine simplement par une ligne et on obtient la
fractale de profondeur 3 suivante.

Les fractales telles qu'on les connait ont simplement été dessinées avec une profondeur plus
importante. Dessiner une fractale peut paraître compliqué quand la profondeur est
importante, mais en fait, c'est très simple à programmer. En effet, voici la fonction qui
permet de tracer la fractale dragon du point A au point B avec une profondeur p.

fonction tracerDragon(A,B,p):
si (p = 0) alors
tracerLigne(A,B);
sinon
C /* Calcul de C */;
tracerDragon(C,A,p - 1);
tracerDragon(C,B,p - 1);
fin si;
fin fonction;
Informatique / Introduction aux fractales (French) 3 de 6

Il faut juste déterminer maintenant les coordonnées (xc;yc) du point C. Rappelons que ABC
est un triangle isocèle rectangle en C.

D'après la figure, le triangle AC'C est également isocèle rectangle en C'. Si on considère le
vecteur AB' comme étant perpendiculaire à AB et de même longueur, on peut alors calculer
C de la manière suivante.

xc xa + (xb - xa) / 2 - (yb - ya) / 2


C A + AB / 2 + AB' / 2
yc ya + (yb - ya) / 2 + (xb - xa) / 2

Voici la fractale dragon à profondeur 14.

LA FRACTALE "VAGUE"

Le principe de construction de cette fractale est identique à celui de la fractale dragon. On


considère le motif suivant.

Le point M est le milieu du segment [AB], ses coordonnées (xm;ym) s'expriment:

xm (xa + xb) / 2
M (A + B) / 2
ym (ya + yb) / 2

Le triangle AMC est isocèle rectangle en C et le triangle MDB est isocèle rectangle en D. C
Informatique / Introduction aux fractales (French) 4 de 6

se trouve à droite et D se trouve à gauche de AB. Les coordonnées de C et D se calculent en


utilisant la formule établie pour calculer le point C de la fractale dragon.

La fonction qui permet de tracer la fractale vague de A à B à une profondeur p s'écrit:

fonction tracerVague(A,B,p):
si (p = 0) alors
tracerLigne(A,B);
sinon
C /* Calcul de C */;
D /* Calcul de D */;
tracerVague(A,C,p - 1);
tracerVague(C,D,p - 1);
tracerVague(D,B,p - 1);
fin si;
fin fonction;

Voici la fractale vague à profondeur 10.

LA FRACTALE "FLOCON DE NEIGE"

La construction de cette fractale repose sur le motif suivant.

C de coordonnées (xc;yc) se trouve sur la droite (AB) à un tiers de la distance ||AB|| de A. De


même, D de coordonnées (xd;yd) se trouve sur la droite (AB) à un tiers de la distance ||AB||
de B. Leurs coordonnées se calculent donc:

xc xa + (xb - xa) / 3
C A + AB / 3 yc ya + (yb - ya) / 3
D B - AB / 3 xd xb - (xb - xa) / 3
yd yb - (yb - ya) / 3

E est tel que CED forme un triangle équilatéral.


Informatique / Introduction aux fractales (French) 5 de 6

Si on considère le vecteur CD' comme étant perpendiculaire à CD et de même longueur, on


peut alors calculer les coordonnées (xe;ye) de E de la manière suivante.

E C + CD cos(60) xe xc + (xd - xc) / 2 - (yd - yc) 3 / 2


+ CD' sin(60) ye yc + (yd - yc) / 2 + (xd - xc) 3 / 2

La fonction qui permet de tracer la fractale de A à B à une profondeur p s'écrit:

fonction tracerFlocon(A,B,p):
si (p = 0) alors
tracerLigne(A,B);
sinon
C /* Calcul de C */;
D /* Calcul de D */;
E /* Calcul de E */;
tracerFlocon(A,C,p - 1);
tracerFlocon(C,D,p - 1);
tracerFlocon(D,E,p - 1);
tracerFlocon(E,B,p - 1);
fin si;
fin fonction;

Pour tracer le flocon en entier, il faut lancer trois fois le traçage de la fractale. Pour cela, on
choisit trois points X, Y et Z qui forment un triangle équilatéral.

Puis on trace des fractales de X à Y, de Y à Z et de Z à X avec la même profondeur.

tracerFlocon(X,Y,p);
tracerFlocon(Y,Z,p);
tracerFlocon(Z,X,p);

Voici la fractale flocon de neige à profondeur 5.


Informatique / Introduction aux fractales (French) 6 de 6

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net

La permission est accordée de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultérieure publiée par la fondation Free Software Foundation. Voir cette licence pour plus de détails
(http://www.gnu.org).

Vous aimerez peut-être aussi