Main MRPT website > C++ reference
MRPT logo
Public Types | Public Member Functions | Static Public Member Functions | Private Types

QuaternionBase< Derived > Class Template Reference


Detailed Description

template<class Derived>
class QuaternionBase< Derived >

Definition at line 42 of file Quaternion.h.

#include <src/Geometry/Quaternion.h>

Inheritance diagram for QuaternionBase< Derived >:
Inheritance graph
[legend]

List of all members.

Public Types

typedef internal::traits
< Derived >::Scalar 
Scalar
 the scalar type of the coefficients
typedef NumTraits< Scalar >::Real RealScalar
typedef internal::traits
< Derived >::Coefficients 
Coefficients
typedef Matrix< Scalar, 3, 1 > Vector3
 the type of a 3D vector
typedef Matrix< Scalar, 3, 3 > Matrix3
 the equivalent rotation matrix type
typedef AngleAxis< ScalarAngleAxisType
 the equivalent angle-axis type

Public Member Functions

Scalar x () const
Scalar y () const
Scalar z () const
Scalar w () const
Scalarx ()
Scalary ()
Scalarz ()
Scalarw ()
const VectorBlock< const
Coefficients, 3 > 
vec () const
VectorBlock< Coefficients, 3 > vec ()
const internal::traits
< Derived >::Coefficients
coeffs () const
internal::traits< Derived >
::Coefficients
coeffs ()
EIGEN_STRONG_INLINE
QuaternionBase< Derived > & 
operator= (const QuaternionBase< Derived > &other)
template<class OtherDerived >
EIGEN_STRONG_INLINE Derived & operator= (const QuaternionBase< OtherDerived > &other)
Derived & operator= (const AngleAxisType &aa)
 Set *this from an angle-axis aa and returns a reference to *this.
template<class OtherDerived >
Derived & operator= (const MatrixBase< OtherDerived > &m)
QuaternionBasesetIdentity ()
Scalar squaredNorm () const
Scalar norm () const
void normalize ()
 Normalizes the quaternion *this.
Quaternion< Scalarnormalized () const
template<class OtherDerived >
Scalar dot (const QuaternionBase< OtherDerived > &other) const
template<class OtherDerived >
Scalar angularDistance (const QuaternionBase< OtherDerived > &other) const
Matrix3 toRotationMatrix () const
 Convert the quaternion to a 3x3 rotation matrix.
template<typename Derived1 , typename Derived2 >
Derived & setFromTwoVectors (const MatrixBase< Derived1 > &a, const MatrixBase< Derived2 > &b)
 Sets *this to be a quaternion representing a rotation between the two arbitrary vectors a and b.
template<class OtherDerived >
EIGEN_STRONG_INLINE Quaternion
< Scalar
operator* (const QuaternionBase< OtherDerived > &q) const
template<class OtherDerived >
EIGEN_STRONG_INLINE Derived & operator*= (const QuaternionBase< OtherDerived > &q)
Quaternion< Scalarinverse () const
Quaternion< Scalarconjugate () const
template<class OtherDerived >
Quaternion< Scalarslerp (Scalar t, const QuaternionBase< OtherDerived > &other) const
template<class OtherDerived >
bool isApprox (const QuaternionBase< OtherDerived > &other, RealScalar prec=NumTraits< Scalar >::dummy_precision()) const
EIGEN_STRONG_INLINE Vector3 _transformVector (Vector3 v) const
 return the result vector of v through the rotation
template<typename NewScalarType >
internal::cast_return_type
< Derived, Quaternion
< NewScalarType > >::type 
cast () const
template<class MatrixDerived >
Derived & operator= (const MatrixBase< MatrixDerived > &xpr)
 Set *this from the expression xpr:

  • if xpr is a 4x1 vector, then xpr is assumed to be a quaternion
  • if xpr is a 3x3 matrix, then xpr is assumed to be rotation matrix and xpr is converted to a quaternion.

Static Public Member Functions

static Quaternion< ScalarIdentity ()

Private Types

typedef RotationBase< Derived, 3 > Base

Member Typedef Documentation

