Cotation en forme d'arc de cercle.

En feuilletant mes vieux livres de géométrie, je me suis rendu compte que c'était une forme courante de cotation. Alors, hop, c'était parti pour une petite macro Metapost.

cotationarccercle.mp [ source brut ]

 input geometriesyr16;
 
 vardef cotationarc(expr aaa,bbb,decal,ecart,sens,texte)=%pour le texte sens=1 ou -1
   save ty;
   picture ty;
   pair mnp,ctr;
   mnp=iso(aaa,bbb)+decal*unitvector(rotation(bbb,iso(aaa,bbb),90)-iso(aaa,bbb));
   ctr=CentreCercleC(aaa,bbb,mnp);
   path cts[];
   cts0=arccercle(bbb,aaa,ctr);
   cts1=arccercle(bbb,cts0 intersectionpoint perpendiculaire(aaa,bbb,iso(aaa,bbb)),ctr);
   cts2=arccercle(cts0 intersectionpoint perpendiculaire(aaa,bbb,iso(aaa,bbb)),aaa,ctr);
   ty=image(
     trace subpath(0,arctime(arclength cts1*(1-(ecart/10))) of cts1) of cts1 dashed evenly;
     trace subpath(0,arctime(arclength cts2*(1-(ecart/10))) of reverse(cts2)) of reverse(cts2) dashed evenly;
     if sens=1:
       label(texte rotated (angle(bbb-aaa)),mnp);
     else:
       label(texte rotated (angle(bbb-aaa)+180),mnp);
     fi;
     );
   ty
 enddef;
 
 
Conversion au format PDF de cotationarccercle.1
 figure(0,0,10u,10u);
 pair A,B,C,D;
 A=u*(1,6);
 B-A=u*(3,-5);
 C=u*(7,7);
 D-C=u*(-1,-6);
 trace cotationarc(A,B,5mm,1.5,1,btex 2~cm etex);
 trace cotationarc(D,C,5mm,1.5,1,btex 3~cm etex);
 trace segment(A,B);
 trace marquesegment(A,B);
 trace segment(C,D);
 trace marquesegment(C,D);
 nomme.ulft(A);
 nomme.lrt(B);
 nomme.urt(C);
 nomme.llft(D);
 fin;
 
Conversion au format PDF de cotationarccercle.2
 figure(0,0,10u,10u);
 pair A,B,C;
 trace triangleqcq(A,B,C);
 trace cotationarc(B,A,6mm,2.25,-1,btex $a$ etex);
 trace cotationarc(C,B,6mm,2.25,1,btex $b$ etex);
 trace cotationarc(A,C,6mm,2.25,1,btex $c$ etex);
 nomme.llft(A);
 nomme.lrt(B);
 nomme.top(C);
 fin;
 end