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
|