vers l'index général

les fractales

pourquoi cette page ?

Au vu des nombreuses fonctions de POV-Ray faisant appel, d'une manière ou d'une autre, aux fractales, il nous est apparu nécessaire de fournir une brève synthèse à ce sujet. En effet, le paramétrage particulier de certaines fonctionnalités est beaucoup plus clair et facile une fois qu'un minimum de concepts liés aux fractales ont été compris.

définition

Une fractale est un objet mathématique. Le terme "objet" est à prendre ici au sens très large, au sens du "résultat d'un processus de nature mathématique", une "chose mathématique" qui peut prendre des apparences infiniment variées.

Une fractale est, donc, un objet mathématique qui possède deux propriétés particulières : elle est issue d'un processus itératif, et présente un caractère de self-similarité.

un processus itératif ?

Un processus (suite d'opérations) itératif est un processus en boucle (répété indéfiniment) dans lequel le résultat obtenu à une étape du processus est réinjecté dans l'étape suivante.

Exemple : a = a² + b. Si je donne, au départ une valeur de 1 à a et b, la première étape me donnera a = 1² + 1, donc a = 2. Je repasse la nouvelle valeur de a dans la formule : a = 2² + 1, donc a = 5, qu'il me reste à réinjecter dans la formule, et ainsi de suite, indéfiniment. Nous venons de générer un processus itératif !

//en bon langage Povien :
#declare a = 1;
#declare b = 1;
#while (boucle < ...)
 #declare a = a*a + b;
#declare boucle=boucle+1;
#end

Autre exemple, graphique : prenez un segment de droite, coupez-le en 3 segments égaux, et enlevez le segment central. Il vous reste deux segments distants. Sur chacun de ces deux segments, pratiquez la même opération : division en trois segments, et retrait du segment central. Vous voilà avec quatre segments encore un peu plus petits. Répétez ce processus indéfiniment, et vous voilà en train de jouer avec l'"ensemble de Cantor".

l'ensemble de cantor

Ce petit jeu vous démontre que, bien qu'étant mathématique, le processus de formation d'une fractale ne passe pas forcément par une formule.

En informatique, il est impossible de produire une infinité d'itérations, et beaucoup de fonctions fractales demandent un paramètre de "nombre maximum d'itérations", que l'on peut comprendre comme un "nombre d'étapes de raffinement successives".

la self-similarité ?

Un "objet" self-similaire est un objet dont les parties, jusqu'à la plus petite, ressemblent au tout, et inversement. Un arbre est self-similaire : comparez un arbre complet et une de ses branches, vous verrez qu'il y a une ressemblance marquée entre les deux, dans la façon dont les branches se scindent en branches plus petites, qui à leur tour forment des brindilles, etc... (c'est d'ailleurs une vieille astuce pour faire les arbres dans les maquettes d'architecture, un bout de branche, et, hop !, voici un arbre en modèle réduit !).

L'ensemble de Cantor vu un peu plus haut est self-similaire, chaque nouveau petit segment brisé ayant la même allure que le grand segment brisé du début, et cela indéfiniment.

Attention, "similaire" ne veut pas toujours dire "égal" (même en réduction) et de nombreuses fractales présentent de subtiles variations selon l'échelle à laquelle on les observe.

exemples de fractales simples

courbe de Koch

Prendre un segment de droite, le diviser en 3, et élever un triangle équilatéral sur le segment central. Répéter cette opération sur les 4 segments résultants, et ainsi de suite.

courbe de Koch

côte artificielle (plasma)

Celle-ci fait intervenir un peu d'aléatoire. Prendre une grille de points, chaque point pouvant recevoir une couleur (= hauteur). Prendre une valeur au hasard pour les 4 coins de la grille, puis affiner progressivement, en tenant compte des valeurs des points voisins (équidistants) plus un coefficient de hasard.

carpette de Sierpinksy

C'est une sorte d'ensemble de Cantor, mais en 2D. Prendre un carré, le diviser en 9, retirer le carré central, et répéter l'opération sur les 8 carrés restants, et ainsi de suite. La version 3D de cette fractale est l'éponge de Menger.

carpette de Sierpinksy

la dimension fractale

Ceci est une notion clé, et donne tout sons sens au mot "fractales". Repensons à notre ensemble de Cantor. Au début, celui-ci est un simple segment de droite, qui contient une infinité de points, un objet de dimension 1 (linéaire), constitué d'objets de dimension 0, des points. Au fil du processus, nous allons obtenir de plus en plus de segments, de plus en plus petits. En théorie, chacun de ces segments contient lui même une infinité de points ; cependant, comme nous avons pris un malin plaisir à retirer chaque fois des morceaux de segments (donc des points), la somme de ces segments est formée d'une infinité de points, mais une infinité moins grande que l'infinité du début :-))) De plus, au bout d'une infinité d'itérations, on peut logiquement supposer qu'il restera une infinité de segments infiniment petits (des points, quoi !).

Nous voici donc avec un objet qui est un peu plus qu'un ensemble de points, mais qui n'est pas non plus vraiment une droite. Un objet qui n'est ni de dimension 0, ni de dimension 1. Pour qualifier la dimension (topologique) de cet objet, il faut recourir à une dimension intermédiaire que l'on peut exprimer sous forme d'une FRACTion : log 2 / log 3, c'est-à-dire 0,63.., un ensemble de points qui tend à devenir une droite.

Ainsi, nous pouvons rencontrer des fractales dont la dimension se situe entre 1 et 2 (ligne qui, par ses circonvolutions, tend à devenir un plan), entre 2 et 3 (surface 2D qui tend vers la 3D), etc...

Cette dimension fractale permet de "classer" les fractales, selon la manière dont elles tendent à occuper l'espace. Par exemple, la courbe de Koch est une courbe qui tend à remplir un espace plan (dimension fractale : 1,26...), et la carpette de Sierpinsky est également une courbe qui tend à remplir un plan, mais elle le remplit davantage, et sa dimension fractale est de 1,89.. (logique : elle est plus proche de la dimension 2).

comment calcule-t-on la dimension fractale ?

De la même façon qu'on calcule la dimension de tout objet, mais en employant une formule généralisée. Déterminer la dimension, c'est établir le rapport entre la façon dont un objet occupe l'espace, et sa variation d'échelle (le "scale", quoi !).

Prenons un cube de côté A, multiplions son échelle par 2. Nous obtenons un cube dont les arêtes sont deux fois plus longues (A*2), mais dont le volume est 8 fois plus grand (il faut 8 cubes de côté A pour remplir ce nouveau cube).

La formule générale, c'est :

            log (rapport ensemble/parties)
dimension = ------------------------------
            log (rapport d'échelle)

Pour notre cube, cela donne : log 8 / log 2, qui est égal à 3 ! Rien d'étonnant, c'est un objet à 3 dimensions ! La même formule peut s'appliquer aux fractales, comme par exemple l'ensemble de Cantor : chaque nouvelle itération divise la longueur de la précédente par 3 (rapport d'échelle : 3), et l'itération précédente est "copiée" deux fois dans la nouvelle (rapport ensemble/parties : 2). Sa dimension fractale est donc log 2 / log 3 = 0,63..

Le calcul de la dimension de certaines fractales (comme l'ensemble de Mandelbrot) est loin d'être trivial, mais le principe est le même. Cependant, il n'est pas crucial de savoir calculer cette dimension, mais plutôt de comprendre ce qu'elle signifie, et comment elle "qualifie" l'objet fractal.

les fractales et POV-Ray

Nous brossons ici un rapide tableau de la manière dont les fractales sont utilisées ici et là dans POV-Ray.

motifs

De nombreux motifs sont basés sur un algorithme fractal, ce qui leur permet de ne pas se répéter, tout en restant homogènes et identiques d'un rendu à l'autre, imprévisibles, mais déterministes (ne devant rien au hasard). La plupart d'entre eux utilisent une base de "bruit" fractal : agate, bozo, granite,.., certains autres utilisent des algorithmes plus particuliers : crackle, mandel,...

L'apparition de la fonction eval_pigment () permet à l'utilisateur d'aller chercher des valeurs dans les motifs, et ainsi d'utiliser leurs propriétés fractales pour d'autres usages, tels que le placement semi-aléatoire d'objets.

turbulence

La turbulence implémentée dans POV-Ray est un algorithme fractal. Si vous en lisez la description dans la présente documentation, vous verrez qu'il s'agit bien d'un processus itératif (les "pas" successifs), et self-similaire (vous pouvez zoomer indéfiniment sur une texture turbulente, ses "déplacements" auront toujours la même allure)

objets fractals

On pense immédiatement à la fameuse julia, qui est en fait une tranche 3D d'un objet à 4 dimensions ! (un peu comme une coupe est une tranche en 2D d'un objet en 3D).

Les isosurfaces apportent également leur lot de fractales, le plus souvent par le biais de fonctions prédéfinies prêtes à l'emploi, telles que les "multifractales à crêtes", et autres chimères.

Enfin, la création, par le biais de #macro, de certains objets particuliers (arbres,...) fait appel à des algorithmes fractals : les itérations et la self-similarité obtenus par un processus récursif.

tirages aléatoires

Afin de permettre la génération de "listes" aléatoires à chaque fois identiques, des calculs itératifs sont utilisés (quoique on s'approche ici davantage de la théorie du chaos que des fractales).

auteur : Fabien Mosen