|
|
d2b2b5 |
|
|
|
d2b2b5 |
#ifndef GEOMETRY_H
|
|
|
d2b2b5 |
#define GEOMETRY_H
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
#include <cmath></cmath>
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
typedef double Real;
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
class Vector2 {
|
|
|
d2b2b5 |
public:
|
|
|
d2b2b5 |
union {
|
|
|
d2b2b5 |
struct { Real x, y; };
|
|
|
d2b2b5 |
struct { Real c[2]; };
|
|
|
d2b2b5 |
};
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
explicit Vector2(Real x = 0, Real y = 0):
|
|
|
d2b2b5 |
x(x), y(y) { }
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
Real len_sqr() const { return x*x + y*y; }
|
|
|
d2b2b5 |
Real len() const { return sqrt(len_sqr()); }
|
|
|
d2b2b5 |
};
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
class Vector3 {
|
|
|
d2b2b5 |
public:
|
|
|
d2b2b5 |
union {
|
|
|
d2b2b5 |
struct { Real x, y, z; };
|
|
|
d2b2b5 |
struct { Real r, g, b; };
|
|
|
d2b2b5 |
struct { Real c[3]; };
|
|
|
d2b2b5 |
};
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
explicit Vector3(Real x = 0, Real y = 0, Real z = 0):
|
|
|
d2b2b5 |
x(x), y(y), z(z) { }
|
|
|
8ee194 |
|
|
|
8ee194 |
Vector3 operator+(const Vector3 &v) const
|
|
|
8ee194 |
{ return Vector3(x+v.x, y+v.y, z+v.z); }
|
|
|
8ee194 |
Vector3 operator-(const Vector3 &v) const
|
|
|
8ee194 |
{ return Vector3(x-v.x, y-v.y, z-v.z); }
|
|
|
8ee194 |
|
|
|
8ee194 |
Real operator*(const Vector3 &v) const
|
|
|
8ee194 |
{ return x*v.x + y*v.y + z*v.z; }
|
|
|
8ee194 |
Vector3 operator*(Real k) const
|
|
|
8ee194 |
{ return Vector3(x*k, y*k, z*k); }
|
|
|
8ee194 |
|
|
|
8ee194 |
Vector3 cross(const Vector3 &v) const
|
|
|
8ee194 |
{ return Vector3(y*v.z - z*v.y, z*v.x - x*v.z, x*v.y - y*v.x); }
|
|
|
8ee194 |
|
|
|
8ee194 |
Real len_sqr() const { return x*x + y*y + z*z; }
|
|
|
8ee194 |
Real len() const { return sqrt(len_sqr()); }
|
|
|
d2b2b5 |
};
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
class Vector4 {
|
|
|
d2b2b5 |
public:
|
|
|
d2b2b5 |
union {
|
|
|
d2b2b5 |
struct { Real x, y, z, w; };
|
|
|
d2b2b5 |
struct { Real r, g, b, a; };
|
|
|
d2b2b5 |
struct { Real c[4]; };
|
|
|
d2b2b5 |
};
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
explicit Vector4(Real x = 0, Real y = 0, Real z = 0, Real w = 0):
|
|
|
d2b2b5 |
x(x), y(y), z(z), w(w) { }
|
|
|
d2b2b5 |
};
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
|
|
|
d2b2b5 |
#endif
|