textpsys

annotate src/vec3.h @ 0:a4ffd9e6984c

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 19 Aug 2015 09:13:48 +0300
parents
children
rev   line source
nuclear@0 1 #ifndef VEC3_H_
nuclear@0 2 #define VEC3_H_
nuclear@0 3
nuclear@0 4 #include <math.h>
nuclear@0 5
nuclear@0 6 class Vector3 {
nuclear@0 7 public:
nuclear@0 8 float x, y, z;
nuclear@0 9
nuclear@0 10 Vector3() : x(0), y(0), z(0) {}
nuclear@0 11 Vector3(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
nuclear@0 12 };
nuclear@0 13
nuclear@0 14 inline Vector3 operator +(const Vector3 &a, const Vector3 &b)
nuclear@0 15 {
nuclear@0 16 return Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
nuclear@0 17 }
nuclear@0 18
nuclear@0 19 inline Vector3 operator -(const Vector3 &a, const Vector3 &b)
nuclear@0 20 {
nuclear@0 21 return Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
nuclear@0 22 }
nuclear@0 23
nuclear@0 24 inline Vector3 operator *(const Vector3 &a, const Vector3 &b)
nuclear@0 25 {
nuclear@0 26 return Vector3(a.x * b.x, a.y * b.y, a.z * b.z);
nuclear@0 27 }
nuclear@0 28
nuclear@0 29 inline Vector3 operator /(const Vector3 &a, const Vector3 &b)
nuclear@0 30 {
nuclear@0 31 return Vector3(a.x / b.x, a.y / b.y, a.z / b.z);
nuclear@0 32 }
nuclear@0 33
nuclear@0 34 inline Vector3 &operator +=(Vector3 &a, const Vector3 &b)
nuclear@0 35 {
nuclear@0 36 a.x += b.x;
nuclear@0 37 a.y += b.y;
nuclear@0 38 a.z += b.z;
nuclear@0 39 return a;
nuclear@0 40 }
nuclear@0 41
nuclear@0 42 inline Vector3 &operator -=(Vector3 &a, const Vector3 &b)
nuclear@0 43 {
nuclear@0 44 a.x -= b.x;
nuclear@0 45 a.y -= b.y;
nuclear@0 46 a.z -= b.z;
nuclear@0 47 return a;
nuclear@0 48 }
nuclear@0 49
nuclear@0 50 inline Vector3 operator *(const Vector3 &v, float s)
nuclear@0 51 {
nuclear@0 52 return Vector3(v.x * s, v.y * s, v.z * s);
nuclear@0 53 }
nuclear@0 54
nuclear@0 55 inline Vector3 operator *(float s, const Vector3 &v)
nuclear@0 56 {
nuclear@0 57 return Vector3(v.x * s, v.y * s, v.z * s);
nuclear@0 58 }
nuclear@0 59
nuclear@0 60 inline float dot(const Vector3 &a, const Vector3 &b)
nuclear@0 61 {
nuclear@0 62 return a.x * b.x + a.y * b.y + a.z * b.z;
nuclear@0 63 }
nuclear@0 64
nuclear@0 65 inline float length(const Vector3 &v)
nuclear@0 66 {
nuclear@0 67 return sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
nuclear@0 68 }
nuclear@0 69
nuclear@0 70 inline float length_sq(const Vector3 &v)
nuclear@0 71 {
nuclear@0 72 return v.x * v.x + v.y * v.y + v.z * v.z;
nuclear@0 73 }
nuclear@0 74
nuclear@0 75 inline Vector3 normalize(const Vector3 &v)
nuclear@0 76 {
nuclear@0 77 float len = length(v);
nuclear@0 78 if(len == 0.0f) {
nuclear@0 79 return v;
nuclear@0 80 }
nuclear@0 81 return Vector3(v.x / len, v.y / len, v.z / len);
nuclear@0 82 }
nuclear@0 83
nuclear@0 84 inline float lerp(float a, float b, float t)
nuclear@0 85 {
nuclear@0 86 return a + (b - a) * t;
nuclear@0 87 }
nuclear@0 88
nuclear@0 89 inline Vector3 lerp(const Vector3 &a, const Vector3 &b, float t)
nuclear@0 90 {
nuclear@0 91 return Vector3(lerp(a.x, b.x, t), lerp(a.y, b.y, t), lerp(a.z, b.z, t));
nuclear@0 92 }
nuclear@0 93
nuclear@0 94 #endif // VEC3_H_