G.142 cut off a circle segment admitting a given angle — Code

III.34

From a given circle, cut off a segment admitting an angle equal to a given rectilineal angle.
C B A D E F
"""Programmatic construction for Book III, Proposition 34 (III.34)."""

        from __future__ import annotations

        from geometor.model import Model


        def construct_g1() -> Model:
            """Construct the figure 0077.g1 using geometor.model."""
            model = Model("III.34")

            # Circle ABC with center O(97, -95), radius 67 (y-inverted)
            O = model.set_point(97.0, -95.0, ID="O")
            B = model.set_point(30.0, -95.0, classes=["given"], ID="B")
            C = model.set_point(86.0, -28.91, ID="C")
            A = model.set_point(138.0, -148.0, ID="A")
            F = model.set_point(30.0, -28.0, ID="F")
            E = model.set_point(30.0, -158.0, ID="E")

            # Given angle at D
            D = model.set_point(233.0, -138.0, classes=["given"], ID="D")
            D1 = model.set_point(301.0, -138.0, ID="D1")
            D2 = model.set_point(289.0, -92.0, ID="D2")
            model.set_segment(D, D1)
            model.set_segment(D, D2)
            model.set_wedge(D, D1, D1, D2)

            # Construction circle ABC
            model.construct_circle(O, B)

            # Segments
            model.set_segment(E, F)
            model.set_segment(F, B)
            model.set_segment(B, E)
            model.set_segment(B, C)
            model.set_segment(B, A)
            model.set_segment(C, A)

            # Section
            model.set_section([E, B, F])

            # Polygon
            model.set_polygon([A, B, C])

            # Angles
            model.set_wedge(B, F, F, C)
            model.set_wedge(A, B, B, C)

            return model


        if __name__ == "__main__":
            construct_g1()