> Théorie
PrograZine issue #8 - http://www.citeweb.net/discase/8/MANDEL.htm Edito Sommaire Contribution Contacts


MandelBrot : introduction aux fractals
par Discase - discase@mail.dotcom.fr
Initié DOS C/Pascal
> fichiers attachés
mandel.zip




    Nous allons voir au cours de cet article les bases de l'affichage d'images fractales.

    Une fractale est une image assez spéciale qui a la particularité d'être toujours la même, et ce même jusqu'à un zoom théoriquement infini. La deuxième particularité est qu'un grand nombre de construction de la Nature ont une construction qui suit celle des fractales (un peu moins "exacte" dans la nature cependant).

    Prenons un arbre par exemple. Le tronc se divise en plusieurs branches. Chaque branche se divise en plusieurs sous-branches etc ... jusqu'à arriver aux feuilles qui se séparent encore en sortes de "nervures".

    L'exemple le plus significatif à mon sens est le fait que la structure des galaxies, planètes, etc ... ressemble étrangement aux dernières découvertes en matière de physique moléculaire. Bohr avait proposé une représentation des atomes et de leurs particules comme un système solaire. Ce modèle n'est pas tout à fait exact à l'heure actuel, mais il s'en rapporche énormément. Les dernières découvertes montrent qu'on pourra toujours trouver plus petit que ce que l'on pensé être le plus petit composant de la matière. D'autre part, certains scientifiques imaginent déjà notre univers comme faisant partie d'une sorte de multivers, regroupant une infinité d'univers comme le notre. On trouve donc encore toujours plus grand que ce que l'on pensé être le plus grand. Voilà le principe des fractales, et ce qui en fait leur beauté.
>Généralités sur les nombres complexes

    Cet article ne montrera que l'affichage de LA fractale la plus connue: celle de Mandelbrot.

    Une image fractale est en quelque sorte la représentation d'une suite récursive complexe. Difficile d'expliquer de manière plus compliquée. Mais avant d'éclaircir cette notion, concentrons nous sur des rappels (pour certains) mathématiques. Si vous savez ce que c'est qu'un nombre complexe, vous pouvez sauter cette partie.

    Vous avez tous l'habitude de manipuler des nombres. En mathématique (et en informatique), on distingue plusieurs types de nombres. En Primaire, vous avez commencé à compter à partir de 1 (voire de 0). C'était les nombres entiers. Ensuite, on introduit la notion de nombres négatifs avec la soustraction. Puis la notion de nombres rationnels avec les fractions. Petit à petit, on rencontre des nombres un peu spéciaux qui ne peuvent pas s'écrire sous forme de fraction (Pi par exemple), c'était les irrationnels. Tous ces nombres forment ce que l'on appelle l'ensemble des nombres réels.

    Alors on pensait connaitre tous les nombres ... mais en fait, on en est loin. Il existe un autre ensemble de nombre, appellés nombres complexes, qui sont en fait la combinaison de deux nombres réels... Mais, pour faire cette combinaison, il nous faut un autre nombre très spécial ... c'est le nombre nommé i

    Tout ce qu'il y a à savoir sur ce nombre, c'est qu'il est la réponse aux équations telles que a^2 = -1. En effet, i répond à cette propriété: i*i = -1. C'est tout !!

    Un nombre complexe (souvent noté Z) s'écrit alors Z = A + iB (A plus i fois B). A (c'est à dire la partie qui ne dépend pas du i est nommée partie réelle et B la partie imaginaire. Toutes les opérations classiques des réels existent dans les complexes, la seule chose qui change, c'est que i au carré est égal à -1.
>L'équation de Mandelbrot

    Benoît Mandelbrot, mathématicien français, a un jour trouvé (je ne sais pas comment) une équation dont la représentation (une représentation spéciale) donnait un joli dessin. Vous l'avez tous vu un jour:

    Voici donc la fameuse équation:
Z(n+1) = Z(n)^2 + C
Z(0) = 0
l

    On a donc ceci ...
