Pyrogenesis  trunk
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  {
101  return ( X * vector.X +
102  Y * vector.Y +
103  Z * vector.Z );
104  }
105 
106  CVector3D Cross (const CVector3D &vector) const
107  {
108  CVector3D Temp;
109  Temp.X = (Y * vector.Z) - (Z * vector.Y);
110  Temp.Y = (Z * vector.X) - (X * vector.Z);
111  Temp.Z = (X * vector.Y) - (Y * vector.X);
112  return Temp;
113  }
114 
115  float Length () const;
116  float LengthSquared () const;
117  void Normalize ();
118  CVector3D Normalized () const;
119 
120  // Returns 3 element array of floats, e.g. for glVertex3fv
121  const float* GetFloatArray() const { return &X; }
122 };
123 
124 extern float MaxComponent(const CVector3D& v);
125 
126 #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.h:99
CVector3D Cross(const CVector3D &vector) const
Definition: Vector3D.h:106
Definition: Vector3D.h:28
CVector3D & operator*=(float value)
Definition: Vector3D.h:85
void Normalize()
Definition: Vector3D.cpp:58
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:53
float Y
Definition: Vector3D.h:31
Definition: FixedVector3D.h:24
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
float MaxComponent(const CVector3D &v)
Definition: Vector3D.cpp:77
const float * GetFloatArray() const
Definition: Vector3D.h:121
float LengthSquared() const
Definition: Vector3D.cpp:48
bool operator==(const CVector3D &vector) const
Definition: Vector3D.h:44
float Z
Definition: Vector3D.h:31
CVector3D Normalized() const
Definition: Vector3D.cpp:67
CVector3D operator-(const CVector3D &vector) const
Definition: Vector3D.h:67
CVector3D operator+(const CVector3D &vector) const
Definition: Vector3D.h:54