Maths art art, c, geek, python | 20déc08
J’ai toujours aimé connaitre le fonctionnement des choses et d’en faire des prototypes ou des tests sans pour autant que cela ne me serve à quoique ce soit (toute blague au gout douteux est à proscrire, merci). Je suis légèrement geek, c’est comme ça, j’assume. J’aime bien réfléchir à la façon dont est codé chaque logiciel que j’utilise au quotidien, notamment ceux liés à l’imagerie numérique.
C’est en faisant joujou avec les matrices de convolution, filtres et autres méthodes de traitement d’image que j’en suis arrivé à m’intéresser à deux choses en particulier : les attracteurs chaotiques et les fractales.
Les premiers sont des systèmes dynamiques simples à implémenter (une fois la formule connue) et donnent des résultats visuels assez intéressants. Prenons l’équation de Peter De Jong définit de la manière suivante :


Où
,
,
et
sont des constantes décimales. Le point (
,
) va alors se déplacer de façon chaotique au cours du temps. L’image obtenue sera en fait une carte de probabilité pour que le point se trouve dans la zone définie par chaque pixel.
Il existe une variante de Clifford Pickover :


On trouve dans la même catégorie l’attracteur de Tinkerbell :


Ou encore la Hénon map qui ne dépend que deux paramètres et qui a pour particularité de n’être purement chaotique pour les valeurs
et
. Ne me demandez pas de l’expliquer, cela sort de mes compétences.


Histoire d’illustrer le tout, voici quelques rendus obtenus à l’aide d’un script Python bien lent (disponible ci-dessous) :
Code source : ChaoticMaps.py
Passons maintenant à quelque chose de visuellement plus stimulant. Toute personne connaissant de prêt ou de loin le terme « fractal » pensera immédiatement à l’ensemble de Mandelbrot. Il en existe une variante nommée Buddhabrot permettant d’obtenir, comme son nom l’indique, un visuel relativement proche de certaines représentations de Buddha. L’ensemble de base de Mandelbrot est définit de la façon suivante :
Soit
un nombre complexe et
une fonction définie par :

Si
, on peut alors définir une suite récurrente par :

L’ensemble de Mandelbrot est alors l’ensemble des
tels que la suite
ne tende pas vers l’infini.
Plutôt que d’expliquer en détail le fonctionnement de la Buddhabrot, je vais me contenter de citer un très bon résumé de wikipedia :
Pour obtenir le Buddhabrot, on utilise un tableau à deux dimensions, chaque case représentant un pixel. Pour des points
choisis au hasard (ou, alternativement, régulièrement espacés) dans le plan, si ces points s’échappent après un certain nombre d’itérations (donc n’appartiennent pas à l’ensemble de Mandelbrot), on incrémente le tableau aux points correspondant aux valeurs successives de
prises par la suite
(on « suit » le parcours des points). Après un certain nombre d’itérations, l’image obtenue en affectant une couleur à chaque point du tableau se stabilise sur le Buddhabrot.
Voici le résultat de deux rendus (tolérances de couleurs différentes) effectués dans la nuit. La sortie d’origine est de 4096×4096 pixels mais a évidemment été réduite pour un affichage web. Les versions haute-définitions sont toujours en cours de calcul, je les posterai à l’occasion pour ceux qui veulent zoomer et apprécier le niveau de détail (croyez-moi, les deux petites images ci-dessous ne rendent pas honneur à la beauté de la chose).
Code source : buddhabrot.tar
Les sources contiennent une version Python et une version C. Si vous le pouvez, favorisez évidemment la version C qui est 30 à 40 fois plus rapide.







prises par la suite 

aucun commentaire