![]() |
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.
![]() |
![]() |
![]() |
![]() |
![]() |