prologues := 2 ; defaultfont := "cmmi10" ; beginfig(1) path cercle ; path triangle ; diametre = 6 cm ; rayon = diametre / 2 ; cercle = fullcircle scaled diametre ; draw cercle ; % les sommets du triangle z1 = (rayon,0) rotated 11.5 ; z2 = z1 rotated 140 ; z3 = z2 rotated 75 ; % le triangle triangle = z1 -- z2 -- z3 -- cycle ; draw triangle ; fill triangle withcolor 0.85 white ; labeloffset := 9bp ; dotlabel.urt("A",z1) ; dotlabel.lft("B",z2) ; dotlabel.llft("C",z3) ; labeloffset := 3bp ; % la macro de projection orthogonale de a sur (bc) def projete(expr a,b,c) = begingroup save $ ; pair $ ; $ = whatever[b,c] ; ($ - a) rotated 90 shifted b = whatever[b,c] ; $ endgroup enddef ; % l'hypocycloïde de Steiner longueur = length cercle ; pair m[] ; pair p,q ; N = 250 ; % nombre de points sur le cercle for i = 1 upto N : p := projete(point (longueur*i/N) of cercle,z1,z2) ; q := projete(point (longueur*i/N) of cercle,z2,z3) ; m[i] = whatever[p,q] ; m[i-1] = whatever[p,q] ; endfor ; p := projete(point 0 of cercle,z1,z2) ; q := projete(point 0 of cercle,z2,z3) ; m[0] = whatever[p,q] ; draw m[0] for i = 1 upto N - 1 : .. m[i] endfor .. cycle ; % tracé d'une droite de Simpson particulière z0 = (rayon,0) rotated 60 ; dotlabel.urt("M",z0) ; z4 = projete(z0,z1,z2) ; z5 = projete(z0,z2,z3) ; draw (-5)[z4,z5]--5[z4,z5] dashed evenly ; % pour éviter tout débordement de la page clip currentpicture to (-7cm,-7cm)--(7cm,-7cm)--(7cm,7cm)--(-7cm,7cm)--cycle ; endfig ; end