30 #ifndef GRALE_VECTOR2D_H
32 #define GRALE_VECTOR2D_H
44 Vector2D() { m_pos[0] = 0; m_pos[1] = 0; }
45 Vector2D(T x, T y) { m_pos[0] = x; m_pos[1] = y; }
46 T getX()
const {
return m_pos[0]; }
47 T getY()
const {
return m_pos[1]; }
50 T absX = ABS(m_pos[0]);
51 T absY = ABS(m_pos[1]);
56 return absX*SQRT((T)1.0+tmp*tmp);
62 return absY*SQRT(tmp*tmp+(T)1.0);
64 T getLengthSquared()
const {
return m_pos[0]*m_pos[0]+m_pos[1]*m_pos[1]; }
65 T getComponent(
int i)
const {
if (i == 1)
return m_pos[0];
return m_pos[1]; }
66 Vector2D &operator+=(
const Vector2D v) { m_pos[0] += v.m_pos[0]; m_pos[1] += v.m_pos[1];
return *
this; }
67 Vector2D &operator-=(
const Vector2D v) { m_pos[0] -= v.m_pos[0]; m_pos[1] -= v.m_pos[1];
return *
this; }
68 Vector2D &operator*=(T a) { m_pos[0] *= a; m_pos[1] *= a;
return *
this; }
69 Vector2D &operator/=(T a) { m_pos[0] /= a; m_pos[1] /= a;
return *
this; }
70 const T *getComponents()
const {
return m_pos; }
71 T *getComponents() {
return m_pos; }
79 return Vector2D<T>(v1.getX()+v2.getX(), v1.getY()+v2.getY());
83 inline Vector2D<T> operator-(Vector2D<T> v1, Vector2D<T> v2)
85 return Vector2D<T>(v1.getX()-v2.getX(), v1.getY()-v2.getY());
89 inline Vector2D<T> operator*(Vector2D<T> v, T m)
91 return Vector2D<T>(v.getX()*m, v.getY()*m);
95 inline Vector2D<T> operator*(T m, Vector2D<T> v)
97 return Vector2D<T>(v.getX()*m, v.getY()*m);
101 inline Vector2D<T> operator/(Vector2D<T> v, T d)
103 return Vector2D<T>(v.getX()/d, v.getY()/d);
107 inline T operator*(Vector2D<T> v1, Vector2D<T> v2)
109 return v1.getX()*v2.getX() + v1.getY()*v2.getY();
118 int getX()
const {
return m_x; }
119 int getY()
const {
return m_y; }
120 int getComponent(
int i)
const {
if (i == 1)
return m_x;
return m_y; }
123 bool operator==(
const IntVector2D v) {
if (v.m_x == m_x && v.m_y == m_y)
return true;
return false; }
132 IntLine2D(IntVector2D v, IntVector2D w) { m_v1 = v; m_v2 = w; }
134 IntVector2D getVertex1()
const {
return m_v1; }
135 IntVector2D getVertex2()
const {
return m_v2; }
136 void setVertices(IntVector2D v, IntVector2D w) { m_v1 = v; m_v2 = w; }
138 IntVector2D m_v1, m_v2;
141 class Vector2DPlus :
public Vector2D<double>
144 Vector2DPlus(
double x = 0,
double y = 0,
double v = 0) : Vector2D<double>(x,y) { m_value = v; }
145 void setValue(
double v) { m_value = v; }
146 double getValue()
const {
return m_value; }
151 class IntVector2DPlus :
public IntVector2D
154 IntVector2DPlus(
int x = 0,
int y = 0,
int v = 0) : IntVector2D(x,y) { m_value = v; }
155 void getValue(
int v) { m_value = v; }
156 int getValue()
const {
return m_value; }