def test_integration(self): rotation_rate = [0, 0, 2*pi] # one rev per sec around z v = [1, 0, 0] # test vector for dt in [0, 0.25, 0.5, 0.75, 1, 2, 10, 1e-10, random()*10]: # time step in seconds qt = Quaternion() # no rotation qt.integrate(rotation_rate, dt) q_truth = Quaternion(axis=[0,0,1], angle=dt*2*pi) a = qt.rotate(v) b = q_truth.rotate(v) np.testing.assert_almost_equal(a, b, decimal=ALMOST_EQUAL_TOLERANCE) self.assertTrue(qt.is_unit()) # Check integrate() is norm-preserving over many calls q = Quaternion() for i in range(1000): q.integrate([pi, 0, 0], 0.001) self.assertTrue(q.is_unit())
def test_is_unit(self): q1 = Quaternion() q2 = Quaternion(1.0, 0, 0, 0.0001) self.assertTrue(q1.is_unit()) self.assertFalse(q2.is_unit()) self.assertTrue(q2.is_unit(0.001))