GÉOMÉTRIE FRACTALE


La notion de dimension
La notion de mesure
La notion d´homothetie interne
Exemple simple: La courbe de Von Koch
La notion de dimension d´homothétie interne
La notion de hasard
Un modèle fractal de terrain

















































La notion de dimension

        La dimension d´un Espace Vectoriel est le nombre de vecteurs linéairement indépendants constituant un générateur minimal de cet espace, encore appelé base. Si l´on passe à une interprétation géométrique, le point est un espace de dimension zéro, la droite a une dimension, le plan en a deux et l´"espace" en a trois. Intuitivement ce nombre peut être compris comme le nombre de degrés de liberté d´un être hypothétique placé dans cet espace, il représente le nombre de mouvements génériques qu´il peut y effectuer. Ainsi, placé en un point, il ne peut pas bouger (d´où une dimension nulle). Placé sur une droite (ou d´ailleurs sur une courbe), il ne peut que se deplacer sur cette courbe qui est dite, pour celà, être de dimension un. Placé sur un plan (ou sur une surface), il a le choix entre deux déplacements non colinéaires, tout autre déplacement étant combinaison de ces deux-là, d´où une dimension deux. Placé dans l´espace il pourra se déplacer au sol comme sur un plan et, en plus, s´envoler comme un oiseau, d´où une dimension de trois pour l´espace. Rien n´empêche d´imaginer des espaces à quatre, ou plus, dimensions, pourvu qu´un outil conceptuel permette de les décrire (ce qui est précisement le rôle des matrices exposées au chapitre MA), mais, en tout état de cause, ce nombre ne peut être qu´un entier.



        Cependant observons un objet tel qu´une pelotte de laine, selon la distance à laquelle on se place, elle apparait sous divers aspects:

distance d´observation

aspect visuel

dimension

1 km

point

0

10 m

disque

2

1 m

boule

3

50 cm

fil

1

1 cm

fil épais

3

1 mm

fils entrelacés

2


        La dimension de l´objet "pelote de laine" semble donc dépendre des conditions de son observation et n´a donc pas de caractère absolu.
        Imaginons maintenant un fil, extrêmement replié sur lui-même, et reposant sur un plan, son observation à une certaine distance fera conclure à un objet continu occupant une partie du plan. On peut, intuitivement, le considérer comme plus épais qu´un fil (vu de loin) mais plus effilé qu´une surface (vu de près), et donc lui attribuer une dimension comprise entre un et deux, c´est à dire "fractionnaire". De même imaginons une surface extrêmement plissée (comme une feuille de papier froissée), vue de loin elle semblera occuper une partie continue de l´espace (de dimension trois), alors que vue de près on pourra y déceler une surface (dimension deux), à la limite, pour une surface infiniment repliée, on peut lui attribuer une dimension fractionnaire comprise entre deux et trois. Ce type d´objet, infiniment complexe, a été dénommé fractal par Benoit Mandelbrot [Mandelbrot 75] à la suite de Hausdorff (1919).
        Pour bien comprendre cette notion il faut distinguer la définition, rigoureuse, de dimension mathématique et celle, plus pragmatique, de dimension physique. La première est affaire de cohérence d´un système axiomatique basé sur la seule logique (on parlera de figures), alors que la seconde fait appel à l´expérimentation (on parlera d´objets). Un modèle mathématique d´une réalité physique ne vaut que par l´usage qu´on en fait, ainsi la pelote de laine évoquée plus haut pourra être décrite comme une sphère (vue à 1 mètre) ou comme un fil (vue à 50 centimètres), dans les deux cas le modèle utilisé n´est pas parfait et il faut introduire des termes "correctifs", le modèle géométrique choisi est celui pour lequel ces corrections sont minimales ou même, si on les omet, continue de s´appliquer.
        Cette double approche, logique et pragmatique, de la description de l´univers n´est pas sans rappeler l´opposition entre la pensées de Hilbert (1862, 1943) et celle de Poincaré (1854, 1912): Pour le premier la logique était le seul fondement de la géométrie. Pour le second, au contraire, les concepts de la géométrie se formeraient lorsque le cerveau humain, pour expliquer pourquoi l´image rétinienne des objets physiques immobiles change quand on se déplace, leur attribue des propriétés d´invariance (conduisant à la notion de groupes de transformations). L´expérience (Piaget) et les neurosciences [Berthoz 97] semblent donner raison au deuxième.
        Le concept de fractal se rapporte aux zones intermédiaires entre lesquelles un objet physique (dont la dimension dépend par exemple de la distance à laquelle on l´observe) change de dimension (la pelote de laine passant de l´état de disque 2D à celle de boule 3D). Benoit Mandelbrot a eu le mérite de rendre ce concept clair (c´est à dire mathématiquement démontrable) et opérationnel (c´est à dire informatiquement implémentable). Les nombreuses applications qui en ont été faites en synthèse d´image (modèles de terrain, générations de textures, croissances de plantes, ...) aussi bien qu´en physique (transmission du signal, modèles de turbulences, ...) prouvent, si besoin en était, la pertinence.

