Example #1
0
    def test_general_logarithm_TRS(self):
        for i in range(5):
            scale = 0.5 + np.random.rand()
            S = generate_dilation_rotor(scale)
            R = generate_rotation_rotor(0.5, e1, e2)
            T = generate_translation_rotor(e3 + 7* e2 - e1)
            V = (T * R * S).normal()
            biv = general_logarithm(V)
            V_rebuilt = general_exp(biv).normal()
            biv2 = general_logarithm(V)

            C1 = random_point_pair()
            C2 = (V * C1 * ~V).normal()
            C3 = (V_rebuilt * C1 * ~V_rebuilt).normal()
            np.testing.assert_almost_equal(C2.value, C3.value)
Example #2
0
    def test_general_logarithm_RS(self):
        for i in range(5):
            scale = 0.5 + np.random.rand()

            S = generate_dilation_rotor(scale).normal()
            R = generate_rotation_rotor(0.5, e1, e2).normal()
            V = (R * S).normal()

            biv_test = general_logarithm(R) + general_logarithm(S)
            biv = general_logarithm(V)

            biv_alt = ga_log(R) + general_logarithm(S)

            npt.assert_almost_equal(biv.value, biv_test.value, 5)
            npt.assert_almost_equal(biv.value, biv_alt.value, 5)
Example #3
0
    def test_general_logarithm_TRS(self):
        for i in range(5):
            scale = 0.5 + np.random.rand()
            S = generate_dilation_rotor(scale)
            R = generate_rotation_rotor(0.5, e1, e2)
            T = generate_translation_rotor(e3 + 7 * e2 - e1)
            V = (T * R * S).normal()
            biv = general_logarithm(V)
            V_rebuilt = general_exp(biv).normal()
            biv2 = general_logarithm(V)

            C1 = random_point_pair()
            C2 = (V * C1 * ~V).normal()
            C3 = (V_rebuilt * C1 * ~V_rebuilt).normal()
            npt.assert_almost_equal(C2.value, C3.value)
Example #4
0
    def test_general_logarithm_RS(self):
        for i in range(5):
            scale = 0.5 + np.random.rand()

            S = generate_dilation_rotor(scale).normal()
            R = generate_rotation_rotor(0.5, e1, e2).normal()
            V = ( R *S).normal()

            biv_test = general_logarithm(R) + general_logarithm(S)
            biv = general_logarithm(V)

            biv_alt = ga_log(R) + general_logarithm(S)

            np.testing.assert_almost_equal(biv.value, biv_test.value, 5)
            np.testing.assert_almost_equal(biv.value, biv_alt.value, 5)
Example #5
0
 def test_general_logarithm_rotation(self):
     # Check we can reverse rotations
     for i in range(50):
         R = random_rotation_rotor()
         biv_2 = general_logarithm(R)
         biv_3 = ga_log(R)
         np.testing.assert_almost_equal(biv_2.value, biv_3.value, 3)
Example #6
0
 def test_general_logarithm_rotation(self):
     # Check we can reverse rotations
     for i in range(50):
         R = random_rotation_rotor()
         biv_2 = general_logarithm(R)
         biv_3 = ga_log(R)
         npt.assert_almost_equal(biv_2.value, biv_3.value, 3)
Example #7
0
 def test_general_logarithm_scaling(self):
     # Check we can reverse scaling
     for i in range(50):
         scale = 0.5 + np.random.rand()
         biv = -np.log(scale ) *e45 /2
         R = general_exp(biv).normal()
         biv_2 = general_logarithm(R)
         np.testing.assert_almost_equal(biv.value, biv_2.value)
Example #8
0
 def test_general_logarithm_translation(self):
     # Check we can reverse translation
     for i in range(50):
         t = random_euc_mv()
         biv = ninf * t /2
         R = general_exp(biv).normal()
         biv_2 = general_logarithm(R)
         np.testing.assert_almost_equal(biv.value, biv_2.value)
Example #9
0
 def test_general_logarithm_conformal(self, obj_gen):
     for i in range(10000):
         X = obj_gen()
         Y = obj_gen()
         R = rotor_between_objects(X, Y)
         biv = general_logarithm(R)
         R_recon = general_exp(biv).normal()
         npt.assert_almost_equal(R.value, R_recon.value, 4)
