G.157 circumscribe a circle about a triangle — Code¶
Circumscribe a circle about a given triangle.
"""Programmatic construction for Book IV, Proposition 5 (IV.5)."""
from __future__ import annotations
from geometor.model import Model
def construct_g1() -> Model:
"""Construct the figure 0094.g1 (three cases) using geometor.model."""
model = Model("IV.5")
# Case 1: Acute triangle (F inside ABC)
A1 = model.set_point(102.55, -36.80, classes=["given"], ID="A")
B1 = model.set_point(31.36, -134.79, classes=["given"], ID="B")
C1 = model.set_point(130.64, -134.79, classes=["given"], ID="C")
D1 = model.set_point(66.95, -85.79, ID="D")
E1 = model.set_point(116.60, -85.79, ID="E")
F1 = model.set_point(81.00, -96.00, ID="F")
model.construct_circle(F1, A1)
model.set_polygon([A1, B1, C1])
model.set_polygon([A1, D1, E1])
model.set_segment(A1, B1)
model.set_segment(B1, C1)
model.set_segment(C1, A1)
model.set_segment(A1, D1)
model.set_segment(D1, B1)
model.set_segment(A1, E1)
model.set_segment(E1, C1)
model.set_segment(D1, E1)
model.set_segment(D1, F1)
model.set_segment(E1, F1)
model.set_segment(F1, A1)
model.set_segment(F1, B1)
model.set_segment(F1, C1)
model.set_section([A1, D1, B1])
model.set_section([A1, E1, C1])
model.set_wedge(A1, B1, B1, C1)
model.set_wedge(D1, E1, E1, F1)
model.set_wedge(E1, D1, D1, F1)
model.set_wedge(D1, A1, A1, F1)
model.set_wedge(E1, A1, A1, F1)
model.set_wedge(D1, A1, A1, E1)
model.set_wedge(E1, A1, A1, D1)
model.set_wedge(B1, A1, A1, C1)
model.set_wedge(C1, A1, A1, B1)
# Case 2: Right-angled triangle (F on BC)
A2 = model.set_point(326.79, -45.36, classes=["given"], ID="A2")
B2 = model.set_point(225.00, -95.00, classes=["given"], ID="B2")
C2 = model.set_point(351.00, -95.00, classes=["given"], ID="C2")
D2 = model.set_point(275.89, -70.18, ID="D2")
E2 = model.set_point(338.89, -70.18, ID="E2")
F2 = model.set_point(288.00, -95.00, ID="F2")
model.construct_circle(F2, A2)
model.set_polygon([A2, B2, C2])
model.set_segment(A2, B2)
model.set_segment(B2, C2)
model.set_segment(C2, A2)
model.set_segment(A2, D2)
model.set_segment(D2, B2)
model.set_segment(A2, E2)
model.set_segment(E2, C2)
model.set_segment(D2, F2)
model.set_segment(E2, F2)
model.set_segment(F2, A2)
model.set_segment(F2, B2)
model.set_segment(F2, C2)
model.set_section([A2, D2, B2])
model.set_section([A2, E2, C2])
model.set_section([B2, F2, C2])
model.set_wedge(A2, B2, B2, C2)
# Case 3: Obtuse triangle (F outside ABC)
A3 = model.set_point(499.94, -27.96, classes=["given"], ID="A3")
B3 = model.set_point(427.87, -74.76, classes=["given"], ID="B3")
C3 = model.set_point(550.13, -74.76, classes=["given"], ID="C3")
D3 = model.set_point(463.91, -51.36, ID="D3")
E3 = model.set_point(525.03, -51.36, ID="E3")
F3 = model.set_point(489.00, -90.00, ID="F3")
model.construct_circle(F3, A3)
model.set_polygon([A3, B3, C3])
model.set_segment(A3, B3)
model.set_segment(B3, C3)
model.set_segment(C3, A3)
model.set_segment(A3, D3)
model.set_segment(D3, B3)
model.set_segment(A3, E3)
model.set_segment(E3, C3)
model.set_segment(D3, F3)
model.set_segment(E3, F3)
model.set_segment(F3, A3)
model.set_segment(F3, B3)
model.set_segment(F3, C3)
model.set_section([A3, D3, B3])
model.set_section([A3, E3, C3])
model.set_wedge(A3, B3, B3, C3)
return model
if __name__ == "__main__":
construct_g1()