summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/positioning/qdoublevector2d.cpp20
-rw-r--r--src/positioning/qdoublevector2d_p.h103
-rw-r--r--src/positioning/qdoublevector3d.cpp43
-rw-r--r--src/positioning/qdoublevector3d_p.h129
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