示例#1
0
Quaternion Quaternion::inverse() const
{
    float lenSquared = lengthSquared();
		
    if(lenSquared > EPSILON)
    {
        float invLenSquared = 1.0f / lenSquared;
        Quaternion conj = conjugated();
        return conj * invLenSquared;
    }
    else
        return IDENTITY;
}
示例#2
0
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()};
}
示例#3
0
/*!
    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();
}