Fichier lsys09.mp (figure 1) — Modifié le 19 Janvier 2002 à 23 h 29

lsys09.mp (figure 1)
Source

input tortue.mp; 
numeric d,iter; 
d = 6 ;
iter = 8;
color marron;
marron = (.5,.1,0);
 

def pas(expr x) = x * 1mm + .5mm enddef;
def epaisseur(expr x) = .3mm * x + .1mm enddef;
def couleur(expr x) = (x/iter)[green,marron] enddef;

vardef trace(expr a,b) = 
 draw a--b 
      withpen pencircle scaled e
      withcolor c; 
enddef; 
 
%% lsys9
%% règle A => GS[---fMA][++++B] 
%% règle B => C
%% règle C => GS[-fB][++A][++++A] 
%% règle f => ' ' % seulement exécutée au terme
%% règle G => HS 
%% règle H => HSS 
vardef A (expr n,m) = 
 save h,e,c;
 color c;
 h := pas(m);
 e := epaisseur(m);
 c := couleur(m);
 if m>0: 
   G(n,m-1); 
   avance(n,h,trace); 
   blop(n,n+1); 
   tourne(n+1,-3*d); 
   f(n+1,m-1); 
   retourne(n+1); 
   A(n+1,m-1); 
   blop(n,n+1); 
   tourne(n+1,4*d); 
   B(n+1,m-1); 
 fi 
enddef; 
 
vardef B (expr n,m) = 
 if m>0: 
   C(n,m-1); 
 fi 
enddef; 
 
vardef C (expr n,m) = 
 save h,e,c;
 color c;
 h := pas(m);
 e := epaisseur(m);
 c := couleur(m);
 if m>0: 
   G(n,m-1); 
   avance(n,h,trace); 
   blop(n,n+1); 
   tourne(n+1,-1*d); 
   f(n+1,m-1); 
   B(n+1,m-1); 
   blop(n,n+1); 
   tourne(n+1,2*d); 
   A(n+1,m-1); 
   blop(n,n+1); 
   tourne(n+1,4*d); 
   A(n+1,m-1); 
 fi 
enddef; 
 
vardef G (expr n,m) = 
 save h,e,c;
 color c;
 h := pas(iter-n);
 e := epaisseur(iter-n);
 c := couleur(iter-n);
 if m>0: 
   H(n,m-1); 
   avance(n,h,trace); 
 fi 
enddef; 
 
vardef H (expr n,m) = 
 save h,e,c;
 color c;
 h := pas(iter-n);
 e := epaisseur(iter-n);
 c := couleur(iter-n);
 if m>0: 
   H(n,m-1); 
   avance(n,h,trace); 
   avance(n,h,trace); 
 fi 
enddef; 
 
vardef f (expr n,m) = 
 if m=0: 
   fill (fullcircle scaled 3mm) shifted tortue_xy[n] withcolor .5[red,white]; 
   draw (fullcircle scaled 3mm) shifted tortue_xy[n] withcolor red; 
 fi 
enddef; 
 

beginfig(1); 
tortue(1,0,0,90,1); 
A(1,iter);
endfig;

end