在Ogre引擎中数学模块里的四元数类中有一个四元数与三维向量相乘的函数。函数如下所示:
Vector3 Quaternion::operator* (const Vector3& v) const
{
// nVidia SDK implementation
Vector3 uv, uuv;
Vector3 qvec(x, y, z);
uv = qvec.crossProduct(v);
uuv = qvec.crossProduct(uv);
uv *= (2.0f * w);
uuv *= 2.0f;
return v + uv + uuv;
}
我们看到该函数输入参数是一个 Vector3 三维向量,返回值同样是个三维向量故该函数功能是对该三维向量进行了某种变换再返回回去。让我们来推导下该函数所代表的公式。
首先该函数先构造了个名叫qvec的三维向量,语句Vector3 qvec(x, y, z); 这里的x,y,z是所在四元数的虚部。而四元数在引擎中用来旋转所以四元数一般表示为