MetaPost Présentation des sources Retour à la page précédente Archive (source + images) Fichier au format texte pour télécharger Imprimer le document sans le menu !

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