L'encyclopédie des Sciences
  Création de Fractales
 

1) Principe de base des fractales : les ensembles de Julia

Pour expliquer le tracé d'une image fractale, et notamment le côté mathématique des fractales, nous allons partir de l'ensemble de Julia en tant que base.

Pour tracer un ensemble de Julia, on associe à chacun des points du plan (chaque pixel dans le cas de l'écran de l'ordinateur) un nombre complexe Z, qui est l'affixe du point. Si le point a comme coordonnée (x,y), alors Z=x+i.y

Ensuite, pour chaque point du plan, on effectue l'itération suivante, à la sortie de laquelle la variable COULEUR contiendra la valeur de la couleur à donner au pixel de coordonnées (x,y) :

COULEUR <-- 0
Z<--x+i.y
Répéter
        Z <-- Z² + C
        COULEUR <-- COULEUR+1
Jusqu'à ce que Module(Z)>2

Explication : le signe <-- représente une affectation (EX: COULEUR <-- 0 signifie "la variable COULEUR reçoit la valeur 0", ou encore "mettre 0 dans COULEUR"). A chaque passage dans la boucle RÉPÉTER, le nombre complexe Z reçoit la valeur Z²+C, où C est une constante complexe. La variable COULEUR est également incrémenté à chaque passage dans la boucle. On répète ces 2 opérations, jusqu'à ce que le module du nombre complexe Z soit supérieur à 2 : si le module de Z devient "rapidement" supérieur à 2, la variable COULEUR aura une valeur faible (proche de 0), et le pixel concerné sera sombre (proche du noir). Si en revanche le module de Z "met du temps" avant de devenir supérieur à 2, la variable COULEUR prendra une grande valeur, et le pixel sera clair (proche du blanc, ou tout autre couleur selon la palette utilisée).

Il faut préciser que la constante C ne peut pas prendre n'importe quelle valeur. En effet, si on vaut obtenir un bel ensemble de Julia (fractal), il faudra donner à C une valeur bien précise. Des centaines de valeurs donneront de beaux résultats, en voici quelques une :

        C=-0,7927+0,1609 i                                C=0,32+0,043 i
        C=-1,1380+0,2403 i                                C=-0,0986-0,65186 i
        C=-0,1225+0,7449 i                                C=-0,3380-0,6230 i

Ces valeurs ne sont que 6 exemples parmi des centaines d'autres. Mon logiciel GECIF permet de dessiner les ensembles de Julia en paramétrant la constante C avec la valeur que vous voulez, et permet aussi de trouver de nouvelles valeurs pour C. Grâce à GECIF, vous pouvez découvrir des centaines de nouveaux ensembles de Julia, jusqu'ici jamais explorés !

A titre d'illustration, voici un ensemble de Julia obtenu pour C = -0,0986 - 0,65186 i :

 Et en voilà un autre obtenu avec C = 0,32 + 0,043 i :

 

Les plus beaux ensembles de Julia sont généralement obtenus avec une constante complexe C dont le point image dans le plan est sur les frontières de l'ensemble de Mandelbrot. Vous pouvez tester expérimentalement cette propriété avec Gecif 4.0, la nouvelle version de mon logiciel Gecif.

Voici par exemple un nouvel ensemble de Julia, que j'ai trouvé avec mon logiciel GECIF 4.0. Pour cet ensemble de Julia, la valeur de la constante complexe C est -0,772691322542185 + 0,124281466072787 * i (Gecif est extrêmement précis avec les valeurs numériques qu'il utilise pour les calculs, d'où la finesse exceptionnelle des images réalisée) : 


Ensemble de Julia avec C = -0,772691322542185 + 0,124281466072787 * i d'après Gecif

Ces ensembles de Julia ne sont que trois exemples parmi des milliers d'autres, et chaque ensemble de Julia permet lui-même de générer des centaines de nouvelles images fractales en effectuant des zooms successifs, qui permettent de visiter et de s'enfoncer dans l'ensemble de Julia. Mais pour explorer ainsi un ensemble de Julia, il faut posséder un très bon outil adapté à ce type de découverte. Personnellement, je vous recommande de télécharger Gecif pour tracer, explorer, et découvrir vos ensembles de Julia.

