Générateur d'images fractales (1)

03022009 In: Pas à pas

Cet article est le premier d'une série consacrée à la réalisation d'une application complète: un générateur d'images fractales.

Les fractals

Broccoli fractal

Les fractals sont des objets géométriques qui présentent des motifs similaires lorsqu'ils sont observés à des échelles différentes. On ne peut les évoquer sans parler de l'incontournable Benoît Mandelbrot, polytechnicien français, qui ne les a certes pas inventé, mais leur a donné leur nom, et fut le premier à leur trouver des applications: calculs du périmètres des côtes bretonnes, statistiques, et surtout — ce qui a vraiment permis leur exposition au grand public — l'imagerie informatique.

Quelques rappels sur les nombres complexes

Le calcul de l'image s'appuyant sur les nombres complexes, je vais vous rappeler les principes nécessaires ici.

Nombres complexes

Un nombre complexe est de la forme:

z = a + ib
avec i^2 = -1

  • a est appelé partie réelle
    quand z représente les coordonnées d'un point, a est l'abscisse de ce point.

  • b est appelé partie imaginaire
    b représente l'ordonnée du point

Mise au carré

Mettons z au carré:
z * z = (a+ib)(a+ib) = a^2 + 2iab - b^2

Module

Le module de z est noté |z|.

|z|=√(a^2 + b^2).

L'ensemble de Mandelbrot

Beaucoup de gens ont déjà programmé des générateurs d'images fractales; le nôtre n'aura rien de révolutionnaire. On retrouve habituellement dans ces programmes deux ensembles: celui de Julia et celui de Mandelbrot, tous deux faciles à implémenter. Nous allons nous concentrer sur ce dernier.

Je suis bien incapable de vous expliquer le principe mathématique, mais peu importe, ce qui nous intéresse est le résultat !

La méthode de calcul

L'ensemble se calcule grâce à la suite:

z[n+1] = z[n]^2 + c
Avec z[0] = 0

z et c sont des nombres complexes:

  • c représente les coordonnées du point du plan en cours de calcul.

  • la suite z diverge après un certain nombre d'itérations — ou pas. Ce qui nous intéresse est le nombre n d'itérations nécessaire pour diverger, sachant que la suite diverge quand |z| > 2.
    Il sera nécessaire de limiter le calcul à un certain nombres d'itérations.

Conversions des coordonnées

Nous utiliserons une bitmap pour composer l'image. Une bitmap est une grille de pixels. Pour notre premier exemple, j'ai choisi d'adopter des dimensions de 400 par 300 pixels.
Le calcul de l'ensemble de Mandelbrot se fait lui sur un plan mathématique. J'ai choisi de faire évoluer ses abscisses entre -2 et +2. Par conséquent ses ordonnées évolueront entre -1,5 et +1,5 pour conserver les mêmes proportions que la bitmap.

Conversion des coordonnées

Grâce à la figure, on peut déterminer que les coordonnées se convertissent ainsi:

c.réelle = bitmapX/100 - 2  
c.imaginaire = -bitmapY/100 + 1,5

La couleur

Tous les exemples d'images que vous avez dû voir sont très colorés, cependant, c'est uniquement le nombre d'itérations n qui nous donne la teinte. Pour commencer nous allons donc produire une image en niveaux de gris, 256 niveaux exactement (de 0 à 255).

nuance = (n/MaxIterations) * 255

MaxIterations est le nombre maximal d'itération. J'ai choisi après plusieurs essais que MaxIterations = 18.

La suite

Dans le prochain billet, nous mettrons au point la première version du générateur. Ne zappez pas !

Renaud Pradenc
ceroce.com

Articles similaires

Partager