Pyrogenesis  13997
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Vector3D.h
Go to the documentation of this file.
1 /* Copyright (C) 2010 Wildfire Games.
2  * This file is part of 0 A.D.
3  *
4  * 0 A.D. is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * 0 A.D. is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 /*
19  * Provides an interface for a vector in R3 and allows vector and
20  * scalar operations on it
21  */
22 
23 #ifndef INCLUDED_VECTOR3D
24 #define INCLUDED_VECTOR3D
25 
26 class CFixedVector3D;
27 
28 class CVector3D
29 {
30  public:
31  float X, Y, Z;
32 
33  public:
34  CVector3D() : X(0.0f), Y(0.0f), Z(0.0f) {}
35  CVector3D(float x, float y, float z) : X(x), Y(y), Z(z) {}
36  CVector3D(const CFixedVector3D& v);
37 
38  int operator!() const;
39 
40  float& operator[](int index) { return *((&X)+index); }
41  const float& operator[](int index) const { return *((&X)+index); }
42 
43  // vector equality (testing float equality, so please be careful if necessary)
44  bool operator==(const CVector3D &vector) const
45  {
46  return (X == vector.X && Y == vector.Y && Z == vector.Z);
47  }
48 
49  bool operator!=(const CVector3D& vector) const
50  {
51  return !operator==(vector);
52  }
53 
54  CVector3D operator+(const CVector3D& vector) const
55  {
56  return CVector3D(X + vector.X, Y + vector.Y, Z + vector.Z);
57  }
58 
59  CVector3D& operator+=(const CVector3D& vector)
60  {
61  X += vector.X;
62  Y += vector.Y;
63  Z += vector.Z;
64  return *this;
65  }
66 
67  CVector3D operator-(const CVector3D& vector) const
68  {
69  return CVector3D(X - vector.X, Y - vector.Y, Z - vector.Z);
70  }
71 
72  CVector3D& operator-=(const CVector3D& vector)
73  {
74  X -= vector.X;
75  Y -= vector.Y;
76  Z -= vector.Z;
77  return *this;
78  }
79 
80  CVector3D operator*(float value) const
81  {
82  return CVector3D(X * value, Y * value, Z * value);
83  }
84 
85  CVector3D& operator*=(float value)
86  {
87  X *= value;
88  Y *= value;
89  Z *= value;
90  return *this;
91  }
92 
94  {
95  return CVector3D(-X, -Y, -Z);
96  }
97 
98  public:
99  float Dot (const CVector3D &vector) const;
100  CVector3D Cross (const CVector3D &vector) const;
101 
102  float Length () const;
103  float LengthSquared () const;
104  void Normalize ();
105  CVector3D Normalized () const;
106 
107  // Returns 3 element array of floats, e.g. for glVertex3fv
108  const float* GetFloatArray() const { return &X; }
109 };
110 
111 extern float MaxComponent(const CVector3D& v);
112 
113 #endif
CVector3D()
Definition: Vector3D.h:34
CVector3D operator*(float value) const
Definition: Vector3D.h:80
CVector3D & operator+=(const CVector3D &vector)
Definition: Vector3D.h:59
CVector3D operator-() const
Definition: Vector3D.h:93
float Dot(const CVector3D &vector) const
Definition: Vector3D.cpp:48
CVector3D Cross(const CVector3D &vector) const
Definition: Vector3D.cpp:55
CVector3D & operator*=(float value)
Definition: Vector3D.h:85
void Normalize()
Definition: Vector3D.cpp:77
CVector3D(float x, float y, float z)
Definition: Vector3D.h:35
int operator!() const
Definition: Vector3D.cpp:37
float X
Definition: Vector3D.h:31
CVector3D & operator-=(const CVector3D &vector)
Definition: Vector3D.h:72
float Length() const
Definition: Vector3D.cpp:72
float Y
Definition: Vector3D.h:31
bool operator!=(const CVector3D &vector) const
Definition: Vector3D.h:49
float & operator[](int index)
Definition: Vector3D.h:40
const float & operator[](int index) const
Definition: Vector3D.h:41
const float * GetFloatArray() const
Definition: Vector3D.h:108
float LengthSquared() const
Definition: Vector3D.cpp:67
bool operator==(const CVector3D &vector) const
Definition: Vector3D.h:44
float Z
Definition: Vector3D.h:31
float MaxComponent(const CVector3D &v)
Definition: Vector3D.cpp:96
CVector3D Normalized() const
Definition: Vector3D.cpp:86
CVector3D operator-(const CVector3D &vector) const
Definition: Vector3D.h:67
CVector3D operator+(const CVector3D &vector) const
Definition: Vector3D.h:54