template<class Derived>
typedef AngleAxis<Scalar> QuaternionBase< Derived >::AngleAxisType

the equivalent angle-axis type

Reimplemented in Quaternion< _Scalar >.

Definition at line 59 of file Quaternion.h.

template<class Derived>
typedef RotationBase<Derived, 3> QuaternionBase< Derived >::Base [private]
template<class Derived>
typedef internal::traits<Derived>::Coefficients QuaternionBase< Derived >::Coefficients
template<class Derived>
typedef Matrix<Scalar,3,3> QuaternionBase< Derived >::Matrix3

the equivalent rotation matrix type

Definition at line 57 of file Quaternion.h.

template<class Derived>
typedef NumTraits<Scalar>::Real QuaternionBase< Derived >::RealScalar

Definition at line 50 of file Quaternion.h.

template<class Derived>
typedef internal::traits<Derived>::Scalar QuaternionBase< Derived >::Scalar

the scalar type of the coefficients

Reimplemented from RotationBase< Derived, 3 >.

Reimplemented in Quaternion< _Scalar >, Map< const Quaternion< _Scalar >, PacketAccess >, and Map< Quaternion< _Scalar >, PacketAccess >.

Definition at line 49 of file Quaternion.h.

template<class Derived>
typedef Matrix<Scalar,3,1> QuaternionBase< Derived >::Vector3

the type of a 3D vector

Definition at line 55 of file Quaternion.h.


Member Function Documentation

template<class Derived >
EIGEN_STRONG_INLINE QuaternionBase< Derived >::Vector3 QuaternionBase< Derived >::_transformVector ( Vector3  v) const

return the result vector of v through the rotation

Rotation of a vector by a quaternion.

Remarks:
If the quaternion is used to rotate several points (>1) then it is much more efficient to first convert it to a 3x3 Matrix. Comparison of the operation cost for n transformations:
  • Quaternion2: 30n
  • Via a Matrix3: 24 + 15n

Definition at line 439 of file Quaternion.h.

template<class Derived >
template<class OtherDerived >
internal::traits< Derived >::Scalar QuaternionBase< Derived >::angularDistance ( const QuaternionBase< OtherDerived > &  other) const [inline]
Returns:
the angle (in radian) between two rotations
See also:
dot()

Definition at line 618 of file Quaternion.h.

References abs().

template<class Derived>
template<typename NewScalarType >
internal::cast_return_type<Derived,Quaternion<NewScalarType> >::type QuaternionBase< Derived >::cast ( ) const [inline]
Returns:
*this with scalar type casted to NewScalarType

Note that if NewScalarType is equal to the current scalar type of *this then this function smartly returns a const reference to *this.

Definition at line 180 of file Quaternion.h.

template<class Derived>
const internal::traits<Derived>::Coefficients& QuaternionBase< Derived >::coeffs ( ) const [inline]
template<class Derived>
internal::traits<Derived>::Coefficients& QuaternionBase< Derived >::coeffs ( ) [inline]
Returns:
a vector expression of the coefficients (x,y,z,w)

Reimplemented in Quaternion< _Scalar >, and Map< Quaternion< _Scalar >, PacketAccess >.

Definition at line 91 of file Quaternion.h.

template<class Derived >
Quaternion< typename internal::traits< Derived >::Scalar > QuaternionBase< Derived >::conjugate ( ) const [inline]
Returns:
the conjugated quaternion
the conjugate of the *this which is equal to the multiplicative inverse if the quaternion is normalized. The conjugate of a quaternion represents the opposite rotation.
See also:
Quaternion2::inverse()

Definition at line 607 of file Quaternion.h.

References internal::y.

template<class Derived>
template<class OtherDerived >
Scalar QuaternionBase< Derived >::dot ( const QuaternionBase< OtherDerived > &  other) const [inline]
Returns:
the dot product of *this and other Geometrically speaking, the dot product of two unit quaternions corresponds to the cosine of half the angle between the two rotations.
See also:
angularDistance()

Definition at line 137 of file Quaternion.h.

