10 #ifndef EIGEN_EULERANGLESCLASS_H// TODO: Fix previous "EIGEN_EULERANGLES_H" definition? 11 #define EIGEN_EULERANGLESCLASS_H 110 template <
typename _Scalar,
class _System>
127 const Vector3& u = Vector3::Unit(System::AlphaAxisAbs - 1);
128 return System::IsAlphaOpposite ? -u : u;
133 const Vector3& u = Vector3::Unit(System::BetaAxisAbs - 1);
134 return System::IsBetaOpposite ? -u : u;
139 const Vector3& u = Vector3::Unit(System::GammaAxisAbs - 1);
140 return System::IsGammaOpposite ? -u : u;
151 m_angles(alpha, beta, gamma) {}
157 template<
typename Derived>
171 template<
typename Derived>
174 bool positiveRangeAlpha,
175 bool positiveRangeBeta,
176 bool positiveRangeGamma) {
178 System::CalcEulerAngles(*
this, m, positiveRangeAlpha, positiveRangeBeta, positiveRangeGamma);
187 template<
typename Derived>
201 template<
typename Derived>
204 bool positiveRangeAlpha,
205 bool positiveRangeBeta,
206 bool positiveRangeGamma) {
208 System::CalcEulerAngles(*
this, rot.
toRotationMatrix(), positiveRangeAlpha, positiveRangeBeta, positiveRangeGamma);
212 const Vector3&
angles()
const {
return m_angles; }
217 Scalar
alpha()
const {
return m_angles[0]; }
219 Scalar&
alpha() {
return m_angles[0]; }
222 Scalar
beta()
const {
return m_angles[1]; }
224 Scalar&
beta() {
return m_angles[1]; }
227 Scalar
gamma()
const {
return m_angles[2]; }
229 Scalar&
gamma() {
return m_angles[2]; }
237 res.m_angles = -m_angles;
261 bool PositiveRangeAlpha,
262 bool PositiveRangeBeta,
263 bool PositiveRangeGamma,
267 EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Derived, 3, 3)
270 System::template CalcEulerAngles<
271 PositiveRangeAlpha, PositiveRangeBeta, PositiveRangeGamma, _Scalar>(e, m);
287 bool PositiveRangeAlpha,
288 bool PositiveRangeBeta,
289 bool PositiveRangeGamma,
293 return FromRotation<PositiveRangeAlpha, PositiveRangeBeta, PositiveRangeGamma>(rot.
toRotationMatrix());
311 template<
typename Derived>
313 EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Derived, 3, 3)
315 System::CalcEulerAngles(*
this, m);
322 template<
typename Derived>
333 return static_cast<QuaternionType
>(*this).toRotationMatrix();
345 friend std::ostream& operator<<(std::ostream& s, const EulerAngles<Scalar, System>& eulerAngles)
347 s << eulerAngles.angles().transpose();
352 #define EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(AXES, SCALAR_TYPE, SCALAR_POSTFIX) \ 354 typedef EulerAngles<SCALAR_TYPE, EulerSystem##AXES> EulerAngles##AXES##SCALAR_POSTFIX; 356 #define EIGEN_EULER_ANGLES_TYPEDEFS(SCALAR_TYPE, SCALAR_POSTFIX) \ 357 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(XYZ, SCALAR_TYPE, SCALAR_POSTFIX) \ 358 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(XYX, SCALAR_TYPE, SCALAR_POSTFIX) \ 359 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(XZY, SCALAR_TYPE, SCALAR_POSTFIX) \ 360 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(XZX, SCALAR_TYPE, SCALAR_POSTFIX) \ 362 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(YZX, SCALAR_TYPE, SCALAR_POSTFIX) \ 363 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(YZY, SCALAR_TYPE, SCALAR_POSTFIX) \ 364 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(YXZ, SCALAR_TYPE, SCALAR_POSTFIX) \ 365 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(YXY, SCALAR_TYPE, SCALAR_POSTFIX) \ 367 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(ZXY, SCALAR_TYPE, SCALAR_POSTFIX) \ 368 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(ZXZ, SCALAR_TYPE, SCALAR_POSTFIX) \ 369 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(ZYX, SCALAR_TYPE, SCALAR_POSTFIX) \ 370 EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(ZYZ, SCALAR_TYPE, SCALAR_POSTFIX) 372 EIGEN_EULER_ANGLES_TYPEDEFS(
float, f)
373 EIGEN_EULER_ANGLES_TYPEDEFS(
double, d)
377 template<
typename _Scalar,
class _System>
386 #endif // EIGEN_EULERANGLESCLASS_H EulerAngles(const RotationBase< Derived, 3 > &rot)
Constructs and initialize Euler angles from a rotation rot.
Definition: EulerAngles.h:188
EulerAngles & operator=(const RotationBase< Derived, 3 > &rot)
Set *this from a rotation.
Definition: EulerAngles.h:323
EulerAngles()
Default constructor without initialization.
Definition: EulerAngles.h:148
Scalar gamma() const
Definition: EulerAngles.h:227
Quaternion< Scalar > QuaternionType
Definition: EulerAngles.h:122
Matrix< Scalar, 3, 1 > Vector3
Definition: EulerAngles.h:121
Scalar beta() const
Definition: EulerAngles.h:222
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:85
static EulerAngles FromRotation(const RotationBase< Derived, 3 > &rot)
Constructs and initialize Euler angles from a rotation rot, with options to choose for each angle the...
Definition: EulerAngles.h:291
static Vector3 GammaAxisVector()
Definition: EulerAngles.h:138
static Vector3 AlphaAxisVector()
Definition: EulerAngles.h:126
EulerAngles & operator=(const MatrixBase< Derived > &m)
Set *this from a rotation matrix(i.e.
Definition: EulerAngles.h:312
Scalar & alpha()
Definition: EulerAngles.h:219
EulerAngles inverse() const
Definition: EulerAngles.h:234
AngleAxis< Scalar > AngleAxisType
Definition: EulerAngles.h:123
Common base class for compact rotation representations.
Definition: ForwardDeclarations.h:266
Scalar & gamma()
Definition: EulerAngles.h:229
Represents a rotation in a 3 dimensional space as three Euler angles.
Definition: EulerAngles.h:111
EIGEN_DEVICE_FUNC RotationMatrixType toRotationMatrix() const
Definition: RotationBase.h:45
EulerAngles(const Scalar &alpha, const Scalar &beta, const Scalar &gamma)
Constructs and initialize Euler angles(alpha, beta, gamma).
Definition: EulerAngles.h:150
Definition: BandTriangularSolver.h:13
Matrix< Scalar, 3, 3 > Matrix3
Definition: EulerAngles.h:120
Definition: ForwardDeclarations.h:273
EulerAngles(const MatrixBase< Derived > &m, bool positiveRangeAlpha, bool positiveRangeBeta, bool positiveRangeGamma)
Constructs and initialize Euler angles from a 3x3 rotation matrix m, with options to choose for each ...
Definition: EulerAngles.h:172
Scalar & beta()
Definition: EulerAngles.h:224
Matrix3 toRotationMatrix() const
Definition: EulerAngles.h:331
static Vector3 BetaAxisVector()
Definition: EulerAngles.h:132
The matrix class, also used for vectors and row-vectors.
Definition: Matrix.h:178
_Scalar Scalar
the scalar type of the angles
Definition: EulerAngles.h:115
EulerAngles(const MatrixBase< Derived > &m)
Constructs and initialize Euler angles from a 3x3 rotation matrix m.
Definition: EulerAngles.h:158
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:48
Definition: ForwardDeclarations.h:270
static EulerAngles FromRotation(const MatrixBase< Derived > &m)
Constructs and initialize Euler angles from a 3x3 rotation matrix m, with options to choose for each ...
Definition: EulerAngles.h:265
Definition: ForwardDeclarations.h:17
EulerAngles operator-() const
Definition: EulerAngles.h:244
_System System
the EulerSystem to use, which represents the axes of rotation.
Definition: EulerAngles.h:118
Scalar alpha() const
Definition: EulerAngles.h:217
EulerAngles(const RotationBase< Derived, 3 > &rot, bool positiveRangeAlpha, bool positiveRangeBeta, bool positiveRangeGamma)
Constructs and initialize Euler angles from a rotation rot, with options to choose for each angle the...
Definition: EulerAngles.h:202
const Vector3 & angles() const
Definition: EulerAngles.h:212
Vector3 & angles()
Definition: EulerAngles.h:214