Example #10
0
 def test_general_logarithm_scaling(self):
     # Check we can reverse scaling
     for i in range(50):
         scale = 0.5 + np.random.rand()
         biv = -np.log(scale) * e45 / 2
         R = general_exp(biv).normal()
         biv_2 = general_logarithm(R)
         npt.assert_almost_equal(biv.value, biv_2.value)
Example #11
0
 def test_general_logarithm_translation(self):
     # Check we can reverse translation
     for i in range(50):
         t = random_euc_mv()
         biv = ninf * t / 2
         R = general_exp(biv).normal()
         biv_2 = general_logarithm(R)
         npt.assert_almost_equal(biv.value, biv_2.value)
Example #12
0
    def test_general_logarithm_conformal(self):

        object_generators = [random_point_pair, random_line, random_circle, random_plane]
        # object_generators = [random_sphere]

        for obj_gen in object_generators:
            print(obj_gen.__name__)
            for i in range(10000):
                X = obj_gen()
                Y = obj_gen()
                R = rotor_between_objects(X, Y)
                biv = general_logarithm(R)
                R_recon = general_exp(biv).normal()
                np.testing.assert_almost_equal(R.value, R_recon, 3)
Example #13
0
    def test_general_logarithm_TS(self):
        for i in range(5):
            scale = 0.5 + np.random.rand()
            t = random_euc_mv()
            S = generate_dilation_rotor(scale)
            T = generate_translation_rotor(t)
            V = (T * S).normal()
            biv = general_logarithm(V)
            V_rebuilt = (general_exp(biv)).normal()

            C1 = random_point_pair()
            C2 = (V * C1 * ~V).normal()
            C3 = (V_rebuilt * C1 * ~V_rebuilt).normal()
            npt.assert_almost_equal(C2.value, C3.value, 5)
Example #14
0
    def test_general_logarithm_TS(self):
        for i in range(5):
            scale = 0.5 +np.random.rand()
            t = random_euc_mv()
            S = generate_dilation_rotor(scale)
            T = generate_translation_rotor(t)
            V = ( T *S).normal()
            biv = general_logarithm(V)
            V_rebuilt = (general_exp(biv)).normal()

            C1 = random_point_pair()
            C2 = ( V *C1 *~V).normal()
            C3 = (V_rebuilt *C1 *~V_rebuilt).normal()
            np.testing.assert_almost_equal(C2.value, C3.value, 5)
Example #15
0
    def test_general_logarithm_conformal(self):

        object_generators = [random_point_pair, random_line, random_circle, random_plane]
        # object_generators = [random_sphere]

        for obj_gen in object_generators:
            print(obj_gen.__name__)
            for i in range(10000):
                X = obj_gen()
                Y = obj_gen()
                R = rotor_between_objects(X, Y)
                biv = general_logarithm(R)
                R_recon = general_exp(biv).normal()
                np.testing.assert_almost_equal(R.value, R_recon, 3)
Example #16
0
    def test_general_logarithm_TR(self):
        for i in range(5):
            # R = generate_rotation_rotor(0.5, e1, e2).normal()
            # T = generate_translation_rotor(e3 + 7 * e2 - e1).normal()
            # V = (T*R).normal()
            biv_true = random_bivector()
            V = general_exp(biv_true).normal()
            biv = general_logarithm(V)

            V_rebuilt = (general_exp(biv)).normal()

            C1 = random_point_pair()
            C2 = ( V *C1 *~V).normal()
            C3 = (V_rebuilt *C1 *~V_rebuilt).normal()
            np.testing.assert_almost_equal(C2.value, C3.value, 2)
Example #17
0
    def test_general_logarithm_TR(self):
        for i in range(5):
            # R = generate_rotation_rotor(0.5, e1, e2).normal()
            # T = generate_translation_rotor(e3 + 7 * e2 - e1).normal()
            # V = (T*R).normal()
            biv_true = random_bivector()
            V = general_exp(biv_true).normal()
            biv = general_logarithm(V)

            V_rebuilt = (general_exp(biv)).normal()

            C1 = random_point_pair()
            C2 = (V * C1 * ~V).normal()
            C3 = (V_rebuilt * C1 * ~V_rebuilt).normal()
            npt.assert_almost_equal(C2.value, C3.value, 2)