Source
``````
input geometriesyr16;

vardef carreext(expr aa,bb,typehach,typeecrit,ecrit)=
save \$;
picture \$;
\$=image(
if typehach=1:
trace hachurage(polygone(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb),60,0.2,0);
elseif typehach=2:
trace hachurage(polygone(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb),150,0.2,0);
elseif typehach=3:
trace hachurage(polygone(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb),60,0.2,0);
trace hachurage(polygone(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb),150,0.2,0);
fi;
trace chemin(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb);
remplis cercles(iso(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb),(sqrt(2)/4)*abs(aa-bb)) withcolor blanc;
trace cercles(iso(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb),(sqrt(2)/4)*abs(aa-bb));
if typeecrit=0:
label(btex \dots etex,iso(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb));
label(btex \dots etex,1.25[iso(aa,bb),symetrie(iso(aa,bb),iso(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb))]);
elseif typeecrit=1:
label(btex \dots etex,iso(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb));
label(ecrit,1.25[iso(aa,bb),symetrie(iso(aa,bb),iso(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb))]);
elseif typeecrit=2:
label(ecrit,iso(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb));
label(btex \dots etex,1.25[iso(aa,bb),symetrie(iso(aa,bb),iso(aa,rotation(bb,aa,-90),rotation(aa,bb,90),bb))]);
fi;
);
\$
enddef;

figure(-3u,-3u,5u,8u);
u:=6mm;
pair A,B,C;
A=u*(1,1);
B-A=u*(3,0);
C-A=u*(0,2);
trace polygone(A,B,C);
trace codeperp(C,A,B,5);
trace carreext(A,B,1,1,btex 6 etex);
trace carreext(B,C,3,0,btex etex);
trace carreext(C,A,2,1,btex 4 etex);
fin;
u:=1cm;
figure(-3u,-3u,6u,8u);
u:=6mm;
pair A,B,C;
A=u*(1,1);
B-A=u*(3.5,0);
C=pointarc(cercledia(A,B),55);
trace polygone(A,B,C);
trace codeperp(A,C,B,5);
trace carreext(A,B,3,1,btex 10 etex);
trace carreext(B,C,1,0,btex etex);
trace carreext(C,A,2,1,btex 8 etex);
fin;
u:=1cm;
figure(-3u,-3u,7u,8u);
u:=6mm;
pair A,B,C;
A=u*(1,3);
B-A=u*(3,0);
C-A=u*(0,-2);
trace polygone(A,B,C);
trace codeperp(C,A,B,5);
trace carreext(B,A,1,1,btex 5 etex);
trace carreext(C,B,3,1,btex 8 etex);
trace carreext(A,C,2,0,btex  etex);
fin;
u:=1cm;
figure(-3u,-3u,7u,8u);
u:=6mm;
pair A,B,C;
A=u*(1,3);
B-A=u*(3,0);
C-A=u*(0,-2);
trace polygone(A,B,C);
trace codeperp(C,A,B,5);
trace carreext(B,A,1,1,btex 6 etex);
trace carreext(C,B,3,1,btex 7 etex);
trace carreext(A,C,2,0,btex  etex);
fin;
u:=1cm;
figure(-3u,-3u,5u,8u);
u:=6mm;
pair A,B,C;
A=u*(1,1);
B-A=u*(2,0);
C-A=u*(0,3);
trace polygone(A,B,C);
trace codeperp(C,A,B,5);
trace carreext(A,B,1,1,btex 5 etex);
trace carreext(B,C,3,1,btex 7 etex);
trace carreext(C,A,2,0,btex  etex);
fin;
u:=1cm;
figure(-3u,-3u,5u,8u);
u:=6mm;
pair A,B,C;
A=u*(1,1);
B-A=u*(4,0);
C=pointarc(cercledia(A,B),300);
trace polygone(A,B,C);
trace codeperp(A,C,B,5);
trace carreext(B,A,3,2,btex 81 etex);
trace carreext(C,B,2,2,btex 64 etex);
trace carreext(A,C,1,0,btex  etex);
fin;
end``````