rev |
line source |
nuclear@0
|
1 #ifndef VMATH4_VECTOR_H_
|
nuclear@0
|
2 #define VMATH4_VECTOR_H_
|
nuclear@0
|
3
|
nuclear@0
|
4 #include "matrix.h"
|
nuclear@0
|
5 #include "quat.h"
|
nuclear@0
|
6
|
nuclear@0
|
7 namespace vmath {
|
nuclear@0
|
8
|
nuclear@0
|
9 class Vector3;
|
nuclear@0
|
10 class Vector4;
|
nuclear@0
|
11
|
nuclear@0
|
12 class Vector2 {
|
nuclear@0
|
13 public:
|
nuclear@0
|
14 float x, y;
|
nuclear@0
|
15
|
nuclear@0
|
16 inline Vector2();
|
nuclear@0
|
17 inline Vector2(float x, float y);
|
nuclear@0
|
18 explicit inline Vector2(float *v);
|
nuclear@0
|
19 explicit inline Vector2(float scalar);
|
nuclear@0
|
20 explicit inline Vector2(const Vector3 &v);
|
nuclear@0
|
21 explicit inline Vector2(const Vector4 &v);
|
nuclear@0
|
22
|
nuclear@0
|
23 inline float &operator [](int idx);
|
nuclear@0
|
24 inline const float &operator [](int idx) const;
|
nuclear@0
|
25
|
nuclear@0
|
26 operator float* ();
|
nuclear@0
|
27 operator const float* () const;
|
nuclear@0
|
28 };
|
nuclear@0
|
29
|
nuclear@0
|
30 inline Vector2 operator -(const Vector2 &v);
|
nuclear@0
|
31
|
nuclear@0
|
32 inline Vector2 operator +(const Vector2 &a, const Vector2 &b);
|
nuclear@0
|
33 inline Vector2 operator -(const Vector2 &a, const Vector2 &b);
|
nuclear@0
|
34
|
nuclear@0
|
35 inline Vector2 operator *(const Vector2 &a, const Vector2 &b);
|
nuclear@0
|
36 inline Vector2 operator *(const Vector2 &v, float s);
|
nuclear@0
|
37 inline Vector2 operator *(float s, const Vector2 &v);
|
nuclear@0
|
38
|
nuclear@0
|
39 inline Vector2 operator /(const Vector2 &a, const Vector2 &b);
|
nuclear@0
|
40 inline Vector2 operator /(const Vector2 &v, float s);
|
nuclear@0
|
41 inline Vector2 operator /(float s, const Vector2 &v);
|
nuclear@0
|
42
|
nuclear@0
|
43 inline Vector2 operator +=(const Vector2 &a, const Vector2 &b);
|
nuclear@0
|
44 inline Vector2 operator -=(const Vector2 &a, const Vector2 &b);
|
nuclear@0
|
45 inline Vector2 operator *=(const Vector2 &a, const Vector2 &b);
|
nuclear@0
|
46 inline Vector2 operator *=(const Vector2 &v, float s);
|
nuclear@0
|
47 inline Vector2 operator /=(const Vector2 &a, const Vector2 &b);
|
nuclear@0
|
48 inline Vector2 operator /=(const Vector2 &v, float s);
|
nuclear@0
|
49
|
nuclear@0
|
50 inline float dot(const Vector2 &a, const Vector2 &b);
|
nuclear@0
|
51
|
nuclear@0
|
52 inline float length(const Vector2 &v);
|
nuclear@0
|
53 inline float length_sq(const Vector2 &v);
|
nuclear@0
|
54
|
nuclear@0
|
55 inline Vector2 normalize(const Vector2 &v);
|
nuclear@0
|
56
|
nuclear@0
|
57
|
nuclear@0
|
58 class Vector3 {
|
nuclear@0
|
59 public:
|
nuclear@0
|
60 float x, y, z;
|
nuclear@0
|
61
|
nuclear@0
|
62 inline Vector3();
|
nuclear@0
|
63 inline Vector3(float x, float y, float z);
|
nuclear@0
|
64 explicit inline Vector3(float *v);
|
nuclear@0
|
65 explicit inline Vector3(float scalar);
|
nuclear@0
|
66 explicit inline Vector3(const Vector2 &v);
|
nuclear@0
|
67 explicit inline Vector3(const Vector4 &v);
|
nuclear@0
|
68
|
nuclear@0
|
69 inline float &operator [](int idx);
|
nuclear@0
|
70 inline const float &operator [](int idx) const;
|
nuclear@0
|
71
|
nuclear@0
|
72 operator float* ();
|
nuclear@0
|
73 operator const float* () const;
|
nuclear@0
|
74 };
|
nuclear@0
|
75
|
nuclear@0
|
76 inline Vector3 operator -(const Vector3 &v);
|
nuclear@0
|
77
|
nuclear@0
|
78 // Vector op Vector
|
nuclear@0
|
79 inline Vector3 operator +(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
80 inline Vector3 operator -(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
81 inline Vector3 operator *(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
82 inline Vector3 operator /(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
83
|
nuclear@0
|
84 // binary op between Vector and scalar
|
nuclear@0
|
85 inline Vector3 operator +(const Vector3 &v, float s);
|
nuclear@0
|
86 inline Vector3 operator +(float s, const Vector3 &v);
|
nuclear@0
|
87 inline Vector3 operator -(const Vector3 &v, float s);
|
nuclear@0
|
88 inline Vector3 operator -(float s, const Vector3 &v);
|
nuclear@0
|
89 inline Vector3 operator *(const Vector3 &v, float s);
|
nuclear@0
|
90 inline Vector3 operator *(float s, const Vector3 &v);
|
nuclear@0
|
91 inline Vector3 operator /(const Vector3 &v, float s);
|
nuclear@0
|
92 inline Vector3 operator /(float s, const Vector3 &v);
|
nuclear@0
|
93
|
nuclear@0
|
94 // binary op between Vector and Matrix
|
nuclear@0
|
95 inline Vector3 operator *(const Vector3 &v, const Matrix3x3 &m);
|
nuclear@0
|
96 inline Vector3 operator *(const Vector3 &v, const Matrix4x4 &m);
|
nuclear@0
|
97 inline Vector3 operator *(const Matrix3x3 &m, const Vector3 &v);
|
nuclear@0
|
98 inline Vector3 operator *(const Matrix4x4 &m, const Vector3 &v);
|
nuclear@0
|
99
|
nuclear@0
|
100 inline Vector3 operator +=(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
101 inline Vector3 operator -=(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
102 inline Vector3 operator *=(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
103 inline Vector3 operator /=(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
104
|
nuclear@0
|
105 inline Vector3 operator +=(const Vector3 &v, float s);
|
nuclear@0
|
106 inline Vector3 operator -=(const Vector3 &v, float s);
|
nuclear@0
|
107 inline Vector3 operator *=(const Vector3 &v, float s);
|
nuclear@0
|
108 inline Vector3 operator /=(const Vector3 &v, float s);
|
nuclear@0
|
109
|
nuclear@0
|
110 inline Vector3 operator *=(const Vector3 &v, const Matrix3x3 &m);
|
nuclear@0
|
111 inline Vector3 operator *=(const Vector3 &v, const Matrix4x4 &m);
|
nuclear@0
|
112
|
nuclear@0
|
113 inline float dot(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
114 inline Vector3 cross(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
115
|
nuclear@0
|
116 inline float length(const Vector3 &v);
|
nuclear@0
|
117 inline float length_sq(const Vector3 &v);
|
nuclear@0
|
118
|
nuclear@0
|
119 inline Vector3 normalize(const Vector3 &v);
|
nuclear@0
|
120
|
nuclear@0
|
121 // equivalent to mat * vec
|
nuclear@0
|
122 inline Vector3 transform(const Vector3 &v, const Matrix3x3 &m);
|
nuclear@0
|
123 inline Vector3 transform(const Vector3 &v, const Matrix4x4 &m);
|
nuclear@0
|
124 inline Vector3 transform(const Vector3 &v, const Quat &q);
|
nuclear@0
|
125
|
nuclear@0
|
126
|
nuclear@0
|
127 class Vector4 {
|
nuclear@0
|
128 public:
|
nuclear@0
|
129 float x, y, z, w;
|
nuclear@0
|
130
|
nuclear@0
|
131 inline Vector4();
|
nuclear@0
|
132 inline Vector4(float x, float y, float z, float w = 1.0f);
|
nuclear@0
|
133 explicit inline Vector4(float *v);
|
nuclear@0
|
134 explicit inline Vector4(float scalar);
|
nuclear@0
|
135 explicit inline Vector4(const Vector2 &v);
|
nuclear@0
|
136 explicit inline Vector4(const Vector3 &v);
|
nuclear@0
|
137
|
nuclear@0
|
138 inline float &operator [](int idx);
|
nuclear@0
|
139 inline const float &operator [](int idx) const;
|
nuclear@0
|
140
|
nuclear@0
|
141 operator float* ();
|
nuclear@0
|
142 operator const float* () const;
|
nuclear@0
|
143 };
|
nuclear@0
|
144
|
nuclear@0
|
145 inline Vector4 operator -(const Vector4 &v);
|
nuclear@0
|
146
|
nuclear@0
|
147 // Vector op Vector
|
nuclear@0
|
148 inline Vector4 operator +(const Vector4 &a, const Vector4 &b);
|
nuclear@0
|
149 inline Vector4 operator -(const Vector4 &a, const Vector4 &b);
|
nuclear@0
|
150 inline Vector4 operator *(const Vector4 &a, const Vector4 &b);
|
nuclear@0
|
151 inline Vector4 operator /(const Vector4 &a, const Vector4 &b);
|
nuclear@0
|
152
|
nuclear@0
|
153 // binary op between Vector and scalar
|
nuclear@0
|
154 inline Vector4 operator +(const Vector4 &v, float s);
|
nuclear@0
|
155 inline Vector4 operator +(float s, const Vector4 &v);
|
nuclear@0
|
156 inline Vector4 operator -(const Vector4 &v, float s);
|
nuclear@0
|
157 inline Vector4 operator -(float s, const Vector4 &v);
|
nuclear@0
|
158 inline Vector4 operator *(const Vector4 &v, float s);
|
nuclear@0
|
159 inline Vector4 operator *(float s, const Vector4 &v);
|
nuclear@0
|
160 inline Vector4 operator /(const Vector4 &v, float s);
|
nuclear@0
|
161 inline Vector4 operator /(float s, const Vector4 &v);
|
nuclear@0
|
162
|
nuclear@0
|
163 // binary op between Vector and Matrix
|
nuclear@0
|
164 inline Vector4 operator *(const Vector4 &v, const Matrix3x3 &m);
|
nuclear@0
|
165 inline Vector4 operator *(const Vector4 &v, const Matrix4x4 &m);
|
nuclear@0
|
166 inline Vector4 operator *(const Matrix3x3 &m, const Vector4 &v);
|
nuclear@0
|
167 inline Vector4 operator *(const Matrix4x4 &m, const Vector4 &v);
|
nuclear@0
|
168
|
nuclear@0
|
169 inline Vector4 operator +=(const Vector4 &a, const Vector4 &b);
|
nuclear@0
|
170 inline Vector4 operator -=(const Vector4 &a, const Vector4 &b);
|
nuclear@0
|
171 inline Vector4 operator *=(const Vector4 &a, const Vector4 &b);
|
nuclear@0
|
172 inline Vector4 operator /=(const Vector4 &a, const Vector4 &b);
|
nuclear@0
|
173
|
nuclear@0
|
174 inline Vector4 operator +=(const Vector4 &v, float s);
|
nuclear@0
|
175 inline Vector4 operator -=(const Vector4 &v, float s);
|
nuclear@0
|
176 inline Vector4 operator *=(const Vector4 &v, float s);
|
nuclear@0
|
177 inline Vector4 operator /=(const Vector4 &v, float s);
|
nuclear@0
|
178
|
nuclear@0
|
179 inline Vector4 operator *=(const Vector4 &v, const Matrix3x3 &m);
|
nuclear@0
|
180 inline Vector4 operator *=(const Vector4 &v, const Matrix4x4 &m);
|
nuclear@0
|
181
|
nuclear@0
|
182 inline float dot(const Vector4 &a, const Vector4 &b);
|
nuclear@0
|
183 inline Vector4 cross(const Vector4 &a, const Vector4 &b, const Vector4 &c);
|
nuclear@0
|
184
|
nuclear@0
|
185 inline float length(const Vector4 &v);
|
nuclear@0
|
186 inline float length_sq(const Vector4 &v);
|
nuclear@0
|
187
|
nuclear@0
|
188 inline Vector4 normalize(const Vector4 &v);
|
nuclear@0
|
189
|
nuclear@0
|
190 // equivalent to mat * vec
|
nuclear@0
|
191 inline Vector4 transform(const Vector4 &v, const Matrix3x3 &m);
|
nuclear@0
|
192 inline Vector4 transform(const Vector4 &v, const Matrix4x4 &m);
|
nuclear@0
|
193 inline Vector4 transform(const Vector4 &v, const Quat &q);
|
nuclear@0
|
194
|
nuclear@0
|
195 #include "vector.inl"
|
nuclear@0
|
196
|
nuclear@0
|
197 } // namespace vmath
|
nuclear@0
|
198
|
nuclear@0
|
199 #endif // VMATH4_VECTOR_H_
|