def test_rotate(self): q = Quaternion.from_axis_angle(numpy.array([0, 1, 0]), math.pi / 2.0) v = q.rotate((1, 0, 0)) self.assertAlmostEqual(0, v[0]) self.assertAlmostEqual(0, v[1]) self.assertAlmostEqual(-1, v[2])
def test_rotate(self): q = Quaternion.from_axis_angle(numpy.array([0, 1, 0]), math.pi / 2.0) v = q.rotate((1, 0, 0)) self.assertAlmostEqual( 0, v[0]) self.assertAlmostEqual( 0, v[1]) self.assertAlmostEqual(-1, v[2])
def test_from_axis_angle(self): theta = math.pi / 5.0 c = math.cos(theta / 2.0) s = math.sin(theta / 2.0) q = Quaternion.from_axis_angle(numpy.array([1, -1, 1]), theta) self.assertAlmostEqual(c, q.w) self.assertAlmostEqual(s * math.sqrt(1.0 / 3.0), q.x) self.assertAlmostEqual(-s * math.sqrt(1.0 / 3.0), q.y) self.assertAlmostEqual(s * math.sqrt(1.0 / 3.0), q.z)
def test_from_axis_angle(self): theta = math.pi / 5.0 c = math.cos(theta / 2.0) s = math.sin(theta / 2.0) q = Quaternion.from_axis_angle(numpy.array([1, -1, 1]), theta) self.assertAlmostEqual( c, q.w) self.assertAlmostEqual( s * math.sqrt(1.0 / 3.0), q.x) self.assertAlmostEqual(-s * math.sqrt(1.0 / 3.0), q.y) self.assertAlmostEqual( s * math.sqrt(1.0 / 3.0), q.z)
def setUp(self): self.a = Quaternion(1, 0, 1, 0) self.b = Quaternion(1, 1, 0, 0) self.c = Quaternion(0, 1, 0, 1)
class TestQuaternion(unittest.TestCase): def setUp(self): self.a = Quaternion(1, 0, 1, 0) self.b = Quaternion(1, 1, 0, 0) self.c = Quaternion(0, 1, 0, 1) def test_iadd(self): self.a += self.c self.b += self.c self.assertEqual(Quaternion(1, 1, 1, 1), self.a) self.assertEqual(Quaternion(1, 2, 0, 1), self.b) def test_isub(self): self.a -= self.c self.b -= self.c self.assertEqual(Quaternion(1, -1, 1, -1), self.a) self.assertEqual(Quaternion(1, 0, 0, -1), self.b) def test_imul(self): ua = numpy.float32(self.a.w) ub = numpy.float32(self.b.w) va = numpy.array([self.a.x, self.a.y, self.a.z]) vb = numpy.array([self.b.x, self.b.y, self.b.z]) u = ua * ub - numpy.dot(va, vb) v = ua * vb + ub * va + numpy.cross(va, vb) self.a *= self.b self.assertAlmostEqual(self.a.w, u) self.assertAlmostEqual(self.a.x, v[0]) self.assertAlmostEqual(self.a.y, v[1]) self.assertAlmostEqual(self.a.z, v[2]) def test_add(self): self.assertEqual(Quaternion(1, 1, 1, 1), self.a + self.c) self.assertEqual(Quaternion(1, 2, 0, 1), self.b + self.c) def test_sub(self): self.assertEqual(Quaternion(1, -1, 1, -1), self.a - self.c) self.assertEqual(Quaternion(1, 0, 0, -1), self.b - self.c) def test_mul(self): ua = numpy.float32(self.a.w) ub = numpy.float32(self.b.w) va = numpy.array([self.a.x, self.a.y, self.a.z]) vb = numpy.array([self.b.x, self.b.y, self.b.z]) u = ua * ub - numpy.dot(va, vb) v = ua * vb + ub * va + numpy.cross(va, vb) r = self.a * self.b self.assertAlmostEqual(r.w, u) self.assertAlmostEqual(r.x, v[0]) self.assertAlmostEqual(r.y, v[1]) self.assertAlmostEqual(r.z, v[2]) def test_eq(self): self.assertTrue(Quaternion(1, 2, 3, 4), Quaternion(1, 2, 3, 4)) def test_ne(self): self.assertTrue(Quaternion(1, 2, 3, 4), Quaternion(0, 2, 3, 4)) def test_length(self): self.assertAlmostEqual(math.sqrt(2.0), self.a.length, places=6) self.assertAlmostEqual(math.sqrt(2.0), self.b.length, places=6) self.assertAlmostEqual(math.sqrt(2.0), self.c.length, places=6) def test_normalize(self): self.assertTrue(self.a.length > 1.0) self.assertTrue(self.b.length > 1.0) self.assertTrue(self.c.length > 1.0) self.assertAlmostEqual(1.0, self.a.normalized().length, places=6) self.assertAlmostEqual(1.0, self.b.normalized().length, places=6) self.assertAlmostEqual(1.0, self.c.normalized().length, places=6) def test_inverted(self): self.assertEqual(self.a, self.a.inverted().inverted()) self.assertAlmostEqual(0.5, self.a.inverted().w) self.assertAlmostEqual(0.0, self.a.inverted().x) self.assertAlmostEqual(-0.5, self.a.inverted().y) self.assertAlmostEqual(0.0, self.a.inverted().z) self.assertTrue(self.a is not self.a.inverted().inverted()) def test_from_axis_angle(self): theta = math.pi / 5.0 c = math.cos(theta / 2.0) s = math.sin(theta / 2.0) q = Quaternion.from_axis_angle(numpy.array([1, -1, 1]), theta) self.assertAlmostEqual(c, q.w) self.assertAlmostEqual(s * math.sqrt(1.0 / 3.0), q.x) self.assertAlmostEqual(-s * math.sqrt(1.0 / 3.0), q.y) self.assertAlmostEqual(s * math.sqrt(1.0 / 3.0), q.z) def test_rotate(self): q = Quaternion.from_axis_angle(numpy.array([0, 1, 0]), math.pi / 2.0) v = q.rotate((1, 0, 0)) self.assertAlmostEqual(0, v[0]) self.assertAlmostEqual(0, v[1]) self.assertAlmostEqual(-1, v[2]) def test_conjugated(self): self.assertEqual(Quaternion(1, 0, -1, 0), self.a.conjugated()) self.assertEqual(Quaternion(1, -1, 0, 0), self.b.conjugated()) self.assertEqual(Quaternion(0, -1, 0, -1), self.c.conjugated())
def test_ne(self): self.assertTrue(Quaternion(1, 2, 3, 4), Quaternion(0, 2, 3, 4))
def test_sub(self): self.assertEqual(Quaternion(1, -1, 1, -1), self.a - self.c) self.assertEqual(Quaternion(1, 0, 0, -1), self.b - self.c)
def test_add(self): self.assertEqual(Quaternion(1, 1, 1, 1), self.a + self.c) self.assertEqual(Quaternion(1, 2, 0, 1), self.b + self.c)
def test_isub(self): self.a -= self.c self.b -= self.c self.assertEqual(Quaternion(1, -1, 1, -1), self.a) self.assertEqual(Quaternion(1, 0, 0, -1), self.b)
def test_iadd(self): self.a += self.c self.b += self.c self.assertEqual(Quaternion(1, 1, 1, 1), self.a) self.assertEqual(Quaternion(1, 2, 0, 1), self.b)
def test_conjugated(self): self.assertEqual(Quaternion(1, 0, -1, 0), self.a.conjugated()) self.assertEqual(Quaternion(1, -1, 0, 0), self.b.conjugated()) self.assertEqual(Quaternion(0, -1, 0, -1), self.c.conjugated())
def setUp(self): self.a = Quaternion(1,0,1,0) self.b = Quaternion(1,1,0,0) self.c = Quaternion(0,1,0,1)
class TestQuaternion(unittest.TestCase): def setUp(self): self.a = Quaternion(1,0,1,0) self.b = Quaternion(1,1,0,0) self.c = Quaternion(0,1,0,1) def test_iadd(self): self.a += self.c self.b += self.c self.assertEqual(Quaternion(1,1,1,1), self.a) self.assertEqual(Quaternion(1,2,0,1), self.b) def test_isub(self): self.a -= self.c self.b -= self.c self.assertEqual(Quaternion(1,-1,1,-1), self.a) self.assertEqual(Quaternion(1,0,0,-1), self.b) def test_imul(self): ua = numpy.float32(self.a.w) ub = numpy.float32(self.b.w) va = numpy.array([self.a.x, self.a.y, self.a.z]) vb = numpy.array([self.b.x, self.b.y, self.b.z]) u = ua * ub - numpy.dot(va, vb) v = ua * vb + ub * va + numpy.cross(va, vb) self.a *= self.b self.assertAlmostEqual(self.a.w, u) self.assertAlmostEqual(self.a.x, v[0]) self.assertAlmostEqual(self.a.y, v[1]) self.assertAlmostEqual(self.a.z, v[2]) def test_add(self): self.assertEqual(Quaternion(1,1,1,1), self.a + self.c) self.assertEqual(Quaternion(1,2,0,1), self.b + self.c) def test_sub(self): self.assertEqual(Quaternion(1,-1,1,-1), self.a - self.c) self.assertEqual(Quaternion(1,0,0,-1), self.b - self.c) def test_mul(self): ua = numpy.float32(self.a.w) ub = numpy.float32(self.b.w) va = numpy.array([self.a.x, self.a.y, self.a.z]) vb = numpy.array([self.b.x, self.b.y, self.b.z]) u = ua * ub - numpy.dot(va, vb) v = ua * vb + ub * va + numpy.cross(va, vb) r = self.a * self.b self.assertAlmostEqual(r.w, u) self.assertAlmostEqual(r.x, v[0]) self.assertAlmostEqual(r.y, v[1]) self.assertAlmostEqual(r.z, v[2]) def test_eq(self): self.assertTrue(Quaternion(1,2,3,4), Quaternion(1,2,3,4)) def test_ne(self): self.assertTrue(Quaternion(1,2,3,4), Quaternion(0,2,3,4)) def test_length(self): self.assertAlmostEqual(math.sqrt(2.0), self.a.length, places=6) self.assertAlmostEqual(math.sqrt(2.0), self.b.length, places=6) self.assertAlmostEqual(math.sqrt(2.0), self.c.length, places=6) def test_normalize(self): self.assertTrue(self.a.length > 1.0) self.assertTrue(self.b.length > 1.0) self.assertTrue(self.c.length > 1.0) self.assertAlmostEqual(1.0, self.a.normalized().length, places=6) self.assertAlmostEqual(1.0, self.b.normalized().length, places=6) self.assertAlmostEqual(1.0, self.c.normalized().length, places=6) def test_inverted(self): self.assertEqual(self.a, self.a.inverted().inverted()) self.assertAlmostEqual( 0.5, self.a.inverted().w) self.assertAlmostEqual( 0.0, self.a.inverted().x) self.assertAlmostEqual(-0.5, self.a.inverted().y) self.assertAlmostEqual( 0.0, self.a.inverted().z) self.assertTrue(self.a is not self.a.inverted().inverted()) def test_from_axis_angle(self): theta = math.pi / 5.0 c = math.cos(theta / 2.0) s = math.sin(theta / 2.0) q = Quaternion.from_axis_angle(numpy.array([1, -1, 1]), theta) self.assertAlmostEqual( c, q.w) self.assertAlmostEqual( s * math.sqrt(1.0 / 3.0), q.x) self.assertAlmostEqual(-s * math.sqrt(1.0 / 3.0), q.y) self.assertAlmostEqual( s * math.sqrt(1.0 / 3.0), q.z) def test_rotate(self): q = Quaternion.from_axis_angle(numpy.array([0, 1, 0]), math.pi / 2.0) v = q.rotate((1, 0, 0)) self.assertAlmostEqual( 0, v[0]) self.assertAlmostEqual( 0, v[1]) self.assertAlmostEqual(-1, v[2]) def test_conjugated(self): self.assertEqual(Quaternion(1, 0, -1, 0), self.a.conjugated()) self.assertEqual(Quaternion(1, -1, 0, 0), self.b.conjugated()) self.assertEqual(Quaternion(0, -1, 0, -1), self.c.conjugated())