Eigen::Quaternion< Scalar_, Options_ > Class Template Reference

The quaternion class used to represent 3D orientations and rotations. More...

#include <Quaternion.h>

+ Inheritance diagram for Eigen::Quaternion< Scalar_, Options_ >:

Public Types

enum  
 
typedef QuaternionBase< Quaternion< Scalar_, Options_ > > Base
 
typedef Scalar_ Scalar
 
typedef internal::traits< Quaternion >::Coefficients Coefficients
 
typedef Base::AngleAxisType AngleAxisType
 
- Public Types inherited from Eigen::QuaternionBase< Quaternion< Scalar_, Options_ > >
enum  
 
typedef RotationBase< Quaternion< Scalar_, Options_ >, 3 > Base
 
typedef internal::traits< Quaternion< Scalar_, Options_ > >::Scalar Scalar
 
typedef NumTraits< Scalar >::Real RealScalar
 
typedef internal::traits< Quaternion< Scalar_, Options_ > >::Coefficients Coefficients
 
typedef Coefficients::CoeffReturnType CoeffReturnType
 
typedef std::conditional_t< bool(internal::traits< Quaternion< Scalar_, Options_ > >::Flags &LvalueBit), Scalar &, CoeffReturnTypeNonConstCoeffReturnType
 
typedef Matrix< Scalar, 3, 1 > Vector3
 
typedef Matrix< Scalar, 3, 3 > Matrix3
 
typedef AngleAxis< ScalarAngleAxisType
 
- Public Types inherited from Eigen::RotationBase< Derived, Dim_ >
enum  { Dim = Dim_ }
 
typedef internal::traits< Derived >::Scalar Scalar
 
typedef Matrix< Scalar, Dim, DimRotationMatrixType
 
typedef Matrix< Scalar, Dim, 1 > VectorType
 

Public Member Functions

EIGEN_DEVICE_FUNC Quaternion ()
 
EIGEN_DEVICE_FUNC Quaternion (const Scalar &w, const Scalar &x, const Scalar &y, const Scalar &z)
 
template<typename Derived >
EIGEN_DEVICE_FUNC Quaternion (const Scalar &w, const Eigen::MatrixBase< Derived > &vec)
 
EIGEN_DEVICE_FUNC Quaternion (const Scalar *data)
 
template<class Derived >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion (const QuaternionBase< Derived > &other)
 
EIGEN_DEVICE_FUNC Quaternion (const AngleAxisType &aa)
 
template<typename Derived >
EIGEN_DEVICE_FUNC Quaternion (const MatrixBase< Derived > &other)
 
template<typename OtherScalar , int OtherOptions>
EIGEN_DEVICE_FUNC Quaternion (const Quaternion< OtherScalar, OtherOptions > &other)
 
