G.557 pyramids height polygonal — Code

XII.6

Pyramids which are of the same height and have polygonal bases are to one another as the bases.
M A B C D E N F G H K L
"""Programmatic construction for Book XII, Proposition 6 (XII.6)."""

        from __future__ import annotations

        from geometor.model import Model


        def construct_g1() -> Model:
            """Construct the figure 0396.g1 using geometor.model."""
            model = Model("XII.6")

            # First pyramid M-ABCDE
            M = model.set_point(96.0, -29.0, classes=["given"], ID="M")
            A = model.set_point(128.0, -192.0, classes=["given"], ID="A")
            B = model.set_point(147.0, -130.0, classes=["given"], ID="B")
            C = model.set_point(60.0, -113.0, classes=["given"], ID="C")
            D = model.set_point(21.0, -158.0, classes=["given"], ID="D")
            E = model.set_point(62.0, -220.0, classes=["given"], ID="E")

            # Second pyramid N-FGHKL
            N = model.set_point(227.0, -18.0, classes=["given"], ID="N")
            F = model.set_point(259.0, -224.0, classes=["given"], ID="F")
            G = model.set_point(375.0, -181.0, classes=["given"], ID="G")
            H = model.set_point(290.0, -108.0, classes=["given"], ID="H")
            K = model.set_point(225.0, -108.0, classes=["given"], ID="K")
            L = model.set_point(195.0, -149.0, classes=["given"], ID="L")

            # Segments of first pyramid
            for pt in [A, B, C, D, E]:
                model.set_segment(M, pt)
            model.set_segment(A, B)
            model.set_segment(B, C)
            model.set_segment(C, D)
            model.set_segment(D, E)
            model.set_segment(E, A)
            model.set_segment(A, C)
            model.set_segment(A, D)

            # Segments of second pyramid
            for pt in [F, G, H, K, L]:
                model.set_segment(N, pt)
            model.set_segment(F, G)
            model.set_segment(G, H)
            model.set_segment(H, K)
            model.set_segment(K, L)
            model.set_segment(L, F)
            model.set_segment(F, H)
            model.set_segment(F, K)

            # Polygons
            model.set_polygon([A, B, C, D, E])
            model.set_polygon([A, B, C, D])
            model.set_polygon([A, B, C])
            model.set_polygon([A, C, D])
            model.set_polygon([A, D, E])

            model.set_polygon([F, G, H, K, L])
            model.set_polygon([F, G, H])
            model.set_polygon([F, H, K])
            model.set_polygon([F, K, L])

            return model


        if __name__ == "__main__":
            construct_g1()