My Project
ParaPoint.h
1 #pragma once
2 
3 namespace ParaEngine
4 {
5  class QPoint
6  {
7  public:
8  QPoint();
9  QPoint(int xpos, int ypos);
10 
11  inline bool isNull() const;
12 
13  inline int x() const;
14  inline int y() const;
15  inline void setX(int x);
16  inline void setY(int y);
17 
18  inline int manhattanLength() const;
19 
20  inline int &rx();
21  inline int &ry();
22 
23  inline QPoint &operator+=(const QPoint &p);
24  inline QPoint &operator-=(const QPoint &p);
25 
26  inline QPoint &operator*=(float factor);
27  inline QPoint &operator*=(double factor);
28  inline QPoint &operator*=(int factor);
29 
30  inline QPoint &operator/=(float divisor);
31 
32  static inline int dotProduct(const QPoint &p1, const QPoint &p2)
33  {
34  return p1.xp * p2.xp + p1.yp * p2.yp;
35  }
36 
37  friend inline bool operator==(const QPoint &, const QPoint &);
38  friend inline bool operator!=(const QPoint &, const QPoint &);
39  friend inline const QPoint operator+(const QPoint &, const QPoint &);
40  friend inline const QPoint operator-(const QPoint &, const QPoint &);
41  friend inline const QPoint operator*(const QPoint &, float);
42  friend inline const QPoint operator*(float, const QPoint &);
43  friend inline const QPoint operator*(const QPoint &, double);
44  friend inline const QPoint operator*(double, const QPoint &);
45  friend inline const QPoint operator*(const QPoint &, int);
46  friend inline const QPoint operator*(int, const QPoint &);
47  friend inline const QPoint operator+(const QPoint &);
48  friend inline const QPoint operator-(const QPoint &);
49  friend inline const QPoint operator/(const QPoint &, float);
50 
51  private:
52  friend class QTransform;
53  int xp;
54  int yp;
55  };
56 
57 
58  /*****************************************************************************
59  QPoint inline functions
60  *****************************************************************************/
61 
62  inline QPoint::QPoint() : xp(0), yp(0) {}
63 
64  inline QPoint::QPoint(int xpos, int ypos) : xp(xpos), yp(ypos) {}
65 
66  inline bool QPoint::isNull() const
67  {
68  return xp == 0 && yp == 0;
69  }
70 
71  inline int QPoint::x() const
72  {
73  return xp;
74  }
75 
76  inline int QPoint::y() const
77  {
78  return yp;
79  }
80 
81  inline void QPoint::setX(int xpos)
82  {
83  xp = xpos;
84  }
85 
86  inline void QPoint::setY(int ypos)
87  {
88  yp = ypos;
89  }
90 
91  inline int QPoint::manhattanLength() const
92  {
93  return Math::Abs(x()) + Math::Abs(y());
94  }
95 
96  inline int &QPoint::rx()
97  {
98  return xp;
99  }
100 
101  inline int &QPoint::ry()
102  {
103  return yp;
104  }
105 
106  inline QPoint &QPoint::operator+=(const QPoint &p)
107  {
108  xp += p.xp; yp += p.yp; return *this;
109  }
110 
111  inline QPoint &QPoint::operator-=(const QPoint &p)
112  {
113  xp -= p.xp; yp -= p.yp; return *this;
114  }
115 
116  inline QPoint &QPoint::operator*=(float factor)
117  {
118  xp = (int)Math::Round(xp*factor); yp = (int)Math::Round(yp*factor); return *this;
119  }
120 
121  inline QPoint &QPoint::operator*=(double factor)
122  {
123  xp = (int)Math::Round((float)(xp*factor)); yp = (int)Math::Round((float)(yp*factor)); return *this;
124  }
125 
126  inline QPoint &QPoint::operator*=(int factor)
127  {
128  xp = xp*factor; yp = yp*factor; return *this;
129  }
130 
131  inline bool operator==(const QPoint &p1, const QPoint &p2)
132  {
133  return p1.xp == p2.xp && p1.yp == p2.yp;
134  }
135 
136  inline bool operator!=(const QPoint &p1, const QPoint &p2)
137  {
138  return p1.xp != p2.xp || p1.yp != p2.yp;
139  }
140 
141  inline const QPoint operator+(const QPoint &p1, const QPoint &p2)
142  {
143  return QPoint(p1.xp + p2.xp, p1.yp + p2.yp);
144  }
145 
146  inline const QPoint operator-(const QPoint &p1, const QPoint &p2)
147  {
148  return QPoint(p1.xp - p2.xp, p1.yp - p2.yp);
149  }
150 
151  inline const QPoint operator*(const QPoint &p, float factor)
152  {
153  return QPoint(Math::Round(p.xp*factor), Math::Round(p.yp*factor));
154  }
155 
156  inline const QPoint operator*(const QPoint &p, double factor)
157  {
158  return QPoint((int)Math::Round((float)(p.xp*factor)), (int)Math::Round((float)(p.yp*factor)));
159  }
160 
161  inline const QPoint operator*(const QPoint &p, int factor)
162  {
163  return QPoint(p.xp*factor, p.yp*factor);
164  }
165 
166  inline const QPoint operator*(float factor, const QPoint &p)
167  {
168  return QPoint(Math::Round(p.xp*factor), Math::Round(p.yp*factor));
169  }
170 
171  inline const QPoint operator*(double factor, const QPoint &p)
172  {
173  return QPoint((int)Math::Round(float(p.xp*factor)), (int)Math::Round(float(p.yp*factor)));
174  }
175 
176  inline const QPoint operator*(int factor, const QPoint &p)
177  {
178  return QPoint(p.xp*factor, p.yp*factor);
179  }
180 
181  inline const QPoint operator+(const QPoint &p)
182  {
183  return p;
184  }
185 
186  inline const QPoint operator-(const QPoint &p)
187  {
188  return QPoint(-p.xp, -p.yp);
189  }
190 
191  inline QPoint &QPoint::operator/=(float c)
192  {
193  xp = Math::Round(xp / c);
194  yp = Math::Round(yp / c);
195  return *this;
196  }
197 
198  inline const QPoint operator/(const QPoint &p, float c)
199  {
200  return QPoint(Math::Round(p.xp / c), Math::Round(p.yp / c));
201  }
202 
203  class QPointF
204  {
205  public:
206  QPointF();
207  QPointF(const QPoint &p);
208  QPointF(float xpos, float ypos);
209 
210  inline float manhattanLength() const;
211 
212  inline bool isNull() const;
213 
214  inline float x() const;
215  inline float y() const;
216  inline void setX(float x);
217  inline void setY(float y);
218 
219  inline float &rx();
220  inline float &ry();
221 
222  inline QPointF &operator+=(const QPointF &p);
223  inline QPointF &operator-=(const QPointF &p);
224  inline QPointF &operator*=(float c);
225  inline QPointF &operator/=(float c);
226 
227  static inline float dotProduct(const QPointF &p1, const QPointF &p2)
228  {
229  return p1.xp * p2.xp + p1.yp * p2.yp;
230  }
231 
232  friend inline bool operator==(const QPointF &, const QPointF &);
233  friend inline bool operator!=(const QPointF &, const QPointF &);
234  friend inline const QPointF operator+(const QPointF &, const QPointF &);
235  friend inline const QPointF operator-(const QPointF &, const QPointF &);
236  friend inline const QPointF operator*(float, const QPointF &);
237  friend inline const QPointF operator*(const QPointF &, float);
238  friend inline const QPointF operator+(const QPointF &);
239  friend inline const QPointF operator-(const QPointF &);
240  friend inline const QPointF operator/(const QPointF &, float);
241 
242  QPoint toPoint() const;
243 
244  private:
245  friend class QMatrix;
246  friend class QTransform;
247 
248  float xp;
249  float yp;
250  };
251 
252 
253  /*****************************************************************************
254  QPointF inline functions
255  *****************************************************************************/
256 
257  inline QPointF::QPointF() : xp(0), yp(0) { }
258 
259  inline QPointF::QPointF(float xpos, float ypos) : xp(xpos), yp(ypos) { }
260 
261  inline QPointF::QPointF(const QPoint &p) : xp((float)p.x()), yp((float)p.y()) { }
262 
263  inline float QPointF::manhattanLength() const
264  {
265  return Math::Abs(x()) + Math::Abs(y());
266  }
267 
268  inline bool QPointF::isNull() const
269  {
270  return Math::IsNull(xp) && Math::IsNull(yp);
271  }
272 
273  inline float QPointF::x() const
274  {
275  return xp;
276  }
277 
278  inline float QPointF::y() const
279  {
280  return yp;
281  }
282 
283  inline void QPointF::setX(float xpos)
284  {
285  xp = xpos;
286  }
287 
288  inline void QPointF::setY(float ypos)
289  {
290  yp = ypos;
291  }
292 
293  inline float &QPointF::rx()
294  {
295  return xp;
296  }
297 
298  inline float &QPointF::ry()
299  {
300  return yp;
301  }
302 
303  inline QPointF &QPointF::operator+=(const QPointF &p)
304  {
305  xp += p.xp;
306  yp += p.yp;
307  return *this;
308  }
309 
310  inline QPointF &QPointF::operator-=(const QPointF &p)
311  {
312  xp -= p.xp; yp -= p.yp; return *this;
313  }
314 
315  inline QPointF &QPointF::operator*=(float c)
316  {
317  xp *= c; yp *= c; return *this;
318  }
319 
320  inline bool operator==(const QPointF &p1, const QPointF &p2)
321  {
322  return Math::FuzzyIsNull(p1.xp - p2.xp) && Math::FuzzyIsNull(p1.yp - p2.yp);
323  }
324 
325  inline bool operator!=(const QPointF &p1, const QPointF &p2)
326  {
327  return !Math::FuzzyIsNull(p1.xp - p2.xp) || !Math::FuzzyIsNull(p1.yp - p2.yp);
328  }
329 
330  inline const QPointF operator+(const QPointF &p1, const QPointF &p2)
331  {
332  return QPointF(p1.xp + p2.xp, p1.yp + p2.yp);
333  }
334 
335  inline const QPointF operator-(const QPointF &p1, const QPointF &p2)
336  {
337  return QPointF(p1.xp - p2.xp, p1.yp - p2.yp);
338  }
339 
340  inline const QPointF operator*(const QPointF &p, float c)
341  {
342  return QPointF(p.xp*c, p.yp*c);
343  }
344 
345  inline const QPointF operator*(float c, const QPointF &p)
346  {
347  return QPointF(p.xp*c, p.yp*c);
348  }
349 
350  inline const QPointF operator+(const QPointF &p)
351  {
352  return p;
353  }
354 
355  inline const QPointF operator-(const QPointF &p)
356  {
357  return QPointF(-p.xp, -p.yp);
358  }
359 
360  inline QPointF &QPointF::operator/=(float divisor)
361  {
362  xp /= divisor;
363  yp /= divisor;
364  return *this;
365  }
366 
367  inline const QPointF operator/(const QPointF &p, float divisor)
368  {
369  return QPointF(p.xp / divisor, p.yp / divisor);
370  }
371 
372  inline QPoint QPointF::toPoint() const
373  {
374  return QPoint(Math::Round(xp), Math::Round(yp));
375  }
376 }
static int Round(float fValue)
get the closest integer near the specified float number.
Definition: ParaMath.h:609
Definition: ParaPoint.h:203
different physics engine has different winding order.
Definition: EventBinding.h:32
Definition: qtransform.h:14
Definition: ParaPoint.h:5
Definition: qmatrix.h:12