La notion de mesure

        Si la côte de la Bretagne était droite elle serait identique au segment AB joignant ses extrémités et sa mesure serait la distance AB:
        L(côte AB) = AB
Mais elle est sinueuse et sa longueur est supérieure à cette distance:
        L(côte AB) > AB
Si M est un point intermédiaire sur la côte entre A et B on a:
        L(côte AB) = L(côte AM) + L(côte MB)
Mais L(côte AM) > AM et L(côte MB) > MB donc:
        L(côte AB) > AM + MB


        En répétant l´opération on voit que la mesure L(côte AB) augmente indéfiniment, mais dépend de l´unité choisie. Si on veut réaliser une mesure effective il faut choisir cette unité (disons par exemple le mètre) et dire que la côte mesure Lm pour ce choix. Si on trace la courbe exprimant la longueur mesurée en fonction de l´unité choisie on constate que cette longueur est grande pour des petites valeurs de l´unité et petite pour de grandes valeurs de l´unité, de plus elle présente un palier pour une unité de l´ordre de 20 mètres. Ce phénomène s´explique par le fait que, sur d´assez longues portions, la côte a été aménagée par l´homme qui a construit des digues dont le détail est de l´ordre de 20 mètres. On dira alors que la côte de la Bretagne a une longueur à peu près constante à cette échelle. Mais il est évident qu´elle aurait une longueur bien supérieure pour une fourmi dont l´odre du détail perceptible est très inférieur. Le concept de mesure, tout comme celui de dimension, est donc relatif à un observateur.


La notion d´homothétie interne

        Le procédé de mesure avec des unités de plus en plus petites (voir FR-2) fait apparaître une complexification (désordre) croissante de la côte. Parallèlement, on relève une sorte de régularité interne concernant la forme générale: On remarque que, sur une carte au 1/100000 ème, si on examine le dessin de baies et péninsules à une échelle de 1/10000 ème, on retrouve des contours très semblables. À l´échelle près, le même mécanisme semble avoir engendré les petits, comme les gros, détails de la côte. C´est une sorte de vision en "abîme" (processus récursif), comme celui de l´étiquette du célèbre fromage de la "vache qui rit": Une telle régularité de structure est appelée homothétie interne (qui n´est pas une homothétie géométrique rigoureuse, mais plutôt une sorte de "ressemblence" du détail et du tout).
        Pour faire comprendre cette notion, nous allons examiner un exemple très simple (la courbe de Von Koch) qui nous amènera à expliciter ce que l´on entend par dimension "fractale". Une autre approche, par les grammaires, a déjà été donnée de cette courbe.

