Retour

Source : polygone.mp

polygone.mp
%% Un peu de couleurs
color couleurtrace; 
couleurtrace := (0.3,0.4,1); 
 
%% Procédure d'affectation 
def affecte(suffix p)(expr coords,nom) = 
   pair p.c; string p.n; 
   p.c := coords; 
   p.n := nom; 
enddef; 
 
%% Lecture des coordonnées 
vardef getcoordonnees suffix p = p.c enddef; 
 
%% Lecture du nom 
vardef getnom suffix p = p.n enddef; 
 
%% La « procédure » 
vardef placePolygone(text t) = 
   pair g,c__[] ; string n__[]; 
   n_:=0; 
   forsuffixes pp = t: 
     c__[incr n_] = getcoordonnees pp; 
     n__[n_] = getnom pp; 
   endfor 
   g := (0,0); 
   for i=1 upto n_: 
     g := g + c__[i]; 
   endfor 
   g := (1/n_)*g; 
   draw c__[1]--for i=2 upto n_:c__[i]--endfor cycle withcolor couleurtrace; 
   for i=1 upto n_: 
     draw c__[i] withpen pencircle scaled 2 withcolor couleurtrace; 
     label(n__[i],c__[i]+2*labeloffset*unitvector(c__[i]-g)); 
   endfor; 
enddef;
 
polygone.mp (figure 1)
beginfig(1);
 
% Affectation des points 
pair A,B,C,D; 
A := (0,0); 
B := (8cm,0); 
C := (6cm,4cm); 
D := (2cm,8cm); 
 
affecte(a,A,"A"); 
affecte(b,B,"B"); 
affecte(c,C,"C"); 
 
% Construction du triangle ABC avec sommets nommés 
placePolygone(a,b,c); 
 
transform T;
T := identity shifted (0,-2.5cm);
 
A := A transformed T; 
B := B transformed T; 
C := C transformed T; 
D := D transformed T; 
 
affecte(a,A,"A"); 
affecte(b,B,"B"); 
affecte(c,C,"C"); 
affecte(d,D,"D"); 
 
% Construction du quadrilatère ABCD avec sommets nommés 
couleurtrace := (1,0.6,0.1); 
placePolygone(a,b,c,d);
 
endfig;
end