Files
assaultcube-/source/src/geom.h
T
Lee Salzman 4b8d32b733 *** empty log message ***
git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@698 e016b1c5-ed68-44aa-a2f7-31cac88cffde
2006-11-17 18:13:55 +00:00

39 lines
1.4 KiB
C

struct vec
{
union
{
struct { float x, y, z; };
float v[3];
};
vec() {};
vec(float a, float b, float c) : x(a), y(b), z(c) {};
vec(float *v) : x(v[0]), y(v[1]), z(v[2]) {};
float &operator[](int i) { return v[i]; };
float operator[](int i) const { return v[i]; };
bool operator==(const vec &o) const { return x == o.x && y == o.y && z == o.z; }
bool operator!=(const vec &o) const { return x != o.x || y != o.y || z != o.z; }
vec &mul(float f) { x *= f; y *= f; z *= f; return *this; };
vec &div(float f) { x /= f; y /= f; z /= f; return *this; };
vec &add(float f) { x += f; y += f; z += f; return *this; };
vec &sub(float f) { x -= f; y -= f; z -= f; return *this; };
vec &add(const vec &o) { x += o.x; y += o.y; z += o.z; return *this; };
vec &sub(const vec &o) { x -= o.x; y -= o.y; z -= o.z; return *this; };
float squaredlen() const { return x*x + y*y + z*z; };
float dot(const vec &o) const { return x*o.x + y*o.y + z*o.z; };
float magnitude() const { return sqrtf(squaredlen()); };
vec &normalize() { div(magnitude()); return *this; };
float dist(const vec &e) const { vec t; return dist(e, t); };
float dist(const vec &e, vec &t) const { t = *this; t.sub(e); return t.magnitude(); };
bool reject(const vec &o, float max) { return x>o.x+max || x<o.x-max || y>o.y+max || y<o.y-max; };
};