rayzor
diff src/vmath.h @ 1:a826bf0fb169
fixed line endings
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 05 Apr 2014 09:05:26 +0300 |
parents | 2a5340a6eee4 |
children | d94a69933a71 |
line diff
1.1 --- a/src/vmath.h Sat Apr 05 08:46:27 2014 +0300 1.2 +++ b/src/vmath.h Sat Apr 05 09:05:26 2014 +0300 1.3 @@ -1,148 +1,148 @@ 1.4 -#ifndef VMATH_H_ 1.5 -#define VMATH_H_ 1.6 - 1.7 -#include <math.h> 1.8 -#include "vmathmat.h" 1.9 - 1.10 -class Vector3 { 1.11 -public: 1.12 - float x, y, z; 1.13 - 1.14 - Vector3() : x(0), y(0), z(0) {} 1.15 - Vector3(float xx, float yy, float zz) : x(xx), y(yy), z(zz) {} 1.16 - 1.17 - float length_sq() const { return x * x + y * y + z * z; } 1.18 - float length() const { return sqrt(x * x + y * y + z * z); } 1.19 - 1.20 - void normalize() 1.21 - { 1.22 - float len = length(); 1.23 - if(len != 0.0) { 1.24 - x /= len; 1.25 - y /= len; 1.26 - z /= len; 1.27 - } 1.28 - } 1.29 - 1.30 - float &operator [](int idx) { return idx == 2 ? z : (idx == 1 ? y : x); } 1.31 - const float &operator [](int idx) const { return idx == 2 ? z : (idx == 1 ? y : x); } 1.32 -}; 1.33 - 1.34 -inline Vector3 normalize(const Vector3 &v) 1.35 -{ 1.36 - float len = v.length(); 1.37 - if(len != 0.0) { 1.38 - return Vector3(v.x / len, v.y / len, v.z / len); 1.39 - } 1.40 - return v; 1.41 -} 1.42 - 1.43 -inline Vector3 operator +(const Vector3 &a, const Vector3 &b) 1.44 -{ 1.45 - return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); 1.46 -} 1.47 - 1.48 -inline Vector3 operator -(const Vector3 &a, const Vector3 &b) 1.49 -{ 1.50 - return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); 1.51 -} 1.52 - 1.53 -inline Vector3 operator *(const Vector3 &v, float s) 1.54 -{ 1.55 - return Vector3(v.x * s, v.y * s, v.z * s); 1.56 -} 1.57 - 1.58 -inline Vector3 operator /(const Vector3 &v, float s) 1.59 -{ 1.60 - return Vector3(v.x / s, v.y / s, v.z / s); 1.61 -} 1.62 - 1.63 -inline float dot(const Vector3 &a, const Vector3 &b) 1.64 -{ 1.65 - return a.x * b.x + a.y * b.y + a.z * b.z; 1.66 -} 1.67 - 1.68 -inline Vector3 cross(const Vector3 &a, const Vector3 &b) 1.69 -{ 1.70 - return Vector3(a.y * b.z - a.z * b.y, 1.71 - a.z * b.z - a.x * b.z, 1.72 - a.x * b.y - a.y * b.x); 1.73 -} 1.74 - 1.75 -inline Vector3 transform(const Matrix4x4 &m, const Vector3 &v) 1.76 -{ 1.77 - float x = m.m[0][0] * v.x + m.m[0][1] * v.y + m.m[0][2] * v.z + m.m[0][3]; 1.78 - float y = m.m[1][0] * v.x + m.m[1][1] * v.y + m.m[1][2] * v.z + m.m[1][3]; 1.79 - float z = m.m[2][0] * v.x + m.m[2][1] * v.y + m.m[2][2] * v.z + m.m[2][3]; 1.80 - return Vector3(x, y, z); 1.81 -} 1.82 - 1.83 -// ---- Vector4 ---- 1.84 - 1.85 -class Vector4 { 1.86 -public: 1.87 - float x, y, z, w; 1.88 - 1.89 - Vector4() : x(0), y(0), z(0), w(1.0) {} 1.90 - Vector4(const Vector3 &v) : x(v.x), y(v.y), z(v.z), w(1.0) {} 1.91 - Vector4(float xx, float yy, float zz, float ww) : x(xx), y(yy), z(zz), w(ww) {} 1.92 - 1.93 - float length_sq() const { return x * x + y * y + z * z + w * w; } 1.94 - float length() const { return sqrt(x * x + y * y + z * z + w * w); } 1.95 - 1.96 - void normalize() 1.97 - { 1.98 - float len = length(); 1.99 - if(len != 0.0) { 1.100 - x /= len; 1.101 - y /= len; 1.102 - z /= len; 1.103 - w /= len; 1.104 - } 1.105 - } 1.106 - 1.107 - float &operator [](int idx) 1.108 - { 1.109 - return idx == 3 ? w : (idx == 2 ? z : (idx == 1 ? y : x)); 1.110 - } 1.111 - const float &operator [](int idx) const 1.112 - { 1.113 - return idx == 3 ? w : (idx == 2 ? z : (idx == 1 ? y : x)); 1.114 - } 1.115 -}; 1.116 - 1.117 -inline Vector4 operator +(const Vector4 &a, const Vector4 &b) 1.118 -{ 1.119 - return Vector4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); 1.120 -} 1.121 - 1.122 -inline Vector4 operator -(const Vector4 &a, const Vector4 &b) 1.123 -{ 1.124 - return Vector4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); 1.125 -} 1.126 - 1.127 -inline Vector4 operator *(const Vector4 &v, float s) 1.128 -{ 1.129 - return Vector4(v.x * s, v.y * s, v.z * s, v.w * s); 1.130 -} 1.131 - 1.132 -inline Vector4 operator /(const Vector4 &v, float s) 1.133 -{ 1.134 - return Vector4(v.x / s, v.y / s, v.z / s, v.w / s); 1.135 -} 1.136 - 1.137 -inline float dot(const Vector4 &a, const Vector4 &b) 1.138 -{ 1.139 - return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; 1.140 -} 1.141 - 1.142 -inline Vector4 transform(const Matrix4x4 &m, const Vector4 &v) 1.143 -{ 1.144 - float x = m.m[0][0] * v.x + m.m[0][1] * v.y + m.m[0][2] * v.z + m.m[0][3] * v.w; 1.145 - float y = m.m[1][0] * v.x + m.m[1][1] * v.y + m.m[1][2] * v.z + m.m[1][3] * v.w; 1.146 - float z = m.m[2][0] * v.x + m.m[2][1] * v.y + m.m[2][2] * v.z + m.m[2][3] * v.w; 1.147 - float w = m.m[3][0] * v.x + m.m[3][1] * v.y + m.m[3][2] * v.z + m.m[3][3] * v.w; 1.148 - return Vector4(x, y, z, w); 1.149 -} 1.150 - 1.151 -#endif // VMATH_H_ 1.152 +#ifndef VMATH_H_ 1.153 +#define VMATH_H_ 1.154 + 1.155 +#include <math.h> 1.156 +#include "vmathmat.h" 1.157 + 1.158 +class Vector3 { 1.159 +public: 1.160 + float x, y, z; 1.161 + 1.162 + Vector3() : x(0), y(0), z(0) {} 1.163 + Vector3(float xx, float yy, float zz) : x(xx), y(yy), z(zz) {} 1.164 + 1.165 + float length_sq() const { return x * x + y * y + z * z; } 1.166 + float length() const { return sqrt(x * x + y * y + z * z); } 1.167 + 1.168 + void normalize() 1.169 + { 1.170 + float len = length(); 1.171 + if(len != 0.0) { 1.172 + x /= len; 1.173 + y /= len; 1.174 + z /= len; 1.175 + } 1.176 + } 1.177 + 1.178 + float &operator [](int idx) { return idx == 2 ? z : (idx == 1 ? y : x); } 1.179 + const float &operator [](int idx) const { return idx == 2 ? z : (idx == 1 ? y : x); } 1.180 +}; 1.181 + 1.182 +inline Vector3 normalize(const Vector3 &v) 1.183 +{ 1.184 + float len = v.length(); 1.185 + if(len != 0.0) { 1.186 + return Vector3(v.x / len, v.y / len, v.z / len); 1.187 + } 1.188 + return v; 1.189 +} 1.190 + 1.191 +inline Vector3 operator +(const Vector3 &a, const Vector3 &b) 1.192 +{ 1.193 + return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); 1.194 +} 1.195 + 1.196 +inline Vector3 operator -(const Vector3 &a, const Vector3 &b) 1.197 +{ 1.198 + return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); 1.199 +} 1.200 + 1.201 +inline Vector3 operator *(const Vector3 &v, float s) 1.202 +{ 1.203 + return Vector3(v.x * s, v.y * s, v.z * s); 1.204 +} 1.205 + 1.206 +inline Vector3 operator /(const Vector3 &v, float s) 1.207 +{ 1.208 + return Vector3(v.x / s, v.y / s, v.z / s); 1.209 +} 1.210 + 1.211 +inline float dot(const Vector3 &a, const Vector3 &b) 1.212 +{ 1.213 + return a.x * b.x + a.y * b.y + a.z * b.z; 1.214 +} 1.215 + 1.216 +inline Vector3 cross(const Vector3 &a, const Vector3 &b) 1.217 +{ 1.218 + return Vector3(a.y * b.z - a.z * b.y, 1.219 + a.z * b.z - a.x * b.z, 1.220 + a.x * b.y - a.y * b.x); 1.221 +} 1.222 + 1.223 +inline Vector3 transform(const Matrix4x4 &m, const Vector3 &v) 1.224 +{ 1.225 + float x = m.m[0][0] * v.x + m.m[0][1] * v.y + m.m[0][2] * v.z + m.m[0][3]; 1.226 + float y = m.m[1][0] * v.x + m.m[1][1] * v.y + m.m[1][2] * v.z + m.m[1][3]; 1.227 + float z = m.m[2][0] * v.x + m.m[2][1] * v.y + m.m[2][2] * v.z + m.m[2][3]; 1.228 + return Vector3(x, y, z); 1.229 +} 1.230 + 1.231 +// ---- Vector4 ---- 1.232 + 1.233 +class Vector4 { 1.234 +public: 1.235 + float x, y, z, w; 1.236 + 1.237 + Vector4() : x(0), y(0), z(0), w(1.0) {} 1.238 + Vector4(const Vector3 &v) : x(v.x), y(v.y), z(v.z), w(1.0) {} 1.239 + Vector4(float xx, float yy, float zz, float ww) : x(xx), y(yy), z(zz), w(ww) {} 1.240 + 1.241 + float length_sq() const { return x * x + y * y + z * z + w * w; } 1.242 + float length() const { return sqrt(x * x + y * y + z * z + w * w); } 1.243 + 1.244 + void normalize() 1.245 + { 1.246 + float len = length(); 1.247 + if(len != 0.0) { 1.248 + x /= len; 1.249 + y /= len; 1.250 + z /= len; 1.251 + w /= len; 1.252 + } 1.253 + } 1.254 + 1.255 + float &operator [](int idx) 1.256 + { 1.257 + return idx == 3 ? w : (idx == 2 ? z : (idx == 1 ? y : x)); 1.258 + } 1.259 + const float &operator [](int idx) const 1.260 + { 1.261 + return idx == 3 ? w : (idx == 2 ? z : (idx == 1 ? y : x)); 1.262 + } 1.263 +}; 1.264 + 1.265 +inline Vector4 operator +(const Vector4 &a, const Vector4 &b) 1.266 +{ 1.267 + return Vector4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); 1.268 +} 1.269 + 1.270 +inline Vector4 operator -(const Vector4 &a, const Vector4 &b) 1.271 +{ 1.272 + return Vector4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); 1.273 +} 1.274 + 1.275 +inline Vector4 operator *(const Vector4 &v, float s) 1.276 +{ 1.277 + return Vector4(v.x * s, v.y * s, v.z * s, v.w * s); 1.278 +} 1.279 + 1.280 +inline Vector4 operator /(const Vector4 &v, float s) 1.281 +{ 1.282 + return Vector4(v.x / s, v.y / s, v.z / s, v.w / s); 1.283 +} 1.284 + 1.285 +inline float dot(const Vector4 &a, const Vector4 &b) 1.286 +{ 1.287 + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; 1.288 +} 1.289 + 1.290 +inline Vector4 transform(const Matrix4x4 &m, const Vector4 &v) 1.291 +{ 1.292 + float x = m.m[0][0] * v.x + m.m[0][1] * v.y + m.m[0][2] * v.z + m.m[0][3] * v.w; 1.293 + float y = m.m[1][0] * v.x + m.m[1][1] * v.y + m.m[1][2] * v.z + m.m[1][3] * v.w; 1.294 + float z = m.m[2][0] * v.x + m.m[2][1] * v.y + m.m[2][2] * v.z + m.m[2][3] * v.w; 1.295 + float w = m.m[3][0] * v.x + m.m[3][1] * v.y + m.m[3][2] * v.z + m.m[3][3] * v.w; 1.296 + return Vector4(x, y, z, w); 1.297 +} 1.298 + 1.299 +#endif // VMATH_H_