MAK Legion 1.1 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 
10 #include <ostream>
11 
12 namespace Legion
13 {
14  class Vector2d;
15 
16 //---------------------------------Vector2 Float --------------------------------------
17 
18  class LEGION_DLL Vector2f
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  Vector2f& operator= (const Vector2f& vec);
30 
31  //comparison
32  bool operator== (const Vector2f& vec) const;
33  bool operator!= (const Vector2f& vec) const;
34  bool operator< (const Vector2f& vec) const;
35  bool operator<= (const Vector2f& vec) const;
36  bool operator> (const Vector2f& vec) const;
37  bool operator>= (const Vector2f& vec) const;
38 
39  //arithmetic operations
40  Vector2f operator+ (const Vector2f& vec) const;
41  Vector2f operator- (const Vector2f& vec) const;
42  Vector2f operator* (float scalar) const;
43  Vector2f operator/ (float scalar) const;
44  Vector2f operator- () const;
45 
46  //arithmetic updates
47  Vector2f& operator+= (const Vector2f& vec);
48  Vector2f& operator-= (const Vector2f& vec);
49  Vector2f& operator*= (float scalar);
50  Vector2f& operator/= (float scalar);
51 
52  //vector operations
53  float length() const;
54  float lengthSquared() const;
55  float dot(const Vector2f& vec) const;
56  float normalize();
57  float distanceFrom(const Vector2f& other) const;
58  float distanceFromSquared(const Vector2f& other) const;
59  void setLength(float newLength);
60  void invert();
61 
62  bool isZero();
63 
64  //perpendicular operations
65  // returns (y,-x)
66  Vector2f perpendicular() const;
67  // returns (y,-x)/sqrt(x*x+y*y)
68  Vector2f unitPerp() const;
69  // returns DotPerp((x,y),(V.x,V.y)) = x*V.y - y*V.x
70  float dotPerp(const Vector2f& vec) const;
71 
72  //functions
74  void rotateBy(float degrees, const Vector2f& center);
75 
78  float angleTrig() const;
79 
82  float angle() const;
83 
86  float angleBetween(const Vector2f& b) const;
87 
89 
90  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 
116  class LEGION_DLL Vector2d
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  Vector2d& operator= (const Vector2d& vec);
128 
129  //comparison
130  bool operator== (const Vector2d& vec) const;
131  bool operator!= (const Vector2d& vec) const;
132  bool operator< (const Vector2d& vec) const;
133  bool operator<= (const Vector2d& vec) const;
134  bool operator> (const Vector2d& vec) const;
135  bool operator>= (const Vector2d& vec) const;
136 
137  //arithmetic operations
138  Vector2d operator+ (const Vector2d& vec) const;
139  Vector2d operator- (const Vector2d& vec) const;
140  Vector2d operator* (double scalar) const;
141  Vector2d operator/ (double scalar) const;
142  Vector2d operator- () const;
143 
144  //arithmetic updates
145  Vector2d& operator+= (const Vector2d& vec);
146  Vector2d& operator-= (const Vector2d& vec);
147  Vector2d& operator*= (double scalar);
148  Vector2d& operator/= (double scalar);
149 
150  //vector operations
151  double length() const;
152  double lengthSquared() const;
153  double dot(const Vector2d& vec) const;
154  double normalize();
155  double distanceFrom(const Vector2d& other) const;
156  double distanceFromSquared(const Vector2d& other) const;
157  void setLength(double newLength);
158  void invert();
159 
160  bool isZero();
161 
162  //perpendicular operations
163  // returns (y,-x)
164  Vector2d perpendicular() const;
165  // returns (y,-x)/sqrt(x*x+y*y)
166  Vector2d unitPerp() const;
167  // returns DotPerp((x,y),(V.x,V.y)) = x*V.y - y*V.x
168  double dotPerp(const Vector2d& vec) const;
169 
170  //functions
172  void rotateBy(double degrees, const Vector2d& center);
173 
176  double angleTrig() const;
177 
180  double angle() const;
181 
184  double angleBetween(const Vector2d& b) const;
185 
187 
188  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 
216  class LEGION_DLL Vector3f
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  Vector3f& operator= (const Vector3f& vec);
228 
229  //comparison
230  bool operator== (const Vector3f& vec) const;
231  bool operator!= (const Vector3f& vec) const;
232  bool operator< (const Vector3f& vec) const;
233  bool operator<= (const Vector3f& vec) const;
234  bool operator> (const Vector3f& vec) const;
235  bool operator>= (const Vector3f& vec) const;
236 
237  //arithmetic operations
238  Vector3f operator+ (const Vector3f& vec) const;
239  Vector3f operator- (const Vector3f& vec) const;
240  Vector3f operator* (float scalar) const;
241  Vector3f operator/ (float scalar) const;
242  Vector3f operator- () const;
243 
244  //arithmetic updates
245  Vector3f& operator+= (const Vector3f& vec);
246  Vector3f& operator-= (const Vector3f& vec);
247  Vector3f& operator*= (float scalar);
248  Vector3f& operator/= (float scalar);
249 
250  //vector operations
251  float length() const;
252  float lengthSquared() const;
253  float dot(const Vector3f& vec) const;
254  Vector3f cross(const Vector3f& vec) const;
255  Vector3f unitCross(const Vector3f& vec) const;
256  float normalize();
257  float distanceFrom(const Vector3f& vec) const;
258  float distanceFromSquared(const Vector3f& vec) const;
259 
260  void setLength(float newLength);
261  void invert();
262 
263  bool isZero();
264 
265 
266  //functions
268  float angleBetween(const Vector3f& v) const;
269 
271 
272  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 
301  class LEGION_DLL Vector3d
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  Vector3d& operator= (const Vector3d& vec);
313 
314  //comparison
315  bool operator== (const Vector3d& vec) const;
316  bool operator!= (const Vector3d& vec) const;
317  bool operator< (const Vector3d& vec) const;
318  bool operator<= (const Vector3d& vec) const;
319  bool operator> (const Vector3d& vec) const;
320  bool operator>= (const Vector3d& vec) const;
321 
322  //arithmetic operations
323  Vector3d operator+ (const Vector3d& vec) const;
324  Vector3d operator- (const Vector3d& vec) const;
325  Vector3d operator* (double scalar) const;
326  Vector3d operator/ (double scalar) const;
327  Vector3d operator- () const;
328 
329  //arithmetic updates
330  Vector3d& operator+= (const Vector3d& vec);
331  Vector3d& operator-= (const Vector3d& vec);
332  Vector3d& operator*= (double scalar);
333  Vector3d& operator/= (double scalar);
334 
335  //vector operations
336  double length() const;
337  double lengthSquared() const;
338  double dot(const Vector3d& vec) const;
339  Vector3d cross(const Vector3d& vec) const;
340  Vector3d unitCross(const Vector3d& vec) const;
341  double normalize();
342  double distanceFrom(const Vector3d& vec) const;
343  double distanceFromSquared(const Vector3d& vec) const;
344  void setLength(double newLength);
345  void invert();
346 
347  bool isZero();
348 
349 
350  //functions
352  double angleBetween(const Vector3d& v) const;
353 
355 
356  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 
387  class LEGION_DLL Vector4f
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  Vector4f& operator= (const Vector4f& vec);
399 
400  //comparison
401  bool operator== (const Vector4f& vec) const;
402  bool operator!= (const Vector4f& vec) const;
403  bool operator< (const Vector4f& vec) const;
404  bool operator<= (const Vector4f& vec) const;
405  bool operator> (const Vector4f& vec) const;
406  bool operator>= (const Vector4f& vec) const;
407 
408  //arithmetic operations
409  Vector4f operator+ (const Vector4f& vec) const;
410  Vector4f operator- (const Vector4f& vec) const;
411  Vector4f operator* (float scalar) const;
412  Vector4f operator/ (float scalar) const;
413  Vector4f operator- () const;
414 
415  //arithmetic updates
416  Vector4f& operator+= (const Vector4f& vec);
417  Vector4f& operator-= (const Vector4f& vec);
418  Vector4f& operator*= (float scalar);
419  Vector4f& operator/= (float scalar);
420 
421  //vector operations
422  float length() const;
423  float lengthSquared() const;
424 
425  float normalize();
426  float distanceFrom(const Vector4f& vec) const;
427  float distanceFromSquared(const Vector4f& vec) const;
428 
429  void setLength(float newLength);
430  void invert();
431 
432  bool isZero();
433 
434 
436 
437  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 
467  class LEGION_DLL Vector4d
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  Vector4d& operator= (const Vector4d& vec);
479 
480  //comparison
481  bool operator== (const Vector4d& vec) const;
482  bool operator!= (const Vector4d& vec) const;
483  bool operator< (const Vector4d& vec) const;
484  bool operator<= (const Vector4d& vec) const;
485  bool operator> (const Vector4d& vec) const;
486  bool operator>= (const Vector4d& vec) const;
487 
488  //arithmetic operations
489  Vector4d operator+ (const Vector4d& vec) const;
490  Vector4d operator- (const Vector4d& vec) const;
491  Vector4d operator* (double scalar) const;
492  Vector4d operator/ (double scalar) const;
493  Vector4d operator- () const;
494 
495  //arithmetic updates
496  Vector4d& operator+= (const Vector4d& vec);
497  Vector4d& operator-= (const Vector4d& vec);
498  Vector4d& operator*= (double scalar);
499  Vector4d& operator/= (double scalar);
500 
501  //vector operations
502  double length() const;
503  double lengthSquared() const;
504  double normalize();
505  double distanceFrom(const Vector4d& vec) const;
506  double distanceFromSquared(const Vector4d& vec) const;
507  void setLength(double newLength);
508  void invert();
509 
510  bool isZero();
511 
512 
514 
515  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
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 Wed May 26 15:17:05 EDT 2021 from SVN revision 229676
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)