Z(0) = 0
Z(1) = Z(0)^2 + C = C
Z(2) = Z(1)^2 + C = C^2 + C
Z(3) = Z(2)^2 + C = (C^2 + C)^2 + C
...
l

    Ici, Z(n+1) représente le nouveau nombre complexe à calculer. Z(n) est l'ancien nombre complexe. C représente un nombre complexe constant qui sera en fait le point actuel.

    Pour effectuer le carré d'un nombre complexe D = A + iB, on applique bettement l'identité remarquable (a + b)^2 = a^2 + 2ab + b^2.
D^2 = (A + iB)^2
    = A^2 + 2AiB + (iB)^2
    = A^2 + i2AB - B^2      (i^2 = -1)
    = A^2 - B^2  + i2AB
l

    Ainsi, pour calculer Z(n+1), si Z(n) = x + iy et C = a + ib
Z(n+1) = Z(n)^2 + C
       = (x + i*y)^2 + a + i*b
       = x*x - y*y +i*2*x*y + a + i*b
       = (x*x - y*y + a) + i*(2*x*y + b)
l

    En recommençant, on sait maintenant calculer un Z(n) quelconque.
>La représentation de l'équation

    Voilà la partie la plus importante. Il s'agit en fait de l'algorithme propement dit d'affichage de la fractale.

    On sait calculer un terme quelconque de l'équation. Mais que va-t'on en faire ?

    Théroiquement, on prend un point de la feuille ou de l'écran noté C. Ce point a deux coordonnées (abscisse et ordonnée) . L'avantage des nombres complexes est qu'il traduisent rapidement les coordonnées d'un point. Ainsi, si le point C a pour valeur C = 2 + 3i, on saura que le point C sera représenté en abscisse 2 et en ordonnée 3. La partie réelle d'un nombre complexe représente l'abcisse et lapartie imaginaire son odronnée.

    L'algorithme théorique de Mandelbrot est le suivant:
ITERATION est un ENTIER
Z est un COMPLEXE
C est un COMPLEXE

POUR chaque point C
	ITERATION = 0
	Z(0) = 0
	REPETER
  		Z(n+1) = Z(n)^2 + C
		ITERATION = ITERATION +1
	JUSQU'A CE QUE Norme(Z(n+1)) > 2

	Couleur(C) = ITERATION
FIN POUR
l

    La fonction Norme donne ici la longueur du vecteur Z(n+1), c'est à dire plus concrétement, si Z(n+1) s'écrit Z(n+1) = x + iy, Norme(Z)^2 = x^2 + y^2. (Théorème de Pythagore).

    La fonction couleur colorie le point dont les coordonnées sont représentées par C. Ici, on colore avec la valeur du nombre d'iterations.

    Voilà, ça c'est la théorie, mais en pratique, on arrive vite à des points ayant un nombre d'itérations extrêmement grand, voire infini. C'est pour ça que, pour un calcul par ordinateur, on limite le nombre d'iterations.

    Il reste une dernière chose à dire avant de commencer à taper le programme. Pour avoir un résultat à l'écran optimal, c'est à dire voir la forme de la fractal le plus possible, il convient de définir la fenêtre d'affichage. Les coordonnées de C doivent être dans le rectangle (-2 , 1.25) - (-1.25 , 1.25).

    Pour pouvoir afficher ça sur un écran (le plus simple en 320x200), il convient de convertir les coordonnées en cordonnées écran utilisables par l'opération:
X = MinX + Ecran_X * (MaxX-MinX) / Largeur_écran
Y = MinY + Ecran_Y * (MaxY-MinY) / Hauteur_écran
l

    (MinX , MaxX) et (MinY, MaxY) représentent les coordonnées de la fenêtre d'affichage [ (-2 , 1.25) - (-1.25 , 1.25) ] En jouant, avec ces valeurs, on effectue alors un zoom vers une zone de l'image

    Pour conclure, voici deux exemples en Turbo Pascal et Turbo C pour DOS... LIEN
Cet article est la propriété de Discase. L'auteur et la rédaction du magazine déclinent toutes responsabilités vis-à-vis des conséquences que pourrait entraîner ce document.