vardef Label(expr TeXt,PoInT,AnGlE)=
label(TeXt,point(arctime((AnGlE/360)*arclength (fullcircle scaled (5*labeloffset) shifted PoInT))
    of (fullcircle scaled (5*labeloffset) shifted PoInT)) of (fullcircle scaled (5*labeloffset)
    shifted PoInT))
enddef;

%d'après plain.mp
vardef DotLabel(expr TeXt,PoInT,AnGlE)=
  Label(TeXt,PoInT,AnGlE);
  draw PoInT withpen pencircle scaled dotlabeldiam;
enddef;

beginfig(1);
  pair A,B,C,D;
  A=(1cm,1cm);
  B=(3cm,1cm);
  C=(2cm,4cm);
  D-C=B-A;
  drawoptions(withcolor 0.9*white);
  draw (fullcircle scaled (5*labeloffset) shifted A);
  draw (fullcircle scaled (5*labeloffset) shifted B);
  draw (fullcircle scaled (5*labeloffset) shifted C);
  draw (fullcircle scaled (5*labeloffset) shifted D);
  drawoptions();
  draw A--B;
  drawarrow C--D;
  Label(btex A etex,A,60);
  Label(btex B etex,B,125);
  DotLabel(btex C etex,C,210);
  DotLabel(btex D etex,D,300);
endfig;
end