Exemple simple: La courbe de Von Koch

        Supposons une côte simplifiée qui, vue à l´échelle 1 / 100000, est un segment de droite de longueur 1, à l´échelle 3 / 100000, les nouveaux détails s´obtiennent en partageant le segment en trois, n´en gardant que le premier et le dernier tiers et en remplaçant le tiers du centre par 2 côtés du triangle équilatéral l´ayant pour base. Le même procédé est répété sur chacun des 4 segments constituants la figure obtenue, et ainsi de suite. La courbe obtenue, limite quand la récursion est poussée à l´infinie, est appelée courbe de Von Koch (1904).



        Sa longueur augmente indéfiniment, en effet:
        À l´ordre 0        L = 1;
        À l´ordre 1        L = 4 * 1 / 3 = 4 / 3
        À l´ordre 2        L = 4 * (4 * (1 / 3) / 3) = (4 / 3)2
        etc...
        À l´ordre n        L = (4 / 3)n qui tend vers l´infini quand n tend vers l´infini.
        C´est une courbe, occupant une surface nulle, de longueur infinie, en presque tous ses points elle n´a pas de tangente (discontinuité d´ordre 1), d´autre part elle est toute entière située à l´intérieur d´un carré de côté 1 et elle ne présente pas de points doubles.
        Voici un extrait du programme générant une courbe de Von Koch:

void vonkoch(Point *p1, Point *p2, long n)
{
Point p3, p4;
if(n == 0)
        {
        glut_segment(p1, p2);
        return;
        }

p3.x = p1->x + (p2->x - p1->x) / 3.0;
p3.y = p1->y + (p2->y - p1->y) / 3.0;
p3.z = 0.0;
p4.x = p1->x + 2 * (p2->x - p1->x) / 3.0;
p4.y = p1->y + 2 * (p2->y - p1->y) / 3.0;
p4.z = 0.0;
vonkoch(p1, &p3, n - 1);
glPushMatrix();
glTranslatef(p3.x, p3.y, p3.z);
glRotatef(60.0, 0.0, 0.0, 1.0);
glTranslatef(-p3.x, -p3.y, -p3.z);
vonkoch(&p3, &p4, n - 1);
glTranslatef(p4.x, p4.y, p4.z);
glRotatef(-120.0, 0.0, 0.0, 1.0);
glTranslatef(-p4.x, -p4.y, -p4.z);
vonkoch(&p4, p2, n - 1);
glPopMatrix();
vonkoch(&p4, p2, n - 1);
}
Voir programmation d´une courbe de Von Koch dans la rubrique "programmation" (vonkoch.c).

La notion de dimension d´homothétie interne

        Le segment de droite [0,1] peut être pavé exactement par N sous-segments, chacun de longueur 1 / N. Chaque sous-segment se déduit du segment d´origine par l´homothétie de rapport:
        r(N) = 1 / N.

        De même le carré de côté 1 peut être pavé exactement par N = K2 sous-carrés de cote 1 / K. Chaque sous-carré se déduit du carré d´origine par l´homothétie de rapport:
        r(N) = 1 / K, soit r(N) = 1 / N1/2

        Un cube de côté 1 peut être pavé exactement par N = K3 sous-cubes dont le côté vaut 1 / K. Chaque sous-cube se déduit du cube d´origine par l´homothétie de rapport:
        r(N) = 1 / K, soit r(N) = 1 / N1/3.

        On remarque que si D est la dimension de l´espace de base (1 dans le premier cas, 2 dans le deuxième et 3 dans le troisième), le rapport d´homothétie a la même forme:
        r = 1 / N1/D ce qui donne:
        log(r) = log(1 / N1/D) = - log(N) / D soit encore:
        D = - log(N) / log(r), soit D = log(N) / log(1 / r).

        En appliquant cette formule à la courbe de Von Koch pour laquelle le rapport d´homothétie est r = 1 / 3 et N = 4, on obtient une dimension de:
        D = log(4) / log(3) qui n´est pas un entier mais un réel valant approximativement 1.261860.
        On peut aisément définir d´autres algorithmes de construction de courbes de Von Koch "généralisées" ayant d´autres dimensions non entières:


