我正在处理的一个项目需要一个模拟 3ds/gmax 的四元数加法的函数。(quat 1 2 3 4)+(quat 3 5 7 9) 的测试用例应该等于 (quat 20 40 54 2)。这些季铵盐在 xyzw 中。所以,我认为这是基本代数,给定干净的数字。它必须是这样的乘法函数,因为它不涉及 sin/cos:
const quaternion &operator *=(const quaternion &q)
{
float x= v.x, y= v.y, z= v.z, sn= s*q.s - v*q.v;
v.x= y*q.v.z - z*q.v.y + s*q.v.x + x*q.s;
v.y= z*q.v.x - x*q.v.z + s*q.v.y + y*q.s;
v.z= x*q.v.y - y*q.v.x + s*q.v.z + z*q.s;
s= sn;
return *this;
}
但是,我不明白 sn= s*qs - v*qv 应该如何工作。s 是浮点数,v 是向量。将向量相乘并添加到浮点数?我什至不确定这些值代表哪些方向/旋转/方向,但如果函数满足上面的 quat 值,它就会起作用。