Example #1
0
    def test_from_matrix(self):
        """Tests the extraction of a rotation quaternion from an AffineMatrix3D"""

        result = Quaternion.from_matrix(rotate_x(90))
        answer = Quaternion(0.7071067811865475, 0.0, 0.0, 0.7071067811865476)

        self.assertAlmostEqual(answer.x, result.x, delta=1e-10,
                               msg="Extracting quaternion from AffineMatrix3D produced wrong result [X].")
        self.assertAlmostEqual(answer.y, result.y, delta=1e-10,
                               msg="Extracting quaternion from AffineMatrix3D produced wrong result [Y].")
        self.assertAlmostEqual(answer.z, result.z, delta=1e-10,
                               msg="Extracting quaternion from AffineMatrix3D produced wrong result [Z].")
        self.assertAlmostEqual(answer.s, result.s, delta=1e-10,
                               msg="Extracting quaternion from AffineMatrix3D produced wrong result [S].")

        matrix = AffineMatrix3D(((0.9330127, 0.0669873, -0.3535534, 0.0),
                                 (0.0669873, 0.9330127, 0.3535534, 0.0),
                                 (0.3535534, -0.3535534, 0.8660254, 0.0),
                                 (0.0, 0.0, 0.0, 1.0)))

        result = Quaternion.from_matrix(matrix)
        answer = Quaternion(-0.1830127018922193, -0.1830127018922193, -0.0, 0.9659258262890683)

        self.assertAlmostEqual(answer.x, result.x, delta=1e-6,
                               msg="Extracting quaternion from AffineMatrix3D produced wrong result [X].")
        self.assertAlmostEqual(answer.y, result.y, delta=1e-6,
                               msg="Extracting quaternion from AffineMatrix3D produced wrong result [Y].")
        self.assertAlmostEqual(answer.z, result.z, delta=1e-6,
                               msg="Extracting quaternion from AffineMatrix3D produced wrong result [Z].")
        self.assertAlmostEqual(answer.s, result.s, delta=1e-6,
                               msg="Extracting quaternion from AffineMatrix3D produced wrong result [S].")
Example #2
0
    def test_transform(self):
        """Testing transform() method."""

        m = AffineMatrix3D([[1, 2, 3, 4], [5, 6, 2, 8], [9, 10, 4, 9],
                            [4, 14, 15, 16]])

        v = Vector3D(-1, 2, 6)

        r = v.transform(m)

        self.assertTrue(isinstance(r, Vector3D),
                        "Transform did not return a Vector3D.")
        self.assertEqual(r.x, 1 * -1 + 2 * 2 + 3 * 6, "Transform failed [X].")
        self.assertEqual(r.y, 5 * -1 + 6 * 2 + 2 * 6, "Transform failed [Y].")
        self.assertEqual(r.z, 9 * -1 + 10 * 2 + 4 * 6, "Transform failed [Z].")