00001 // HOG-Man - Hierarchical Optimization for Pose Graphs on Manifolds 00002 // Copyright (C) 2010 G. Grisetti, R. Kümmerle, C. Stachniss 00003 // 00004 // HOG-Man is free software: you can redistribute it and/or modify 00005 // it under the terms of the GNU Lesser General Public License as published 00006 // by the Free Software Foundation, either version 3 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // HOG-Man is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU Lesser General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU Lesser General Public License 00015 // along with this program. If not, see <http://www.gnu.org/licenses/>. 00016 00017 #ifndef _AXIS_ANGLE_H_ 00018 #define _AXIS_ANGLE_H_ 00019 #include "quaternion.h" 00020 00023 00027 template <typename Base=double> 00028 struct _AxisAngle : public _Vector<3, Base> 00029 { 00030 static const int Dimension=3; 00031 static const int Angles=3; 00032 _AxisAngle(); 00033 _AxisAngle(const _Quaternion<Base>& q); 00034 _AxisAngle(const _RotationMatrix3<Base>& m); 00035 _AxisAngle(const _Vector<3, Base>& vec); 00036 _AxisAngle(Base roll, Base pitch, Base yaw); 00037 _AxisAngle(const _Vector<3, Base>& axis, Base angle); 00038 _AxisAngle<Base>& operator*=(const _AxisAngle& a); 00039 _AxisAngle<Base> operator* (const _AxisAngle& a) const; 00040 _Vector<3, Base> operator*(const _Vector<3, Base>& v) const; 00041 inline _AxisAngle<Base> inverse() const; 00042 inline _Vector<3, Base> angles() const; 00043 _RotationMatrix3<Base> rotationMatrix() const; 00044 _Quaternion<Base> quaternion() const; 00045 }; 00046 00047 typedef _AxisAngle<double> AxisAngle; 00048 typedef _AxisAngle<float> AxisAnglef; 00049 00051 00052 #include "axis_angle.hpp" 00053 00054 #endif