2) L'ensemble de Mandelbrot

Pour tracer l'ensemble de Mandelbrot, l'idée est la suivante : on ne donne plus à C une valeur constant pour tous les pixels, mais C est l'affixe du pixel concerné. Ainsi, C=x+i.y, et dans l'ensemble de Mandelbrot C a une valeur différente pour chaque pixel, contrairement aux ensemble de Julia où C avait une valeur constantes pour tous les pixels.

Le programme de base pour tracer l'ensemble de Mandelbrot est alors le suivant, qu'il faudra répéter pour chacun des pixel de l'écran :

COULEUR <-- 0
C<--x+i.y
Z<--x+i.y
Répéter
        Z <-- Z² + C
        COULEUR <-- COULEUR+1
Jusqu'à ce que Module(Z)>2

A la sortie de la boucle, la variable COULEUR contient la valeur de la couleur à donner au pixel concerné.

Et voici l'ensemble de Mandelbrot complet, calculé par GECIF :

Ce qui est le plus intéressant avec l'ensemble de Mandelbrot, et ce que GECIF permet de faire à loisir, c'est d'agrandir à volonté, en faisant des zooms successifs, les frontières de l'ensemble de Mandelbrot : on obtient alors de merveilleuses images fractales (spirales, étoiles, etc.).

Voici par exemple une image obtenue après quelques zooms successifs sur les frontières de l'ensemble de Mandelbrot :


Cette image n'est que la porte ouverte pour découvrir encore des milliers d'autres images en y effectuant des zooms

Comme beaucoup d'autres objets merveilleux construits par la nature, l'ensemble de Mandelbrot utilise le nombre d'or dans l'organisation de sa structure. Si vous voulez savoir comment retrouver le nombre d'or à partir d'une observation de l'ensemble de Mandelbrot, cliquez ici.

3) Et si on compliquait un peu ?

Les ensembles de Julia et de Mandelbrot tels qui sont décris ci-dessus n'ont plus rien d'extraordinaire, au sens qu'ils sont désormais connus de tous aujourd'hui. Mon idée a donc été la suivante : pourquoi ne pas "compliquer" un peu le programme de base donnant l'ensemble de Mandelbrot, dans le but d'obtenir d'autres ensembles, encore plus riches et plus surprenant ?

C'est ce que j'ai fait, en donnant à mon logiciel GECIF (et donc à vous si vous êtes utilisateur de GECIF) la possibilité d'enrichir le programme de base de Mandelbrot dans 3 directions différentes :

    - possibilité d'utiliser des fonctions trigonométriques à variables complexes
    - possibilité d'augmenter le degré du polynôme ( Z² + C ) qui est dans la boucle RÉPÉTER
    - et surtout, possibilité d'utiliser les Quaternions et les Octonions, à la place des nombres complexes de base

Comment utiliser les fonctions trigonométriques complexes pour améliorer les images fractales ?

GECIF dispose d'un ensemble de fonctions trigonométriques complexes, en versions circulaires et hyperboliques, mais aussi en versions directes et réciproques. Les 6 fonctions de base (Sinus, Cosinus, Tangente, Cotangente, Sécante, et Cosécante) sont définis dans GECIF en tant que fonctions complexes (elles attendent en paramètre un nombre complexe, et elles renvoient un nombre complexe) et existent toutes en version circulaire, hyperbolique, directe, et réciproque : il y a donc 24 fonctions au total dont voici la liste :

