[QQuaternion] Add operator* that rotates a vector with a quaternion

Same as quaternion.rotatedVector(vec).
Expression like `vec = quat * vec` quite common in the 3D world.

Change-Id: I0edd5a5f80537bd149f03f682b3de15c54463e23
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
bb10
Konstantin Ritt 2015-02-19 14:26:57 +04:00
parent 1872857ca7
commit e628c80dc3
2 changed files with 17 additions and 0 deletions

View File

@ -748,6 +748,18 @@ QQuaternion QQuaternion::fromRotationMatrix(const QMatrix3x3 &rot3x3)
\sa QQuaternion::operator/=()
*/
#ifndef QT_NO_VECTOR3D
/*!
\fn QVector3D operator*(const QQuaternion &quaternion, const QVector3D &vec)
\since 5.5
\relates QQuaternion
Rotates a vector \a vec with a quaternion \a quaternion to produce a new vector in 3D space.
*/
#endif
/*!
\fn bool qFuzzyCompare(const QQuaternion& q1, const QQuaternion& q2)
\relates QQuaternion

View File

@ -308,6 +308,11 @@ inline QVector3D QQuaternion::vector() const
return QVector3D(xp, yp, zp);
}
inline QVector3D operator*(const QQuaternion &quaternion, const QVector3D &vec)
{
return quaternion.rotatedVector(vec);
}
inline void QQuaternion::getAxisAndAngle(QVector3D *axis, float *angle) const
{
float aX, aY, aZ;