Démonstration du Théorème de Pythagore
Author: Pascal Lapalme
Date: 18 février 2006

À l'aide de votre souris, déplacez le curseur afin de changer la position des 5 pièces du puzzle. Cette reconstitution du grand carré permet d'affirmer que : a² + b² = c². Relation connue sous le nom de « Théorème de Pythagore ».

Pour chacune des 5 pièces on commence par faire une symétrie, suivie d'une translation. Vous pouvez déplacer les points A et B de la figure ci-dessus pour modifier les dimensions du triangle ABC et voir l'évolution du découpage. Que se passe-t-il lorsque le triangle ABC est rectangle et isocèle ?

Curseur = 0 (slider from 0 to 10, step 0.01)
G_1 = Point(xAxis)
C = Intersect(xAxis, yAxis)
d_2 = Ray(C, G_1)
F_1 = Point(yAxis)
c_2 = Ray(C, F_1)
mv_4 = If(Curseur < 3.0, 0.0, If[Curseur < 4.0, Curseur - 3.0, 1.0])
mv_3 = If(Curseur < 2.0, 0.0, If[Curseur < 3.0, Curseur - 2.0, 1.0])
A = Point(c_2)
B = Point(d_2)
q = Circle(A, B)
p = Circle(C, A)
mv_2 = If(Curseur < 1.0, 0.0, If[Curseur < 2.0, Curseur - 1.0, 1.0])
mv_1 = If(Curseur < 1.0, Curseur, 1.0)
P, a, c, b = Polygon(C, B, A)
V = Intersect(p, a, 2.0)
i = OrthogonalLine(A, c)
M = Intersect(q, i, 1.0)
r = OrthogonalLine(M, i)
h = OrthogonalLine(B, c)
N = Intersect(h, r)
w = Vector(V, N)
d = OrthogonalLine(C, b)
G, H = Intersect(p, d)
l = OrthogonalLine(G, d)
e = OrthogonalLine(A, b)
I = Intersect(l, e)
c_1 = Circle(A, I)
T = Intersect(c_1, e, 2.0)
u = Vector(I, T)
g = OrthogonalLine(B, d)
K = Intersect(e, g)
v = Vector(T, K)
f = OrthogonalLine(C, a)
k = Circle(B, b)
D, E = Intersect(k, d)
j = OrthogonalLine(E, a)
F = Intersect(e, j)
m = Line(G, F)
J = Intersect(m, b)
n = Line(J, d)
L = Intersect(g, n)
s = Line(L, E)
t = Circle(C, B)
O = Intersect(t, f, 1.0)
a_1 = OrthogonalLine(O, f)
Q = Intersect(g, a_1)
R = Intersect(f, s)
S = Intersect(c, j)
mv_5 = If(Curseur < 4.0, 0.0, If[Curseur < 5.0, Curseur - 4.0, 1.0])
mv_6 = If(Curseur < 5.0, 0.0, If[Curseur < 6.0, Curseur - 5.0, 1.0])
mv_7 = If(Curseur < 6.0, 0.0, If[Curseur < 7.0, Curseur - 6.0, 1.0])
mv_8 = If(Curseur < 7.0, 0.0, If[Curseur < 8.0, Curseur - 7.0, 1.0])
P2: G + mv_1 * u + mv_2 * v
P1: I + mv_1 * u + mv_2 * v
P3: J + mv_2 * v
P4: A + mv_2 * v
U, p1, p2, p3, p4 = Polygon(P1, P2, P3, P4)
P5: G + mv_3 * u + mv_4 * w
P6: C + mv_4 * w
P7: J + mv_4 * w
W, p7, p5, p6 = Polygon(P5, P6, P7)
d_1 = Circle(C, E)
Y = Intersect(d_1, d, 2.0)
z = Vector(E, Y)
u_1 = Vector(Y, A)
P8: E + mv_5 * z + mv_6 * u_1
P9: C + mv_6 * u_1
P10: R + mv_6 * u_1
Z, p10, p8, p9 = Polygon(P8, P9, P10)
e_1 = Circle(B, E)
A_1 = Intersect(e_1, d, 2.0)
v_1 = Vector(E, A_1)
w_1 = Vector(A_1, N)
P11: E + mv_7 * v_1 + mv_8 * w_1
P12: B + mv_8 * w_1
P13: Q + mv_8 * w_1
P_1, p13, p11, p12 = Polygon(P11, P12, P13)
mv_9 = If(Curseur < 8.0, 0.0, If[Curseur < 9.0, Curseur - 8.0, 1.0])
mv10 = If(Curseur < 9.0, 0.0, If[Curseur < 10.0, Curseur - 9.0, 1.0])
b_1 = Line(O, Q)
f_1 = Circle(C, E)
B_1 = Intersect(f_1, d, 2.0)
g_1 = Circle(O, Q)
C_1 = Intersect(g_1, b_1, 2.0)
z_1 = Vector(E, B_1)
h_1 = Vector(Q, C_1)
i_1 = Vector(B_1, M)
P14: E + mv_9 * z_1 + mv10 * i_1
P15: Q + mv_9 * h_1 + mv10 * i_1
P16: O + mv10 * i_1
P17: R + mv10 * i_1
Q_1, p14, p15, p16, p17 = Polygon(P14, P15, P16, P17)
j_1 = Segment(A, M)
k_1 = Segment(M, N)
l_1 = Segment(N, B)
m_1 = Segment(B, Q)
n_1 = Segment(Q, O)
p_1 = Segment(O, C)
q_1 = Segment(C, G)
r_1 = Segment(G, I)
s_1 = Segment(I, A)
t_1 = Segment(C, A)
a_2 = Segment(A, B)
b_2 = Segment(B, C)
D_1 = (-3.1333333333333333, 10)
E_1 = (-1.2666666666666666, 10)
u_2 = Vector(D_1, E_1)