AlgoBox : mandelbrot

Présentation de l'algorithme :

Pour tout x compris entre xmin et xmax et pour tout y compris entre ymin et ymax (les boucles en i et j sont chargées de cela - le pas est adapté à la taille de l'image : 450*450) , on considère la suite de complexes définie par Z0=0 et Zn+1=(Zn)²+(x+iy) . On calcule la partie réelle ReZ et la partie imaginaire ImZ des termes de cette suite et on regarde si les termes de la suite semblent diverger en déterminant si le module dépasse 4 au bout d'un certain nombre d'itérations (dont le maximum est représenté par la variable profondeur). Si la suite diverge le point du graphique correspondant à x et y est affiché d'une certaine couleur (une autre couleur étant utilisée en cas de convergence).
Pour zoomer, il suffit de changer xmin, xmax et ymin (ymax étant adapté pour que le repère reste orthonormé)

Fichier AlgoBox associé : mandelbrot.alg (faire un clic-droit et utiliser l'option "enregistrer sous" pour télécharger le fichier)


Tester l'algorithme
Cliquer sur ce bouton pour exécuter l'algorithme : 
Attention : l'affichage du graphique demande un certain temps dans un navigateur (l'exécution à partir d'AlgoBox est préférable)

Résultats

Code de l'algorithme
1   VARIABLES
2     x EST_DU_TYPE NOMBRE
3     y EST_DU_TYPE NOMBRE
4     ReZ EST_DU_TYPE NOMBRE
5     ImZ EST_DU_TYPE NOMBRE
6     Re EST_DU_TYPE NOMBRE
7     Im EST_DU_TYPE NOMBRE
8     xmin EST_DU_TYPE NOMBRE
9     xmax EST_DU_TYPE NOMBRE
10    ymin EST_DU_TYPE NOMBRE
11    ymax EST_DU_TYPE NOMBRE
12    i EST_DU_TYPE NOMBRE
13    j EST_DU_TYPE NOMBRE
14    n EST_DU_TYPE NOMBRE
15    profondeur EST_DU_TYPE NOMBRE
16  DEBUT_ALGORITHME
17    profondeur PREND_LA_VALEUR 30
18    xmin PREND_LA_VALEUR -1.5
19    xmax PREND_LA_VALEUR 0.5
20    ymin PREND_LA_VALEUR -1
21    ymax PREND_LA_VALEUR ymin+xmax-xmin
22    x PREND_LA_VALEUR xmin
23    POUR i ALLANT_DE 0 A 450
24      DEBUT_POUR
25      x PREND_LA_VALEUR xmin+(xmax-xmin)*i/450
26      POUR j ALLANT_DE 0 A 450
27        DEBUT_POUR
28        y PREND_LA_VALEUR ymin+(ymax-ymin)*j/450
29        ReZ PREND_LA_VALEUR 0
30        ImZ PREND_LA_VALEUR 0
31        n PREND_LA_VALEUR 0
32        TANT_QUE (n<profondeur ET ReZ*ReZ+ImZ*ImZ<4) FAIRE
33          DEBUT_TANT_QUE
34          Re PREND_LA_VALEUR ReZ
35          Im PREND_LA_VALEUR ImZ
36          ReZ PREND_LA_VALEUR Re*Re-Im*Im+x
37          ImZ PREND_LA_VALEUR 2*Re*Im+y
38          n PREND_LA_VALEUR n+1
39          FIN_TANT_QUE
40        SI (n==profondeur) ALORS
41          DEBUT_SI
42          TRACER_POINT (i,j)
43          FIN_SI
44          SINON
45            DEBUT_SINON
46            TRACER_POINT (i,j)
47            FIN_SINON
48        FIN_POUR
49      FIN_POUR
50  FIN_ALGORITHME