public static Vector3D operator *(Vector3D lhs, Quaternion rhs)
{
Vector3D uv, uuv;
Vector3D qvec = new Vector3D(rhs.X, rhs.Y, rhs.Z);
uv = qvec.CrossProduct(lhs);
uuv = qvec.CrossProduct(uv);
uv *= (2.0f * rhs.W);
uuv *= 2.0f;
return lhs + uv + uuv;
}