Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src/math
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-10-05 20:29:47 +0000
committerStijn Buys <ingar@osirion.org>2008-10-05 20:29:47 +0000
commitcd5832676aa34e693ebc0391cd0994f8e60c7120 (patch)
tree412686fbdf7507e5127f1c5253bede055165bab0 /src/math
parent9c3baab33a0fa48e7379f0485116452779a1cd37 (diff)
vector2f files
Diffstat (limited to 'src/math')
-rw-r--r--src/math/vector2f.cc78
-rw-r--r--src/math/vector2f.h74
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__
+