Ho I'm sorry ... I just see that the code I sent was not the right one ... I did some testing and suddenly the code had become anything ...
def slerp_quaternion(m_quaternion_1, m_quaternion_2, f_weight): """ !@Brief Apply Spherical interpolation between two quaternions. @type m_quaternion_1: OpenMaya.MQuaternion @param m_quaternion_1: First Quaternion. @type m_quaternion_2: OpenMaya.MQuaternion @param m_quaternion_2: Second Quaternion. @type f_weight: float @param f_weight: Value for blending. """ # Normalize quaternions m_quaternion_1 = m_quaternion_1.normal() m_quaternion_2 = m_quaternion_2.normal() # If is equial return first quaternion if m_quaternion_1.isEquivalent(m_quaternion_2): return m_quaternion_1 # TODO: fixlater # If the inputs are too close for comfort, # linearly interpolate and normalize the result. # if abs(dot) > 0.9995: # pass # If the dot product is negative, the quaternions # have opposite handed-ness and slerp won't take # the shorter path. Fix by reversing one quaternion. # dot = dot_product(m_quaternion_1, m_quaternion_2) dot = dot_product(m_quaternion_1, m_quaternion_2) if dot < 0.0: m_quaternion_2.negateIt() dot *= -1.0 # Weight Blend f_scale_1 = 1.0 - f_weight f_scale_2 = f_weight # Get Quaternion median dot = max(min(dot, 1.0), -1.0) f_theta = math.acos(dot) f_sin_theta = math.sin(f_theta) f_scale_1 = math.sin(f_scale_1 * f_theta) / f_sin_theta f_scale_2 = math.sin(f_scale_2 * f_theta) / f_sin_theta # New Quaternion a_new_values = [] for i in xrange(4): a_new_values.append(f_scale_1 * m_quaternion_1[i] + f_scale_2 * m_quaternion_2[i]) return OpenMaya.MQuaternion(a_new_values[0], a_new_values[1], a_new_values[2], a_new_values[3]) I do not get a better result. I wanted to use the function slerp of maya but it is accessible only in c ++ not in python. So I make a slerp function in python. The current problem is that as I can not know if my dot is positive or negative. So I have a flip of 180 that is done on my rotation. I understand better now with your explanation. I use the matrices to retrieve quaternions. So I would have to retrieve the quaternions since the euler rotations? -- You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group. To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/54eec6b1-e0f0-42e1-af3b-0ee6d4e69d94%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.