From e628c80dc38f00efd5a7821a8be61eadcf838b62 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Thu, 19 Feb 2015 14:26:57 +0400 Subject: [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 --- src/gui/math3d/qquaternion.cpp | 12 ++++++++++++ src/gui/math3d/qquaternion.h | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/src/gui/math3d/qquaternion.cpp b/src/gui/math3d/qquaternion.cpp index 2fb192dab4..6e9d17d1e1 100644 --- a/src/gui/math3d/qquaternion.cpp +++ b/src/gui/math3d/qquaternion.cpp @@ -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 diff --git a/src/gui/math3d/qquaternion.h b/src/gui/math3d/qquaternion.h index d5300f96df..a02c37ce1d 100644 --- a/src/gui/math3d/qquaternion.h +++ b/src/gui/math3d/qquaternion.h @@ -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; -- cgit v1.2.3