EIGEN_DEVICE_FUNC Quaternion (Quaternion &&other) EIGEN_NOEXCEPT_IF(std
 
EIGEN_DEVICE_FUNC Quaternionoperator= (Quaternion &&other) EIGEN_NOEXCEPT_IF(std
 
EIGEN_DEVICE_FUNC Coefficientscoeffs ()
 
EIGEN_DEVICE_FUNC const Coefficientscoeffs () const
 
template<typename Derived1 , typename Derived2 >
EIGEN_DEVICE_FUNC Quaternion< Scalar, Options > FromTwoVectors (const MatrixBase< Derived1 > &a, const MatrixBase< Derived2 > &b)
 
- Public Member Functions inherited from Eigen::QuaternionBase< Quaternion< Scalar_, Options_ > >
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR CoeffReturnType x () const
 
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR NonConstCoeffReturnType x ()
 
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR CoeffReturnType y () const
 
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR NonConstCoeffReturnType y ()
 
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR CoeffReturnType z () const
 
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR NonConstCoeffReturnType z ()
 
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR CoeffReturnType w () const
 
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR NonConstCoeffReturnType w ()
 
EIGEN_DEVICE_FUNC const VectorBlock< const Coefficients, 3 > vec () const
 
EIGEN_DEVICE_FUNC VectorBlock< Coefficients, 3 > vec ()
 
EIGEN_DEVICE_FUNC const internal::traits< Quaternion< Scalar_, Options_ > >::Coefficientscoeffs () const
 
EIGEN_DEVICE_FUNC internal::traits< Quaternion< Scalar_, Options_ > >::Coefficientscoeffs ()
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE QuaternionBase< Quaternion< Scalar_, Options_ > > & operator= (const QuaternionBase< Quaternion< Scalar_, Options_ > > &other)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion< Scalar_, Options_ > & operator= (const QuaternionBase< OtherDerived > &other)
 
EIGEN_DEVICE_FUNC Quaternion< Scalar_, Options_ > & operator= (const AngleAxisType &aa)
 
EIGEN_DEVICE_FUNC Quaternion< Scalar_, Options_ > & operator= (const MatrixBase< OtherDerived > &m)
 
EIGEN_DEVICE_FUNC Quaternion< Scalar_, Options_ > & operator= (const MatrixBase< MatrixDerived > &xpr)
 
EIGEN_DEVICE_FUNC QuaternionBasesetIdentity ()
 
EIGEN_DEVICE_FUNC Scalar squaredNorm () const
 
EIGEN_DEVICE_FUNC Scalar norm () const
 
EIGEN_DEVICE_FUNC void normalize ()
 
EIGEN_DEVICE_FUNC Quaternion< Scalarnormalized () const
 
EIGEN_DEVICE_FUNC Scalar dot (const QuaternionBase< OtherDerived > &other) const
 
EIGEN_DEVICE_FUNC Scalar angularDistance (const QuaternionBase< OtherDerived > &other) const
 
EIGEN_DEVICE_FUNC internal::traits< Quaternion< Scalar_, Options_ > >::Scalar angularDistance (const QuaternionBase< OtherDerived > &other) const
 
EIGEN_DEVICE_FUNC Matrix3 toRotationMatrix () const
 
EIGEN_DEVICE_FUNC Quaternion< Scalar_, Options_ > & setFromTwoVectors (const MatrixBase< Derived1 > &a, const MatrixBase< Derived2 > &b)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion< Scalaroperator* (const QuaternionBase< OtherDerived > &q) const
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion< typename internal::traits< Quaternion< Scalar_, Options_ > >::Scalaroperator* (const QuaternionBase< OtherDerived > &other) const
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion< Scalar_, Options_ > & operator*= (const QuaternionBase< OtherDerived > &q)
 
EIGEN_DEVICE_FUNC Quaternion< Scalarinverse () const
 
EIGEN_DEVICE_FUNC Quaternion< Scalarconjugate () const
 
EIGEN_DEVICE_FUNC Quaternion< Scalarslerp (const Scalar &t, const QuaternionBase< OtherDerived > &other) const
 
EIGEN_DEVICE_FUNC Quaternion< typename internal::traits< Quaternion< Scalar_, Options_ > >::Scalarslerp (const Scalar &t, const QuaternionBase< OtherDerived > &other) const
 
EIGEN_DEVICE_FUNC bool operator== (const QuaternionBase< OtherDerived > &other) const
 
EIGEN_DEVICE_FUNC bool operator!= (const QuaternionBase< OtherDerived > &other) const
 
EIGEN_DEVICE_FUNC bool isApprox (const QuaternionBase< OtherDerived > &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Vector3 _transformVector (const Vector3 &v) const
 
EIGEN_DEVICE_FUNC std::enable_if_t< internal::is_same< Scalar, NewScalarType >::value, const Quaternion< Scalar_, Options_ > & > cast () const
 
EIGEN_DEVICE_FUNC std::enable_if_t<!internal::is_same< Scalar, NewScalarType >::value, Quaternion< NewScalarType > > cast () const
 
- Public Member Functions inherited from Eigen::RotationBase< Derived, Dim_ >
EIGEN_DEVICE_FUNC const Derived & derived () const
 
EIGEN_DEVICE_FUNC Derived & derived ()
 
EIGEN_DEVICE_FUNC RotationMatrixType toRotationMatrix () const
 
EIGEN_DEVICE_FUNC RotationMatrixType matrix () const
 
EIGEN_DEVICE_FUNC Derived inverse () const
 
EIGEN_DEVICE_FUNC Transform< Scalar, Dim, Isometryoperator* (const Translation< Scalar, Dim > &t) const
 
EIGEN_DEVICE_FUNC RotationMatrixType operator* (const UniformScaling< Scalar > &s) const
 
template<typename OtherDerived >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::rotation_base_generic_product_selector< Derived, OtherDerived, OtherDerived::IsVectorAtCompileTime >::ReturnType operator* (const EigenBase< OtherDerived > &e) const
 
template<int Mode, int Options>
EIGEN_DEVICE_FUNC Transform< Scalar, Dim, Mode > operator* (const Transform< Scalar, Dim, Mode, Options > &t) const
 
template<typename OtherVectorType >
EIGEN_DEVICE_FUNC VectorType _transformVector (const OtherVectorType &v) const
 

Static Public Member Functions

static EIGEN_DEVICE_FUNC Quaternion UnitRandom ()
 
template<typename Derived1 , typename Derived2 >
static EIGEN_DEVICE_FUNC Quaternion FromTwoVectors (const MatrixBase< Derived1 > &a, const MatrixBase< Derived2 > &b)
 
- Static Public Member Functions inherited from Eigen::QuaternionBase< Quaternion< Scalar_, Options_ > >
static EIGEN_DEVICE_FUNC Quaternion< ScalarIdentity ()
 

Protected Attributes

Coefficients m_coeffs
 

Detailed Description

template<typename Scalar_, int Options_>
class Eigen::Quaternion< Scalar_, Options_ >

The quaternion class used to represent 3D orientations and rotations.

\geometry_module

Template Parameters
Scalar_the scalar type, i.e., the type of the coefficients
Options_controls the memory alignment of the coefficients. Can be # AutoAlign or # DontAlign. Default is AutoAlign.

This class represents a quaternion \( w+xi+yj+zk \) that is a convenient representation of orientations and rotations of objects in three dimensions. Compared to other representations like Euler angles or 3x3 matrices, quaternions offer the following advantages:

  • compact storage (4 scalars)
  • efficient to compose (28 flops),
  • stable spherical interpolation

The following two typedefs are provided for convenience:

  • Quaternionf for float
  • Quaterniond for double
Warning
Operations interpreting the quaternion as rotation have undefined behavior if the quaternion is not normalized.
See also
class AngleAxis, class Transform

Member Typedef Documentation

◆ AngleAxisType

template<typename Scalar_ , int Options_>
typedef Base::AngleAxisType Eigen::Quaternion< Scalar_, Options_ >::AngleAxisType

◆ Base

template<typename Scalar_ , int Options_>
typedef QuaternionBase<Quaternion<Scalar_, Options_> > Eigen::Quaternion< Scalar_, Options_ >::Base

◆ Coefficients

template<typename Scalar_ , int Options_>
typedef internal::traits<Quaternion>::Coefficients Eigen::Quaternion< Scalar_, Options_ >::Coefficients

◆ Scalar

template<typename Scalar_ , int Options_>
typedef Scalar_ Eigen::Quaternion< Scalar_, Options_ >::Scalar

Member Enumeration Documentation

◆ anonymous enum

template<typename Scalar_ , int Options_>
anonymous enum
288 { NeedsAlignment = internal::traits<Quaternion>::Alignment > 0 };

Constructor & Destructor Documentation

◆ Quaternion() [1/9]

template<typename Scalar_ , int Options_>
EIGEN_DEVICE_FUNC Eigen::Quaternion< Scalar_, Options_ >::Quaternion ( )
inline

Default constructor leaving the quaternion uninitialized.

299 {}

◆ Quaternion() [2/9]

template<typename Scalar_ , int Options_>
EIGEN_DEVICE_FUNC Eigen::Quaternion< Scalar_, Options_ >::Quaternion ( const Scalar w,
const Scalar x,
const Scalar y,
const Scalar z 
)
inline

Constructs and initializes the quaternion \( w+xi+yj+zk \) from its four coefficients w, x, y and z.

Warning
Note the order of the arguments: the real w coefficient first, while internally the coefficients are stored in the following order: [x, y, z, w]
309  : m_coeffs(x, y, z, w) {}
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR CoeffReturnType w() const
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:66
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR CoeffReturnType z() const
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:64
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR CoeffReturnType x() const
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:60
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR CoeffReturnType y() const
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:62
Coefficients m_coeffs
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:375

◆ Quaternion() [3/9]

template<typename Scalar_ , int Options_>
template<typename Derived >
EIGEN_DEVICE_FUNC Eigen::Quaternion< Scalar_, Options_ >::Quaternion ( const Scalar w,
const Eigen::MatrixBase< Derived > &  vec 
)
inline

Constructs and initializes a quaternion from its real part as a scalar, and its imaginary part as a 3-vector [x, y, z]

316  : m_coeffs(vec.x(), vec.y(), vec.z(), w) {
318  }
#define EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(TYPE, SIZE)
Definition: StaticAssert.h:50
EIGEN_DEVICE_FUNC const VectorBlock< const Coefficients, 3 > vec() const
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:78

References EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE.

◆ Quaternion() [4/9]

template<typename Scalar_ , int Options_>
EIGEN_DEVICE_FUNC Eigen::Quaternion< Scalar_, Options_ >::Quaternion ( const Scalar data)
inlineexplicit

Constructs and initialize a quaternion from the array data

321 : m_coeffs(data) {}
int data[]
Definition: Map_placement_new.cpp:1

◆ Quaternion() [5/9]

template<typename Scalar_ , int Options_>
template<class Derived >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Eigen::Quaternion< Scalar_, Options_ >::Quaternion ( const QuaternionBase< Derived > &  other)
inline

Copy constructor

325  {
326  this->Base::operator=(other);
327  }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE QuaternionBase< Quaternion< Scalar_, Options_ > > & operator=(const QuaternionBase< Quaternion< Scalar_, Options_ > > &other)
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:556

References Eigen::QuaternionBase< Quaternion< Scalar_, Options_ > >::operator=().

◆ Quaternion() [6/9]

template<typename Scalar_ , int Options_>
EIGEN_DEVICE_FUNC Eigen::Quaternion< Scalar_, Options_ >::Quaternion ( const AngleAxisType aa)
inlineexplicit

Constructs and initializes a quaternion from the angle-axis aa

330 { *this = aa; }

◆ Quaternion() [7/9]

template<typename Scalar_ , int Options_>
template<typename Derived >
EIGEN_DEVICE_FUNC Eigen::Quaternion< Scalar_, Options_ >::Quaternion ( const MatrixBase< Derived > &  other)
inlineexplicit

Constructs and initializes a quaternion from either:

  • a rotation matrix expression,
  • a 4D vector expression representing quaternion coefficients in the order [x, y, z, w].
337  {
338  *this = other;
339  }

◆ Quaternion() [8/9]

template<typename Scalar_ , int Options_>
template<typename OtherScalar , int OtherOptions>
EIGEN_DEVICE_FUNC Eigen::Quaternion< Scalar_, Options_ >::Quaternion ( const Quaternion< OtherScalar, OtherOptions > &  other)
inlineexplicit

Explicit copy constructor with scalar conversion

343  {
344  m_coeffs = other.coeffs().template cast<Scalar>();
345  }

References Eigen::Quaternion< Scalar_, Options_ >::coeffs(), and Eigen::Quaternion< Scalar_, Options_ >::m_coeffs.

◆ Quaternion() [9/9]

template<typename Scalar_ , int Options_>
EIGEN_DEVICE_FUNC Eigen::Quaternion< Scalar_, Options_ >::Quaternion ( Quaternion< Scalar_, Options_ > &&  other)
inline

Default move constructor

351  : m_coeffs(std::move(other.coeffs())) {}

Member Function Documentation

◆ coeffs() [1/2]

template<typename Scalar_ , int Options_>
EIGEN_DEVICE_FUNC Coefficients& Eigen::Quaternion< Scalar_, Options_ >::coeffs ( )
inline

◆ coeffs() [2/2]

template<typename Scalar_ , int Options_>
EIGEN_DEVICE_FUNC const Coefficients& Eigen::Quaternion< Scalar_, Options_ >::coeffs ( ) const
inline

◆ FromTwoVectors() [1/2]

template<typename Scalar_ , int Options_>
template<typename Derived1 , typename Derived2 >
static EIGEN_DEVICE_FUNC Quaternion Eigen::Quaternion< Scalar_, Options_ >::FromTwoVectors ( const MatrixBase< Derived1 > &  a,
const MatrixBase< Derived2 > &  b 
)
static

◆ FromTwoVectors() [2/2]

template<typename Scalar_ , int Options_>
template<typename Derived1 , typename Derived2 >
EIGEN_DEVICE_FUNC Quaternion<Scalar, Options> Eigen::Quaternion< Scalar_, Options_ >::FromTwoVectors ( const MatrixBase< Derived1 > &  a,
const MatrixBase< Derived2 > &  b 
)

Returns a quaternion representing a rotation between the two arbitrary vectors a and b. In other words, the built rotation represent a rotation sending the line of direction a to the line of direction b, both lines passing through the origin.

Returns
resulting quaternion

Note that the two input vectors do not have to be normalized, and do not need to have the same norm.

712  {
713  Quaternion quat;
714  quat.setFromTwoVectors(a, b);
715  return quat;
716 }
Scalar * b
Definition: benchVecAdd.cpp:17
This class contains the 4 components of a quaternion and the standard operators and functions needed ...
Definition: Kernel/Math/Quaternion.h:42
const Scalar * a
Definition: level2_cplx_impl.h:32

References a, b, and Eigen::QuaternionBase< Derived >::setFromTwoVectors().

◆ operator=()

template<typename Scalar_ , int Options_>
EIGEN_DEVICE_FUNC Quaternion& Eigen::Quaternion< Scalar_, Options_ >::operator= ( Quaternion< Scalar_, Options_ > &&  other)
inline

Default move assignment operator

355  {
356  m_coeffs = std::move(other.coeffs());
357  return *this;
358  }

References Eigen::Quaternion< Scalar_, Options_ >::m_coeffs.

◆ UnitRandom()

template<typename Scalar , int Options>
EIGEN_DEVICE_FUNC Quaternion< Scalar, Options > Quaternion::UnitRandom
static
Returns
a random unit quaternion following a uniform distribution law on SO(3)
Note
The implementation is based on http://planning.cs.uiuc.edu/node198.html
689  {
693  const Scalar u1 = internal::random<Scalar>(0, 1), u2 = internal::random<Scalar>(0, 2 * EIGEN_PI),
694  u3 = internal::random<Scalar>(0, 2 * EIGEN_PI);
695  const Scalar a = sqrt(Scalar(1) - u1), b = sqrt(u1);
696  return Quaternion(a * sin(u2), a * cos(u2), b * sin(u3), b * cos(u3));
697 }
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
#define EIGEN_USING_STD(FUNC)
Definition: Macros.h:1090
#define EIGEN_PI
Definition: MathFunctions.h:16
SCALAR Scalar
Definition: bench_gemm.cpp:45
EIGEN_DEVICE_FUNC Quaternion()
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:299
Scalar_ Scalar
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:290

References a, b, cos(), EIGEN_PI, EIGEN_USING_STD, sin(), and sqrt().

Member Data Documentation

◆ m_coeffs


The documentation for this class was generated from the following files: