G.439 area contained rational — Code

X.59

If an area be contained by a rational segment and the sixth binomial, the “side” of the area is the irrational segment called the side of the sum of two medial areas.
A G E F D B H K L C R Q M N O S P
"""Programmatic construction for Book X, Proposition 59 (X.59)."""

        from __future__ import annotations

        from geometor.model import Model


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

            # Rectangular area ABCD on the left, divided by GH, EK, FL
            A = model.set_point(18.0, -16.5, classes=["given"], ID="A")
            G = model.set_point(117.5, -16.5, ID="G")
            E = model.set_point(135.5, -16.5, classes=["given"], ID="E")
            F = model.set_point(177.0, -16.5, ID="F")
            D = model.set_point(219.0, -16.5, classes=["given"], ID="D")

            B = model.set_point(18.0, -68.5, classes=["given"], ID="B")
            H = model.set_point(117.5, -68.5, ID="H")
            K = model.set_point(135.5, -68.5, ID="K")
            L = model.set_point(177.0, -68.5, ID="L")
            C = model.set_point(219.0, -68.5, classes=["given"], ID="C")

            # Square SQ on the right, divided by MO and RP at N
            T_tl = model.set_point(299.0, -19.5, ID="T_tl")
            R = model.set_point(370.5, -19.5, ID="R")
            Q = model.set_point(405.5, -19.5, ID="Q")

            M = model.set_point(299.0, -56.0, ID="M")
            N = model.set_point(370.5, -56.0, ID="N")
            O = model.set_point(405.5, -56.0, ID="O")

            S = model.set_point(299.0, -127.5, ID="S")
            P = model.set_point(370.5, -127.5, ID="P")
            T_br = model.set_point(405.5, -127.5, ID="T_br")

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

            model.construct_line(T_tl, Q)
            model.construct_line(M, O)
            model.construct_line(S, T_br)
            model.construct_line(T_tl, S)
            model.construct_line(R, P)
            model.construct_line(Q, T_br)

            # Segments on rectangle ABCD
            model.set_segment(A, D)
            model.set_segment(A, G)
            model.set_segment(A, E)
            model.set_segment(A, F)
            model.set_segment(G, E)
            model.set_segment(G, F)
            model.set_segment(G, D)
            model.set_segment(E, F)
            model.set_segment(E, D)
            model.set_segment(F, D)

            model.set_segment(B, C)
            model.set_segment(B, H)
            model.set_segment(B, K)
            model.set_segment(B, L)
            model.set_segment(H, K)
            model.set_segment(H, L)
            model.set_segment(H, C)
            model.set_segment(K, L)
            model.set_segment(K, C)
            model.set_segment(L, C)

            model.set_segment(A, B)
            model.set_segment(G, H)
            model.set_segment(E, K)
            model.set_segment(F, L)
            model.set_segment(D, C)

            # Segments on square SQ
            model.set_segment(T_tl, Q)
            model.set_segment(T_tl, R)
            model.set_segment(R, Q)
            model.set_segment(M, O)
            model.set_segment(M, N)
            model.set_segment(N, O)
            model.set_segment(S, T_br)
            model.set_segment(S, P)
            model.set_segment(P, T_br)

            model.set_segment(T_tl, S)
            model.set_segment(T_tl, M)
            model.set_segment(M, S)
            model.set_segment(R, P)
            model.set_segment(R, N)
            model.set_segment(N, P)
            model.set_segment(Q, T_br)
            model.set_segment(Q, O)
            model.set_segment(O, T_br)

            # Sections
            model.set_section([A, E, D])
            model.set_section([A, G, E])
            model.set_section([E, F, D])
            model.set_section([M, N, O])
            model.set_section([R, N, P])

            # Polygons on ABCD
            model.set_polygon([A, B, C, D])
            model.set_polygon([A, B, K, E])
            model.set_polygon([A, B, H, G])
            model.set_polygon([G, H, K, E])
            model.set_polygon([E, K, C, D])
            model.set_polygon([E, K, L, F])
            model.set_polygon([F, L, C, D])
            model.set_polygon([A, B, L, F])
            model.set_polygon([G, H, C, D])

            # Polygons on SQ
            model.set_polygon([T_tl, S, T_br, Q])
            model.set_polygon([M, S, P, N])
            model.set_polygon([N, R, Q, O])
            model.set_polygon([T_tl, M, N, R])
            model.set_polygon([N, P, T_br, O])

            return model


        if __name__ == "__main__":
            construct_g1()