Voici une implémentation en canvas HTML du plus célèbre des ensembles fractals. Clic gauche pour zoomer / clic droit pour dézoomer. Le nombre maximum d'itérations employé pour déterminer si un point du plan complexe appartient à l'ensemble est ajustable via un champ. À partir de 500 et au delà, le calcul devient très lent.
zoom x1
iterations :
Modulo sur la table des couleurs :
Noir et Blanc
smooth
Le "fond de la question" reste pour moi très obscur... Aussi ne prétendrais-je pas l'expliquer. Cependant, l'algorithme de construction reste étonnamment simple :
Chaque pixel du canvas est considéré en tant que nombre complexe tel que :
$$c = x + iy$$
On ne peut pas prendre les valeurs en pixel directement, il faut mettre à l'échelle les valeurs de x et y en fonction du zoom.
Pour chacun de ces nombres, on calcule la suite suivante : $$Z_{n+1} = Z_n^2 + c$$ avec : $$Z_0 = 0$$ tant que : $$n < max\ iterations$$ et tant que : $$\||Z_n|| < 2$$ Si le module de Z vaut plus que 2, alors la suite va diverger vers l'infini. L'ensemble de Mandelbrot est donc l'ensemble des points du plan complexe qui ne divergeront pas dans cette suite.
Lorsque la suite est interrompue (soit parce que le module de Z a dépassé 2 ou parce que le nombre d'itérations maximum est atteint, on attribue une couleur au pixel. Je propose 2 méthodes :
Le mode couleur fait appel à une sorte de "fonction de transfert de dégradé" basé sur 6 couleurs. On calcule la couleur en fonction de n/itérations
Le mode noir et blanc est basé sur la valeur du module qui aura été atteinte à la sortie de l'algorithme.
Le mode lissé (smooth) est décrit ici.
Ce canvas prend en charge les écrans de type "Retina" et offre alors une résolution double (1080 x 960 pixels). Évidemment, les performances se trouveront alors théoriquement diminuées par 4. mais c'est tellement plus joli...