template<class Derived>
static Quaternion<Scalar> QuaternionBase< Derived >::Identity ( ) [inline, static]
Returns:
a quaternion representing an identity rotation
See also:
MatrixBase::Identity()

Definition at line 109 of file Quaternion.h.

template<class Derived >
Quaternion< typename internal::traits< Derived >::Scalar > QuaternionBase< Derived >::inverse ( ) const [inline]
Returns:
the quaternion describing the inverse rotation
the multiplicative inverse of *this Note that in most cases, i.e., if you simply want the opposite rotation, and/or the quaternion is normalized, then it is enough to use the conjugate.
See also:
QuaternionBase::conjugate()

Reimplemented from RotationBase< Derived, 3 >.

Definition at line 586 of file Quaternion.h.

References conjugate().

template<class Derived>
template<class OtherDerived >
bool QuaternionBase< Derived >::isApprox ( const QuaternionBase< OtherDerived > &  other,
RealScalar  prec = NumTraits<Scalar>::dummy_precision() 
) const [inline]
Returns:
true if *this is approximately equal to other, within the precision determined by prec.
See also:
MatrixBase::isApprox()

Definition at line 168 of file Quaternion.h.

template<class Derived>
Scalar QuaternionBase< Derived >::norm ( ) const [inline]
Returns:
the norm of the quaternion's coefficients
See also:
QuaternionBase::squaredNorm(), MatrixBase::norm()

Definition at line 123 of file Quaternion.h.

template<class Derived>
void QuaternionBase< Derived >::normalize ( void  ) [inline]

Normalizes the quaternion *this.

See also:
normalized(), MatrixBase::normalize()

Definition at line 127 of file Quaternion.h.

template<class Derived>
Quaternion<Scalar> QuaternionBase< Derived >::normalized ( ) const [inline]
Returns:
a normalized copy of *this
See also:
normalize(), MatrixBase::normalized()

Definition at line 130 of file Quaternion.h.

template<class Derived >
template<class OtherDerived >
EIGEN_STRONG_INLINE Quaternion< typename internal::traits< Derived >::Scalar > QuaternionBase< Derived >::operator* ( const QuaternionBase< OtherDerived > &  other) const
Returns:
the concatenation of two rotations as a quaternion-quaternion product

Definition at line 412 of file Quaternion.h.

References EIGEN_STATIC_ASSERT, and Architecture::Target.

template<class Derived >
template<class OtherDerived >
EIGEN_STRONG_INLINE Derived & QuaternionBase< Derived >::operator*= ( const QuaternionBase< OtherDerived > &  other)
See also:
operator*(Quaternion)

Definition at line 424 of file Quaternion.h.

References RotationBase< Derived, 3 >::derived().

template<class Derived>
template<class OtherDerived >
Derived& QuaternionBase< Derived >::operator= ( const MatrixBase< OtherDerived > &  m)
template<class Derived>
template<class MatrixDerived >
Derived& QuaternionBase< Derived >::operator= ( const MatrixBase< MatrixDerived > &  xpr) [inline]

Set *this from the expression xpr:

  • if xpr is a 4x1 vector, then xpr is assumed to be a quaternion
  • if xpr is a 3x3 matrix, then xpr is assumed to be rotation matrix and xpr is converted to a quaternion.

Definition at line 485 of file Quaternion.h.

References EIGEN_STATIC_ASSERT.

template<class Derived>
EIGEN_STRONG_INLINE QuaternionBase< Derived > & QuaternionBase< Derived >::operator= ( const QuaternionBase< Derived > &  other)

Definition at line 452 of file Quaternion.h.

References QuaternionBase< Derived >::coeffs().

template<class Derived >
template<class OtherDerived >
EIGEN_STRONG_INLINE Derived & QuaternionBase< Derived >::operator= ( const QuaternionBase< OtherDerived > &  other)

Definition at line 460 of file Quaternion.h.

References QuaternionBase< Derived >::coeffs().

template<class Derived>
EIGEN_STRONG_INLINE Derived & QuaternionBase< Derived >::operator= ( const AngleAxisType aa)

