def test_quaternion_reconstruction(): # Test reconstruction of arbitrary unit quaternions for q in unit_quats: M = nq.quat2mat(q) qt = nq.mat2quat(M) # Accept positive or negative match posm = np.allclose(q, qt) negm = np.allclose(q, -qt) yield assert_true, posm or negm
def test_quats(): for x, y, z in eg_rots: M1 = nea.euler2mat(z, y, x) quatM = nq.mat2quat(M1) quat = nea.euler2quat(z, y, x) yield nq.nearly_equivalent, quatM, quat quatS = sympy_euler2quat(z, y, x) yield nq.nearly_equivalent, quat, quatS zp, yp, xp = nea.quat2euler(quat) # The parameters may not be the same as input, but they give the # same rotation matrix M2 = nea.euler2mat(zp, yp, xp) yield assert_array_almost_equal, M1, M2
import nipy.io.imageformats.eulerangles as nea # Example rotations ''' eg_rots = [] params = (-pi,pi,pi/2) zs = np.arange(*params) ys = np.arange(*params) xs = np.arange(*params) for z in zs: for y in ys: for x in xs: eg_rots.append(nea.euler2mat(z,y,x)) # Example quaternions (from rotations) eg_quats = [] for M in eg_rots: eg_quats.append(nq.mat2quat(M)) # M, quaternion pairs eg_pairs = zip(eg_rots, eg_quats) # Set of arbitrary unit quaternions unit_quats = set() params = range(-2,3) for w in params: for x in params: for y in params: for z in params: q = (w, x, y, z) Nq = np.sqrt(np.dot(q, q)) if not Nq == 0: q = tuple([e / Nq for e in q]) unit_quats.add(q)