G.164 circumscribe a regular pentagon about a circle — Code

IV.12

Circumscribe an equilateral and equiangular pentagon about a given circle.
G H K L M A B C D E F
"""Programmatic construction for Book IV, Proposition 12 (IV.12)."""

        from __future__ import annotations

        from geometor.model import Model


        def construct_g1() -> Model:
            """Construct the figure 0108.g2 (Circumscribed regular pentagon) using geometor.model."""
            model = Model("IV.12")

            # Points (y-inverted for standard mathematical coordinates)
            F = model.set_point(104.00, -113.00, classes=["given"], ID="F")
            A = model.set_point(67.56, -62.84, classes=["given"], ID="A")
            B = model.set_point(45.03, -132.16, classes=["given"], ID="B")
            C = model.set_point(104.00, -175.00, classes=["given"], ID="C")
            D = model.set_point(162.97, -132.16, classes=["given"], ID="D")
            E = model.set_point(140.44, -62.84, classes=["given"], ID="E")

            G = model.set_point(104.00, -36.36, ID="G")
            H = model.set_point(31.11, -89.32, ID="H")
            K = model.set_point(58.95, -175.00, ID="K")
            L = model.set_point(149.05, -175.00, ID="L")
            M = model.set_point(176.89, -89.32, ID="M")

            # Given circle ABCDE
            model.construct_circle(F, C)

            # Segments
            model.set_segment(G, H)
            model.set_segment(H, K)
            model.set_segment(K, L)
            model.set_segment(L, M)
            model.set_segment(M, G)
            model.set_segment(H, B)
            model.set_segment(B, K)
            model.set_segment(K, C)
            model.set_segment(C, L)
            model.set_segment(L, D)
            model.set_segment(F, B)
            model.set_segment(F, K)
            model.set_segment(F, C)
            model.set_segment(F, L)
            model.set_segment(F, D)

            # Collinear sections
            model.set_section([G, A, H])
            model.set_section([H, B, K])
            model.set_section([K, C, L])
            model.set_section([L, D, M])
            model.set_section([M, E, G])

            # Polygons
            model.set_polygon([G, H, K, L, M])
            model.set_polygon([F, B, K])
            model.set_polygon([F, K, C])
            model.set_polygon([F, L, C])
            model.set_polygon([F, D, L])

            # Angles (wedges)
            model.set_wedge(F, C, C, K)
            model.set_wedge(F, C, C, L)
            model.set_wedge(F, B, B, K)
            model.set_wedge(F, D, D, L)
            model.set_wedge(B, F, F, K)
            model.set_wedge(K, F, F, C)
            model.set_wedge(B, F, F, C)
            model.set_wedge(C, F, F, L)
            model.set_wedge(L, F, F, D)
            model.set_wedge(C, F, F, D)
            model.set_wedge(B, K, K, F)
            model.set_wedge(F, K, K, C)
            model.set_wedge(B, K, K, C)
            model.set_wedge(F, L, L, C)
            model.set_wedge(D, L, L, C)
            model.set_wedge(K, H, H, G)
            model.set_wedge(H, G, G, M)
            model.set_wedge(G, M, M, L)

            return model


        if __name__ == "__main__":
            construct_g1()