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].")
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].")