quaternion Class Reference

Quaternion class used to perform rotations in 3D space. More...

Collaboration diagram for quaternion:
[legend]

Public Types

enum  eulerOrder : unsigned char {
  XZX , XYX , YXY , YZY ,
  ZYZ , ZXZ , XZY , XYZ ,
  YXZ , YZX , ZYX , ZXY ,
  ROLL_PITCH_YAW = XYZ , YAW_PITCH_ROLL = ZYX
}
 Euler-angle rotation order. More...
 
typedef scalar cmptType
 Component type. More...
 
typedef scalar magType
 Magnitude type. More...
 

Public Member Functions

 quaternion ()=default
 Default construct. More...
 
 quaternion (const quaternion &)=default
 Copy construct. More...
 
quaternionoperator= (const quaternion &)=default
 Copy assignment. More...
 
 quaternion (const Foam::zero)
 Construct initialized to zero. More...
 
 quaternion (const scalar w, const vector &v)
 Construct given scalar and vector parts. More...
 
 quaternion (const vector &d, const scalar theta)
 Construct rotation quaternion given direction d and angle theta. More...
 
 quaternion (const vector &d, const scalar cosTheta, const bool isNormalised)
 
 quaternion (const scalar w)
 
 quaternion (const vector &v)
 
 quaternion (const eulerOrder order, const vector &angles)
 Construct from three Euler rotation angles. More...
 
 quaternion (const tensor &rotationTensor)
 Construct from a rotation tensor. More...
 
 quaternion (Istream &is)
 Construct from Istream. More...
 
scalar w () const noexcept
 Scalar part of the quaternion ( = cos(theta/2) for rotation) More...
 
const vectorv () const noexcept
 Vector part of the quaternion ( = axis of rotation) More...
 
tensor R () const
 The rotation tensor corresponding to the quaternion. More...
 
vector eulerAngles (const eulerOrder order) const
 
scalar & w () noexcept
 Scalar part of the quaternion ( = cos(theta/2) for rotation) More...
 
vectorv () noexcept
 Vector part of the quaternion ( = axis of rotation) More...
 
quaternionnormalise ()
 Inplace normalise the quaternion by its magnitude. More...
 
vector transform (const vector &v) const
 Rotate the given vector. More...
 
vector invTransform (const vector &v) const
 Rotate the given vector anti-clockwise. More...
 
quaternion transform (const quaternion &q) const
 Rotate the given quaternion (and normalise) More...
 
quaternion invTransform (const quaternion &q) const
 Rotate the given quaternion anti-clockwise (and normalise) More...
 
void operator+= (const quaternion &q)
 
void operator-= (const quaternion &q)
 
void operator*= (const quaternion &q)
 
void operator/= (const quaternion &q)
 
void operator= (const scalar s)
 Change scalar portion only. More...
 
void operator= (const vector &v)
 Change vector portion only. More...
 
void operator= (const Foam::zero)
 Assign scalar and vector to zero. More...
 
void operator*= (const scalar s)
 
void operator/= (const scalar s)
 
void normalize ()
 Inplace normalise the quaternion by its magnitude. More...
 
quaternion normalized () const
 Return the quaternion normalised by its magnitude. More...
 

Static Public Member Functions

static quaternion unit (const vector &v)
 

Static Public Attributes

static const Enum< eulerOrdereulerOrderNames
 
static constexpr direction rank = 1
 Rank of quaternion is 1. More...
 
static constexpr const char *const typeName = "quaternion"
 
static const quaternion zero
 
static const quaternion I
 

Detailed Description

Quaternion class used to perform rotations in 3D space.

Source files

Definition at line 57 of file quaternion.H.

Member Typedef Documentation

◆ cmptType

typedef scalar cmptType

Component type.

Definition at line 97 of file quaternion.H.

◆ magType

typedef scalar magType

Magnitude type.

Definition at line 100 of file quaternion.H.

Member Enumeration Documentation

◆ eulerOrder

enum eulerOrder : unsigned char

Euler-angle rotation order.

Enumerator
XZX 
XYX 
YXY 
YZY 
ZYZ 
ZXZ 
XZY 
XYZ 
YXZ 
YZX 
ZYX 
ZXY 
ROLL_PITCH_YAW 
YAW_PITCH_ROLL 

Definition at line 103 of file quaternion.H.

Constructor & Destructor Documentation

◆ quaternion() [1/11]

quaternion ( )
default

Default construct.

◆ quaternion() [2/11]

quaternion ( const quaternion )
default

Copy construct.

◆ quaternion() [3/11]

quaternion ( const Foam::zero  )
inline

