graphene

annotate src/gmath/vec.h @ 2:fb032d88839f

moved gmath under src
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 25 Jul 2015 05:08:22 +0300
parents gmath/vec.h@8ab44b19895e
children
rev   line source
nuclear@0 1 #ifndef GMATH_VEC_H_
nuclear@0 2 #define GMATH_VEC_H_
nuclear@0 3
nuclear@0 4 #include <math.h>
nuclear@0 5
nuclear@2 6 namespace gph {
nuclear@0 7
nuclear@2 8 class Vector3 {
nuclear@0 9 public:
nuclear@0 10 float x, y, z;
nuclear@0 11
nuclear@2 12 Vector3() : x(0), y(0), z(0) {}
nuclear@2 13 Vector3(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
nuclear@0 14
nuclear@2 15 inline void normalize();
nuclear@0 16 };
nuclear@0 17
nuclear@2 18 inline Vector3 operator +(const Vector3 &a, const Vector3 &b)
nuclear@0 19 {
nuclear@2 20 return Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
nuclear@0 21 }
nuclear@0 22
nuclear@2 23 inline Vector3 operator -(const Vector3 &a, const Vector3 &b)
nuclear@0 24 {
nuclear@2 25 return Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
nuclear@0 26 }
nuclear@0 27
nuclear@2 28 inline Vector3 operator *(const Vector3 &a, const Vector3 &b)
nuclear@0 29 {
nuclear@2 30 return Vector3(a.x * b.x, a.y * b.y, a.z * b.z);
nuclear@0 31 }
nuclear@0 32
nuclear@2 33 inline Vector3 operator /(const Vector3 &a, const Vector3 &b)
nuclear@0 34 {
nuclear@2 35 return Vector3(a.x / b.x, a.y / b.y, a.z / b.z);
nuclear@0 36 }
nuclear@0 37
nuclear@2 38 inline Vector3 operator *(const Vector3 &v, float s)
nuclear@0 39 {
nuclear@2 40 return Vector3(v.x * s, v.y * s, v.z * s);
nuclear@0 41 }
nuclear@0 42
nuclear@2 43 inline Vector3 operator *(float s, const Vector3 &v)
nuclear@0 44 {
nuclear@2 45 return Vector3(s * v.x, s * v.y, s * v.z);
nuclear@0 46 }
nuclear@0 47
nuclear@2 48 inline Vector3 operator /(const Vector3 &v, float s)
nuclear@0 49 {
nuclear@2 50 return Vector3(v.x / s, v.y / s, v.z / s);
nuclear@0 51 }
nuclear@0 52
nuclear@2 53 inline Vector3 operator /(float s, const Vector3 &v)
nuclear@0 54 {
nuclear@2 55 return Vector3(s / v.x, s / v.y, s / v.z);
nuclear@0 56 }
nuclear@0 57
nuclear@2 58 inline Vector3 &operator +=(Vector3 &a, const Vector3 &b)
nuclear@0 59 {
nuclear@0 60 a.x += b.x;
nuclear@0 61 a.y += b.y;
nuclear@0 62 a.z += b.z;
nuclear@2 63 return a;
nuclear@0 64 }
nuclear@0 65
nuclear@2 66 inline Vector3 &operator -=(Vector3 &a, const Vector3 &b)
nuclear@0 67 {
nuclear@0 68 a.x -= b.x;
nuclear@0 69 a.y -= b.y;
nuclear@0 70 a.z -= b.z;
nuclear@2 71 return a;
nuclear@0 72 }
nuclear@0 73
nuclear@2 74 inline Vector3 &operator *=(Vector3 &a, const Vector3 &b)
nuclear@0 75 {
nuclear@0 76 a.x *= b.x;
nuclear@0 77 a.y *= b.y;
nuclear@0 78 a.z *= b.z;
nuclear@2 79 return a;
nuclear@0 80 }
nuclear@0 81
nuclear@2 82 inline Vector3 &operator /=(Vector3 &a, const Vector3 &b)
nuclear@0 83 {
nuclear@0 84 a.x /= b.x;
nuclear@0 85 a.y /= b.y;
nuclear@0 86 a.z /= b.z;
nuclear@2 87 return a;
nuclear@0 88 }
nuclear@0 89
nuclear@2 90 inline Vector3 &operator *=(Vector3 &v, float s)
nuclear@0 91 {
nuclear@0 92 v.x *= s;
nuclear@0 93 v.y *= s;
nuclear@0 94 v.z *= s;
nuclear@2 95 return v;
nuclear@0 96 }
nuclear@0 97
nuclear@2 98 inline Vector3 &operator /=(Vector3 &v, float s)
nuclear@0 99 {
nuclear@0 100 v.x /= s;
nuclear@0 101 v.y /= s;
nuclear@0 102 v.z /= s;
nuclear@2 103 return v;
nuclear@0 104 }
nuclear@0 105
nuclear@2 106 inline float dot(const Vector3 &a, const Vector3 &b)
nuclear@0 107 {
nuclear@0 108 return a.x * b.x + a.y * b.y + a.z * b.z;
nuclear@0 109 }
nuclear@0 110
nuclear@2 111 inline Vector3 cross(const Vector3 &a, const Vector3 &b)
nuclear@0 112 {
nuclear@2 113 return Vector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x);
nuclear@0 114 }
nuclear@0 115
nuclear@2 116 inline float length(const Vector3 &v)
nuclear@0 117 {
nuclear@0 118 return (float)sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
nuclear@0 119 }
nuclear@0 120
nuclear@2 121 inline float length_sq(const Vector3 &v)
nuclear@0 122 {
nuclear@0 123 return v.x * v.x + v.y * v.y + v.z * v.z;
nuclear@0 124 }
nuclear@0 125
nuclear@2 126 inline Vector3 normalize(const Vector3 &v)
nuclear@0 127 {
nuclear@0 128 float len = length(v);
nuclear@0 129 if(len == 0.0f) {
nuclear@0 130 return v;
nuclear@0 131 }
nuclear@0 132
nuclear@2 133 return Vector3(v.x / len, v.y / len, v.z / len);
nuclear@0 134 }
nuclear@0 135
nuclear@2 136 inline void Vector3::normalize()
nuclear@2 137 {
nuclear@2 138 float len = length(*this);
nuclear@2 139 if(len != 0.0f) {
nuclear@2 140 x /= len;
nuclear@2 141 y /= len;
nuclear@2 142 z /= len;
nuclear@2 143 }
nuclear@2 144 }
nuclear@2 145
nuclear@2 146
nuclear@0 147 }
nuclear@0 148
nuclear@0 149 #endif /* GMATH_VEC_H_ */