def test_interpolate(self): q1 = Quaternion(axis=[1, 0, 0], angle=0.0) q2 = Quaternion(axis=[1, 0, 0], angle=2*pi/3) num_intermediates = 3 base = pi/6 list1 = list(Quaternion.intermediates(q1, q2, num_intermediates, include_endpoints=False)) list2 = list(Quaternion.intermediates(q1, q2, num_intermediates, include_endpoints=True)) self.assertEqual(len(list1), num_intermediates) self.assertEqual(len(list2), num_intermediates+2) self.assertEqual(list1[0], list2[1]) self.assertEqual(list1[1], list2[2]) self.assertEqual(list1[2], list2[3]) self.assertEqual(list2[0], q1) self.assertEqual(list2[1], Quaternion(axis=[1, 0, 0], angle=base)) self.assertEqual(list2[2], Quaternion(axis=[1, 0, 0], angle=2*base)) self.assertEqual(list2[3], Quaternion(axis=[1, 0, 0], angle=3*base)) self.assertEqual(list2[4], q2)
def generate_quaternion(): q1 = Quaternion.random() q2 = Quaternion.random() while True: for q in Quaternion.intermediates(q1, q2, 20, include_endpoints=True): yield q #q1, q2 = q2, q1 q1 = q2 q2 = Quaternion.random()