Set *this from an angle-axis aa and returns a reference to *this.

Definition at line 469 of file Quaternion.h.

References AngleAxis< _Scalar >::angle(), AngleAxis< _Scalar >::axis(), cos(), and sin().

template<class Derived >
template<typename Derived1 , typename Derived2 >
Derived & QuaternionBase< Derived >::setFromTwoVectors ( const MatrixBase< Derived1 > &  a,
const MatrixBase< Derived2 > &  b 
) [inline]

Sets *this to be a quaternion representing a rotation between the two arbitrary vectors a and b.

Returns:
the quaternion which transform a into b through a rotation

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:
a reference to *this.

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

Definition at line 544 of file Quaternion.h.

References ComputeFullV, JacobiSVD< _MatrixType, QRPreconditioner >::matrixV(), MatrixBase< Derived >::normalized(), and internal::sqrt().

template<class Derived>
QuaternionBase& QuaternionBase< Derived >::setIdentity ( ) [inline]
template<class Derived >
template<class OtherDerived >
Quaternion< typename internal::traits< Derived >::Scalar > QuaternionBase< Derived >::slerp ( Scalar  t,
const QuaternionBase< OtherDerived > &  other 
) const
Returns:
an interpolation for a constant motion between other and *this t in [0;1] see http://en.wikipedia.org/wiki/Slerp
the spherical linear interpolation between the two quaternions *this and other at the parameter t

Definition at line 632 of file Quaternion.h.

References abs(), QuaternionBase< Derived >::coeffs(), sin(), and t().

template<class Derived>
Scalar QuaternionBase< Derived >::squaredNorm ( ) const [inline]
Returns:
the squared norm of the quaternion's coefficients
See also:
QuaternionBase::norm(), MatrixBase::squaredNorm()

Definition at line 118 of file Quaternion.h.

template<class Derived >
QuaternionBase< Derived >::Matrix3 QuaternionBase< Derived >::toRotationMatrix ( void  ) const [inline]

Convert the quaternion to a 3x3 rotation matrix.

Returns:
an equivalent 3x3 rotation matrix

The quaternion is required to be normalized, otherwise the result is undefined.

Reimplemented from RotationBase< Derived, 3 >.

Definition at line 498 of file Quaternion.h.

References PlainObjectBase< Derived >::coeffRef(), and internal::y.

template<class Derived>
const VectorBlock<const Coefficients,3> QuaternionBase< Derived >::vec ( ) const [inline]
Returns:
a read-only vector expression of the imaginary part (x,y,z)

Definition at line 82 of file Quaternion.h.

Referenced by AngleAxis< _Scalar >::operator=().

template<class Derived>
VectorBlock<Coefficients,3> QuaternionBase< Derived >::vec ( ) [inline]
Returns:
a vector expression of the imaginary part (x,y,z)

Definition at line 85 of file Quaternion.h.

template<class Derived>
Scalar& QuaternionBase< Derived >::w ( ) [inline]
Returns:
a reference to the w coefficient

Definition at line 79 of file Quaternion.h.

template<class Derived>
Scalar QuaternionBase< Derived >::w ( ) const [inline]
template<class Derived>
Scalar QuaternionBase< Derived >::x ( ) const [inline]
template<class Derived>
Scalar& QuaternionBase< Derived >::x ( ) [inline]
Returns:
a reference to the x coefficient

Definition at line 73 of file Quaternion.h.

template<class Derived>
Scalar QuaternionBase< Derived >::y ( ) const [inline]
template<class Derived>
Scalar& QuaternionBase< Derived >::y ( ) [inline]
Returns:
a reference to the y coefficient

Definition at line 75 of file Quaternion.h.

template<class Derived>
Scalar QuaternionBase< Derived >::z ( ) const [inline]
template<class Derived>
Scalar& QuaternionBase< Derived >::z ( ) [inline]
Returns:
a reference to the z coefficient

Definition at line 77 of file Quaternion.h.




Page generated by Doxygen 1.7.3 for MRPT 0.9.4 SVN: at Sat Mar 26 06:40:17 UTC 2011