![]() |
Il y a quelques années, j'avais essayé de tracer certains des dessins que l'on rencontre en géométrie du triangle. Devant l'absence de logiciel premettant ce genre de prouesses, j'avais écrit à cet effet une petite bibliothèque en Python, générant du code PSTricks pour LaTeX. Il suffit de décrire la figure, avec le moins de coordonnées possible, en utilisant à loisir les transformations usuelles de la géométrie (translations, rotations, homothéties, inversions, etc.) et ses constructions (parallèle, perpendiculaire, intersection). Il est même possible de faire un peu de géométrie hyperbolique. À titre d'exemple, la figure ci-dessus est obtenue de la manière suivante.
# Le cercle des neuf points, aussi connu sous le nom de # cercle d'Euler. def triangle(): A = Point(0,0) B = Point(10,0) C = Point(1,7) return(A,B,C) def pied(A,B,C): D = perpendiculaire(Droite(B,C), A) return intersection(D, Droite(B,C)) def pieds_des_hauteurs(A,B,C): P = pied(A,B,C) Q = pied(B,C,A) R = pied(C,A,B) return(P,Q,R) def centre_de_gravite(A,B,C): return isobarycentre(A,B,C) def centre_cercle_circonscrit(A,B,C): return cercle_circonscrit(A,B,C).centre (x,y,z) = triangle() u = milieu(y,z) v = milieu(z,x) w = milieu(x,y) (p,q,r) = pieds_des_hauteurs(x,y,z) h = orthocentre(x,y,z) l = milieu(x,h) m = milieu(y,h) n = milieu(z,h) o = centre_cercle_circonscrit(x,y,z) g = centre_de_gravite(x,y,z) O = milieu(h,o) Segment(x,y).trace() Segment(y,z).trace() Segment(z,x).trace() Segment(x,p).trace() Segment(y,q).trace() Segment(z,r).trace() Segment(h,o).trace() Angle(z,r,y).trace("", 0, "droit") Angle(x,p,y).trace("", 0, "droit") Angle(y,q,z).trace("", 0, "droit") Cercle(O, distance(O,l)).trace("\\mathscr C", math.pi/4, "epais", "rouge") x.trace("x") y.trace("y") z.trace("z", [+1,0]) u.trace("u", [0.7, 1]) v.trace("v", [1, -0.7]) w.trace("w", [-0.5, 1]) l.trace("l", [-0.7,0]) m.trace("m", [1,-1]) n.trace("n", [-0.3,1]) p.trace("p", [+0.8,+0.7]) q.trace("q", [0.2,-1]) r.trace("r") h.trace("h", [-1, +0.6]) o.trace("o") O.trace("O", [-1, 0], "plein") g.trace("g") fini()La documentation comprend d'autres exemples. Si vous êtes intéressé, vous pouvez télécharger le tout.
J'ai depuis abandonné ce projet : il y a des manques et probablement aussi des bugs.
![]() |
![]() |
![]() |
![]() |
![]() |