G.89 square of a difference — Code

II.7

If a segment is cut at random, the sum of the squares on the whole and on one of the parts equals twice the rectangle contained by the whole and that part together with the square on the remaining part.
A C B H G F D N E K L M
"""Programmatic construction for Book II, Proposition 7 (II.7)."""

        from __future__ import annotations

        from geometor.model import Model


        def construct_g1() -> Model:
            """Construct the figure for 0402.g1 (II.7) using geometor.model."""
            model = Model("II.7")

            # 1. Points
            A = model.set_point(27.0, -30.5, classes=["given"], ID="A")
            C = model.set_point(130.0, -30.5, classes=["given"], ID="C")
            B = model.set_point(170.5, -30.5, classes=["given"], ID="B")

            H = model.set_point(27.0, -71.0, ID="H")
            G = model.set_point(130.0, -71.0, ID="G")
            F = model.set_point(170.5, -71.0, ID="F")

            D = model.set_point(27.0, -174.0, ID="D")
            N = model.set_point(130.0, -174.0, ID="N")
            E = model.set_point(170.5, -174.0, ID="E")

            # Gnomon markers
            K = model.set_point(105.0, -71.0, ID="K")
            L = model.set_point(148.0, -53.0, ID="L")
            M = model.set_point(130.0, -96.0, ID="M")

            # 2. Segments
            model.set_segment(A, C)
            model.set_segment(C, B)
            model.set_segment(A, B)

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

            model.set_segment(D, N)
            model.set_segment(N, E)
            model.set_segment(D, E)

            model.set_segment(A, H)
            model.set_segment(H, D)
            model.set_segment(A, D)

            model.set_segment(C, G)
            model.set_segment(G, N)
            model.set_segment(C, N)

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

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

            # 3. Collinear Sections
            model.set_section([A, C, B])
            model.set_section([H, G, F])
            model.set_section([D, N, E])
            model.set_section([A, H, D])
            model.set_section([C, G, N])
            model.set_section([B, F, E])
            model.set_section([B, G, D])

            # 4. Polygons (Squares, Rectangles, Gnomon)
            model.set_polygon([A, D, E, B])
            model.set_polygon([C, B, F, G])
            model.set_polygon([H, G, N, D])
            model.set_polygon([A, C, G, H])
            model.set_polygon([G, F, E, N])
            model.set_polygon([A, B, F, H])
            model.set_polygon([C, B, E, N])
            model.set_polygon([A, B, E, N, G, H])
            model.set_polygon([K, L, M])

            return model


        if __name__ == "__main__":
            construct_g1()