Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-01-30 17:30:10 +0000
committerStijn Buys <ingar@osirion.org>2008-01-30 17:30:10 +0000
commit4fd8d5c71365e58e6dff36fc756d8e2e55204db7 (patch)
tree851c86f497ce3bfa7050ae5634f50f888d6d80f8 /src/math/vector3f.h
parent28180e6b6763e4ce5d65c02e4df5380f11e6d10a (diff)
math module
Diffstat (limited to 'src/math/vector3f.h')
-rw-r--r--src/math/vector3f.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/math/vector3f.h b/src/math/vector3f.h
new file mode 100644
index 0000000..8bc62ff
--- /dev/null
+++ b/src/math/vector3f.h
@@ -0,0 +1,148 @@
+/*
+ math/vector3f.cc
+ 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_VECTOR3F_H__
+#define __INCLUDED_MATH_VECTOR3F_H__
+
+// project headers
+#include "math/vector3f.h"
+
+// C++ headers
+#include <iostream>
+
+namespace math {
+
+/// a point or vector in 3D-space
+/** An instance of this class represents a point in 3D-space or a 3D-vector
+ * and forms the basic building block for all spatial calculations.
+ */
+class Vector3f {
+
+public:
+ /// Default constructor, creates a Vector3f (0,0,0)
+ Vector3f();
+
+ /// Copy constructor
+ /** Create a new Vector3f that is a copy from an other
+ * @param other the vector to copy values from
+ */
+ Vector3f(const Vector3f &other);
+
+ /// Create a Vector3f with given coordinates
+ /** @param xv the x-coordinate of the location
+ * @param yv the y-coordinate of the location
+ * @param zv the z-coordinate of the location
+ */
+ Vector3f(const float xv, const float yv, const float zv);
+
+ /// Destructor
+ ~Vector3f();
+
+ /* -- Assignment operators -- */
+ /// assignment operator
+ Vector3f& operator=(const Vector3f &other);
+
+ /// multiplicate each element of the vector with a given value
+ /** @param scalar multiplication factor
+ */
+ Vector3f& operator*=(const float scalar);
+
+ /// divide each element of the vector by a given value
+ /** @param scalar divider
+ */
+ Vector3f& operator/=(const float scalar);
+
+ /// perform an element-wise subtraction
+ Vector3f& operator-=(const Vector3f &other);
+
+ /// perform ann element-wise addition
+ Vector3f& operator+=(const Vector3f &other);
+
+ /* -- Mathematical operators -- */
+
+ /// return this Vector multiplied with scalar
+ Vector3f operator*(const float scalar) const;
+
+ /// return this vector divided by a scalar
+ Vector3f operator/(const float scalar) const;
+
+ /// return the element-wise difference between two vectors
+ Vector3f operator-(const Vector3f &other) const;
+
+ /// return the element-wise sumn of two vectors
+ Vector3f operator+(const Vector3f &other) const;
+
+ /// return the vector cross-product
+ float operator*(const Vector3f &other) const;
+
+ /// comparison operator
+ bool operator==(const Vector3f &other) const;
+
+ /// assign a value to an element of this vector
+ /*! WARNING: range is not checked
+ * @param index the index of the element to assign to ( 0 <= index < 3 )
+ */
+ inline float& operator[](const unsigned int index) {
+ return coord[index];
+ }
+
+ /// returns the value of an element of this vector
+ /*! WARNING: range is not checked
+ * @param index the index of the element to return ( 0 <= index < 3 )
+ */
+ inline float operator[](const unsigned int index) const {
+ return coord[index];
+ }
+
+ float &x;
+ float &y;
+ float &z;
+
+ /// Return the cartesian length of this vector
+ float length() const;
+
+ /// Return the cartesian length squared (to speed up calculations)
+ float lengthsquared() const;
+
+ /// Divide this Vector by it's length
+ /// @see normalized()
+ /// WARNING: vector must not be (0, 0, 0)
+ void normalize();
+
+ /* static functions */
+
+ /// Returns the unity vector on the X-axis
+ static inline Vector3f Xaxis() { return Vector3f(1.0f, 0.0f, 0.0f); }
+
+ /// Returns the unity vector on the Y-axis
+ static inline Vector3f Yaxis() { return Vector3f(0.0f, 1.0f, 0.0f); }
+
+ /// Returns the unity vector on the Z-axis
+ static inline Vector3f Zaxis() { return Vector3f(0.0f, 0.0f, 1.0f); }
+
+ /// Return the cartesian length of a vector
+ static inline float length(const Vector3f& vector) { return vector.length(); }
+
+ /// Return a vector divided by it's length
+ /// @see normalize()
+ /// WARNING: vector must not be (0, 0, 0)
+ static inline Vector3f normalized(const Vector3f& vector) { return (vector / vector.length()); }
+
+ float coord[3];
+};
+
+/// Write a Vector3f to a std::ostream
+std::ostream &operator<<(std::ostream & os, const Vector3f & vector);
+
+/// Read a Vector3d from a std::istream
+std::istream &operator>>(std::istream & is, Vector3f& vector);
+
+/// scalar*Vector3f operators
+Vector3f operator*(float scalar, const Vector3f& vector);
+
+} // namespace Math
+
+#endif // __INCLUDED_MATH_VECTOR3F_H__