libvmath4

annotate 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
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_