%% 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; 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