Pythagoras Proof
Author: Mike May, S.J.
Date: September 5, 2007

Drag the steps slider to be taken through a proof of the pythagorean theorem

Step 0 - Move the points around and convince
yourself the theorem remains true for all right
triangles.

Step 1 - Construct a square corresponding
to each side of the triangle

Step 2 - Construct the rectangle from 
the two small squares

Step 3 - Divide the rectangle into two
triangles with a diagonal starting with the 
base of the triangle.

Step 4 - Show the new triangles are congruent 
to the original triangle, so c and c4 have the
same length.

Step 6 - Show that sliding the parallelograms 
along a perpendicular to c does not 
change their areas.

Step 7 - Show the two squares have the 
same area

Step 5 - Show that sliding a rectangle into 
a parallelogram does not change the area 
of the paralleogram.

Steps = 0 (slider from 0 to 7, step 0.0050)
S5 = Min(Max[0, Steps - 5], 1)
C = (5, 2)
A = (1, 2)
d = Circle(C, A)
b = Segment(A, C)
LineA = OrthogonalLine(C, b)
LineB3 = OrthogonalLine(C, LineA)
C2, X1 = Intersect(d, LineA)
LineB1 = OrthogonalLine(C2, LineA)
B = Point(LineA)
k = Circle(C, B)
C1, X2 = Intersect(k, LineB3)
LineA3 = OrthogonalLine(C1, LineB3)
M = Intersect(LineA3, LineB1)
c = Segment(A, B)
LineA1 = OrthogonalLine(A, b)
A2 = Intersect(LineA1, LineB1)
LineB2 = OrthogonalLine(B, LineA)
B1 = Intersect(LineB2, LineA3)
LineC1 = OrthogonalLine(B, c)
LineC2 = OrthogonalLine(A, c)
p = Circle(A, B)
X3, A3 = Intersect(p, LineC2)
LineC4 = OrthogonalLine(A3, LineC2)
B3 = Intersect(LineC4, LineC1)
a = Segment(C, B)
c3 = Segment(A, A3)
c1 = Segment(A3, B3)
c2 = Segment(B3, B)
a2 = Segment(B, B1)
a1 = Segment(B1, C1)
b2 = Segment(C, C2)
a3 = Segment(C1, C)
b3 = Segment(A, A2)
b1 = Segment(A2, C2)
c4 = Segment(C, M)
b4 = Segment(C1, M)
a4 = Segment(M, C2)
V1: (1 - S5) C1 + S5 M
V2: V1 + Vector[C1, B1]
poly1, a6, d1, a5, d2 = Polygon(C, B, V2, V1)
V3: (1 - S5) C2 + S5 M
V4: V3 + Vector[C2, A2]
poly2, d3, b7, d4, b6 = Polygon(A, V4, V3, C)
LineC3 = Line(C, M)
M1 = Intersect(c, LineC3)
S6 = Min(Max[0, Steps - 6], 1)
V5: (1 - S6) C + S6 M1
V6: V5 + Vector[C, M]
poly3, d5, d7, c5, d6, d8, c6 = Polygon(A, V5, B, V2, V6, V4)
T1: "Length a = " + a + "
Length b = " + b + "
Length c = " + c
TextList: {Text0, Text1, Text2, Text3, Text4, Text5, Text6, Text7}
MText: "" + (Element[TextList, 1 + floor(Steps)])