eqemu

annotate src/vmath.h @ 12:2656099aff12

added copyright notices and license
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 18 Jul 2014 07:04:21 +0300
parents 3d3656360a82
children
rev   line source
nuclear@12 1 /*
nuclear@12 2 eqemu - electronic queue system emulator
nuclear@12 3 Copyright (C) 2014 John Tsiombikas <nuclear@member.fsf.org>,
nuclear@12 4 Eleni-Maria Stea <eleni@mutantstargoat.com>
nuclear@12 5
nuclear@12 6 This program is free software: you can redistribute it and/or modify
nuclear@12 7 it under the terms of the GNU General Public License as published by
nuclear@12 8 the Free Software Foundation, either version 3 of the License, or
nuclear@12 9 (at your option) any later version.
nuclear@12 10
nuclear@12 11 This program is distributed in the hope that it will be useful,
nuclear@12 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
nuclear@12 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
nuclear@12 14 GNU General Public License for more details.
nuclear@12 15
nuclear@12 16 You should have received a copy of the GNU General Public License
nuclear@12 17 along with this program. If not, see <http://www.gnu.org/licenses/>.
nuclear@12 18 */
nuclear@3 19 #ifndef VMATH_H_
nuclear@3 20 #define VMATH_H_
nuclear@3 21
nuclear@4 22 #include <math.h>
nuclear@4 23
nuclear@3 24 class Vector2 {
nuclear@3 25 public:
nuclear@3 26 float x, y;
nuclear@3 27
nuclear@3 28 Vector2() : x(0), y(0) {}
nuclear@3 29 Vector2(float xa, float ya) : x(xa), y(ya) {}
nuclear@3 30
nuclear@3 31 float &operator [](int idx) { return (&x)[idx]; }
nuclear@3 32 const float &operator [](int idx) const { return (&x)[idx]; }
nuclear@3 33 };
nuclear@3 34
nuclear@3 35 class Vector3 {
nuclear@3 36 public:
nuclear@3 37 float x, y, z;
nuclear@3 38
nuclear@3 39 Vector3() : x(0), y(0), z(0) {}
nuclear@3 40 Vector3(float xa, float ya, float za) : x(xa), y(ya), z(za) {}
nuclear@3 41
nuclear@3 42 float &operator [](int idx) { return (&x)[idx]; }
nuclear@3 43 const float &operator [](int idx) const { return (&x)[idx]; }
nuclear@3 44 };
nuclear@3 45
nuclear@4 46 inline Vector3 operator +(const Vector3 &a, const Vector3 &b)
nuclear@4 47 {
nuclear@4 48 return Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
nuclear@4 49 }
nuclear@4 50
nuclear@4 51 inline Vector3 operator -(const Vector3 &a, const Vector3 &b)
nuclear@4 52 {
nuclear@4 53 return Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
nuclear@4 54 }
nuclear@4 55
nuclear@4 56 inline Vector3 operator *(const Vector3 &a, float s)
nuclear@4 57 {
nuclear@4 58 return Vector3(a.x * s, a.y * s, a.z * s);
nuclear@4 59 }
nuclear@4 60
nuclear@4 61 inline float dot(const Vector3 &a, const Vector3 &b)
nuclear@4 62 {
nuclear@4 63 return a.x * b.x + a.y * b.y + a.z * b.z;
nuclear@4 64 }
nuclear@4 65
nuclear@4 66 inline float length(const Vector3 &v)
nuclear@4 67 {
nuclear@4 68 return sqrt(dot(v, v));
nuclear@4 69 }
nuclear@4 70
nuclear@4 71 inline Vector3 normalize(const Vector3 &v)
nuclear@4 72 {
nuclear@4 73 float len = length(v);
nuclear@4 74 if(len == 0.0) {
nuclear@4 75 return v;
nuclear@4 76 }
nuclear@4 77 return Vector3(v.x / len, v.y / len, v.z / len);
nuclear@4 78 }
nuclear@4 79
nuclear@3 80 class Vector4 {
nuclear@3 81 public:
nuclear@3 82 float x, y, z, w;
nuclear@3 83
nuclear@3 84 Vector4() : x(0), y(0), z(0), w(0) {}
nuclear@3 85 Vector4(float xa, float ya, float za, float wa) : x(xa), y(ya), z(za), w(wa) {}
nuclear@3 86
nuclear@3 87 float &operator [](int idx) { return (&x)[idx]; }
nuclear@3 88 const float &operator [](int idx) const { return (&x)[idx]; }
nuclear@3 89 };
nuclear@3 90
nuclear@4 91 class Ray {
nuclear@4 92 public:
nuclear@4 93 Vector3 origin, dir;
nuclear@4 94
nuclear@4 95 Ray() : origin(0, 0, 0), dir(0, 0, 1) {}
nuclear@4 96 Ray(const Vector3 &o, const Vector3 &d) : origin(o), dir(d) {}
nuclear@4 97 };
nuclear@4 98
nuclear@3 99 #endif // VMATH_H_