libvmath4

view src/vector.h @ 0:4d6383605d64

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 05 Oct 2014 04:00:05 +0300
parents
children
line source
1 #ifndef VMATH4_VECTOR_H_
2 #define VMATH4_VECTOR_H_
4 #include "matrix.h"
5 #include "quat.h"
7 namespace vmath {
9 class Vector3;
10 class Vector4;
12 class Vector2 {
13 public:
14 float x, y;
16 inline Vector2();
17 inline Vector2(float x, float y);
18 explicit inline Vector2(float *v);
19 explicit inline Vector2(float scalar);
20 explicit inline Vector2(const Vector3 &v);
21 explicit inline Vector2(const Vector4 &v);
23 inline float &operator [](int idx);
24 inline const float &operator [](int idx) const;
26 operator float* ();
27 operator const float* () const;
28 };
30 inline Vector2 operator -(const Vector2 &v);
32 inline Vector2 operator +(const Vector2 &a, const Vector2 &b);
33 inline Vector2 operator -(const Vector2 &a, const Vector2 &b);
35 inline Vector2 operator *(const Vector2 &a, const Vector2 &b);
36 inline Vector2 operator *(const Vector2 &v, float s);
37 inline Vector2 operator *(float s, const Vector2 &v);
39 inline Vector2 operator /(const Vector2 &a, const Vector2 &b);
40 inline Vector2 operator /(const Vector2 &v, float s);
41 inline Vector2 operator /(float s, const Vector2 &v);
43 inline Vector2 operator +=(const Vector2 &a, const Vector2 &b);
44 inline Vector2 operator -=(const Vector2 &a, const Vector2 &b);
45 inline Vector2 operator *=(const Vector2 &a, const Vector2 &b);
46 inline Vector2 operator *=(const Vector2 &v, float s);
47 inline Vector2 operator /=(const Vector2 &a, const Vector2 &b);
48 inline Vector2 operator /=(const Vector2 &v, float s);
50 inline float dot(const Vector2 &a, const Vector2 &b);
52 inline float length(const Vector2 &v);
53 inline float length_sq(const Vector2 &v);
55 inline Vector2 normalize(const Vector2 &v);
58 class Vector3 {
59 public:
60 float x, y, z;
62 inline Vector3();
63 inline Vector3(float x, float y, float z);
64 explicit inline Vector3(float *v);
65 explicit inline Vector3(float scalar);
66 explicit inline Vector3(const Vector2 &v);
67 explicit inline Vector3(const Vector4 &v);
69 inline float &operator [](int idx);
70 inline const float &operator [](int idx) const;
72 operator float* ();
73 operator const float* () const;
74 };
76 inline Vector3 operator -(const Vector3 &v);
78 // Vector op Vector
79 inline Vector3 operator +(const Vector3 &a, const Vector3 &b);
80 inline Vector3 operator -(const Vector3 &a, const Vector3 &b);
81 inline Vector3 operator *(const Vector3 &a, const Vector3 &b);
82 inline Vector3 operator /(const Vector3 &a, const Vector3 &b);
84 // binary op between Vector and scalar
85 inline Vector3 operator +(const Vector3 &v, float s);
86 inline Vector3 operator +(float s, const Vector3 &v);
87 inline Vector3 operator -(const Vector3 &v, float s);
88 inline Vector3 operator -(float s, const Vector3 &v);
89 inline Vector3 operator *(const Vector3 &v, float s);
90 inline Vector3 operator *(float s, const Vector3 &v);
91 inline Vector3 operator /(const Vector3 &v, float s);
92 inline Vector3 operator /(float s, const Vector3 &v);
94 // binary op between Vector and Matrix
95 inline Vector3 operator *(const Vector3 &v, const Matrix3x3 &m);
96 inline Vector3 operator *(const Vector3 &v, const Matrix4x4 &m);
97 inline Vector3 operator *(const Matrix3x3 &m, const Vector3 &v);
98 inline Vector3 operator *(const Matrix4x4 &m, const Vector3 &v);
100 inline Vector3 operator +=(const Vector3 &a, const Vector3 &b);
101 inline Vector3 operator -=(const Vector3 &a, const Vector3 &b);
102 inline Vector3 operator *=(const Vector3 &a, const Vector3 &b);
103 inline Vector3 operator /=(const Vector3 &a, const Vector3 &b);
105 inline Vector3 operator +=(const Vector3 &v, float s);
106 inline Vector3 operator -=(const Vector3 &v, float s);
107 inline Vector3 operator *=(const Vector3 &v, float s);
108 inline Vector3 operator /=(const Vector3 &v, float s);
110 inline Vector3 operator *=(const Vector3 &v, const Matrix3x3 &m);
111 inline Vector3 operator *=(const Vector3 &v, const Matrix4x4 &m);
113 inline float dot(const Vector3 &a, const Vector3 &b);
114 inline Vector3 cross(const Vector3 &a, const Vector3 &b);
116 inline float length(const Vector3 &v);
117 inline float length_sq(const Vector3 &v);
119 inline Vector3 normalize(const Vector3 &v);
121 // equivalent to mat * vec
122 inline Vector3 transform(const Vector3 &v, const Matrix3x3 &m);
123 inline Vector3 transform(const Vector3 &v, const Matrix4x4 &m);
124 inline Vector3 transform(const Vector3 &v, const Quat &q);
127 class Vector4 {
128 public:
129 float x, y, z, w;
131 inline Vector4();
132 inline Vector4(float x, float y, float z, float w = 1.0f);
133 explicit inline Vector4(float *v);
134 explicit inline Vector4(float scalar);
135 explicit inline Vector4(const Vector2 &v);
136 explicit inline Vector4(const Vector3 &v);
138 inline float &operator [](int idx);
139 inline const float &operator [](int idx) const;
141 operator float* ();
142 operator const float* () const;
143 };
145 inline Vector4 operator -(const Vector4 &v);
147 // Vector op Vector
148 inline Vector4 operator +(const Vector4 &a, const Vector4 &b);
149 inline Vector4 operator -(const Vector4 &a, const Vector4 &b);
150 inline Vector4 operator *(const Vector4 &a, const Vector4 &b);
151 inline Vector4 operator /(const Vector4 &a, const Vector4 &b);
153 // binary op between Vector and scalar
154 inline Vector4 operator +(const Vector4 &v, float s);
155 inline Vector4 operator +(float s, const Vector4 &v);
156 inline Vector4 operator -(const Vector4 &v, float s);
157 inline Vector4 operator -(float s, const Vector4 &v);
158 inline Vector4 operator *(const Vector4 &v, float s);
159 inline Vector4 operator *(float s, const Vector4 &v);
160 inline Vector4 operator /(const Vector4 &v, float s);
161 inline Vector4 operator /(float s, const Vector4 &v);
163 // binary op between Vector and Matrix
164 inline Vector4 operator *(const Vector4 &v, const Matrix3x3 &m);
165 inline Vector4 operator *(const Vector4 &v, const Matrix4x4 &m);
166 inline Vector4 operator *(const Matrix3x3 &m, const Vector4 &v);
167 inline Vector4 operator *(const Matrix4x4 &m, const Vector4 &v);
169 inline Vector4 operator +=(const Vector4 &a, const Vector4 &b);
170 inline Vector4 operator -=(const Vector4 &a, const Vector4 &b);
171 inline Vector4 operator *=(const Vector4 &a, const Vector4 &b);
172 inline Vector4 operator /=(const Vector4 &a, const Vector4 &b);
174 inline Vector4 operator +=(const Vector4 &v, float s);
175 inline Vector4 operator -=(const Vector4 &v, float s);
176 inline Vector4 operator *=(const Vector4 &v, float s);
177 inline Vector4 operator /=(const Vector4 &v, float s);
179 inline Vector4 operator *=(const Vector4 &v, const Matrix3x3 &m);
180 inline Vector4 operator *=(const Vector4 &v, const Matrix4x4 &m);
182 inline float dot(const Vector4 &a, const Vector4 &b);
183 inline Vector4 cross(const Vector4 &a, const Vector4 &b, const Vector4 &c);
185 inline float length(const Vector4 &v);
186 inline float length_sq(const Vector4 &v);
188 inline Vector4 normalize(const Vector4 &v);
190 // equivalent to mat * vec
191 inline Vector4 transform(const Vector4 &v, const Matrix3x3 &m);
192 inline Vector4 transform(const Vector4 &v, const Matrix4x4 &m);
193 inline Vector4 transform(const Vector4 &v, const Quat &q);
195 #include "vector.inl"
197 } // namespace vmath
199 #endif // VMATH4_VECTOR_H_