Quaternion Quaternion::inverse() const { float lenSquared = lengthSquared(); if(lenSquared > EPSILON) { float invLenSquared = 1.0f / lenSquared; Quaternion conj = conjugated(); return conj * invLenSquared; } else return IDENTITY; }
vec3 operator*(quaternion const& lhs,vec3 const& rhs) { quaternion q=conjugated(lhs)*quaternion(rhs.x(),rhs.y(),rhs.z(),0.0f)*lhs; return {q.x(),q.y(),q.z()}; }
/*! Rotates \a vector with this quaternion to produce a new vector in 3D space. The following code: \code QVector3D result = q.rotatedVector(vector); \endcode is equivalent to the following: \code QVector3D result = (q * QQuaternion(0, vector) * q.conjugated()).vector(); \endcode */ QVector3D QQuaternion::rotatedVector(const QVector3D& vector) const { return (*this * QQuaternion(0, vector) * conjugated()).vector(); }