La notion de hasard

        La courbe de Von Koch n´est pas un bon modèle de côte parce qu´il est trop régulier. Une façon très utilisée en physique pour simuler la complexité naturelle est d´utiliser un modèle statistique. Mais, à la différence de la mécanique quantique ou de la thermodynamique, pour lesquels le hasard n´intervient qu´au niveau microscopique et reste négligeable au niveau macroscopique, en géométrie fractale le degré d´irrégularité reste constant à toutes les échelles, assurant ainsi une homothétie interne irrégulière. Voici par exemple une courbe de Von Koch "bruitée":



        Le mouvement brownien est une suite de petits déplacements indépendants et isotropes, il représente la trajectoire d´une molécule de gaz. La figure suivante reproduit l´échantillonnage des positions d´une particule soumise à des chocs moléculaires. Quand on double la fréquence d´échantillonnage, chaque saut est remplacé par deux sauts dont la somme des longueurs est supérieure. À la limite, pour une fréquence infinie, la longueur de la trajectoire est infinie, cependant elle occupe une surface nulle tout en remplissant le plan de façon uniforme, et a une dimension fractale de D = 2.



        Une telle courbe ne convient pas pour représenter une côte car, d´une part, elle est trop irrégulière et, d´autre part, elle présente de nombreux points doubles.

Un modèle fractal de terrain

        Une façon de générer le contour d´une côte est de couper une surface (représentant un terrain) par un plan horizontal (représentant la mer).
        Carpenter, à la suite de Mandelbrot, a donné un algorithme récursif très simple pour engendrer des simulations de terrains:
        Soit une facette triangulaire P1 P2 P3 à fractaliser.
        Calculer les milieux M12, M23 et M31 des côtés de la facette.
        Bruiter ces sommets en les déplaçant aleatoirement.
        Recommencer récursivement le procédé sur les quatre triangles M1M12M31, M12M2M23, M23M3M31 et M12M23M31.



        Pour fractaliser une surface maillée en triangles, il suffit de fractaliser chaque facette. Mais des discontinuités apparaissent sur un côté commun à deux facettes adjacentes puisque le milieu de ce côté a été bruité différemment de part et d´autre. Un moyen pour obtenir le même milieu bruité consiste à précalculer les aléatoires dans un tableau et à indexer les bruits par une formule ne dépendant que des numéros des extrémités des segments (par exemple leur somme).
        Voici un extrait du programme pour une facette triangulaire:

void fractal(Point *p1, Point *p2, Point *p3, long n,
long n1, long n2, long n3)
{
long n12, n23, n31;
float d;
float nor[3];
Point p12, p23, p31;
if(n == 0)
        {
        normale(p1, p2, p3, nor);
        glNormal3fv(nor);
        glBegin(GL_POLYGON);
        glVertex3f(p1->x, p1->y, p1->z);
        glVertex3f(p2->x, p2->y, p2->z);
        glVertex3f(p3->x, p3->y, p3->z);
        glEnd();
        return;
        }
n12 = n1 + n2; n23 = n2 + n3; n31 = n3 + n1;
milieu(p1, p2, &p12, n12);
milieu(p2, p3, &p23, n23);
milieu(p3, p1, &p31, n31);
fractal(p1, &p12, &p31, n - 1, n1, n12, n31);
fractal(p2, &p23, &p12, n - 1, n2, n23, n12);
fractal(p3, &p31, &p23, n - 1, n3, n31, n23);
fractal(&p12, &p23, &p31, n - 1, n12, n23, n31);
}
void milieu(Point *p1, Point *p2, Point *p12, long n)
{
float d;
n %= N_ALEA;
d = Coe * Alea[n] * longueur(p1, p2);
p12->x = 0.5 * (p1->x + p2->x);
p12->y = 0.5 * (p1->y + p2->y) + d;
p12->z = 0.5 * (p1->z + p2->z);
}
Voir programmation d´un fractal dans la rubrique "programmation" (fractal1.c). RC (fractal2.c). RC (fractal3.c).
        Voici une construction fractale pour des facettes quadrilatères, d´abord sans déplacements aléatoires des milieux, puis avec un déplacement.






        Et une image btenue en coupant la surface précédente par un plan horizontal: