10 #ifndef EIGEN_EULERANGLESCLASS_H// TODO: Fix previous "EIGEN_EULERANGLES_H" definition? 11 #define EIGEN_EULERANGLESCLASS_H 99 template <
typename _Scalar,
class _System>
120 return System::IsAlphaOpposite ? -u : u;
126 return System::IsBetaOpposite ? -u : u;
132 return System::IsGammaOpposite ? -u : u;
143 m_angles(alpha, beta, gamma) {}
161 template<
typename Derived>
175 template<
typename Derived>
193 const Vector3&
angles()
const {
return m_angles; }
198 Scalar
alpha()
const {
return m_angles[0]; }
200 Scalar&
alpha() {
return m_angles[0]; }
203 Scalar
beta()
const {
return m_angles[1]; }
205 Scalar&
beta() {
return m_angles[1]; }
208 Scalar
gamma()
const {
return m_angles[2]; }
210 Scalar&
gamma() {
return m_angles[2]; }
218 res.m_angles = -m_angles;
237 template<
class Derived>
240 EIGEN_STATIC_ASSERT((internal::is_same<Scalar, typename Derived::Scalar>::value),
241 YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
243 internal::eulerangles_assign_impl<System, Derived>::run(*
this, other.
derived());
254 template<
typename Derived>
272 return static_cast<QuaternionType
>(*this).toRotationMatrix();
284 friend std::ostream& operator<<(std::ostream& s, const EulerAngles<Scalar, System>&
eulerAngles)
291 template <
typename NewScalarType>
300 #define EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(AXES, SCALAR_TYPE, SCALAR_POSTFIX) \ 302 typedef EulerAngles<SCALAR_TYPE, EulerSystem##AXES> EulerAngles##AXES##SCALAR_POSTFIX; 304 #define EIGEN_EULER_ANGLES_TYPEDEFS(SCALAR_TYPE, SCALAR_POSTFIX) \ 305 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(XYZ, SCALAR_TYPE, SCALAR_POSTFIX) \ 306 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(XYX, SCALAR_TYPE, SCALAR_POSTFIX) \ 307 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(XZY, SCALAR_TYPE, SCALAR_POSTFIX) \ 308 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(XZX, SCALAR_TYPE, SCALAR_POSTFIX) \ 310 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(YZX, SCALAR_TYPE, SCALAR_POSTFIX) \ 311 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(YZY, SCALAR_TYPE, SCALAR_POSTFIX) \ 312 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(YXZ, SCALAR_TYPE, SCALAR_POSTFIX) \ 313 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(YXY, SCALAR_TYPE, SCALAR_POSTFIX) \ 315 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(ZXY, SCALAR_TYPE, SCALAR_POSTFIX) \ 316 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(ZXZ, SCALAR_TYPE, SCALAR_POSTFIX) \ 317 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(ZYX, SCALAR_TYPE, SCALAR_POSTFIX) \ 318 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(ZYZ, SCALAR_TYPE, SCALAR_POSTFIX) 320 EIGEN_EULER_ANGLES_TYPEDEFS(
float, f)
321 EIGEN_EULER_ANGLES_TYPEDEFS(
double, d)
325 template<
typename _Scalar,
class _System>
326 struct traits<EulerAngles<_Scalar, _System> >
332 template<
class System,
class Other>
333 struct eulerangles_assign_impl<System,Other,3,3>
335 typedef typename Other::Scalar
Scalar;
338 System::CalcEulerAngles(e, m);
343 template<
class System,
class Other>
344 struct eulerangles_assign_impl<System,Other,3,1>
346 typedef typename Other::Scalar
Scalar;
355 #endif // EIGEN_EULERANGLESCLASS_H EulerAngles(const RotationBase< Derived, 3 > &rot)
Definition: EulerAngles.h:176
EulerAngles & operator=(const MatrixBase< Derived > &other)
Definition: EulerAngles.h:238
EulerAngles & operator=(const RotationBase< Derived, 3 > &rot)
Definition: EulerAngles.h:255
EulerAngles()
Definition: EulerAngles.h:140
EulerAngles(const MatrixBase< Derived > &other)
Definition: EulerAngles.h:162
bool isApprox(const EulerAngles &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: EulerAngles.h:264
Scalar gamma() const
Definition: EulerAngles.h:208
Quaternion< Scalar > QuaternionType
Definition: EulerAngles.h:114
Matrix< Scalar, 3, 1 > Vector3
Definition: EulerAngles.h:113
Scalar beta() const
Definition: EulerAngles.h:203
Namespace containing all symbols from the Eigen library.
EulerAngles(const Scalar *data)
Definition: EulerAngles.h:147
Matrix< Scalar, 3, 1 > eulerAngles(Index a0, Index a1, Index a2) const
static Vector3 GammaAxisVector()
Definition: EulerAngles.h:130
static Vector3 AlphaAxisVector()
Definition: EulerAngles.h:118
RotationMatrixType toRotationMatrix() const
Scalar & alpha()
Definition: EulerAngles.h:200
EulerAngles inverse() const
Definition: EulerAngles.h:215
AngleAxis< Scalar > AngleAxisType
Definition: EulerAngles.h:115
Scalar & gamma()
Definition: EulerAngles.h:210
Represents a rotation in a 3 dimensional space as three Euler angles.
Definition: EulerAngles.h:100
static const BasisReturnType Unit(Index size, Index i)
EulerAngles(const Scalar &alpha, const Scalar &beta, const Scalar &gamma)
Definition: EulerAngles.h:142
Matrix< Scalar, 3, 3 > Matrix3
Definition: EulerAngles.h:112
Scalar & beta()
Definition: EulerAngles.h:205
Matrix3 toRotationMatrix() const
Definition: EulerAngles.h:269
static Vector3 BetaAxisVector()
Definition: EulerAngles.h:124
_Scalar Scalar
Definition: EulerAngles.h:106
EulerAngles operator-() const
Definition: EulerAngles.h:225
_System System
Definition: EulerAngles.h:110
Scalar alpha() const
Definition: EulerAngles.h:198
EulerAngles< NewScalarType, System > cast() const
Definition: EulerAngles.h:292
const Vector3 & angles() const
Definition: EulerAngles.h:193
Vector3 & angles()
Definition: EulerAngles.h:195