fractal suivant fractal précédent courbes 2D courbes 3D surfaces fractals polyèdres

FOUGÈRE DE BARNSLEY
Barnsley's fern, Barnsley-Farn


Fractal étudié par Barnsley en 1988.
Michael Barnsley ( - ) : mathématicien américain.

 
Code Maple pour obtenir la fougère ci-dessous par itérations successives des trois contractions et un "tronc" aléatoire.
© Alain ESCULIER, Robert FERRÉOL
alea:=x->evalf(rand()/1e12)/40+evalf(rand()/1e12)*I:
calcul:=proc(fougere,n)
  local resultat,tronc,feuille1,feuille2,feuille2b,feuille2c,feuille3,i: global a1,a2,a3,b1,b2,b3:
resultat:=convert(fougere,set):
 for i to n do
  feuille1:=map(x->-a1*conjugate(x)+b1,resultat):
  feuille2:=map(x->a2*x+b2,resultat):feuille2b:=map(x->a2*x+b2,feuille2):feuille2c:=map(x->a2*x+b2,feuille2b):
  feuille3:=map(x->a3*x+b3,resultat):
  tronc:= {seq(alea(),i=1..iquo(nops(resultat),2*n))}:
  resultat:= tronc union  feuille1 union  feuille2 union  feuille2b union  feuille2c union  feuille3  od:
end:
Digits:=4:r1:=0.25: r2:=0.85: r3:=r1:theta1:=evalf(Pi*0.4): theta2:=0.05: theta3:=-theta1:
a1:=evalf(r1*exp(I*theta1)):b1:=evalf(I):a2:=evalf(r2*exp(I*theta2)):b2:=b1:a3:=evalf(r3*exp(I*theta3)):b3:=b1:
fougere:=calcul([0,I],6):fougere:=seq(map(x->[Re(x),Im(x)],fougere[i]),i=1..nops(fougere)):
PLOT(POINTS(fougere,COLOUR(RGB,0,0.8,0),SYMBOL(POINT)),SCALING(CONSTRAINED),AXESSTYLE(NONE)); 

Le génie de Barnsley a été de considérer la fougère comme un arbre fractal à 3 branches :
 
Ici, nous avons pris deux similitudes directes de rapports 0.25 et d'angles 2 p/5 pour les deux branches de gauche et droite, et une similitude directe d'angle 0.05 et de rapport 0.85 pour la branche centrale légèrement incurvée.

On remarque que toutes les "feuilles" sont incurvées à gauche. Pour que les feuilles de gauche soient incurvées à droite, il suffit de composer la première similitude directe avec la symétrie adéquate.

Ce qui donne, en choisissant A(0,0) et B(0,1) pour les extrémités du "tronc", les similitudes de matrice complète :  avec r1 = r2 = 0.25  r3,=0.85 , q1 = - q2 = 2p/5, q3 =  0,05 , ei = 1 sauf e2 = -1 et hi = 1.

Contrairement aux arbres, l'obtention d'une fougère réaliste nécessiterait de pousser jusqu'à une trentaine d'itérations, ce qui est impossible avec des moyens normaux (330 = 2. 1014 segments...).

Le feuillage de la fougère (c'est-à dire l'attracteur des 3 contractions ci-dessus) s'obtient facilement par itération de ces 3 contractions) :

Pour faire apparaître les tiges, le "truc" de Barnsley est de prendre une quatrième contraction affine ramenant toute la fougère à son "tronc", de matrice e est très petit, voir nul et h est la hauteur de la fougère = , ce qui donne ici :
 
Exemple avec e = 0,01
Exemple avec e = 0,1 : l'imposture tronc = fougère est dévoilée !

 
 

Voici les 4 parties de la fougère semblables au tout.

On peut aussi prendre comme 4ème "contraction" une fonction qui donne un point choisi au hasard dans le segment [AB], ou mieux, dans un rectangle de médiane ce segment, pour obtenir une épaisseur. A ce moment, c'est le théorème du point fixe qui est en défaut, car ce n'est plus une contraction a proprement parler ; mais en pratique cela fonctionne très bien (c'est ce qui a été utilisé dans le programme donné en en-tête) :
 
Et voici ce que l'on obtient si on prend trois similitudes directes ! (les feuilles sont toutes incurvées à gauche)

 
Ci-contre (et en image d'entrée) la fougère officielle de Barnsley ; les trois contractions ont pour matrices complètes : 
(feuille de gauche),
(feuille de droite, non accrochée en haut du "tronc")
(feuille centrale)
("tronc").

Voir aussi :

http://www.math.utah.edu/~bowman/schmitt/ColFern.html

http://perso.wanadoo.fr/charles.vassallo/fr/art/ifs.html
 
 
Fougères fractales en 3d

Et voilà une vraie !

 
 
fractal suivant fractal précédent courbes 2D courbes 3D surfaces fractals polyèdres

© Robert FERRÉOL, Jacques MANDONNET 2002