G.299 many ratios please — Code

VIII.4

Given as many ratios as we please in least numbers, to find numbers in continued proportion which are the least in the given ratios.

g1.py

A B C D E F N G O H M K P L
"""Programmatic construction for Book VIII, Proposition 4, Diagram 1 (VIII.4 - g1)."""

        from __future__ import annotations

        from geometor.model import Model


        def construct_g1() -> Model:
            """Construct the figure 0356.g1 using geometor.model."""
            model = Model("VIII.4.g1")

            # Single-letter horizontal number segments A, B, C, D, E, F, G, H, K, L, M, N, O, P
            A_l = model.set_point(42.0, -14.0, classes=["given"], ID="A")
            A_r = model.set_point(63.0, -14.0, ID="A_r")

            B_l = model.set_point(201.0, -15.0, classes=["given"], ID="B")
            B_r = model.set_point(239.0, -15.0, ID="B_r")

            C_l = model.set_point(45.0, -36.0, classes=["given"], ID="C")
            C_r = model.set_point(70.0, -36.0, ID="C_r")

            D_l = model.set_point(196.0, -36.0, classes=["given"], ID="D")
            D_r = model.set_point(232.0, -36.0, ID="D_r")

            E_l = model.set_point(46.0, -60.0, classes=["given"], ID="E")
            E_r = model.set_point(84.0, -60.0, ID="E_r")

            F_l = model.set_point(200.0, -61.0, classes=["given"], ID="F")
            F_r = model.set_point(248.0, -61.0, ID="F_r")

            N_l = model.set_point(45.0, -85.0, classes=["given"], ID="N")
            N_r = model.set_point(74.0, -85.0, ID="N_r")

            G_l = model.set_point(200.0, -86.0, classes=["given"], ID="G")
            G_r = model.set_point(350.0, -86.0, ID="G_r")

            O_l = model.set_point(46.0, -111.0, classes=["given"], ID="O")
            O_r = model.set_point(117.0, -111.0, ID="O_r")

            H_l = model.set_point(199.0, -112.0, classes=["given"], ID="H")
            H_r = model.set_point(247.0, -112.0, ID="H_r")

            M_l = model.set_point(24.0, -142.0, classes=["given"], ID="M")
            M_r = model.set_point(149.0, -142.0, ID="M_r")

            K_l = model.set_point(197.0, -143.0, classes=["given"], ID="K")
            K_r = model.set_point(435.0, -143.0, ID="K_r")

            P_l = model.set_point(26.0, -168.0, classes=["given"], ID="P")
            P_r = model.set_point(164.0, -168.0, ID="P_r")

            L_l = model.set_point(198.0, -169.0, classes=["given"], ID="L")
            L_r = model.set_point(465.0, -169.0, ID="L_r")

            # Number segments
            model.set_segment(A_l, A_r)
            model.set_segment(B_l, B_r)
            model.set_segment(C_l, C_r)
            model.set_segment(D_l, D_r)
            model.set_segment(E_l, E_r)
            model.set_segment(F_l, F_r)
            model.set_segment(N_l, N_r)
            model.set_segment(G_l, G_r)
            model.set_segment(O_l, O_r)
            model.set_segment(H_l, H_r)
            model.set_segment(M_l, M_r)
            model.set_segment(K_l, K_r)
            model.set_segment(P_l, P_r)
            model.set_segment(L_l, L_r)

            return model


        if __name__ == "__main__":
            construct_g1()
        

g2.py

A C E B D F G H K Q M R O S N T P
"""Programmatic construction for Book VIII, Proposition 4, Diagram 2 (VIII.4 - g2)."""

        from __future__ import annotations

        from geometor.model import Model


        def construct_g2() -> Model:
            """Construct the figure 0357.g1 using geometor.model."""
            model = Model("VIII.4.g2")

            # Single-letter horizontal number segments A, B, C, D, E, F, G, H, K, M, N, O, P, Q, R, S, T
            A_l = model.set_point(78.0, -14.0, classes=["given"], ID="A")
            A_r = model.set_point(113.0, -14.0, ID="A_r")

            C_l = model.set_point(177.0, -14.0, classes=["given"], ID="C")
            C_r = model.set_point(202.0, -14.0, ID="C_r")

            E_l = model.set_point(290.0, -16.0, classes=["given"], ID="E")
            E_r = model.set_point(339.0, -16.0, ID="E_r")

            B_l = model.set_point(77.0, -36.0, classes=["given"], ID="B")
            B_r = model.set_point(120.0, -36.0, ID="B_r")

            D_l = model.set_point(177.0, -38.0, classes=["given"], ID="D")
            D_r = model.set_point(202.0, -38.0, ID="D_r")

            F_l = model.set_point(289.0, -38.0, classes=["given"], ID="F")
            F_r = model.set_point(346.0, -38.0, ID="F_r")

            G_l = model.set_point(146.0, -60.0, classes=["given"], ID="G")
            G_r = model.set_point(225.0, -60.0, ID="G_r")

            H_l = model.set_point(287.0, -60.0, classes=["given"], ID="H")
            H_r = model.set_point(361.0, -60.0, ID="H_r")

            K_l = model.set_point(136.0, -84.0, classes=["given"], ID="K")
            K_r = model.set_point(257.0, -84.0, ID="K_r")

            Q_l = model.set_point(349.0, -86.0, classes=["given"], ID="Q")
            Q_r = model.set_point(434.0, -86.0, ID="Q_r")

            M_l = model.set_point(24.0, -109.0, classes=["given"], ID="M")
            M_r = model.set_point(261.0, -109.0, ID="M_r")

            R_l = model.set_point(348.0, -110.0, classes=["given"], ID="R")
            R_r = model.set_point(456.0, -110.0, ID="R_r")

            O_l = model.set_point(24.0, -132.0, classes=["given"], ID="O")
            O_r = model.set_point(183.0, -132.0, ID="O_r")

            S_l = model.set_point(347.0, -132.0, classes=["given"], ID="S")
            S_r = model.set_point(508.0, -132.0, ID="S_r")

            N_l = model.set_point(24.0, -158.0, classes=["given"], ID="N")
            N_r = model.set_point(152.0, -158.0, ID="N_r")

            T_l = model.set_point(344.0, -160.0, classes=["given"], ID="T")
            T_r = model.set_point(533.0, -160.0, ID="T_r")

            P_l = model.set_point(26.0, -182.0, classes=["given"], ID="P")
            P_r = model.set_point(300.0, -182.0, ID="P_r")

            # Number segments
            model.set_segment(A_l, A_r)
            model.set_segment(B_l, B_r)
            model.set_segment(C_l, C_r)
            model.set_segment(D_l, D_r)
            model.set_segment(E_l, E_r)
            model.set_segment(F_l, F_r)
            model.set_segment(G_l, G_r)
            model.set_segment(H_l, H_r)
            model.set_segment(K_l, K_r)
            model.set_segment(M_l, M_r)
            model.set_segment(O_l, O_r)
            model.set_segment(N_l, N_r)
            model.set_segment(P_l, P_r)
            model.set_segment(Q_l, Q_r)
            model.set_segment(R_l, R_r)
            model.set_segment(S_l, S_r)
            model.set_segment(T_l, T_r)

            return model


        if __name__ == "__main__":
            construct_g2()