G.582 segment cut extreme — Code¶
If a segment be cut in extreme and mean ratio, the square on the whole and the square on the lesser segment together are triple of the square on the greater segment.
"""Programmatic construction for Book XIII, Proposition 4 (XIII.4).
If a straight line be cut in extreme and mean ratio, the square on the whole
and the square on the lesser segment together are triple of the square on the
greater segment.
"""
from __future__ import annotations
from geometor.model import Model
def construct_g1() -> Model:
"""Construct the figure for Book XIII, Proposition 4 using geometor.model."""
model = Model("XIII.4")
# Straight line AB cut in extreme and mean ratio at C
A = model.set_point(22.0, -23.0, classes=["given"], ID="A")
C = model.set_point(106.0, -23.0, classes=["given"], ID="C")
B = model.set_point(157.0, -23.0, classes=["given"], ID="B")
model.construct_line(A, B)
model.set_segment(A, B)
model.set_segment(A, C)
model.set_segment(C, B)
# Square ADEB on AB, divided through C and F
H = model.set_point(22.0, -74.0, ID="H")
F = model.set_point(106.0, -74.0, ID="F")
K = model.set_point(157.0, -74.0, ID="K")
D = model.set_point(22.0, -158.0, ID="D")
G = model.set_point(106.0, -158.0, ID="G")
E = model.set_point(157.0, -158.0, ID="E")
# Horizontal segments
model.set_segment(H, K)
model.set_segment(H, F)
model.set_segment(F, K)
model.set_segment(D, E)
model.set_segment(D, G)
model.set_segment(G, E)
# Vertical segments
model.set_segment(A, D)
model.set_segment(A, H)
model.set_segment(H, D)
model.set_segment(C, G)
model.set_segment(C, F)
model.set_segment(F, G)
model.set_segment(B, E)
model.set_segment(B, K)
model.set_segment(K, E)
# Diagonal BD
model.set_segment(B, D)
model.set_segment(B, F)
model.set_segment(F, D)
# Polygons (squares, rectangles, and gnomon LMN)
model.set_polygon([A, D, E, B])
model.set_polygon([H, F, G, D])
model.set_polygon([C, B, K, F])
model.set_polygon([A, C, F, H])
model.set_polygon([F, K, E, G])
model.set_polygon([A, B, K, H])
model.set_polygon([C, B, E, G])
model.set_polygon([H, A, B, E, G, F])
return model
if __name__ == "__main__":
construct_g1()