G.550 there prisms equal — Code¶
If there be two prisms of equal height, and one have a parallelogram as base and the other a triangle, and if the parallelogram be double of the triangle, the prisms is equal.
#!/usr/bin/env python3
"""
Programmatic construction for Book XI, Proposition 39 (XI.39)
using geometor.model.
"""
from geometor.model import Model
def build_model() -> Model:
m = Model("XI.39")
# Left prism ABCDEF and completed solid AO
B = m.set_point(26, 26, classes=["given"], ID="B")
D = m.set_point(138, 26, classes=["given"], ID="D")
O = m.set_point(154, 42, classes=["constructed"], ID="O")
B2 = m.set_point(42, 42, classes=["auxiliary"])
A = m.set_point(26, 97, classes=["given"], ID="A")
C = m.set_point(138, 97, classes=["given"], ID="C")
F = m.set_point(154, 113, classes=["given"], ID="F")
E = m.set_point(42, 113, classes=["given"], ID="E")
# Right prism GHKLMN and completed solid GP
M = m.set_point(275, 32, classes=["given"], ID="M")
P = m.set_point(345, 32, classes=["constructed"], ID="P")
N = m.set_point(378, 60, classes=["given"], ID="N")
L = m.set_point(308, 60, classes=["given"], ID="L")
H = m.set_point(275, 102, classes=["given"], ID="H")
H2 = m.set_point(345, 102, classes=["auxiliary"])
K = m.set_point(378, 130, classes=["given"], ID="K")
G = m.set_point(308, 130, classes=["given"], ID="G")
# Polygons (solids, prisms, parallelograms, triangles)
m.set_polygon([B, D, O, F, E, A]) # Solid < A O >
m.set_polygon([B, D, F, E, A]) # Prism < A B C D E F >
m.set_polygon([A, C, F, E]) # Parallelogram < A F >
m.set_polygon([M, P, N, K, G, H]) # Solid < G P >
m.set_polygon([M, N, K, G, H]) # Prism < G H K L M N >
m.set_polygon([H, H2, K, G]) # Parallelogram < H K >
m.set_polygon([G, H, K]) # Triangle < G H K >
# Segments
for p1, p2 in [
(B, D), (D, O), (O, B2), (B2, B),
(A, C), (C, F), (F, E), (E, A),
(B, A), (D, C), (O, F), (B2, E),
(B, E), (D, F),
(M, P), (P, N), (N, L), (L, M),
(H, H2), (H2, K), (K, G), (G, H),
(M, H), (P, H2), (N, K), (L, G),
(M, N), (H, K),
]:
m.set_segment(p1, p2)
return m
if __name__ == "__main__":
model = build_model()
print(f"Constructed {model.name} with {len(model)} elements.")