Sinz : Calcule le sinus circulaire d'un nombre complexe 
Cosz : Calcule le cosinus circulaire d'un nombre complexe 
Sinhz : Calcule le sinus hyperbolique d'un nombre complexe 
Coshz : Calcule le cosinus hyperbolique d'un nombre complexe 
Tanz : Calcule la tangente circulaire d'un nombre complexe 
Cotanz : Calcule la cotangente circulaire d'un nombre complexe
Tanhz : Calcule la tangente hyperbolique d'un nombre complexe
Cotanhz : Calcule la cotangente hyperbolique d'un nombre complexe
Secz : Calcule la sécante circulaire d'un nombre complexe
Cosecz : Calcule la cosécante circulaire d'un nombre complexe
Sechz : Calcule la sécante hyperbolique d'un nombre complexe
Cosechz : Calcule la cosécante hyperbolique d'un nombre complexe
Arcsinz : Calcule l'arc-sinus circulaire d'un nombre complexe
Arccosz : Calcule l'arc-cosinus circulaire d'un nombre complexe
Arctanz : Calcule l'arc-tangente circulaire d'un nombre complexe
Arccotanz : Calcule l'arc-cotangente circulaire d'un nombre complexe
Arcsecz : Calcule l'arc-sécante circulaire d'un nombre complexe
Arccosecz : Calcule l'arc-cosécante circulaire d'un nombre complexe
Argsinhz : Calcule l'arg-sinus hyperbolique d'un nombre complexe
Argcoshz : Calcule l'arg-cosinus hyperbolique d'un nombre complexe
Argtanhz : Calcule l'arg-tangente hyperbolique d'un nombre complexe
Argcotanhz : Calcule l'arg-cotangente hyperbolique d'un nombre complexe
Argsechz : Calcule l'arg-sécante hyperbolique d'un nombre complexe
Argcosechz : Calcule l'arg-cosécante hyperbolique d'un nombre complexe

3 rappels de base, au passage, sur ces fonctions :
    - La cotangente est l'inverse de la tangente
    - La cosécante est l'inverse du sinus
    - La sécante est l'inverse du cosinus
et ce, aussi bien en version circulaire qu'hyperbolique.

Exemple d'application : la fonction Tangente Hyperbolique d'un nombre complexe (appelée TANHZ(Z) dans GECIF) donne de très beaux résultats (spirales très riches en détails). On peut l'utiliser dans le programme de base de Mandelbrot, non pas en affectant à Z directement le nombre complexe x+i.y, mais en affectant à Z la tangente hyperbolique de x+i.y. Le programme devient alors :

COULEUR <-- 0
C<--x+i.y
Z<--TANHZ(x+i.y)
Répéter
        Z <-- Z² + C
        COULEUR <-- COULEUR+1
Jusqu'à ce que Module(Z)>2

Et voici l'ensemble complet obtenu par ce programme :


La tangente hyperbolique a légèrement déformé l'ensemble de Mandelbrot !

Des milliers de nouvelles images vous attendent sur les frontières de ce nouvel "ensemble de Mandelbrot". En voici un exemple :


Les bras de la spirale principales sont constitués de petites spirales, dont les bras sont eux-même
constitués de spirales, qui sont elles-même constituées de spirales, etc. C'est ça la fractalité !

On peut bien sûr remplacer TANHZ par n'importe laquelle des 23 autres fonctions trigonométriques complexes, ou encore "emboîter" les fonctions entre elles : par exemple,
Z<--SINZ(TANHZ(ARGCOSHZ(COSECZ(x+i.y))))
(ceci n'est qu'un exemple des possibilités mathématiques de GECIF, je ne garanti pas le résultat artistique ...).

On peut aussi modifier l'initialisation de la valeur de C :
par exemple C <-- SINZ(x+i.y), et le programme devient alors :

COULEUR <-- 0
C<--SINZ(x+i.y)
Z<--x+i.y
Répéter
        Z <-- Z² + C
        COULEUR <-- COULEUR+1
Jusqu'à ce que Module(Z)>2

Voici le nouvel ensemble obtenu avec ce programme, qui renferme à son tour des milliers de nouvelles images sur ses frontières :


Mandelbrot a dû mal digérer le sinus : il est tout vert et fait une drôle de tête !! :-))

Et voici 2 images prises sur cet ensemble :


Le sinus circulaire a donné le tourniquet aux spirales !


On dirait un amas de galaxies célestes !

On pourrait aussi initialiser Z avec une fonction complexe, et initialiser C avec une autre ...

Enfin bref, les possibilités d'innovation ne manquent pas !

Comment augmenter le degré du polynôme ?

L'idée est de modifier l'affectation Z <-- Z²+C dans la boucle REPETER du programme de base de Mandelbrot. Cette affectation peut être par exemple remplacée par

Z <-- Z5+C

ou encore

