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
}
 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 zero initialized. 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 normalized)
 
 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
 Scalar part of the quaternion ( = cos(theta/2) for rotation) More...
 
const vectorv () const
 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
 
quaternion normalized () const
 Return the quaternion normalized by its magnitude. More...
 
scalar & w ()
 Scalar part of the quaternion ( = cos(theta/2) for rotation) More...
 
vectorv ()
 Vector part of the quaternion ( = axis of rotation) More...
 
void normalize ()
 Normalize 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 normalize) More...
 
quaternion invTransform (const quaternion &q) const
 Rotate the given quaternion anti-clockwise (and normalize) 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 scalar s)
 
void operator/= (const scalar s)
 

Static Public Member Functions

static quaternion unit (const vector &v)
 

Static Public Attributes

static const Enum< eulerOrdereulerOrderNames
 The names for Euler-angle rotation order. More...
 
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 56 of file quaternion.H.

Member Typedef Documentation

◆ cmptType

typedef scalar cmptType

Component type.

Definition at line 96 of file quaternion.H.

◆ magType

typedef scalar magType

Magnitude type.

Definition at line 99 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 

Definition at line 102 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 zero initialized.

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  normalized 
)
inline

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

Definition at line 53 of file quaternionI.H.

References Foam::mag(), 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 94 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 207 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 61 of file quaternion.C.

Member Function Documentation

◆ operator=() [1/3]

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().

Referenced by joint::unitQuaternion().

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

◆ w() [1/2]

Foam::scalar w ( ) const
inline

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==(), Foam::operator>>(), and Foam::pow().

Here is the caller graph for this function:

◆ v() [1/2]

const Foam::vector & v ( ) const
inline

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::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 354 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 404 of file quaternionI.H.

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

Here is the call graph for this function:

◆ normalized()

Foam::quaternion normalized ( ) const
inline

Return the quaternion normalized by its magnitude.

Definition at line 309 of file quaternionI.H.

References Foam::mag().

Here is the call graph for this function:

◆ w() [2/2]

Foam::scalar & w ( )
inline

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

Definition at line 297 of file quaternionI.H.

◆ v() [2/2]

Foam::vector & v ( )
inline

Vector part of the quaternion ( = axis of rotation)

Definition at line 303 of file quaternionI.H.

◆ normalize()

void normalize ( )
inline

Normalize the quaternion by its magnitude.

Definition at line 315 of file quaternionI.H.

References Foam::mag().

Referenced by Foam::average().

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 327 of file quaternionI.H.

References Foam::conjugate().

Referenced by searchableExtrudedCircle::findParametricNearest(), polyline::operator()(), Foam::operator*(), Foam::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 333 of file quaternionI.H.

References Foam::conjugate().

Referenced by Foam::operator*(), and 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 normalize)

Definition at line 339 of file quaternionI.H.

References Foam::normalize().

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 normalize)

Definition at line 346 of file quaternionI.H.

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

Here is the call graph for this function:

◆ operator+=()

void operator+= ( const quaternion q)
inline

Definition at line 584 of file quaternionI.H.

◆ operator-=()

void operator-= ( const quaternion q)
inline

Definition at line 590 of file quaternionI.H.

◆ operator*=() [1/2]

void operator*= ( const quaternion q)
inline

Definition at line 596 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 603 of file quaternionI.H.

References Foam::inv().

Here is the call graph for this function:

◆ operator=() [2/3]

void operator= ( const scalar  s)
inline

Change scalar portion only.

Definition at line 609 of file quaternionI.H.

References s.

◆ operator=() [3/3]

void operator= ( const vector v)
inline

Change vector portion only.

Definition at line 615 of file quaternionI.H.

◆ operator*=() [2/2]

void operator*= ( const scalar  s)
inline

Definition at line 621 of file quaternionI.H.

References s.

◆ operator/=() [2/2]

void operator/= ( const scalar  s)
inline

Definition at line 627 of file quaternionI.H.

References s.

Member Data Documentation

◆ eulerOrderNames

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

The names for Euler-angle rotation order.

Definition at line 112 of file quaternion.H.

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

◆ rank

constexpr direction rank = 1
staticconstexpr

Rank of quaternion is 1.

Definition at line 118 of file quaternion.H.

◆ typeName

constexpr const char* const typeName = "quaternion"
staticconstexpr

Definition at line 123 of file quaternion.H.

◆ zero

const Foam::quaternion zero
static

Definition at line 125 of file quaternion.H.

◆ I

const Foam::quaternion I
static

Definition at line 126 of file quaternion.H.

Referenced by septernion::operator=().


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