Example #1
0
// This member function multiplies this vqs with the given vector3 vec.  As
//  shown in notes.
CVector3 vqs::MultiplyVector( const CVector3& vec ) const
{
	//Turn the vector into a quaternion-vector.
	DQuaternion quatVec(vec);
	
	//Get the inverse of the current quaternion.
	DQuaternion inverse = this->orientation();
	inverse.inverted();

	//Now multiply inverse*quatVec, then quatVec*normal
	quatVec = inverse * quatVec;
	quatVec = quatVec * this->orientation();

	//Easily transforms back into a vector.
	CVector3 result(quatVec.x, quatVec.y, quatVec.z);
	
	//Apply translation to vector.
	result = result + this->translation();

	//Apply scale after translation.
	result = result * this->scale();

	//operation is complete.
	return result;
}
Example #2
0
void rQuaternion::TransformVector3(rVector3& v) const{
    rVector3 quatVec(x, y , z);
	rVector3 uv = quatVec.Cross(v);
	rVector3 uuv = quatVec.Cross(uv);

	uv *= (2.0f * w);
	uuv *= 2.0f;

	v= v + uv + uuv;
}
Vec3f operator*(const Quaternion &quat, const Vec3f &vec)
{
	Vec3f quatVec(quat.x, quat.y, quat.z);
	Vec3f uv(quatVec.Cross(vec));
	Vec3f uuv(quatVec.Cross(uv));
	uv *= 2.0f * quat.w;
	uuv *= 2.0f;

	return vec + uv + uuv;
}