eqemu

annotate src/vmath.h @ 11:2b559dc24c7b

done
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 18 Jul 2014 05:44:37 +0300
parents f9274bebe55e
children 2656099aff12
rev   line source
nuclear@3 1 #ifndef VMATH_H_
nuclear@3 2 #define VMATH_H_
nuclear@3 3
nuclear@4 4 #include <math.h>
nuclear@4 5
nuclear@3 6 class Vector2 {
nuclear@3 7 public:
nuclear@3 8 float x, y;
nuclear@3 9
nuclear@3 10 Vector2() : x(0), y(0) {}
nuclear@3 11 Vector2(float xa, float ya) : x(xa), y(ya) {}
nuclear@3 12
nuclear@3 13 float &operator [](int idx) { return (&x)[idx]; }
nuclear@3 14 const float &operator [](int idx) const { return (&x)[idx]; }
nuclear@3 15 };
nuclear@3 16
nuclear@3 17 class Vector3 {
nuclear@3 18 public:
nuclear@3 19 float x, y, z;
nuclear@3 20
nuclear@3 21 Vector3() : x(0), y(0), z(0) {}
nuclear@3 22 Vector3(float xa, float ya, float za) : x(xa), y(ya), z(za) {}
nuclear@3 23
nuclear@3 24 float &operator [](int idx) { return (&x)[idx]; }
nuclear@3 25 const float &operator [](int idx) const { return (&x)[idx]; }
nuclear@3 26 };
nuclear@3 27
nuclear@4 28 inline Vector3 operator +(const Vector3 &a, const Vector3 &b)
nuclear@4 29 {
nuclear@4 30 return Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
nuclear@4 31 }
nuclear@4 32
nuclear@4 33 inline Vector3 operator -(const Vector3 &a, const Vector3 &b)
nuclear@4 34 {
nuclear@4 35 return Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
nuclear@4 36 }
nuclear@4 37
nuclear@4 38 inline Vector3 operator *(const Vector3 &a, float s)
nuclear@4 39 {
nuclear@4 40 return Vector3(a.x * s, a.y * s, a.z * s);
nuclear@4 41 }
nuclear@4 42
nuclear@4 43 inline float dot(const Vector3 &a, const Vector3 &b)
nuclear@4 44 {
nuclear@4 45 return a.x * b.x + a.y * b.y + a.z * b.z;
nuclear@4 46 }
nuclear@4 47
nuclear@4 48 inline float length(const Vector3 &v)
nuclear@4 49 {
nuclear@4 50 return sqrt(dot(v, v));
nuclear@4 51 }
nuclear@4 52
nuclear@4 53 inline Vector3 normalize(const Vector3 &v)
nuclear@4 54 {
nuclear@4 55 float len = length(v);
nuclear@4 56 if(len == 0.0) {
nuclear@4 57 return v;
nuclear@4 58 }
nuclear@4 59 return Vector3(v.x / len, v.y / len, v.z / len);
nuclear@4 60 }
nuclear@4 61
nuclear@3 62 class Vector4 {
nuclear@3 63 public:
nuclear@3 64 float x, y, z, w;
nuclear@3 65
nuclear@3 66 Vector4() : x(0), y(0), z(0), w(0) {}
nuclear@3 67 Vector4(float xa, float ya, float za, float wa) : x(xa), y(ya), z(za), w(wa) {}
nuclear@3 68
nuclear@3 69 float &operator [](int idx) { return (&x)[idx]; }
nuclear@3 70 const float &operator [](int idx) const { return (&x)[idx]; }
nuclear@3 71 };
nuclear@3 72
nuclear@4 73 class Ray {
nuclear@4 74 public:
nuclear@4 75 Vector3 origin, dir;
nuclear@4 76
nuclear@4 77 Ray() : origin(0, 0, 0), dir(0, 0, 1) {}
nuclear@4 78 Ray(const Vector3 &o, const Vector3 &d) : origin(o), dir(d) {}
nuclear@4 79 };
nuclear@4 80
nuclear@3 81 #endif // VMATH_H_