Arbre pythagoricien
Author: Régis Goiffon (IREM de Lyon)
Date: 4 Juillet 2013

Suite à un article dans Images des Mathématiques. Un triangle rectangle donne lieu à deux petits carrés, de même aire au total qu'un troisième grand carré sur l'hypothénuse, c'est le théorème de Pythagore. On peut placer un triangle rectangle semblable le long de chaque arête des petits carrés et répéter le processus récursivement. Chaque étape compte deux fois plus de petits carrés que l'étape précédente, de même aire totale.

Bougez (lentement) les trois points définissant le triangle rectangle de base.

A = (-1.5069099393387726, -2.8746005197708526)
B: A + (1, 0)
C = Point(Circle[(A + B) / 2, Distance[A, B] / 2])
z_1: (C - A) / (B - A)
z_2: (C - B) / (A - B)
liste1 = Carre(A, C)
liste2 = Carre(x(C) + ί * y(C), B)
liste3 = Join({liste1, liste2})
liste4 = Sequence({Element[liste3, 2 * k - 1], Pyth[Element[liste3, 2 * k - 1], Element[liste3, 2 * k], z_1], Element[liste3, 2 * k]}, k, 1, Length[liste3] / 2)
liste5 = Flatten(Sequence[{Carre[Element[Element[liste4, k], 1], Element[Element[liste4, k], 2]], Carre[Element[Element[liste4, k], 2], Element[Element[liste4, k], 3]]}, k, 1, Length[liste4]])
liste6 = Sequence({Element[liste5, 2 * k - 1], Pyth[Element[liste5, 2 * k - 1], Element[liste5, 2 * k], z_1], Element[liste5, 2 * k]}, k, 1, Length[liste5] / 2)
liste7 = Flatten(Sequence[{Carre[Element[Element[liste6, k], 1], Element[Element[liste6, k], 2]], Carre[Element[Element[liste6, k], 2], Element[Element[liste6, k], 3]]}, k, 1, Length[liste6]])
poly1, a, b, c, d, z_3, z_4 = Polygon(B, A, 4)
p1 = Sequence(Polygon[Element[liste3, 2 * k], Element[liste3, 2 * k - 1], 4], k, 1, Length[liste3] / 2)
p2 = Sequence(Polygon[Element[liste5, 2 * k], Element[liste5, 2 * k - 1], 4], k, 1, Length[liste5] / 2)
p3 = Sequence(Polygon[Element[liste7, 2 * k], Element[liste7, 2 * k - 1], 4], k, 1, Length[liste7] / 2)
liste8 = Sequence({Element[liste7, 2 * k - 1], Pyth[Element[liste7, 2 * k - 1], Element[liste7, 2 * k], z_1], Element[liste7, 2 * k]}, k, 1, Length[liste7] / 2)
liste9 = Flatten(Sequence[{Carre[Element[Element[liste8, k], 1], Element[Element[liste8, k], 2]], Carre[Element[Element[liste8, k], 2], Element[Element[liste8, k], 3]]}, k, 1, Length[liste8]])
p4 = Sequence(Polygon[Element[liste9, 2 * k], Element[liste9, 2 * k - 1], 4], k, 1, Length[liste9] / 2)
liste10 = Sequence({Element[liste9, 2 * k - 1], Pyth[Element[liste9, 2 * k - 1], Element[liste9, 2 * k], z_1], Element[liste9, 2 * k]}, k, 1, Length[liste9] / 2)
liste11 = Flatten(Sequence[{Carre[Element[Element[liste10, k], 1], Element[Element[liste10, k], 2]], Carre[Element[Element[liste10, k], 2], Element[Element[liste10, k], 3]]}, k, 1, Length[liste10]])
p5 = Sequence(Polygon[Element[liste11, 2 * k], Element[liste11, 2 * k - 1], 4], k, 1, Length[liste11] / 2)
liste12 = Sequence({Element[liste11, 2 * k - 1], Pyth[Element[liste11, 2 * k - 1], Element[liste11, 2 * k], z_1], Element[liste11, 2 * k]}, k, 1, Length[liste11] / 2)
liste13 = Flatten(Sequence[{Carre[Element[Element[liste12, k], 1], Element[Element[liste12, k], 2]], Carre[Element[Element[liste12, k], 2], Element[Element[liste12, k], 3]]}, k, 1, Length[liste12]])
p6 = Sequence(Polygon[Element[liste13, 2 * k], Element[liste13, 2 * k - 1], 4], k, 1, Length[liste13] / 2)
liste14 = Sequence({Element[liste13, 2 * k - 1], Pyth[Element[liste13, 2 * k - 1], Element[liste13, 2 * k], z_1], Element[liste13, 2 * k]}, k, 1, Length[liste13] / 2)
liste15 = Flatten(Sequence[{Carre[Element[Element[liste14, k], 1], Element[Element[liste14, k], 2]], Carre[Element[Element[liste14, k], 2], Element[Element[liste14, k], 3]]}, k, 1, Length[liste14]])
p7 = Sequence(Polygon[Element[liste15, 2 * k], Element[liste15, 2 * k - 1], 4], k, 1, Length[liste15] / 2)
liste16 = Sequence({Element[liste15, 2 * k - 1], Pyth[Element[liste15, 2 * k - 1], Element[liste15, 2 * k], z_1], Element[liste15, 2 * k]}, k, 1, Length[liste15] / 2)
liste17 = Flatten(Sequence[{Carre[Element[Element[liste16, k], 1], Element[Element[liste16, k], 2]], Carre[Element[Element[liste16, k], 2], Element[Element[liste16, k], 3]]}, k, 1, Length[liste16]])
p8 = Sequence(Polygon[Element[liste17, 2 * k], Element[liste17, 2 * k - 1], 4], k, 1, Length[liste17] / 2)

Tool: Carre
Input: z_3, z_4
Output: seg'

seg': {z_3 * (1 - ί) + ί * z_4, -ί * z_3 + (1 + ί) * z_4}

Tool: Pyth
Input: z_4, z_5, z_1
Output: z_3

z_3: z_4 * (1 - z_1) + z_1 * z_5