四元数乘法 Multiplying Quaternions
整理四元数乘法代码实现、组合顺序以及左右乘旋转约定。
四元数乘法 Multiplying Quaternions
根据我们之前的数学推理,可知 单位四元数 乘法表示组合旋转
Quaternion Mul(Quaternion q, Quaternion p) {
Quaternion result;
result.x = p.x * q.w + p.y * q.z - p.z * q.y + p.w * q.x;
result.y = -(p.x * q.z) + p.y * q.w + p.z * q.x + p.w * q.y;
result.z = p.x * q.y - p.y * q.x + p.z * q.w + p.w * q.z;
result.w = -(p.x * q.x) - p.y * q.y - p.z * q.z + p.w * q.w;
return result;
}四元数相乘也可以表示为向量计算
Quaternion Mul_AlternateImplementation(Quaternion q, Quaternion p) {
Vector3 q_v = Vector3(q.x, q.y, q.z);
Vector3 p_v = Vector3(p.x, p.y, p.z);
float q_r = q.w;
float p_r = p.w;
float scalar = q_r * p_r - Dot(q_v, p_v)
// Assume + is vector addition here
Vector3 vector = Scale(p_v, q_r) + Scale(q_v, p_r) + Cross(q_v, p_v);
Quaternion result;
result.w = scalar;
result.x = vector.x;
result.y = vector.y;
result.z = vector.z;
return result;
}