libvmath4
diff 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 diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/vector.h Sun Oct 05 04:00:05 2014 +0300 1.3 @@ -0,0 +1,199 @@ 1.4 +#ifndef VMATH4_VECTOR_H_ 1.5 +#define VMATH4_VECTOR_H_ 1.6 + 1.7 +#include "matrix.h" 1.8 +#include "quat.h" 1.9 + 1.10 +namespace vmath { 1.11 + 1.12 +class Vector3; 1.13 +class Vector4; 1.14 + 1.15 +class Vector2 { 1.16 +public: 1.17 + float x, y; 1.18 + 1.19 + inline Vector2(); 1.20 + inline Vector2(float x, float y); 1.21 + explicit inline Vector2(float *v); 1.22 + explicit inline Vector2(float scalar); 1.23 + explicit inline Vector2(const Vector3 &v); 1.24 + explicit inline Vector2(const Vector4 &v); 1.25 + 1.26 + inline float &operator [](int idx); 1.27 + inline const float &operator [](int idx) const; 1.28 + 1.29 + operator float* (); 1.30 + operator const float* () const; 1.31 +}; 1.32 + 1.33 +inline Vector2 operator -(const Vector2 &v); 1.34 + 1.35 +inline Vector2 operator +(const Vector2 &a, const Vector2 &b); 1.36 +inline Vector2 operator -(const Vector2 &a, const Vector2 &b); 1.37 + 1.38 +inline Vector2 operator *(const Vector2 &a, const Vector2 &b); 1.39 +inline Vector2 operator *(const Vector2 &v, float s); 1.40 +inline Vector2 operator *(float s, const Vector2 &v); 1.41 + 1.42 +inline Vector2 operator /(const Vector2 &a, const Vector2 &b); 1.43 +inline Vector2 operator /(const Vector2 &v, float s); 1.44 +inline Vector2 operator /(float s, const Vector2 &v); 1.45 + 1.46 +inline Vector2 operator +=(const Vector2 &a, const Vector2 &b); 1.47 +inline Vector2 operator -=(const Vector2 &a, const Vector2 &b); 1.48 +inline Vector2 operator *=(const Vector2 &a, const Vector2 &b); 1.49 +inline Vector2 operator *=(const Vector2 &v, float s); 1.50 +inline Vector2 operator /=(const Vector2 &a, const Vector2 &b); 1.51 +inline Vector2 operator /=(const Vector2 &v, float s); 1.52 + 1.53 +inline float dot(const Vector2 &a, const Vector2 &b); 1.54 + 1.55 +inline float length(const Vector2 &v); 1.56 +inline float length_sq(const Vector2 &v); 1.57 + 1.58 +inline Vector2 normalize(const Vector2 &v); 1.59 + 1.60 + 1.61 +class Vector3 { 1.62 +public: 1.63 + float x, y, z; 1.64 + 1.65 + inline Vector3(); 1.66 + inline Vector3(float x, float y, float z); 1.67 + explicit inline Vector3(float *v); 1.68 + explicit inline Vector3(float scalar); 1.69 + explicit inline Vector3(const Vector2 &v); 1.70 + explicit inline Vector3(const Vector4 &v); 1.71 + 1.72 + inline float &operator [](int idx); 1.73 + inline const float &operator [](int idx) const; 1.74 + 1.75 + operator float* (); 1.76 + operator const float* () const; 1.77 +}; 1.78 + 1.79 +inline Vector3 operator -(const Vector3 &v); 1.80 + 1.81 +// Vector op Vector 1.82 +inline Vector3 operator +(const Vector3 &a, const Vector3 &b); 1.83 +inline Vector3 operator -(const Vector3 &a, const Vector3 &b); 1.84 +inline Vector3 operator *(const Vector3 &a, const Vector3 &b); 1.85 +inline Vector3 operator /(const Vector3 &a, const Vector3 &b); 1.86 + 1.87 +// binary op between Vector and scalar 1.88 +inline Vector3 operator +(const Vector3 &v, float s); 1.89 +inline Vector3 operator +(float s, const Vector3 &v); 1.90 +inline Vector3 operator -(const Vector3 &v, float s); 1.91 +inline Vector3 operator -(float s, const Vector3 &v); 1.92 +inline Vector3 operator *(const Vector3 &v, float s); 1.93 +inline Vector3 operator *(float s, const Vector3 &v); 1.94 +inline Vector3 operator /(const Vector3 &v, float s); 1.95 +inline Vector3 operator /(float s, const Vector3 &v); 1.96 + 1.97 +// binary op between Vector and Matrix 1.98 +inline Vector3 operator *(const Vector3 &v, const Matrix3x3 &m); 1.99 +inline Vector3 operator *(const Vector3 &v, const Matrix4x4 &m); 1.100 +inline Vector3 operator *(const Matrix3x3 &m, const Vector3 &v); 1.101 +inline Vector3 operator *(const Matrix4x4 &m, const Vector3 &v); 1.102 + 1.103 +inline Vector3 operator +=(const Vector3 &a, const Vector3 &b); 1.104 +inline Vector3 operator -=(const Vector3 &a, const Vector3 &b); 1.105 +inline Vector3 operator *=(const Vector3 &a, const Vector3 &b); 1.106 +inline Vector3 operator /=(const Vector3 &a, const Vector3 &b); 1.107 + 1.108 +inline Vector3 operator +=(const Vector3 &v, float s); 1.109 +inline Vector3 operator -=(const Vector3 &v, float s); 1.110 +inline Vector3 operator *=(const Vector3 &v, float s); 1.111 +inline Vector3 operator /=(const Vector3 &v, float s); 1.112 + 1.113 +inline Vector3 operator *=(const Vector3 &v, const Matrix3x3 &m); 1.114 +inline Vector3 operator *=(const Vector3 &v, const Matrix4x4 &m); 1.115 + 1.116 +inline float dot(const Vector3 &a, const Vector3 &b); 1.117 +inline Vector3 cross(const Vector3 &a, const Vector3 &b); 1.118 + 1.119 +inline float length(const Vector3 &v); 1.120 +inline float length_sq(const Vector3 &v); 1.121 + 1.122 +inline Vector3 normalize(const Vector3 &v); 1.123 + 1.124 +// equivalent to mat * vec 1.125 +inline Vector3 transform(const Vector3 &v, const Matrix3x3 &m); 1.126 +inline Vector3 transform(const Vector3 &v, const Matrix4x4 &m); 1.127 +inline Vector3 transform(const Vector3 &v, const Quat &q); 1.128 + 1.129 + 1.130 +class Vector4 { 1.131 +public: 1.132 + float x, y, z, w; 1.133 + 1.134 + inline Vector4(); 1.135 + inline Vector4(float x, float y, float z, float w = 1.0f); 1.136 + explicit inline Vector4(float *v); 1.137 + explicit inline Vector4(float scalar); 1.138 + explicit inline Vector4(const Vector2 &v); 1.139 + explicit inline Vector4(const Vector3 &v); 1.140 + 1.141 + inline float &operator [](int idx); 1.142 + inline const float &operator [](int idx) const; 1.143 + 1.144 + operator float* (); 1.145 + operator const float* () const; 1.146 +}; 1.147 + 1.148 +inline Vector4 operator -(const Vector4 &v); 1.149 + 1.150 +// Vector op Vector 1.151 +inline Vector4 operator +(const Vector4 &a, const Vector4 &b); 1.152 +inline Vector4 operator -(const Vector4 &a, const Vector4 &b); 1.153 +inline Vector4 operator *(const Vector4 &a, const Vector4 &b); 1.154 +inline Vector4 operator /(const Vector4 &a, const Vector4 &b); 1.155 + 1.156 +// binary op between Vector and scalar 1.157 +inline Vector4 operator +(const Vector4 &v, float s); 1.158 +inline Vector4 operator +(float s, const Vector4 &v); 1.159 +inline Vector4 operator -(const Vector4 &v, float s); 1.160 +inline Vector4 operator -(float s, const Vector4 &v); 1.161 +inline Vector4 operator *(const Vector4 &v, float s); 1.162 +inline Vector4 operator *(float s, const Vector4 &v); 1.163 +inline Vector4 operator /(const Vector4 &v, float s); 1.164 +inline Vector4 operator /(float s, const Vector4 &v); 1.165 + 1.166 +// binary op between Vector and Matrix 1.167 +inline Vector4 operator *(const Vector4 &v, const Matrix3x3 &m); 1.168 +inline Vector4 operator *(const Vector4 &v, const Matrix4x4 &m); 1.169 +inline Vector4 operator *(const Matrix3x3 &m, const Vector4 &v); 1.170 +inline Vector4 operator *(const Matrix4x4 &m, const Vector4 &v); 1.171 + 1.172 +inline Vector4 operator +=(const Vector4 &a, const Vector4 &b); 1.173 +inline Vector4 operator -=(const Vector4 &a, const Vector4 &b); 1.174 +inline Vector4 operator *=(const Vector4 &a, const Vector4 &b); 1.175 +inline Vector4 operator /=(const Vector4 &a, const Vector4 &b); 1.176 + 1.177 +inline Vector4 operator +=(const Vector4 &v, float s); 1.178 +inline Vector4 operator -=(const Vector4 &v, float s); 1.179 +inline Vector4 operator *=(const Vector4 &v, float s); 1.180 +inline Vector4 operator /=(const Vector4 &v, float s); 1.181 + 1.182 +inline Vector4 operator *=(const Vector4 &v, const Matrix3x3 &m); 1.183 +inline Vector4 operator *=(const Vector4 &v, const Matrix4x4 &m); 1.184 + 1.185 +inline float dot(const Vector4 &a, const Vector4 &b); 1.186 +inline Vector4 cross(const Vector4 &a, const Vector4 &b, const Vector4 &c); 1.187 + 1.188 +inline float length(const Vector4 &v); 1.189 +inline float length_sq(const Vector4 &v); 1.190 + 1.191 +inline Vector4 normalize(const Vector4 &v); 1.192 + 1.193 +// equivalent to mat * vec 1.194 +inline Vector4 transform(const Vector4 &v, const Matrix3x3 &m); 1.195 +inline Vector4 transform(const Vector4 &v, const Matrix4x4 &m); 1.196 +inline Vector4 transform(const Vector4 &v, const Quat &q); 1.197 + 1.198 +#include "vector.inl" 1.199 + 1.200 +} // namespace vmath 1.201 + 1.202 +#endif // VMATH4_VECTOR_H_