G.239 parallelograms applied segment — Code

VI.27

Of all the parallelograms applied to the same segment and deficient by parallelogrammic figures similar and similarly situated to that described on the half of the segment, that parallelogram is greatest which is applied to the half of the segment and is similar to the defect.
D E G F H A C K B L M N
"""Programmatic construction for Book VI, Proposition 27 (VI.27).

        Of all the parallelograms applied to the same straight line AB and deficient by
        parallelogrammic figures similar and similarly situated to DB described on the
        half CB, the parallelogram AD applied to the half is greatest.
        """

        from __future__ import annotations

        from geometor.model import Model


        def construct_g1() -> Model:
            """Construct the figure for 0263.g1 (VI.27) using geometor.model."""
            model = Model("VI.27")

            # 1. Grid of points for the applied parallelograms on AB
            A2 = model.set_point(20.0, -29.0, ID="A2")
            D = model.set_point(104.0, -29.0, classes=["given"], ID="D")
            N2 = model.set_point(129.0, -29.0, ID="N2")
            E = model.set_point(186.0, -29.0, classes=["given"], ID="E")

            G = model.set_point(26.0, -60.0, ID="G")
            L2 = model.set_point(110.0, -60.0, ID="L2")
            F = model.set_point(135.0, -60.0, ID="F")
            H = model.set_point(192.0, -60.0, ID="H")

            A = model.set_point(41.0, -132.0, classes=["given"], ID="A")
            C = model.set_point(125.0, -132.0, classes=["given"], ID="C")
            K = model.set_point(150.0, -132.0, ID="K")
            B = model.set_point(207.0, -132.0, classes=["given"], ID="B")

            # 2. Construction lines
            model.construct_line(A, B)
            model.construct_line(G, H)
            model.construct_line(A2, E)
            model.construct_line(D, C)
            model.construct_line(N2, K)
            model.construct_line(D, B)

            # 3. Segments and sub-segments
            model.set_segment(A2, E)
            model.set_segment(A2, D)
            model.set_segment(D, N2)
            model.set_segment(N2, E)
            model.set_segment(D, E)

            model.set_segment(G, H)
            model.set_segment(G, L2)
            model.set_segment(L2, F)
            model.set_segment(F, H)
            model.set_segment(G, F)
            model.set_segment(L2, H)

            model.set_segment(A, B)
            model.set_segment(A, C)
            model.set_segment(C, K)
            model.set_segment(K, B)
            model.set_segment(A, K)
            model.set_segment(C, B)

            model.set_segment(A2, A)
            model.set_segment(A2, G)
            model.set_segment(G, A)

            model.set_segment(D, C)
            model.set_segment(D, L2)
            model.set_segment(L2, C)

            model.set_segment(N2, K)
            model.set_segment(N2, F)
            model.set_segment(F, K)

            model.set_segment(E, B)
            model.set_segment(E, H)
            model.set_segment(H, B)

            model.set_segment(D, B)
            model.set_segment(D, F)
            model.set_segment(F, B)

            # 4. Parallelograms AD, DB, AF, FB, CF, FE, CH, KE (EK), CG (GC)
            model.set_polygon([A2, D, C, A])
            model.set_polygon([D, E, B, C])
            model.set_polygon([G, F, K, A])
            model.set_polygon([F, H, B, K])
            model.set_polygon([L2, F, K, C])
            model.set_polygon([N2, E, H, F])
            model.set_polygon([L2, H, B, C])
            model.set_polygon([N2, E, B, K])
            model.set_polygon([G, L2, C, A])
            model.set_polygon([D, N2, F, L2])

            # 5. L-shaped Gnomon LMN inside DB around D-N2-F-L2
            model.set_polygon([N2, E, B, C, L2, F])

            return model


        if __name__ == "__main__":
            construct_g1()