G.79 Pythagorean theorem — Code¶
In a right-angled triangle, the square on the hypotenuse equals the sum of the squares on the two legs (Pythagorean Theorem).
"""Programmatic construction for Book I, Proposition 47 (I.47).
In right-angled triangles the square on the side subtending the right angle is
equal to the squares on the sides containing the right angle.
"""
from __future__ import annotations
from geometor.model import Model
def construct_g1() -> Model:
"""Construct the windmill figure for Book I, Proposition 47 using geometor.model."""
model = Model("I.47")
# 1. Right-angled triangle ABC with right angle BAC
A = model.set_point(118, -133, classes=["given"], ID="A")
B = model.set_point(91, -186, classes=["given"], ID="B")
C = model.set_point(222, -186, classes=["given"], ID="C")
model.set_segment(A, B)
model.set_segment(B, C)
model.set_segment(A, C)
model.set_polygon([A, B, C])
# 2. Square BDEC described on BC [I. 46]
D = model.set_point(91, -319, ID="D")
E = model.set_point(222, -319, ID="E")
model.set_segment(B, D)
model.set_segment(D, E)
model.set_segment(C, E)
model.set_polygon([B, D, E, C])
# 3. Square BAGF (GB) described on BA [I. 46]
F = model.set_point(38, -159, ID="F")
G = model.set_point(65, -106, ID="G")
model.set_segment(B, F)
model.set_segment(F, G)
model.set_segment(G, A)
model.set_polygon([B, A, G, F])
# 4. Square ACKH (HC) described on AC [I. 46]
H = model.set_point(171, -29, ID="H")
K = model.set_point(275, -82, ID="K")
model.set_segment(A, H)
model.set_segment(H, K)
model.set_segment(C, K)
model.set_polygon([A, C, K, H])
# 5. Parallel AL through A to BD or CE, meeting BC at M and DE at L [I. 31]
M = model.set_point(118, -186, ID="M")
L = model.set_point(118, -319, ID="L")
model.construct_line(A, L)
model.set_segment(A, L)
model.set_segment(A, M)
model.set_segment(M, L)
model.set_segment(B, M)
model.set_segment(M, C)
model.set_segment(D, L)
model.set_segment(L, E)
# Split rectangles BL (BDLM) and CL (CELM)
model.set_polygon([B, D, L, M])
model.set_polygon([C, E, L, M])
# Collinear extensions CA-AG and BA-AH [I. 14]
model.construct_line(C, A)
model.construct_line(B, A)
model.set_segment(G, C)
model.set_segment(B, H)
# 6. Auxiliary transversals AD, FC, AE, BK and triangles ABD, FBC, ACE, KCB
model.set_segment(A, D)
model.set_segment(F, C)
model.set_segment(A, E)
model.set_segment(B, K)
model.set_polygon([A, B, D])
model.set_polygon([F, B, C])
model.set_polygon([A, C, E])
model.set_polygon([K, C, B])
# 7. Referenced angles (wedges)
model.set_wedge(A, B, B, C) # < B A C )
model.set_wedge(A, B, B, G) # < B A G )
model.set_wedge(B, D, D, C) # < D B C )
model.set_wedge(B, F, F, A) # < F B A )
model.set_wedge(B, A, A, C) # < A B C )
model.set_wedge(B, D, D, A) # < D B A ) / < A B D )
model.set_wedge(B, F, F, C) # < F B C )
return model
if __name__ == "__main__":
construct_g1()