/* math/axis.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_AXIS_H__ #define __INCLUDED_MATH_AXIS_H__ #include #include "math/vector3f.h" namespace math { /// a local coordinates system class Axis { public: Axis(); Axis(const Axis & other); void clear(); void assign(const Axis & other); /// global coordinates of the X-axis in the local coordinates system inline Vector3f const & forward() { return axis_vector[0]; } /// global coordinates of the Y-axis in the local coordinates system inline Vector3f const & left() { return axis_vector[1]; } /// global coordinates of the Z-axis in the local coordinates system inline Vector3f const & up() { return axis_vector[2]; } inline Vector3f const operator[](size_t index) { return axis_vector[index]; } Axis & operator=(const Axis & other); /// alter heading, rotate around Z-axis (positive is left) void direction(const float angle); /// alter heading, rotate around negative Y-axis (positive is up) void pitch(const float angle); private: Vector3f axis_vector[3]; }; } #endif // __INCLUDED_MATH_AXIS_H__