Fichier lsys09.mp (figure 1) — Modifié le 19 Janvier 2002 à 23 h 29
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