G.526 solid angle contained — Code

XI.21

Any solid angle is contained by plane angles less than four right angles.
C A D B
"""Programmatic construction for Book XI, Proposition 21 (XI.21).

        Any solid angle is contained by plane angles less than four right angles.
        """

        from __future__ import annotations

        import sympy as sp
        from geometor.model import Model


        def construct_g1() -> Model:
            """Construct the figure for Book XI, Proposition 21 using geometor.model."""
            model = Model("XI.21")

            # 1. Let the angle at A be a solid angle contained by the plane angles
            #    BAC, CAD, DAB.
            # 2. Take points B, C, D at random on AB, AC, AD and join BC, CD, DB.
            A = model.set_point(0, 0, classes=["given"], ID="A")
            C = model.set_point(sp.Rational(-24, 60), sp.Rational(45, 60), classes=["given"], label="C")
            B = model.set_point(sp.Rational(-78, 60), sp.Rational(-69, 60), classes=["given"], label="B")
            D = model.set_point(sp.Rational(110, 60), sp.Rational(-25, 60), classes=["given"], label="D")

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

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

            return model


        if __name__ == "__main__":
            construct_g1()