G.370 many numbers please — Code¶
If as many numbers as we please beginning from an unit be set out continuously in double proportion, until the sum of all becomes prime, and if the sum multiplied into the last make some number, the product is perfect.
"""Programmatic construction for Book IX, Proposition 36 (IX.36)."""
from __future__ import annotations
from geometor.model import Model
def construct_g1() -> Model:
"""Construct the figure 0428.g1 using geometor.model."""
model = Model("IX.36")
# Single-letter number segments A, B, C, D, L, E, M, P, Q
A_l = model.set_point(177.0, -21.5, classes=["given"], ID="A")
A_r = model.set_point(200.0, -21.5, ID="A_r")
B_l = model.set_point(253.0, -21.5, classes=["given"], ID="B")
B_r = model.set_point(305.0, -21.5, ID="B_r")
C_l = model.set_point(240.0, -40.5, classes=["given"], ID="C")
C_r = model.set_point(321.0, -40.5, ID="C_r")
D_l = model.set_point(235.0, -61.0, classes=["given"], ID="D")
D_r = model.set_point(394.0, -61.0, ID="D_r")
L_l = model.set_point(177.0, -82.5, classes=["given"], ID="L")
L_r = model.set_point(400.0, -82.5, ID="L_r")
E_l = model.set_point(455.0, -83.5, classes=["given"], ID="E")
E_r = model.set_point(515.0, -83.5, ID="E_r")
M_l = model.set_point(16.0, -101.0, classes=["given"], ID="M")
M_r = model.set_point(465.0, -101.0, ID="M_r")
# Subdivided number segment HK (divided at N)
H = model.set_point(403.0, -113.5, classes=["given"], ID="H")
N = model.set_point(463.0, -113.5, ID="N")
K = model.set_point(521.0, -113.5, classes=["given"], ID="K")
# Subdivided number segment FG (divided at O)
F = model.set_point(26.0, -126.0, classes=["given"], ID="F")
O = model.set_point(90.0, -126.0, ID="O")
G = model.set_point(297.0, -126.0, classes=["given"], ID="G")
# Single-letter number segments P, Q
P_l = model.set_point(64.0, -151.5, classes=["given"], ID="P")
P_r = model.set_point(245.0, -151.5, ID="P_r")
Q_l = model.set_point(302.0, -151.5, classes=["given"], ID="Q")
Q_r = model.set_point(425.0, -151.5, ID="Q_r")
# Base lines for subdivided segments
model.construct_line(H, K)
model.construct_line(F, G)
# Standalone segments
model.set_segment(A_l, A_r)
model.set_segment(B_l, B_r)
model.set_segment(C_l, C_r)
model.set_segment(D_l, D_r)
model.set_segment(L_l, L_r)
model.set_segment(E_l, E_r)
model.set_segment(M_l, M_r)
model.set_segment(P_l, P_r)
model.set_segment(Q_l, Q_r)
# Whole and subdivided segments on HK
model.set_segment(H, K)
model.set_segment(H, N)
model.set_segment(N, K)
# Whole and subdivided segments on FG
model.set_segment(F, G)
model.set_segment(F, O)
model.set_segment(O, G)
# Collinear sections
model.set_section([H, N, K])
model.set_section([F, O, G])
return model
if __name__ == "__main__":
construct_g1()