diff options
Diffstat (limited to 'src/math/vector3f.h')
| -rw-r--r-- | src/math/vector3f.h | 148 | 
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__  | 