Construct initialized to zero.

Definition at line 31 of file quaternionI.H.

◆ quaternion() [4/11]

quaternion ( const scalar  w,
const vector v 
)
inline

Construct given scalar and vector parts.

Definition at line 38 of file quaternionI.H.

◆ quaternion() [5/11]

quaternion ( const vector d,
const scalar  theta 
)
inline

Construct rotation quaternion given direction d and angle theta.

Definition at line 45 of file quaternionI.H.

◆ quaternion() [6/11]

quaternion ( const vector d,
const scalar  cosTheta,
const bool  isNormalised 
)
inline

Construct a rotation quaternion given direction d and cosine angle cosTheta and flag if d is normalised

Definition at line 52 of file quaternionI.H.

References Foam::normalised(), and Foam::sqrt().

Here is the call graph for this function:

◆ quaternion() [7/11]

quaternion ( const scalar  w)
inlineexplicit

Construct a real quaternion from the given scalar part, the vector part = zero

Definition at line 73 of file quaternionI.H.

◆ quaternion() [8/11]

quaternion ( const vector v)
inlineexplicit

Construct a pure imaginary quaternion given the vector part, the scalar part = 0

Definition at line 80 of file quaternionI.H.

◆ quaternion() [9/11]

quaternion ( const eulerOrder  order,
const vector angles 
)
inline

Construct from three Euler rotation angles.

Definition at line 93 of file quaternionI.H.

References Foam::abort(), Foam::FatalError, FatalErrorInFunction, Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Here is the call graph for this function:

◆ quaternion() [10/11]

quaternion ( const tensor rotationTensor)
inlineexplicit

Construct from a rotation tensor.

Definition at line 206 of file quaternionI.H.

References Foam::rotationTensor(), s(), Foam::sqrt(), Tensor< Cmpt >::xx(), Tensor< Cmpt >::xy(), Tensor< Cmpt >::xz(), Tensor< Cmpt >::yx(), Tensor< Cmpt >::yy(), Tensor< Cmpt >::yz(), Tensor< Cmpt >::zx(), Tensor< Cmpt >::zy(), and Tensor< Cmpt >::zz().

Here is the call graph for this function:

◆ quaternion() [11/11]

quaternion ( Istream is)
explicit

Construct from Istream.

Definition at line 65 of file quaternion.C.

Member Function Documentation

◆ operator=() [1/4]

quaternion & operator= ( const quaternion )
default

Copy assignment.

◆ unit()

Foam::quaternion unit ( const vector v)
inlinestatic

Return the unit quaternion (versor) from the given vector (w = sqrt(1 - |sqr(v)|))

Definition at line 87 of file quaternionI.H.

References Foam::magSqr(), and Foam::sqrt().

Here is the call graph for this function:

◆ w() [1/2]

Foam::scalar w ( ) const
inlinenoexcept

Scalar part of the quaternion ( = cos(theta/2) for rotation)

Definition at line 285 of file quaternionI.H.

Referenced by Foam::conjugate(), Foam::exp(), Foam::inv(), Foam::magSqr(), Foam::name(), Foam::operator&(), Foam::operator*(), quaternion::operator*=(), Foam::operator-(), Foam::operator/(), Foam::operator<<(), Foam::operator==(), Foam::operator>>(), and Foam::pow().

Here is the caller graph for this function:

◆ v() [1/2]

const Foam::vector & v ( ) const
inlinenoexcept

Vector part of the quaternion ( = axis of rotation)

Definition at line 291 of file quaternionI.H.

Referenced by Foam::conjugate(), Foam::exp(), Foam::inv(), Foam::magSqr(), Foam::name(), Foam::operator&(), Foam::operator*(), quaternion::operator*=(), Foam::operator-(), Foam::operator/(), Foam::operator<<(), Foam::operator==(), Foam::operator>>(), Foam::pow(), and joint::unitQuaternion().

Here is the caller graph for this function:

◆ R()

Foam::tensor R ( ) const
inline

The rotation tensor corresponding to the quaternion.

Definition at line 358 of file quaternionI.H.

References Foam::sqr(), w2, x, and y.

Referenced by axisAngle::rotation(), Foam::transform(), and triad::triad().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ eulerAngles()

Foam::vector eulerAngles ( const eulerOrder  order) const
inline

Return the Euler rotation angles corresponding to the specified rotation order

Definition at line 407 of file quaternionI.H.

References Foam::abort(), Foam::FatalError, FatalErrorInFunction, Foam::sqr(), w2, x, y, and Foam::Zero.

Referenced by sixDoFRigidBodyState::write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ w() [2/2]

