diff options
-rw-r--r-- | src/positioning/qdoublevector2d.cpp | 20 | ||||
-rw-r--r-- | src/positioning/qdoublevector2d_p.h | 103 | ||||
-rw-r--r-- | src/positioning/qdoublevector3d.cpp | 43 | ||||
-rw-r--r-- | src/positioning/qdoublevector3d_p.h | 129 |
4 files changed, 138 insertions, 157 deletions
diff --git a/src/positioning/qdoublevector2d.cpp b/src/positioning/qdoublevector2d.cpp index 304bfe72..b9d707e2 100644 --- a/src/positioning/qdoublevector2d.cpp +++ b/src/positioning/qdoublevector2d.cpp @@ -47,10 +47,9 @@ QT_BEGIN_NAMESPACE -QDoubleVector2D::QDoubleVector2D(const QDoubleVector3D &vector) +QDoubleVector2D::QDoubleVector2D(const QDoubleVector3D &vector) : + xp(vector.xp), yp(vector.yp) { - xp = vector.xp; - yp = vector.yp; } double QDoubleVector2D::length() const @@ -58,11 +57,6 @@ double QDoubleVector2D::length() const return qSqrt(xp * xp + yp * yp); } -double QDoubleVector2D::lengthSquared() const -{ - return xp * xp + yp * yp; -} - QDoubleVector2D QDoubleVector2D::normalized() const { // Need some extra precision if the length is very small. @@ -90,21 +84,11 @@ void QDoubleVector2D::normalize() yp /= len; } -double QDoubleVector2D::dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2) -{ - return v1.xp * v2.xp + v1.yp * v2.yp; -} - QDoubleVector3D QDoubleVector2D::toVector3D() const { return QDoubleVector3D(xp, yp, 0.0); } -QPointF QDoubleVector2D::toPointF() const -{ - return QPointF(qreal(xp), qreal(yp)); -} - #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug dbg, const QDoubleVector2D &vector) diff --git a/src/positioning/qdoublevector2d_p.h b/src/positioning/qdoublevector2d_p.h index 74a0fb18..760100c2 100644 --- a/src/positioning/qdoublevector2d_p.h +++ b/src/positioning/qdoublevector2d_p.h @@ -68,52 +68,52 @@ class QDoubleVector3D; class Q_POSITIONING_EXPORT_PRIVATE QDoubleVector2D { public: - QDoubleVector2D(); - QDoubleVector2D(double xpos, double ypos); - explicit QDoubleVector2D(const QPointF &p); + Q_DECL_CONSTEXPR inline QDoubleVector2D(); + Q_DECL_CONSTEXPR inline QDoubleVector2D(double xpos, double ypos); + Q_DECL_CONSTEXPR explicit inline QDoubleVector2D(const QPointF &p); explicit QDoubleVector2D(const QDoubleVector3D &vector); #ifdef QT_BUILD_LOCATION_LIB - explicit QDoubleVector2D(const QVector2D &vector) : xp(vector.x()), yp(vector.y()) {} - operator QVector2D() const { return QVector2D(xp, yp); } + Q_DECL_CONSTEXPR explicit inline QDoubleVector2D(const QVector2D &vector) : xp(vector.x()), yp(vector.y()) {} + Q_DECL_CONSTEXPR inline operator QVector2D() const { return QVector2D(xp, yp); } #endif - inline double manhattanLength() const; - bool isNull() const; + Q_DECL_CONSTEXPR inline double manhattanLength() const; + inline bool isNull() const; - double x() const; - double y() const; + Q_DECL_CONSTEXPR inline double x() const; + Q_DECL_CONSTEXPR inline double y() const; - void setX(double x); - void setY(double y); + inline void setX(double x); + inline void setY(double y); double length() const; - double lengthSquared() const; + Q_DECL_CONSTEXPR inline double lengthSquared() const; QDoubleVector2D normalized() const; void normalize(); - QDoubleVector2D &operator+=(const QDoubleVector2D &vector); - QDoubleVector2D &operator-=(const QDoubleVector2D &vector); - QDoubleVector2D &operator*=(double factor); - QDoubleVector2D &operator*=(const QDoubleVector2D &vector); - QDoubleVector2D &operator/=(double divisor); + inline QDoubleVector2D &operator+=(const QDoubleVector2D &vector); + inline QDoubleVector2D &operator-=(const QDoubleVector2D &vector); + inline QDoubleVector2D &operator*=(double factor); + inline QDoubleVector2D &operator*=(const QDoubleVector2D &vector); + inline QDoubleVector2D &operator/=(double divisor); - static double dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2); + Q_DECL_CONSTEXPR static inline double dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2); - friend inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2); - friend inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2); - friend inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2); - friend inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2); - friend inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector); - friend inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor); - friend inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2); - friend inline const QDoubleVector2D operator-(const QDoubleVector2D &vector); - friend inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor); + friend Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2); + friend Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2); + friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2); + friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2); + friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector); + friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor); + friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2); + friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &vector); + friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor); - friend inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2); + friend Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2); QDoubleVector3D toVector3D() const; - QPointF toPointF() const; + Q_DECL_CONSTEXPR inline QPointF toPointF() const; private: double xp, yp; @@ -123,13 +123,13 @@ private: Q_DECLARE_TYPEINFO(QDoubleVector2D, Q_MOVABLE_TYPE); -inline QDoubleVector2D::QDoubleVector2D() : xp(0.0), yp(0.0) {} +Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D() : xp(0.0), yp(0.0) {} -inline QDoubleVector2D::QDoubleVector2D(double xpos, double ypos) : xp(xpos), yp(ypos) {} +Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D(double xpos, double ypos) : xp(xpos), yp(ypos) {} -inline QDoubleVector2D::QDoubleVector2D(const QPointF &p) : xp(p.x()), yp(p.y()) { } +Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D(const QPointF &p) : xp(p.x()), yp(p.y()) { } -inline double QDoubleVector2D::manhattanLength() const +Q_DECL_CONSTEXPR inline double QDoubleVector2D::manhattanLength() const { return qAbs(x())+qAbs(y()); } @@ -139,12 +139,15 @@ inline bool QDoubleVector2D::isNull() const return qIsNull(xp) && qIsNull(yp); } -inline double QDoubleVector2D::x() const { return double(xp); } -inline double QDoubleVector2D::y() const { return double(yp); } +Q_DECL_CONSTEXPR inline double QDoubleVector2D::x() const { return xp; } +Q_DECL_CONSTEXPR inline double QDoubleVector2D::y() const { return yp; } inline void QDoubleVector2D::setX(double aX) { xp = aX; } inline void QDoubleVector2D::setY(double aY) { yp = aY; } +Q_DECL_CONSTEXPR inline double QDoubleVector2D::lengthSquared() const +{ return xp * xp + yp * yp; } + inline QDoubleVector2D &QDoubleVector2D::operator+=(const QDoubleVector2D &vector) { xp += vector.xp; @@ -180,56 +183,66 @@ inline QDoubleVector2D &QDoubleVector2D::operator/=(double divisor) return *this; } -inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2) +Q_DECL_CONSTEXPR inline double QDoubleVector2D::dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2) +{ + return v1.xp * v2.xp + v1.yp * v2.yp; +} + +Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2) { return v1.xp == v2.xp && v1.yp == v2.yp; } -inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2) +Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2) { return v1.xp != v2.xp || v1.yp != v2.yp; } -inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2) +Q_DECL_CONSTEXPR inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2) { return QDoubleVector2D(v1.xp + v2.xp, v1.yp + v2.yp); } -inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2) +Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2) { return QDoubleVector2D(v1.xp - v2.xp, v1.yp - v2.yp); } -inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector) +Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector) { return QDoubleVector2D(vector.xp * factor, vector.yp * factor); } -inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor) +Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor) { return QDoubleVector2D(vector.xp * factor, vector.yp * factor); } -inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2) +Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2) { return QDoubleVector2D(v1.xp * v2.xp, v1.yp * v2.yp); } -inline const QDoubleVector2D operator-(const QDoubleVector2D &vector) +Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &vector) { return QDoubleVector2D(-vector.xp, -vector.yp); } -inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor) +Q_DECL_CONSTEXPR inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor) { return QDoubleVector2D(vector.xp / divisor, vector.yp / divisor); } -inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2) +Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2) { return qFuzzyCompare(v1.xp, v2.xp) && qFuzzyCompare(v1.yp, v2.yp); } +Q_DECL_CONSTEXPR inline QPointF QDoubleVector2D::toPointF() const +{ + return QPointF(qreal(xp), qreal(yp)); +} + #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug dbg, const QDoubleVector2D &vector); #endif diff --git a/src/positioning/qdoublevector3d.cpp b/src/positioning/qdoublevector3d.cpp index c4e2cf61..621a2ec5 100644 --- a/src/positioning/qdoublevector3d.cpp +++ b/src/positioning/qdoublevector3d.cpp @@ -40,27 +40,12 @@ ****************************************************************************/ #include "qdoublevector3d_p.h" -#include "qdoublevector2d_p.h" #include <QtCore/qdatastream.h> #include <QtCore/qmath.h> #include <QtCore/qdebug.h> QT_BEGIN_NAMESPACE -QDoubleVector3D::QDoubleVector3D(const QDoubleVector2D &vector) -{ - xp = vector.xp; - yp = vector.yp; - zp = 0.0; -} - -QDoubleVector3D::QDoubleVector3D(const QDoubleVector2D &vector, double zpos) -{ - xp = vector.xp; - yp = vector.yp; - zp = zpos; -} - QDoubleVector3D QDoubleVector3D::normalized() const { // Need some extra precision if the length is very small. @@ -91,18 +76,6 @@ void QDoubleVector3D::normalize() zp /= len; } -double QDoubleVector3D::dotProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2) -{ - return v1.xp * v2.xp + v1.yp * v2.yp + v1.zp * v2.zp; -} - -QDoubleVector3D QDoubleVector3D::crossProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2) -{ - return QDoubleVector3D(v1.yp * v2.zp - v1.zp * v2.yp, - v1.zp * v2.xp - v1.xp * v2.zp, - v1.xp * v2.yp - v1.yp * v2.xp); -} - QDoubleVector3D QDoubleVector3D::normal(const QDoubleVector3D &v1, const QDoubleVector3D &v2) { return crossProduct(v1, v2).normalized(); @@ -115,12 +88,6 @@ QDoubleVector3D QDoubleVector3D::normal } double QDoubleVector3D::distanceToPlane - (const QDoubleVector3D &plane, const QDoubleVector3D &normal) const -{ - return dotProduct(*this - plane, normal); -} - -double QDoubleVector3D::distanceToPlane (const QDoubleVector3D &plane1, const QDoubleVector3D &plane2, const QDoubleVector3D &plane3) const { QDoubleVector3D n = normal(plane2 - plane1, plane3 - plane1); @@ -136,21 +103,11 @@ double QDoubleVector3D::distanceToLine return (*this - p).length(); } -QDoubleVector2D QDoubleVector3D::toVector2D() const -{ - return QDoubleVector2D(xp, yp); -} - double QDoubleVector3D::length() const { return qSqrt(xp * xp + yp * yp + zp * zp); } -double QDoubleVector3D::lengthSquared() const -{ - return xp * xp + yp * yp + zp * zp; -} - #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug dbg, const QDoubleVector3D &vector) diff --git a/src/positioning/qdoublevector3d_p.h b/src/positioning/qdoublevector3d_p.h index c2033d34..68e6475d 100644 --- a/src/positioning/qdoublevector3d_p.h +++ b/src/positioning/qdoublevector3d_p.h @@ -58,52 +58,51 @@ #endif #include "qpositioningglobal.h" +#include "qdoublevector2d_p.h" #include <QtCore/qmetatype.h> QT_BEGIN_NAMESPACE -class QDoubleVector2D; - class Q_POSITIONING_EXPORT_PRIVATE QDoubleVector3D { public: - QDoubleVector3D(); - QDoubleVector3D(double xpos, double ypos, double zpos); - QDoubleVector3D(const QDoubleVector2D &vector); - QDoubleVector3D(const QDoubleVector2D &vector, double zpos); + Q_DECL_CONSTEXPR inline QDoubleVector3D(); + Q_DECL_CONSTEXPR inline QDoubleVector3D(double xpos, double ypos, double zpos); + Q_DECL_CONSTEXPR inline QDoubleVector3D(const QDoubleVector2D &vector); + Q_DECL_CONSTEXPR inline QDoubleVector3D(const QDoubleVector2D &vector, double zpos); #ifdef QT_BUILD_LOCATION_LIB - explicit QDoubleVector3D(const QVector3D &vector) : xp(vector.x()), yp(vector.y()), zp(vector.z()) {} - operator QVector3D() const { return QVector3D(xp, yp, zp); } + Q_DECL_CONSTEXPR explicit inline QDoubleVector3D(const QVector3D &vector) : xp(vector.x()), yp(vector.y()), zp(vector.z()) {} + Q_DECL_CONSTEXPR inline operator QVector3D() const { return QVector3D(xp, yp, zp); } #endif - bool isNull() const; + inline bool isNull() const; - double x() const; - double y() const; - double z() const; + Q_DECL_CONSTEXPR inline double x() const; + Q_DECL_CONSTEXPR inline double y() const; + Q_DECL_CONSTEXPR inline double z() const; - void setX(double x); - void setY(double y); - void setZ(double z); + inline void setX(double x); + inline void setY(double y); + inline void setZ(double z); - double get(int i) const; - void set(int i, double value); + inline double get(int i) const; + inline void set(int i, double value); double length() const; - double lengthSquared() const; + Q_DECL_CONSTEXPR inline double lengthSquared() const; QDoubleVector3D normalized() const; void normalize(); - QDoubleVector3D &operator+=(const QDoubleVector3D &vector); - QDoubleVector3D &operator-=(const QDoubleVector3D &vector); - QDoubleVector3D &operator*=(double factor); - QDoubleVector3D &operator*=(const QDoubleVector3D &vector); - QDoubleVector3D &operator/=(double divisor); + inline QDoubleVector3D &operator+=(const QDoubleVector3D &vector); + inline QDoubleVector3D &operator-=(const QDoubleVector3D &vector); + inline QDoubleVector3D &operator*=(double factor); + inline QDoubleVector3D &operator*=(const QDoubleVector3D &vector); + inline QDoubleVector3D &operator/=(double divisor); - static double dotProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2); - static QDoubleVector3D crossProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2); + Q_DECL_CONSTEXPR static inline double dotProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2); + Q_DECL_CONSTEXPR static inline QDoubleVector3D crossProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2); static QDoubleVector3D normal(const QDoubleVector3D &v1, const QDoubleVector3D &v2); static QDoubleVector3D normal (const QDoubleVector3D &v1, const QDoubleVector3D &v2, const QDoubleVector3D &v3); @@ -112,19 +111,19 @@ public: double distanceToPlane(const QDoubleVector3D &plane1, const QDoubleVector3D &plane2, const QDoubleVector3D &plane3) const; double distanceToLine(const QDoubleVector3D &point, const QDoubleVector3D &direction) const; - friend inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2); - friend inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2); - friend inline const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2); - friend inline const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2); - friend inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector); - friend inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor); - friend const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2); - friend inline const QDoubleVector3D operator-(const QDoubleVector3D &vector); - friend inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor); + friend Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2); + friend Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2); + friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2); + friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2); + friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector); + friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor); + friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2); + friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator-(const QDoubleVector3D &vector); + friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor); - friend inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2); + friend Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2); - QDoubleVector2D toVector2D() const; + Q_DECL_CONSTEXPR inline QDoubleVector2D toVector2D() const; private: double xp, yp, zp; @@ -134,18 +133,28 @@ private: Q_DECLARE_TYPEINFO(QDoubleVector3D, Q_MOVABLE_TYPE); -inline QDoubleVector3D::QDoubleVector3D() : xp(0.0), yp(0.0), zp(0.0) {} +Q_DECL_CONSTEXPR inline QDoubleVector3D::QDoubleVector3D() : xp(0.0), yp(0.0), zp(0.0) {} + +Q_DECL_CONSTEXPR inline QDoubleVector3D::QDoubleVector3D(double xpos, double ypos, double zpos) : xp(xpos), yp(ypos), zp(zpos) {} -inline QDoubleVector3D::QDoubleVector3D(double xpos, double ypos, double zpos) : xp(xpos), yp(ypos), zp(zpos) {} +Q_DECL_CONSTEXPR inline QDoubleVector3D::QDoubleVector3D(const QDoubleVector2D &v) + : xp(v.xp), yp(v.yp), zp(0.0) {} + +Q_DECL_CONSTEXPR inline QDoubleVector3D::QDoubleVector3D(const QDoubleVector2D &v, double zpos) + : xp(v.xp), yp(v.yp), zp(zpos) {} inline bool QDoubleVector3D::isNull() const { return qIsNull(xp) && qIsNull(yp) && qIsNull(zp); } -inline double QDoubleVector3D::x() const { return xp; } -inline double QDoubleVector3D::y() const { return yp; } -inline double QDoubleVector3D::z() const { return zp; } +Q_DECL_CONSTEXPR inline double QDoubleVector3D::x() const { return xp; } +Q_DECL_CONSTEXPR inline double QDoubleVector3D::y() const { return yp; } +Q_DECL_CONSTEXPR inline double QDoubleVector3D::z() const { return zp; } + +Q_DECL_CONSTEXPR inline double QDoubleVector3D::lengthSquared() const +{ return xp * xp + yp * yp + zp * zp; } + inline void QDoubleVector3D::setX(double aX) { xp = aX; } inline void QDoubleVector3D::setY(double aY) { yp = aY; } @@ -222,58 +231,76 @@ inline QDoubleVector3D &QDoubleVector3D::operator/=(double divisor) return *this; } -inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2) +Q_DECL_CONSTEXPR inline double QDoubleVector3D::dotProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2) +{ + return v1.xp * v2.xp + v1.yp * v2.yp + v1.zp * v2.zp; +} + +Q_DECL_CONSTEXPR inline QDoubleVector3D QDoubleVector3D::crossProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2) +{ + return QDoubleVector3D(v1.yp * v2.zp - v1.zp * v2.yp, + v1.zp * v2.xp - v1.xp * v2.zp, + v1.xp * v2.yp - v1.yp * v2.xp); +} + +Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2) { return v1.xp == v2.xp && v1.yp == v2.yp && v1.zp == v2.zp; } -inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2) +Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2) { return v1.xp != v2.xp || v1.yp != v2.yp || v1.zp != v2.zp; } -inline const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2) +Q_DECL_CONSTEXPR inline const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2) { return QDoubleVector3D(v1.xp + v2.xp, v1.yp + v2.yp, v1.zp + v2.zp); } -inline const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2) +Q_DECL_CONSTEXPR inline const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2) { return QDoubleVector3D(v1.xp - v2.xp, v1.yp - v2.yp, v1.zp - v2.zp); } -inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector) +Q_DECL_CONSTEXPR inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector) { return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor); } -inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor) +Q_DECL_CONSTEXPR inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor) { return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor); } -inline const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2) +Q_DECL_CONSTEXPR inline const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2) { return QDoubleVector3D(v1.xp * v2.xp, v1.yp * v2.yp, v1.zp * v2.zp); } -inline const QDoubleVector3D operator-(const QDoubleVector3D &vector) +Q_DECL_CONSTEXPR inline const QDoubleVector3D operator-(const QDoubleVector3D &vector) { return QDoubleVector3D(-vector.xp, -vector.yp, -vector.zp); } -inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor) +Q_DECL_CONSTEXPR inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor) { return QDoubleVector3D(vector.xp / divisor, vector.yp / divisor, vector.zp / divisor); } -inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2) +Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2) { return qFuzzyCompare(v1.xp, v2.xp) && qFuzzyCompare(v1.yp, v2.yp) && qFuzzyCompare(v1.zp, v2.zp); } +Q_DECL_CONSTEXPR inline QDoubleVector2D QDoubleVector3D::toVector2D() const +{ + return QDoubleVector2D(xp, yp); +} + + #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug dbg, const QDoubleVector3D &vector); #endif |