Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qdoublevector2d_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QDOUBLEVECTOR2D_P_H
5#define QDOUBLEVECTOR2D_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#ifdef QT_BUILD_LOCATION_LIB
19#include <QVector2D>
20#endif
21
23#include <QtCore/qmetatype.h>
24#include <QPointF>
25
27
28class QDoubleVector3D;
29
30class Q_POSITIONING_EXPORT QDoubleVector2D
31{
32public:
34 Q_DECL_CONSTEXPR inline QDoubleVector2D(double xpos, double ypos);
35 Q_DECL_CONSTEXPR explicit inline QDoubleVector2D(const QPointF &p);
36 explicit QDoubleVector2D(const QDoubleVector3D &vector);
37
38 Q_DECL_CONSTEXPR inline double manhattanLength() const;
39 inline bool isNull() const;
40 inline bool isFinite() const;
41
42 Q_DECL_CONSTEXPR inline double x() const;
43 Q_DECL_CONSTEXPR inline double y() const;
44
45 inline void setX(double x);
46 inline void setY(double y);
47
48 double length() const;
49 Q_DECL_CONSTEXPR inline double lengthSquared() const;
50
52 void normalize();
53
55 inline QDoubleVector2D &operator-=(const QDoubleVector2D &vector);
56 inline QDoubleVector2D &operator*=(double factor);
57 inline QDoubleVector2D &operator*=(const QDoubleVector2D &vector);
58 inline QDoubleVector2D &operator/=(double divisor);
59 inline QDoubleVector2D &operator/=(const QDoubleVector2D &vector);
60
61 Q_DECL_CONSTEXPR static inline double dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
62 { return v1.xp * v2.xp + v1.yp * v2.yp; }
63
64
65 friend Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
66 friend Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
69 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector);
70 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor);
73 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor);
74
75 friend Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
76
78 Q_DECL_CONSTEXPR inline QPointF toPointF() const;
79
80private:
81 double xp, yp;
82
83 friend class QDoubleVector3D;
84};
85
87
89
90Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D(double xpos, double ypos) : xp(xpos), yp(ypos) {}
91
93
95{
96 return qAbs(x())+qAbs(y());
97}
98
99inline bool QDoubleVector2D::isNull() const
100{
101 return qIsNull(xp) && qIsNull(yp);
102}
103
104inline bool QDoubleVector2D::isFinite() const
105{
106 return qIsFinite(xp) && qIsFinite(yp);
107}
108
109Q_DECL_CONSTEXPR inline double QDoubleVector2D::x() const { return xp; }
110Q_DECL_CONSTEXPR inline double QDoubleVector2D::y() const { return yp; }
111
112inline void QDoubleVector2D::setX(double aX) { xp = aX; }
113inline void QDoubleVector2D::setY(double aY) { yp = aY; }
114
116{ return xp * xp + yp * yp; }
117
119{
120 xp += vector.xp;
121 yp += vector.yp;
122 return *this;
123}
124
126{
127 xp -= vector.xp;
128 yp -= vector.yp;
129 return *this;
130}
131
133{
134 xp *= factor;
135 yp *= factor;
136 return *this;
137}
138
140{
141 xp *= vector.xp;
142 yp *= vector.yp;
143 return *this;
144}
145
147{
148 xp /= divisor;
149 yp /= divisor;
150 return *this;
151}
152
154{
155 xp /= vector.xp;
156 yp /= vector.yp;
157 return *this;
158}
159
161{
162 return v1.xp == v2.xp && v1.yp == v2.yp;
163}
164
166{
167 return v1.xp != v2.xp || v1.yp != v2.yp;
168}
169
171{
172 return QDoubleVector2D(v1.xp + v2.xp, v1.yp + v2.yp);
173}
174
176{
177 return QDoubleVector2D(v1.xp - v2.xp, v1.yp - v2.yp);
178}
179
181{
182 return QDoubleVector2D(vector.xp * factor, vector.yp * factor);
183}
184
186{
187 return QDoubleVector2D(vector.xp * factor, vector.yp * factor);
188}
189
191{
192 return QDoubleVector2D(v1.xp * v2.xp, v1.yp * v2.yp);
193}
194
199
204
206{
207 return qFuzzyCompare(v1.xp, v2.xp) && qFuzzyCompare(v1.yp, v2.yp);
208}
209
211{
212 return QPointF(qreal(xp), qreal(yp));
213}
214
215#ifndef QT_NO_DEBUG_STREAM
216Q_POSITIONING_EXPORT QDebug operator<<(QDebug dbg, const QDoubleVector2D &vector);
217#endif
218
219#ifndef QT_NO_DATASTREAM
220Q_POSITIONING_EXPORT QDataStream &operator<<(QDataStream &, const QDoubleVector2D &);
221Q_POSITIONING_EXPORT QDataStream &operator>>(QDataStream &, QDoubleVector2D &);
222#endif
223
225
226#endif
\inmodule QtCore\reentrant
Definition qdatastream.h:46
\inmodule QtCore
QDoubleVector2D & operator/=(double divisor)
Q_DECL_CONSTEXPR QPointF toPointF() const
bool isNull() const
static Q_DECL_CONSTEXPR double dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
Q_DECL_CONSTEXPR double lengthSquared() const
Q_DECL_CONSTEXPR QDoubleVector2D()
QDoubleVector2D & operator-=(const QDoubleVector2D &vector)
Q_DECL_CONSTEXPR double manhattanLength() const
bool isFinite() const
void setX(double x)
Q_DECL_CONSTEXPR double x() const
void setY(double y)
QDoubleVector2D & operator+=(const QDoubleVector2D &vector)
QDoubleVector2D & operator*=(double factor)
Q_DECL_CONSTEXPR double y() const
friend class QDoubleVector2D
\inmodule QtCore\reentrant
Definition qpoint.h:217
Combined button and popup list for selecting options.
#define Q_DECL_CONSTEXPR
constexpr bool operator!=(const timespec &t1, const timespec &t2)
constexpr timespec operator+(const timespec &t1, const timespec &t2)
constexpr timespec operator*(const timespec &t1, int mul)
constexpr timespec & operator+=(timespec &t1, const timespec &t2)
constexpr timespec operator-(const timespec &t1, const timespec &t2)
Q_DECL_CONSTEXPR bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
Q_DECL_CONSTEXPR const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor)
Q_DECL_CONSTEXPR bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
Q_DECL_CONSTEXPR const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
Q_DECL_CONSTEXPR bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
Q_DECL_CONSTEXPR const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector)
Q_DECL_CONSTEXPR const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
Q_POSITIONING_EXPORT QDataStream & operator>>(QDataStream &, QDoubleVector2D &)
Q_POSITIONING_EXPORT QDebug operator<<(QDebug dbg, const QDoubleVector2D &vector)
bool qIsFinite(qfloat16 f) noexcept
Definition qfloat16.h:285
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
Definition qfloat16.h:333
bool qIsNull(qfloat16 f) noexcept
Definition qfloat16.h:354
static QVector3D toVector3D(const QDoubleVector3D &in)
constexpr QMargins operator/(const QMargins &margins, int divisor)
Definition qmargins.h:185
constexpr T qAbs(const T &t)
Definition qnumeric.h:328
GLint GLfloat GLfloat GLfloat v2
GLint GLint GLint GLint GLint x
[0]
GLuint divisor
GLenum GLuint GLenum GLsizei length
GLint GLfloat GLfloat v1
GLint y
GLint GLenum GLboolean normalized
Definition qopenglext.h:752
GLfloat GLfloat p
[1]
static void normalize(double &x, double &y)
bool operator==(const QRandomGenerator &rng1, const QRandomGenerator &rng2)
Definition qrandom.cpp:1220
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:158
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:180
double qreal
Definition qtypes.h:187
QList< int > vector
[14]
p setX(p.x()+1)