GÉOMÉTRIE FRACTALE
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: