diff options
author | Stijn Buys <ingar@osirion.org> | 2008-10-05 20:29:47 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-10-05 20:29:47 +0000 |
commit | cd5832676aa34e693ebc0391cd0994f8e60c7120 (patch) | |
tree | 412686fbdf7507e5127f1c5253bede055165bab0 /src | |
parent | 9c3baab33a0fa48e7379f0485116452779a1cd37 (diff) |
vector2f files
Diffstat (limited to 'src')
-rw-r--r-- | src/math/vector2f.cc | 78 | ||||
-rw-r--r-- | src/math/vector2f.h | 74 |
2 files changed, 152 insertions, 0 deletions
diff --git a/src/math/vector2f.cc b/src/math/vector2f.cc new file mode 100644 index 0000000..c6f1504 --- /dev/null +++ b/src/math/vector2f.cc @@ -0,0 +1,78 @@ +/* + math/vector2f.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#include <cstring> + +#include "math/vector2f.h" + +namespace math { + +Vector2f::Vector2f() : x(coord[0]), y(coord[1]) +{ + clear(); +} + +Vector2f::Vector2f(Vector2f const &other) : x(coord[0]), y(coord[1]) +{ + assign(other); +} + +Vector2f::Vector2f(float const x, float const y) : x(coord[0]), y(coord[1]) +{ + assign(x, y); +} + +void Vector2f::clear() +{ + memset(coord, 0, sizeof(coord)); +} + +void Vector2f::assign(Vector2f const &other) +{ + memcpy(coord, other.coord, sizeof(coord)); +} + +void Vector2f::assign(float const x, float const y) +{ + coord[0] = x; + coord[1] = y; +} + +Vector2f &Vector2f::operator=(Vector2f const &other) +{ + assign(other); + return (*this); +} + +Vector2f &Vector2f::operator+=(Vector2f const &other) +{ + coord[0] += other.coord[0]; + coord[1] += other.coord[1]; + return (*this); +} + +Vector2f &Vector2f::operator-=(Vector2f const &other) +{ + coord[0] -= other.coord[0]; + coord[1] -= other.coord[1]; + return (*this); +} + +Vector2f Vector2f::operator-(Vector2f const &other) const +{ + Vector2f v(*this); + v -= other; + return v; +} + +Vector2f Vector2f::operator+(Vector2f const &other) const +{ + Vector2f v(*this); + v += other; + return v; +} + +} diff --git a/src/math/vector2f.h b/src/math/vector2f.h new file mode 100644 index 0000000..87f61a8 --- /dev/null +++ b/src/math/vector2f.h @@ -0,0 +1,74 @@ +/* + math/vector2f.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_MATH_VECTOR2F_H__ +#define __INCLUDED_MATH_VECTOR2F_H__ + +#include <iostream> + +namespace math { + +/// a point or vector in 2D space +class Vector2f { + +public: + /// default constructor + Vector2f(); + /// assignment constructor + Vector2f(float const x, float const y); + /// copy constructor + Vector2f(Vector2f const &other); + + /// assign (0,0) + void clear(); + + /// assignment operator + void assign(float const x, float const y); + /// assignment operator + void assign(Vector2f const &other); + + /// assignment operator + Vector2f & operator=(Vector2f const &other); + + /// vector subtraction + Vector2f & operator-=(Vector2f const &other); + + /// vector sum + Vector2f & operator+=(Vector2f const &other); + + /// vector subtraction + Vector2f operator-(Vector2f const &other) const; + + /// vector sum + Vector2f operator+(Vector2f const &other) const; + + + /// array operator + inline float& operator[](const size_t index) { + return coord[index]; + } + + /// array operator + inline float operator[](const size_t index) const { + return coord[index]; + } + + /// a pointer to the internal data + inline float *ptr() const { return (float *) coord; } + + /// x coordinate + float &x; + + /// y coordinate + float &y; + +private: + float coord[2]; +}; + +} +#endif // __INCLUDED_MATH_VECTOR2F_H__ + |