%% Quelques fougères %% Jean-Michel Sarlat - Janvier 2002 %% -------------------------------------------------------- %% Les paramètres sont calculés à partir d'éléments trouvés %% dans : %% Chaos and Fractals %% (Peitgen,Jürgens,Saupe) %% Springer-Verlag 1992 %% ISBN 3-540-97903-4 %% -------------------------------------------------------- %% Les transformations transform t[]; %% Le point d'impact pair X; %% Définition brute des transformations affines %% -- la « partie » linéaire : %% [ r.cos(phi) -s.sin(psi) ] %% [ r.sin(phi) s.cos(psi) ] %% -- puis la translation de vecteur to def traffine(expr t,r,phi,s,psi,to) = origin transformed t = to; right transformed t = (r*cosd(phi),r*sind(phi))+to; up transformed t = (-s*sind(psi),s*cosd(psi))+to; enddef; beginfig(1); % unité u := 10cm; % nombre d'itérations (par paquets de 100) n := 80; % la tige traffine(t1,0,0,.27,0,(.5,0)); % feuille droite traffine(t2,.28255,119.46,.34546,-49.58,(.57,-.036)); % feuille gauche traffine(t3,.27961,52.56,.27785,50.70,(.408,.0893)); % pointe traffine(t4,.78165,-2.35,.73978,-2.63,(.1075,.27)); % initialisation de X X := origin transformed t1; % C'est parti ! for j = 1 upto n: for i=1 upto 100: r := uniformdeviate(1); if r <.02: X := X transformed t1; elseif r <.17: X := X transformed t2; elseif r <.3 : X := X transformed t3; else: X := X transformed t4; fi; draw X scaled u withpen pencircle scaled 1pt withcolor r[green,red]; endfor endfor endfig; beginfig(2); % unité u := 10cm; % nombre d'itérations (par paquets de 100) n := 80; % la tige traffine(t1,0,0,.27,0,(.5,0)); % feuille droite traffine(t2,.28255,119.46,.34546,-49.58,(.57,-.036)); % feuille gauche traffine(t3,.27961,52.56,.27785,50.70,(.408,.0893)); % pointe traffine(t4,.78165,-2.35,.73978,-2.63,(.1075,.27)); % initialisation de X X := origin transformed t1; % C'est parti ! for j = 1 upto n: for i=1 upto 100: r := uniformdeviate(1); if r <.02: X := X transformed t1; elseif r <.17: X := X transformed t2; elseif r <.3 : X := X transformed t3; else: X := X transformed t4; fi; draw X scaled u withpen pencircle scaled 1pt withcolor (.25+r*(1-r)*2)[green,red]; endfor endfor endfig; end