Retour

Source : tortue.mp

tortue.mp
%% ============================================================================
%% tortue.mp
%% ============================================================================
%% Jean-Michel Sarlat (http://melusine.eu.org/syracuse/metapost/)
%% Version 1 - 22 février 2005
 
%% Les tables (chemin,point actuel,orientation,direction)
path tortue_p[];
pair tortue_xy[] ;
numeric tortue_m[];
numeric tortue_a[];
 
%% L'enregistrement d'une tortue (initialisation)
def tortue(expr n, x , y , a , m ) =
    tortue_xy[n] := (x,y) ;
    tortue_a[n] := a ;
    tortue_m[n] := m ;
    tortue_p[n] := (x,y);
enddef;
 
%% La tortue <n> se dédouble, <m> à cet instant se superpose à <n>
def blop(expr n,m) =
    tortue(m,(xpart tortue_xy[n]),(ypart tortue_xy[n]),tortue_a[n],tortue_m[n]);
enddef;
 
%% La tortue tourne (sur place)
def tourne(expr n, a ) =
    tortue_a[n] := tortue_a[n] + a * tortue_m[n];
enddef;
 
%% La tortue se retourne, sa gauche est notre droite !
def retourne(expr n ) =
    tortue_m[n] := -tortue_m[n];
enddef;
 
%% La tortue avance d'une certaine distance et fait ce qu'on lui demande
vardef avance(expr n,l)(suffix m) =
    pair position;
    position =  tortue_xy[n] + ((l,0) rotated tortue_a[n]);
    m(tortue_xy[n],position);
    tortue_xy[n] := position;
    tortue_p[n] := tortue_p[n]--position;
enddef;
 
%% Remplissage du polygone circonscrit par le chemin de la tortue
vardef remplis(expr n,c) =
    fill tortue_p[n]--cycle withcolor c;
enddef;
 
%% Une chose que la tortue peut faire en se déplaçant : laisser une trace !
vardef trace(expr a,b) =
    draw a--b;
enddef;