Foam::scalar & w ( )
inlinenoexcept

Scalar part of the quaternion ( = cos(theta/2) for rotation)

Definition at line 297 of file quaternionI.H.

◆ v() [2/2]

Foam::vector & v ( )
inlinenoexcept

Vector part of the quaternion ( = axis of rotation)

Definition at line 303 of file quaternionI.H.

◆ normalise()

Foam::quaternion & normalise ( )
inline

Inplace normalise the quaternion by its magnitude.

For small magnitudes (less than ROOTVSMALL) set to zero.

Definition at line 309 of file quaternionI.H.

References Foam::mag(), s(), and Foam::Zero.

Referenced by Foam::average(), rigidBodySolver::correctQuaternionJoints(), quaternion::normalize(), and quaternion::normalized().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ transform() [1/2]

Foam::vector transform ( const vector v) const
inline

Rotate the given vector.

Definition at line 331 of file quaternionI.H.

References Foam::conjugate().

Referenced by searchableExtrudedCircle::findParametricNearest(), polyline::operator()(), and septernion::operator/=().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ invTransform() [1/2]

Foam::vector invTransform ( const vector v) const
inline

Rotate the given vector anti-clockwise.

Definition at line 337 of file quaternionI.H.

References Foam::conjugate().

Referenced by septernion::operator*=().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ transform() [2/2]

Foam::quaternion transform ( const quaternion q) const
inline

Rotate the given quaternion (and normalise)

Definition at line 343 of file quaternionI.H.

References Foam::normalised().

Here is the call graph for this function:

◆ invTransform() [2/2]

Foam::quaternion invTransform ( const quaternion q) const
inline

Rotate the given quaternion anti-clockwise (and normalise)

Definition at line 349 of file quaternionI.H.

References Foam::conjugate(), and Foam::normalised().

Here is the call graph for this function:

◆ operator+=()

void operator+= ( const quaternion q)
inline

Definition at line 588 of file quaternionI.H.

◆ operator-=()

void operator-= ( const quaternion q)
inline

Definition at line 594 of file quaternionI.H.

◆ operator*=() [1/2]

void operator*= ( const quaternion q)
inline

Definition at line 600 of file quaternionI.H.

References quaternion::v(), quaternion::w(), and w0.

Here is the call graph for this function:

◆ operator/=() [1/2]

void operator/= ( const quaternion q)
inline

Definition at line 607 of file quaternionI.H.

References Foam::inv().

Here is the call graph for this function:

◆ operator=() [2/4]

void operator= ( const scalar  s)
inline

Change scalar portion only.

Definition at line 613 of file quaternionI.H.

References s().

Here is the call graph for this function:

◆ operator=() [3/4]

void operator= ( const vector v)
inline

Change vector portion only.

Definition at line 619 of file quaternionI.H.

◆ operator=() [4/4]

void operator= ( const Foam::zero  )
inline

Assign scalar and vector to zero.

Definition at line 625 of file quaternionI.H.

References Foam::Zero.

◆ operator*=() [2/2]

void operator*= ( const scalar  s)
inline

Definition at line 632 of file quaternionI.H.

References s().

Here is the call graph for this function:

◆ operator/=() [2/2]

void operator/= ( const scalar  s)
inline

Definition at line 638 of file quaternionI.H.

References s().

Here is the call graph for this function:

◆ normalize()

void normalize ( )
inline

Inplace normalise the quaternion by its magnitude.

Definition at line 259 of file quaternion.H.

References quaternion::normalise().

Here is the call graph for this function:

◆ normalized()

quaternion normalized ( ) const
inline

Return the quaternion normalised by its magnitude.

Definition at line 263 of file quaternion.H.

References quaternion::normalise().

Here is the call graph for this function:

Member Data Documentation

◆ eulerOrderNames

const Foam::Enum< Foam::quaternion::eulerOrder > eulerOrderNames
static

The names for Euler-angle and Tait-Bryan angles, including "rollPitchYaw" and "yawPitchRoll" aliases

Definition at line 118 of file quaternion.H.

Referenced by lumpedPointState::writeDict(), and euler::writeEntry().

◆ rank

constexpr direction rank = 1
staticconstexpr

Rank of quaternion is 1.

Definition at line 124 of file quaternion.H.

◆ typeName

constexpr const char* const typeName = "quaternion"
staticconstexpr

Definition at line 129 of file quaternion.H.

◆ zero

const Foam::quaternion zero
static

Definition at line 131 of file quaternion.H.

◆ I

const Foam::quaternion I
static

Definition at line 132 of file quaternion.H.

Referenced by septernion::operator=().


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