Kathetensatz: 

1. Parallele a_1 zur Dreiecksseite a durch Q

Beweis:

2. G_1 ist der Schnittpunkt von a_1 mit der Höhe h_c

3. Überführe das Rechteck G Q B F durch Scherung
    in das Parallelogramm G_1 Q B C.
   (Ziehe dazu den Schieberegler S_1 von 0 nach 1).

   Jedes Parallelogramm B Q G_x F_x besitzt denselben
   Flächeninhalt wie das Rechteck B Q G F.

4. Parallele b_1 zur Dreiecksseite b durch B

5. Q_1 ist der Schnittpunkt von b_1 mit a_1

6. Überführe das Paralllelogramm G_1 Q B C durch Scherung
    in das Parallelogramm G_2 Q_1 B C.
   (Ziehe dazu den Schieberegler S_2 von 0 nach 1).

7. Wegen der Konstruktion von a_1 parallel zu a
    und b_1 parallel zu b ist das Parallelogramm Q_1 G_2 C B
    offensichtlich ein Rechteck.

8. Ferner ist nach Vor. die Strecke von B nach A so lang wie
    die Strecke von B nach Q. Da außerdem nach Konstr. der 
    Winkel α gleich Winkel α_1 und der Winkel β gleich 
    dem Winkel β_1 ist, sind nach dem WSW-Satz die Dreiecke
    ABC und QBQ_1 kongruent, also ist a genauso lang wie die 
    Strecke BQ_1. Folglich ist C B Q_1 G_2 ein Quadrat.   

In einem rechtwinkligen Dreieck mit Hypotenuse c gilt:
Das Rechteck (hier gelb) mit den Seitenlängen p und c besitzt denselben 
Flächeninhalt wie das Quadrat (hier braun) über der Kathete a :
a² = p * c  (Bezeichnungen siehe Grafik)

alpha = 36.9 (slider from 0 to 90, step 0.1)
A = (0, 0)
Hypotenuse = 10 (slider from 4 to 11, step 0.1)
B: (Hypotenuse, 0)
CX = Rotate(B, alpha 3.141592653589793 / 180, A)
Thales = Semicircle(A, B)
C0, C = Intersect(Thales, Ray[A, CX])
B_z: B + 1 / 2 Vector[A, C]
S_1 = 0 (slider from 0 to 1, step 0.05)
poly1, c, a, b = Polygon(A, B, C)
h_c = OrthogonalLine(C, c)
F = Intersect(h_c, c)
P: (0, -c)
Q: (c, -c)
a_1 = Line(Q, a)
G_1 = Intersect(a_1, h_c)
G = Intersect(h_c, Segment[P, Q])
v_1 = Vector(G, G_1)
F_x: F + S_1 v_1
G_x: G + S_1 v_1
M_c: (Hypotenuse / 2, 0)
poly2, c_3, c_4, c_1, c_2 = Polygon(F, G, Q, B)
poly3, l_1, l_2, l_3, l_4 = Polygon(Q, B, F_x, G_x)
α = Angle(B, A, CX)
b_1 = Ray(B_z, B)
Q_1 = Intersect(b_1, a_1)
G_2 = Intersect(a_1, Line[A, C])
w_1 = Vector(Q, Q_1)
S_2 = 0 (slider from 0 to 1, step 0.05)
Q_y: Q + S_2 w_1
G_y: G_1 + S_2 w_1
poly4, k_2, k_1, k_3, k_4 = Polygon(C, B, Q_y, G_y)
Schritte = 0 (slider from 0 to 8, step 1)
poly5, n_2, n_4, n_1, n_3 = Polygon(C, B, Q_1, G_2)
p = Segment(F, B)
q = Segment(A, F)
r = CircleArc(B, A, Q)
T33: "Gehe zurück zu Schritte = 3 und 
ziehe S_1 von " + S_1 + " auf 1 ! "
T36: "Gehe zurück zu Schritte = 6 und 
ziehe S_2 von " + S_2 + " auf 1 ! "
β = Angle(C, B, A)
β_1 = Angle(Q_1, B, Q)
α_1 = Angle(B, Q, Q_1)
a_x = Segment(B, C)
a_y = Segment(B, Q_1)
γ = Angle(A, C, B)
δ = Angle(Q_1, G_2, C)