MAK Legion API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
vector.h
Go to the documentation of this file.
1 /*********************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************************/
5 
6 #pragma once
7 
9 #include "legionDataStore/datatypes.h"
10 #include <ostream>
11 
12 namespace Legion
13 {
14  class Vector2d;
15 
16 //---------------------------------Vector2 Float --------------------------------------
17 
19  {
20  public:
21  //constructors
22  Vector2f();
23  Vector2f(const float x, const float y);
24  Vector2f(const float* tuple);
25  Vector2f(const Vector2f& other);
26  Vector2f(const Vector2d& other);
27 
28  //assignment
29  inline Vector2f& operator= (const Vector2f& vec);
30 
31  //comparison
32  inline bool operator== (const Vector2f& vec) const;
33  inline bool operator!= (const Vector2f& vec) const;
34  inline bool operator< (const Vector2f& vec) const;
35  inline bool operator<= (const Vector2f& vec) const;
36  inline bool operator> (const Vector2f& vec) const;
37  inline bool operator>= (const Vector2f& vec) const;
38 
39  //arithmetic operations
40  inline Vector2f operator+ (const Vector2f& vec) const;
41  inline Vector2f operator- (const Vector2f& vec) const;
42  inline Vector2f operator* (float scalar) const;
43  inline Vector2f operator/ (float scalar) const;
44  inline Vector2f operator- () const;
45 
46  //arithmetic updates
47  inline Vector2f& operator+= (const Vector2f& vec);
48  inline Vector2f& operator-= (const Vector2f& vec);
49  inline Vector2f& operator*= (float scalar);
50  inline Vector2f& operator/= (float scalar);
51 
52  //vector operations
53  inline float length() const;
54  inline float lengthSquared() const;
55  inline float dot(const Vector2f& vec) const;
56  inline float normalize();
57  inline float distanceFrom(const Vector2f& other) const;
58  inline float distanceFromSquared(const Vector2f& other) const;
59  inline void setLength(float newLength);
60  inline void invert();
61 
62  inline bool isZero();
63 
64  //perpendicular operations
65  // returns (y,-x)
66  inline Vector2f perpendicular() const;
67  // returns (y,-x)/sqrt(x*x+y*y)
68  inline Vector2f unitPerp() const;
69  // returns DotPerp((x,y),(V.x,V.y)) = x*V.y - y*V.x
70  inline float dotPerp(const Vector2f& vec) const;
71 
72  //functions
74  inline void rotateBy(float degrees, const Vector2f& center);
75 
78  inline float angleTrig() const;
79 
82  inline float angle() const;
83 
86  inline float angleBetween(const Vector2f& b) const;
87 
89 
90  inline bool isBetweenPoints(const Vector2f& begin, const Vector2f& end) const;
94 
98  static Vector2f interpolate(const Vector2f& v0, const Vector2f& v1, float t);
99 
100  union {
101  struct {
102  float x;
103  float y;
104  };
105  float data[2];
106  };
107  };
108 
109  LEGION_DLL Vector2f operator* (float scalar, const Vector2f& vec);
110 
111  // debugging output
112  LEGION_DLL std::ostream& operator<< (std::ostream& outputStr, const Vector2f& vec);
113 
114 //---------------------------------Vector2 Double --------------------------------------
115 
117  {
118  public:
119  //constructors
120  Vector2d();
121  Vector2d(double x, double y);
122  Vector2d(const double* tuple);
123  Vector2d(const Vector2d& other);
124  Vector2d(const Vector2f& other);
125 
126  //assignment
127  inline Vector2d& operator= (const Vector2d& vec);
128 
129  //comparison
130  inline bool operator== (const Vector2d& vec) const;
131  inline bool operator!= (const Vector2d& vec) const;
132  inline bool operator< (const Vector2d& vec) const;
133  inline bool operator<= (const Vector2d& vec) const;
134  inline bool operator> (const Vector2d& vec) const;
135  inline bool operator>= (const Vector2d& vec) const;
136 
137  //arithmetic operations
138  inline Vector2d operator+ (const Vector2d& vec) const;
139  inline Vector2d operator- (const Vector2d& vec) const;
140  inline Vector2d operator* (double scalar) const;
141  inline Vector2d operator/ (double scalar) const;
142  inline Vector2d operator- () const;
143 
144  //arithmetic updates
145  inline Vector2d& operator+= (const Vector2d& vec);
146  inline Vector2d& operator-= (const Vector2d& vec);
147  inline Vector2d& operator*= (double scalar);
148  inline Vector2d& operator/= (double scalar);
149 
150  //vector operations
151  inline double length() const;
152  inline double lengthSquared() const;
153  inline double dot(const Vector2d& vec) const;
154  inline double normalize();
155  inline double distanceFrom(const Vector2d& other) const;
156  inline double distanceFromSquared(const Vector2d& other) const;
157  inline void setLength(double newLength);
158  inline void invert();
159 
160  inline bool isZero();
161 
162  //perpendicular operations
163  // returns (y,-x)
164  inline Vector2d perpendicular() const;
165  // returns (y,-x)/sqrt(x*x+y*y)
166  inline Vector2d unitPerp() const;
167  // returns DotPerp((x,y),(V.x,V.y)) = x*V.y - y*V.x
168  inline double dotPerp(const Vector2d& vec) const;
169 
170  //functions
172  inline void rotateBy(double degrees, const Vector2d& center);
173 
176  inline double angleTrig() const;
177 
180  inline double angle() const;
181 
184  inline double angleBetween(const Vector2d& b) const;
185 
187 
188  inline bool isBetweenPoints(const Vector2d& begin, const Vector2d& end) const;
192 
196  static Vector2d interpolate(const Vector2d& v0, const Vector2d& v1, double t);
197 
198  union {
199  struct {
200  double x;
201  double y;
202  };
203  double data[2];
204  };
205  };
206 
207  LEGION_DLL Vector2d operator* (double scalar, const Vector2d& vec);
208 
209  // debugging output
210  LEGION_DLL std::ostream& operator<< (std::ostream& outputStr, const Vector2d& vec);
211 
212 //---------------------------------Vector3 Float --------------------------------------
213 
214  class Vector3d;
215 
217  {
218  public:
219  //constructors
220  Vector3f();
221  Vector3f(float x, float y, float z);
222  Vector3f(const float* tuple);
223  Vector3f(const Vector3f& other);
224  Vector3f(const Vector3d& other);
225 
226  //assignment
227  inline Vector3f& operator= (const Vector3f& vec);
228 
229  //comparison
230  inline bool operator== (const Vector3f& vec) const;
231  inline bool operator!= (const Vector3f& vec) const;
232  inline bool operator< (const Vector3f& vec) const;
233  inline bool operator<= (const Vector3f& vec) const;
234  inline bool operator> (const Vector3f& vec) const;
235  inline bool operator>= (const Vector3f& vec) const;
236 
237  //arithmetic operations
238  inline Vector3f operator+ (const Vector3f& vec) const;
239  inline Vector3f operator- (const Vector3f& vec) const;
240  inline Vector3f operator* (float scalar) const;
241  inline Vector3f operator/ (float scalar) const;
242  inline Vector3f operator- () const;
243 
244  //arithmetic updates
245  inline Vector3f& operator+= (const Vector3f& vec);
246  inline Vector3f& operator-= (const Vector3f& vec);
247  inline Vector3f& operator*= (float scalar);
248  inline Vector3f& operator/= (float scalar);
249 
250  //vector operations
251  inline float length() const;
252  inline float lengthSquared() const;
253  inline float dot(const Vector3f& vec) const;
254  inline Vector3f cross(const Vector3f& vec) const;
255  inline Vector3f unitCross(const Vector3f& vec) const;
256  inline float normalize();
257  inline float distanceFrom(const Vector3f& vec) const;
258  inline float distanceFromSquared(const Vector3f& vec) const;
259 
260  inline void setLength(float newLength);
261  inline void invert();
262 
263  inline bool isZero();
264 
265 
266  //functions
268  inline float angleBetween(const Vector3f& v) const;
269 
271 
272  inline bool isBetweenPoints(const Vector3f& begin, const Vector3f& end) const;
276 
280  static Vector3f interpolate(const Vector3f& v0, const Vector3f& v1, float t);
281 
282  union {
283  struct {
284  float x;
285  float y;
286  float z;
287  };
288  float data[3];
289  };
290  };
291 
292  // arithmetic operations
293  LEGION_DLL Vector3f operator* (float scalar, const Vector3f& vec);
294 
295  // debugging output
296  LEGION_DLL std::ostream& operator<< (std::ostream& outputStr, const Vector3f& vec);
297 
298 
299 //---------------------------------Vector3 Double --------------------------------------
300 
302  {
303  public:
304  //constructors
305  Vector3d();
306  Vector3d(double x, double y, double z);
307  Vector3d(const double* tuple);
308  Vector3d(const Vector3d& other);
309  Vector3d(const Vector3f& other);
310 
311  //assignment
312  inline Vector3d& operator= (const Vector3d& vec);
313 
314  //comparison
315  inline bool operator== (const Vector3d& vec) const;
316  inline bool operator!= (const Vector3d& vec) const;
317  inline bool operator< (const Vector3d& vec) const;
318  inline bool operator<= (const Vector3d& vec) const;
319  inline bool operator> (const Vector3d& vec) const;
320  inline bool operator>= (const Vector3d& vec) const;
321 
322  //arithmetic operations
323  inline Vector3d operator+ (const Vector3d& vec) const;
324  inline Vector3d operator- (const Vector3d& vec) const;
325  inline Vector3d operator* (double scalar) const;
326  inline Vector3d operator/ (double scalar) const;
327  inline Vector3d operator- () const;
328 
329  //arithmetic updates
330  inline Vector3d& operator+= (const Vector3d& vec);
331  inline Vector3d& operator-= (const Vector3d& vec);
332  inline Vector3d& operator*= (double scalar);
333  inline Vector3d& operator/= (double scalar);
334 
335  //vector operations
336  inline double length() const;
337  inline double lengthSquared() const;
338  inline double dot(const Vector3d& vec) const;
339  inline Vector3d cross(const Vector3d& vec) const;
340  inline Vector3d unitCross(const Vector3d& vec) const;
341  inline double normalize();
342  inline double distanceFrom(const Vector3d& vec) const;
343  inline double distanceFromSquared(const Vector3d& vec) const;
344  inline void setLength(double newLength);
345  inline void invert();
346 
347  inline bool isZero();
348 
349 
350  //functions
352  inline double angleBetween(const Vector3d& v) const;
353 
355 
356  inline bool isBetweenPoints(const Vector3d& begin, const Vector3d& end) const;
360 
364  static Vector3d interpolate(const Vector3d& v0, const Vector3d& v1, double t);
365 
366  union {
367  struct {
368  double x;
369  double y;
370  double z;
371  };
372  double data[3];
373  };
374  };
375 
376  // arithmetic operations
377  LEGION_DLL Vector3d operator* (double scalar, const Vector3d& vec);
378 
379  // debugging output
380  LEGION_DLL std::ostream& operator<< (std::ostream& outputStr, const Vector3d& vec);
381 
382 
383  //---------------------------------Vector4 Float --------------------------------------
384 
385  class Vector4d;
386 
388  {
389  public:
390  //constructors
391  Vector4f();
392  Vector4f(float x, float y, float z, float w);
393  Vector4f(const float* tuple);
394  Vector4f(const Vector4f& other);
395  Vector4f(const Vector4d& other);
396 
397  //assignment
398  inline Vector4f& operator= (const Vector4f& vec);
399 
400  //comparison
401  inline bool operator== (const Vector4f& vec) const;
402  inline bool operator!= (const Vector4f& vec) const;
403  inline bool operator< (const Vector4f& vec) const;
404  inline bool operator<= (const Vector4f& vec) const;
405  inline bool operator> (const Vector4f& vec) const;
406  inline bool operator>= (const Vector4f& vec) const;
407 
408  //arithmetic operations
409  inline Vector4f operator+ (const Vector4f& vec) const;
410  inline Vector4f operator- (const Vector4f& vec) const;
411  inline Vector4f operator* (float scalar) const;
412  inline Vector4f operator/ (float scalar) const;
413  inline Vector4f operator- () const;
414 
415  //arithmetic updates
416  inline Vector4f& operator+= (const Vector4f& vec);
417  inline Vector4f& operator-= (const Vector4f& vec);
418  inline Vector4f& operator*= (float scalar);
419  inline Vector4f& operator/= (float scalar);
420 
421  //vector operations
422  inline float length() const;
423  inline float lengthSquared() const;
424 
425  inline float normalize();
426  inline float distanceFrom(const Vector4f& vec) const;
427  inline float distanceFromSquared(const Vector4f& vec) const;
428 
429  inline void setLength(float newLength);
430  inline void invert();
431 
432  inline bool isZero();
433 
434 
436 
437  inline bool isBetweenPoints(const Vector4f& begin, const Vector4f& end) const;
441 
445  static Vector4f interpolate(const Vector4f& v0, const Vector4f& v1, float t);
446 
447  union {
448  struct {
449  float x;
450  float y;
451  float z;
452  float w;
453  };
454  float data[4];
455  };
456  };
457 
458  // arithmetic operations
459  LEGION_DLL Vector4f operator* (float scalar, const Vector4f& vec);
460 
461  // debugging output
462  LEGION_DLL std::ostream& operator<< (std::ostream& outputStr, const Vector4f& vec);
463 
464 
465  //---------------------------------Vector4 Double --------------------------------------
466 
468  {
469  public:
470  //constructors
471  Vector4d();
472  Vector4d(double x, double y, double z, double w);
473  Vector4d(const double* tuple);
474  Vector4d(const Vector4d& other);
475  Vector4d(const Vector4f& other);
476 
477  //assignment
478  inline Vector4d& operator= (const Vector4d& vec);
479 
480  //comparison
481  inline bool operator== (const Vector4d& vec) const;
482  inline bool operator!= (const Vector4d& vec) const;
483  inline bool operator< (const Vector4d& vec) const;
484  inline bool operator<= (const Vector4d& vec) const;
485  inline bool operator> (const Vector4d& vec) const;
486  inline bool operator>= (const Vector4d& vec) const;
487 
488  //arithmetic operations
489  inline Vector4d operator+ (const Vector4d& vec) const;
490  inline Vector4d operator- (const Vector4d& vec) const;
491  inline Vector4d operator* (double scalar) const;
492  inline Vector4d operator/ (double scalar) const;
493  inline Vector4d operator- () const;
494 
495  //arithmetic updates
496  inline Vector4d& operator+= (const Vector4d& vec);
497  inline Vector4d& operator-= (const Vector4d& vec);
498  inline Vector4d& operator*= (double scalar);
499  inline Vector4d& operator/= (double scalar);
500 
501  //vector operations
502  inline double length() const;
503  inline double lengthSquared() const;
504  inline double normalize();
505  inline double distanceFrom(const Vector4d& vec) const;
506  inline double distanceFromSquared(const Vector4d& vec) const;
507  inline void setLength(double newLength);
508  inline void invert();
509 
510  inline bool isZero();
511 
512 
514 
515  inline bool isBetweenPoints(const Vector4d& begin, const Vector4d& end) const;
519 
523  static Vector4d interpolate(const Vector4d& v0, const Vector4d& v1, double t);
524 
525  union {
526  struct {
527  double x;
528  double y;
529  double z;
530  double w;
531  };
532  double data[4];
533  };
534  };
535 
536  // arithmetic operations
537  LEGION_DLL Vector4d operator* (double scalar, const Vector4d& vec);
538 
539  // debugging output
540  LEGION_DLL std::ostream& operator<< (std::ostream& outputStr, const Vector4d& vec);
541 }
Definition: vector.h:18
double y
Definition: vector.h:201
double z
Definition: vector.h:370
Definition: vector.h:387
double x
Definition: vector.h:200
float y
Definition: vector.h:103
float y
Definition: vector.h:450
float x
Definition: vector.h:102
float y
Definition: vector.h:285
float z
Definition: vector.h:451
float x
Definition: vector.h:284
double y
Definition: vector.h:369
Definition: vector.h:116
#define LEGION_DLL
Definition: legionDataStore/export.h:24
Definition: vector.h:467
Definition: vector.h:216
LEGION_DLL Vector2f operator*(float scalar, const Vector2f &vec)
float z
Definition: vector.h:286
double z
Definition: vector.h:529
double x
Definition: vector.h:527
float w
Definition: vector.h:452
float x
Definition: vector.h:449
double x
Definition: vector.h:368
double w
Definition: vector.h:530
double y
Definition: vector.h:528
LEGION_DLL std::ostream & operator<<(std::ostream &outputStr, const ObjectType &type)
debugging output
Definition: vector.h:301

Document ID: Generated on Mon Mar 8 15:11:30 EST 2021 from SVN revision 225633
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)