G.488 square segment produces — Code

X.102

The square on the segment which produces with a medial area a medial whole, if applied to a rational segment, produces as breadth a sixth apotome.
A B G C F N K M D E O H L
"""Programmatic construction for Book X, Proposition 102 (X.102)."""

        from __future__ import annotations

        from geometor.model import Model


        def construct_g1() -> Model:
            """Construct the figure 0231.g1 using geometor.model."""
            model = Model("X.102")

            # Top line AG divided at B
            A = model.set_point(121.0, -18.5, classes=["given"], ID="A")
            B = model.set_point(208.0, -18.5, classes=["given"], ID="B")
            G = model.set_point(259.0, -18.5, classes=["given"], ID="G")

            # Top edge of applied rectangles: C - F - N - K - M
            C = model.set_point(16.5, -53.5, classes=["given"], ID="C")
            F = model.set_point(131.0, -53.5, ID="F")
            N = model.set_point(241.5, -53.5, ID="N")
            K = model.set_point(310.5, -53.5, ID="K")
            M = model.set_point(352.5, -53.5, ID="M")

            # Bottom edge of applied rectangles: D - E - O - H - L
            D = model.set_point(16.5, -117.0, classes=["given"], ID="D")
            E = model.set_point(131.0, -117.0, ID="E")
            O = model.set_point(241.5, -117.0, ID="O")
            H = model.set_point(310.5, -117.0, ID="H")
            L = model.set_point(352.5, -117.0, ID="L")

            # Base lines
            model.construct_line(A, G)
            model.construct_line(C, M)
            model.construct_line(D, L)
            model.construct_line(C, D)
            model.construct_line(F, E)
            model.construct_line(N, O)
            model.construct_line(K, H)
            model.construct_line(M, L)

            # Segments on AG
            model.set_segment(A, G)
            model.set_segment(A, B)
            model.set_segment(B, G)
            model.set_section([A, B, G])

            # Vertical segments
            model.set_segment(C, D)
            model.set_segment(F, E)
            model.set_segment(N, O)
            model.set_segment(K, H)
            model.set_segment(M, L)

            # Top horizontal segments
            model.set_segment(C, M)
            model.set_segment(C, K)
            model.set_segment(C, N)
            model.set_segment(C, F)
            model.set_segment(F, M)
            model.set_segment(F, K)
            model.set_segment(F, N)
            model.set_segment(N, M)
            model.set_segment(N, K)
            model.set_segment(K, M)

            # Bottom horizontal segments
            model.set_segment(D, L)
            model.set_segment(D, H)
            model.set_segment(D, O)
            model.set_segment(D, E)
            model.set_segment(E, L)
            model.set_segment(E, H)
            model.set_segment(E, O)
            model.set_segment(O, L)
            model.set_segment(O, H)
            model.set_segment(H, L)

            # Sections
            model.set_section([C, F, M])
            model.set_section([C, K, M])
            model.set_section([F, N, M])

            # Polygons (rectangles)
            model.set_polygon([C, F, E, D])  # CE
            model.set_polygon([C, K, H, D])  # CH
            model.set_polygon([K, M, L, H])  # KL
            model.set_polygon([C, M, L, D])  # CL
            model.set_polygon([F, M, L, E])  # FL
            model.set_polygon([F, N, O, E])  # FO
            model.set_polygon([N, M, L, O])  # NL
            model.set_polygon([N, K, H, O])  # NH

            return model


        if __name__ == "__main__":
            construct_g1()