Z <-- C+Z+Z2+Z3+Z4+Z5+Z6+Z7+Z8

On peut même utiliser des puissances non entière, grâce à la fonction PUISSANCE(Z,R) de GECIF, qui élève à la puissance R le nombre complexe Z (R est un réel quelconque).

Exemple : Z<-- Z1,618+C

Là encore, les possibilités d'innovation ne manquent pas !

A titre d'illustration, voici des images obtenues pour les polynômes de degrés 3, 4, et 5 :

Ensemble complet avec un polynôme de degré 3 (Z <-- Z3+C) :


L'ensemble de Mandelbrot de degré 3 a "2 têtes"

Et voici une image (prise parmi des milliards d'autres) obtenue en zoomant sur les frontières de cet ensemble de degré 3 :

 

Ensemble complet avec un polynôme de degré 4 (Z <-- Z4+C) :


L'ensemble de Mandelbrot de degré 4 a "3 têtes"

Et voici une image (prise parmi des milliards d'autres) obtenue en zoomant sur les frontières de cet ensemble de degré 4 :

 

Ensemble complet avec un polynôme de degré 5 (Z <-- Z5+C) :


L'ensemble de Mandelbrot de degré 5 a "4 têtes"

Et voici une image (prise parmi des milliards d'autres) obtenue en zoomant sur les frontières de cet ensemble de degré 5 :

 

Bien sûr, chaque nouvel "ensemble de Mandelbrot" obtenu renferme une infinité de nouvelles images, chaque images pouvant elle-même générer d'autres images en y effectuant des zooms à l'intérieur. On peut remarquer que la complexité et la richesse des images augmente avec le degré du polynôme utilisé. De plus, un ensemble de Mandelbrot de degré n, aura n-1 têtes lorsqu'on le voit en entier.

 

Et maintenant, à vous de jouer ! :-))

Cette applet Java vous permet de tester différentes fractales (Julia, Mandelbrot, et encore d'autres) : vous pouvez y faire des zooms pour explorer la fractale, vous pouvez modifier certaines valeurs dans l'équation (comme la constante pour les ensembles de Julia, ou la valeur de l'exposant dans la fractale ManZPower), et vous pouvez même modifier la palette de couleurs.

 

Sorry, your browser doesn't seem to appreciate Java... Try with another one !

Mais ces fractales ont toutes un point commun : elles sont calculées en utilisant les nombres complexes. Or, mon logiciel Gecif permet de calculer, en plus de toutes les fractales classiques que nous venons de voir, d'autres fractales encore plus exceptionnelles en utilisant les quaternions et les octonions, qui sont, pour résumer, des nombres encore "plus complexes" que les nombres complexes classiques.

 

Comment utiliser les Quaternions ou les Octonions pour calculer les images fractales avec GECIF?

L'idée est la suivante : remplacer l'utilisation des nombres complexes par celle des quaternions ou des octonions. Nous allons montrer ici un exemple utilisant les quaternions, mais GECIF permet aussi l'utilisation des octonions.

Dans le programme de base de Mandelbrot, nous allons remplacer le nombre complexe Z par un quaternion Q. Le problème est le suivant : notre quaternion Q a 4 composantes (1 partie réelle, et 3 parties imaginaires), alors que les pixels de l'écran n'ont toujours que 2 composantes (x et y). Comment dans ces conditions faire en sorte que le quaternion Q soit l'affixe d'un point du plan ? Tout simplement en faisant parler notre imagination !

Le quaternion Q s'écrit Q = a + ib + jc + kd où :
        a est la partie réelle
        b, c, d sont les 3 parties imaginaires
        i, j, k sont 3 nombres imaginaires, tel que i²=j²=k²=-1

a, b, c, et d étant 4 réels, il suffit de créer 4 réels à partir de x et y. Par exemple :
        a = x
        b = y
        c = x*y
        d = cos(x+y)

ou encore :
        a = x
        b = y
        c = x²
        d = y²

Si on prend ce dernier exemple, le programme devient alors :

COULEUR <-- 0
Q <-- x + i.y + j.x² + k.y²
C <-- Q
Répéter
        Q <-- Q² + C
        COULEUR <-- COULEUR+1
Jusqu'à ce que Module(Q)>2

Voici l'ensemble complet obtenu par ce programme qui utilise les quaternions :


"Ensemble de Mandelbrot" calculé avec l'algèbre des quaternions

Et voici deux images calculées par Gecif, prises dans cet "ensemble de Mandelbrot quaternionique" :


Cette image fractale a été calculée avec l'algèbre des Quaternions


Cette image fractale a été calculée avec l'algèbre des Quaternions

On peut facilement remarquer la richesse de ces images et le nombre de détails supplémentaires dans les spirales, dû au fait que le calcul interne de l'image a été réalisé avec l'algèbre des Quartions. En effet, l'utilisation des algèbres quaternionique ou octonionique donne plus de profondeur et plus de détails aux images fractales.

On pourrait aussi très bien utiliser un octonion O à la place du quaternion Q, à condition de trouver 8 composantes pour l'octonion à partir des 2 composantes x et y du pixel. L'image suivante, par exemple, a été calculée avec l'algèbre des octonions :


Cette image, calculée grâce aux octonions, se passe de commentaire ... Elle est tout simplement merveilleuse !

Remarquez au passage l'effet de perspective sur le motif de l'image : cet effet revient souvant avec les quaternions ou les octonions, alors qu'il était inexistant avec les nombres complexes.

Pour voir toute ma galerie d'images fractales calculées avec l'algèbre des octonions, cliquez ici.

Dernière modification possible du programme : la condition de sortie de la boucle RÉPÉTER. Par défaut, on sort de la boucle lorsque le module du nombre complexe (le complexe Z, le quaternion Q, ou l'octonion O) est supérieur à 2. Rien ne nous interdit de modifier cette valeur, et d'attendre par exemple que le module soit supérieur à 4, à 8, à 16, ou à toute autre valeur réelle positive. L'applet que vous avez assayée au paragraphe précédent permet de modifier cette valeur. Pour celà, cliquer sur le bouton "Fractal" de l'applet, puis modifier la valeur "Bailout value" (la valeur par défaut est 4.0).

Là encore, les possibilités d'innovation ne manquent pas !

Conclusion :

L'ensemble de Mandelbrot de base (réalisé en nombres complexes classiques, sans fonctions trigonométriques, et avec un polynôme de degré 2) n'est qu'un exemple parmi des centaines d'autres fractales plus surprenantes les unes que les autres, qui renferment chacune des milliers de nouvelles images fractales jusqu'ici jamais visionnées par l'homme, et qui ne demande qu'à être découvertes. Pour explorer ces nouveaux ensembles fractals, la recette est la suivante :

Utiliser Gecif, et avoir une bonne dose de curiosité et d'imagination

Pour télécharger Gecif maintenant, cliquez ici

 

4) Les nombres complexes

Par définition, un nombre complexe  est un couple z  = (x , y ) de deux nombres réels; si z  = (x , y ) et z H = (x H, y H) sont deux nombres complexes, on appelle alors somme et produit de ces deux nombres complexes les nombres complexes:

 

 

Il est alors facile de vérifier que, pour ces deux opérations, l’ensemble des couples de nombres réels est un corps, le corps  C des nombres complexes ; par exemple, si z  = (x , y ) R (0, 0), son inverse est le nombre complexe:

 

 aussi noté 1/z .

Il est aussi souvent commode de représenter géométriquement le nombre complexe z  = (x , y ) par le point M de coordonnées (x , y ) dans le plan muni d’un système d’axes de coordonnées orthonormé; M s’appelle l’image  de z  et il est clair que tout point M du plan est l’image d’un unique nombre complexe appelé affixe  de M.

Les nombres complexes de la forme (x , 0) forment un sous-corps de C qui est isomorphe au corps R des nombres réels par l’application qui à (x , 0) fait correspondre x ; dans la suite, nous identifierons donc le nombre complexe (x , 0) au nombre réel x , ce qui fait apparaître R comme un sous-corps de C. Parmi les nombres complexes, les nombres réels ont donc pour images les points de l’axe Ox , appelé pour cette raison axe réel ; remarquons que si a  est un nombre réel, le produit de a  et du nombre complexe z  = (x , y ) est simplement az  = (ax , ay ).

Le nombre complexe i  = (0,1) vérifie i² = -1,  et  tout  nombre  complexe z  = (x , y ) peut s’écrire de manière unique z  = x  + iy , pour x  et y  réels; nous adoptons désormais cette écriture, dite cartésienne, pour tout nombre complexe. Les nombres réels x  et y  s’appellent respectivement la partie réelle  et la partie imaginaire  de z  et on note:

 

5) Les quaternions

Contrairement aux nombres complexes qui sont en deux dimensions (1 partie réelle et 1 partie imaginaire, représentée par 2 nombres réels), les quaternions sont des nombres hyper-complexes particuliers en 4 dimensions (1 partie réelle et 3 parties imaginaires, représentées par 4 composantes réelles), que nous définirons ainsi :

Soit K un corps commutatif; désignons par e, i, j, k  la base canonique de l’espace vectoriel K4 et choisissons deux éléments p  et q  de K (les éléments de K sont des scalaires). On appelle algèbre de quaternions  sur K l’algèbre obtenue en considérant sur K4 la table de multiplication notée H (les éléments de H sont des vecteurs) :

 

e²=e       ei=ie=i                        ej=je=j                        ek=ke=k

i²=pe           j²=qe          k²=-pqe

ij=-ji=k         jk=-kj=qi     ki=-ik=-pj

 

Un cas particulier très important s’obtient en prenant pour K le corps des nombres réels et en choisissant p  = q  = -1; on obtient ainsi les quaternions  proprement dits, introduits par Hamilton. Pour ces quaternions, on peut développer une théorie analogue à celle des nombres complexes: si x  = ae  + bi  + cj  + dk  est un tel quaternion, on appelle conjugué de x  le quaternion x  = ae _ bi _ cj _ dk ; les règles de calcul montrent alors que:

 

 et par suite tout quaternion non nul x  a un inverse :

 

 tel que xx-1 = x-1x  = e            . On traduit cette propriété en disant que les quaternions forment un corps non commutatif       ; cet exemple des quaternions constitue une situation très privilégiée, car on peut montrer que c’est le seul corps non commutatif de dimension finie sur le corps des nombres réels.

Pour terminer, remarquons que les matrices de la forme:

 

 où a, b, c, d       sont des nombres réels quelconques forment une algèbre et que l’application qui, au quaternion ae + bi + cj + dk , fait correspondre la matrice ci-dessus est un isomorphisme car les opérations usuelles sur les matrices correspondent ici aux opérations correspondantes sur les quaternions; ainsi l’algèbre des quaternions est isomorphe à une algèbre de matrices. La recherche d’algèbres de matrices isomorphes à une algèbre donnée est le problème fondamental de la représentation linéaire des algèbres; la situation précédente constitue historiquement le premier exemple d’une telle représentation.

Tous les calculs sur des quaternions effectués par mon logiciel Gecif pour dessiner les images fractales sont réalisés à l'aide de matrices.


Asian





Ajouter un commentaire à cette page:
Votre nom:
Votre message:

 
  nombre de visiteurs venus 484389 visiteurs (2037786 hits) Ici!

Tracked by Histats.com
Recherche personnalisée
$value) { if ($param == 'client') { google_append_url($google_ad_url, $param, 'ca-mb-' . $GLOBALS['google'][$param]); } else if (strpos($param, 'color_') === 0) { google_append_color($google_ad_url, $param); } else if ((strpos($param, 'host') === 0) || (strpos($param, 'url') === 0)) { google_append_url($google_ad_url, $param, $google_scheme . $GLOBALS['google'][$param]); } else { google_append_globals($google_ad_url, $param); } } google_append_url($google_ad_url, 'dt', round(1000 * array_sum(explode(' ', microtime())))); return $google_ad_url; } $google_ad_handle = @fopen(google_get_ad_url(), 'r'); if ($google_ad_handle) { while (!feof($google_ad_handle)) { echo fread($google_ad_handle, 8192); } fclose($google_ad_handle); } ?>
 
 
=> Veux-tu aussi créer une site gratuit ? Alors clique ici ! <=