Exemplo n.º 1
0
 def test_equality(self):
     q1 = Quaternion([0, 0, 0, 1])
     q2 = Quaternion([0, 0, 0, 1])
     q3 = Quaternion([0, 0, 1, -1])
     self.assertEqual(q1, q2)
     self.assertNotEqual(q1, q3)
     self.assertNotEqual(q2, q3)
Exemplo n.º 2
0
    def test_create(self):
        q = Quaternion()
        self.assertTrue(np.array_equal(q, [0., 0., 0., 1.]))
        self.assertEqual(q.shape, self._shape)

        q = Quaternion([1., 2., 3., 4.])
        self.assertTrue(np.array_equal(q, [1., 2., 3., 4.]))
        self.assertEqual(q.shape, self._shape)

        q = Quaternion(Quaternion([1., 2., 3., 4.]))
        self.assertTrue(np.array_equal(q, [1., 2., 3., 4.]))
        self.assertEqual(q.shape, self._shape)
Exemplo n.º 3
0
    def test_normalized(self):
        q1 = Quaternion([1., 2., 3., 4.])
        self.assertFalse(np.allclose(q1.length, 1.))

        q2 = q1.normalized
        self.assertFalse(np.allclose(q1.length, 1.))
        self.assertTrue(np.allclose(q2.length, 1.))
Exemplo n.º 4
0
    def test_operators_quaternion(self):
        q1 = Quaternion()
        q2 = Quaternion.from_x_rotation(0.5)

        # add
        self.assertRaises(ValueError, lambda: q1 + q2)

        # subtract
        # we had to add this to enable np.array_equal to work
        # as it uses subtraction
        #self.assertRaises(ValueError, lambda: q1 - q2)

        # multiply
        self.assertTrue(
            np.array_equal(
                q1 * q2,
                quaternion.cross(quaternion.create(),
                                 quaternion.create_from_x_rotation(0.5))))

        # divide
        self.assertRaises(ValueError, lambda: q1 / q2)

        # or
        self.assertTrue(
            np.array_equal(
                q1 | q2,
                quaternion.dot(quaternion.create(),
                               quaternion.create_from_x_rotation(0.5))))

        # inverse
        self.assertTrue(
            np.array_equal(
                ~q2,
                quaternion.conjugate(quaternion.create_from_x_rotation(0.5))))
Exemplo n.º 5
0
    def test_create_from_quaternion(self):
        q = Quaternion()
        m = Matrix44.from_quaternion(q)
        self.assertTrue(np.array_equal(m, np.eye(4)))
        self.assertTrue(np.array_equal(m.quaternion, q))

        m = Matrix44(q)
        self.assertTrue(np.array_equal(m, np.eye(4)))
Exemplo n.º 6
0
    def test_operators_matrix44(self):
        q = Quaternion()
        m = Matrix44.from_x_rotation(0.5)

        # add
        self.assertRaises(ValueError, lambda: q + m)

        # subtract
        self.assertRaises(ValueError, lambda: q - m)

        # multiply
        self.assertTrue(np.array_equal(q * m, quaternion.cross(quaternion.create(), quaternion.create_from_matrix(matrix44.create_from_x_rotation(0.5)))))

        # divide
        self.assertRaises(ValueError, lambda: q / m)
Exemplo n.º 7
0
    def test_accessors(self):
        q = Quaternion(np.arange(self._size))
        self.assertTrue(np.array_equal(q.xy, [0, 1]))
        self.assertTrue(np.array_equal(q.xyz, [0, 1, 2]))
        self.assertTrue(np.array_equal(q.xyzw, [0, 1, 2, 3]))

        self.assertTrue(np.array_equal(q.xz, [0, 2]))
        self.assertTrue(np.array_equal(q.xyz, [0, 1, 2]))
        self.assertTrue(np.array_equal(q.xyw, [0, 1, 3]))
        self.assertTrue(np.array_equal(q.xw, [0, 3]))

        self.assertEqual(q.x, 0)
        self.assertEqual(q.y, 1)
        self.assertEqual(q.z, 2)
        self.assertEqual(q.w, 3)

        q.x = 1
        self.assertEqual(q.x, 1)
        self.assertEqual(q[0], 1)
        q.x += 1
        self.assertEqual(q.x, 2)
        self.assertEqual(q[0], 2)
Exemplo n.º 8
0
 def test_is_identity(self):
     self.assertTrue(quaternion.is_identity(Quaternion()))
     self.assertTrue(quaternion.is_identity(Quaternion([0., 0., 0., 1.])))
     self.assertFalse(quaternion.is_identity(Quaternion([1., 0., 0., 0.])))
Exemplo n.º 9
0
    def test_normalize(self):
        q = Quaternion([1., 2., 3., 4.])
        self.assertFalse(np.allclose(q.length, 1.))

        q.normalize()
        self.assertTrue(np.allclose(q.length, 1.))