Public Types | Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | Friends
quaternion Class Reference

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

Collaboration diagram for quaternion:
Collaboration graph
[legend]

Public Types

enum  { rank = 1 }
 
typedef scalar cmptType
 Component type. More...
 

Public Member Functions

 quaternion ()
 Construct null. More...
 
 quaternion (const scalar w, const vector &v)
 Construct given scalar and vector parts. More...
 
 quaternion (const vector &d, const scalar theta)
 Construct a rotation quaternion given the direction d. More...
 
 quaternion (const vector &d, const scalar cosTheta, const bool normalized)
 Construct a rotation quaternion given the direction d. More...
 
 quaternion (const scalar w)
 Construct given scalar part, the vector part = vector::zero. More...
 
 quaternion (const vector &v)
 Construct a pure quaternion given the vector part, scalar part = 0. More...
 
 quaternion (const scalar angleX, const scalar angleY, const scalar angleZ)
 Construct a quaternion given the three Euler angles. More...
 
 quaternion (const tensor &rotationTensor)
 Construct a quaternion from a rotation tensor. More...
 
 quaternion (Istream &)
 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 the quaternion. More...
 
vector eulerAngles (const quaternion &q) const
 Return a vector of euler angles (rotations in radians about. More...
 
quaternion normalized () const
 
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 ()
 
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 &)
 
void operator+= (const quaternion &)
 
void operator-= (const quaternion &)
 
void operator*= (const quaternion &)
 
void operator/= (const quaternion &)
 
void operator= (const scalar)
 
void operator= (const vector &)
 
void operator*= (const scalar)
 
void operator/= (const scalar)
 

Static Public Attributes

static const char *const typeName = "quaternion"
 
static const quaternion zero
 
static const quaternion I
 

Private Member Functions

quaternion mulq0v (const vector &v) const
 Multiply vector v by quaternion as if v is a pure quaternion. More...
 

Private Attributes

scalar w_
 Scalar part of the quaternion ( = cos(theta/2) for rotation) More...
 
vector v_
 Vector part of the quaternion ( = axis of rotation) More...
 

Friends

Istreamoperator>> (Istream &is, quaternion &)
 
Ostreamoperator<< (Ostream &os, const quaternion &C)
 

Detailed Description

Quaternion class used to perform rotations in 3D space.

Source files

Definition at line 60 of file quaternion.H.

Member Typedef Documentation

◆ cmptType

typedef scalar cmptType

Component type.

Definition at line 78 of file quaternion.H.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
rank 

Definition at line 82 of file quaternion.H.

Constructor & Destructor Documentation

◆ quaternion() [1/9]

quaternion ( )
inline

Construct null.

Definition at line 28 of file quaternionI.H.

◆ quaternion() [2/9]

quaternion ( const scalar  w,
const vector v 
)
inline

Construct given scalar and vector parts.

Definition at line 31 of file quaternionI.H.

◆ quaternion() [3/9]

quaternion ( const vector d,
const scalar  theta 
)
inline

Construct a rotation quaternion given the direction d.

and angle theta

Definition at line 37 of file quaternionI.H.

◆ quaternion() [4/9]

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

Construct a rotation quaternion given the direction d.

and cosine angle cosTheta and a if d is normalized

Definition at line 44 of file quaternionI.H.

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

Here is the call graph for this function:

◆ quaternion() [5/9]

quaternion ( const scalar  w)
inlineexplicit

Construct given scalar part, the vector part = vector::zero.

Definition at line 63 of file quaternionI.H.

◆ quaternion() [6/9]

quaternion ( const vector v)
inlineexplicit

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

Definition at line 69 of file quaternionI.H.

◆ quaternion() [7/9]

quaternion ( const scalar  angleX,
const scalar  angleY,
const scalar  angleZ 
)
inline

Construct a quaternion given the three Euler angles.

Definition at line 76 of file quaternionI.H.

◆ quaternion() [8/9]

quaternion ( const tensor rotationTensor)
inlineexplicit

Construct a quaternion from a rotation tensor.

Definition at line 88 of file quaternionI.H.

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

Here is the call graph for this function:

◆ quaternion() [9/9]

quaternion ( Istream is)

Construct from Istream.

Definition at line 38 of file quaternion.C.

Member Function Documentation

◆ mulq0v()

Foam::quaternion mulq0v ( const vector v) const
inlineprivate

Multiply vector v by quaternion as if v is a pure quaternion.

Definition at line 202 of file quaternionI.H.

References w().

Referenced by quaternion::invTransform().

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

◆ w() [1/2]

Foam::scalar & w ( ) const
inline

◆ v() [1/2]

Foam::vector & v ( ) const
inline

◆ R()

Foam::tensor R ( ) const
inline

The rotation tensor corresponding the quaternion.

Definition at line 235 of file quaternionI.H.

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

Referenced by surfaceAlignedSBRStressFvMotionSolver::calculateCellRot(), main(), 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 quaternion q) const
inline

Return a vector of euler angles (rotations in radians about.

the x, y and z axes.

Definition at line 258 of file quaternionI.H.

References Foam::asin(), Foam::atan2(), Foam::sqr(), quaternion::v(), w(), quaternion::w(), Vector< Cmpt >::x(), Vector< Cmpt >::y(), Vector< Cmpt >::z(), and Vector< scalar >::zero.

Here is the call graph for this function:

◆ normalized()

Foam::quaternion normalized ( ) const
inline

Definition at line 190 of file quaternionI.H.

References Foam::mag().

Here is the call graph for this function:

◆ w() [2/2]

scalar& w ( )
inline

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

◆ v() [2/2]

vector& v ( )
inline

Vector part of the quaternion ( = axis of rotation)

◆ normalize()

void normalize ( )
inline

Definition at line 196 of file quaternionI.H.

References Foam::mag().

Here is the call graph for this function:

◆ transform() [1/2]

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

Rotate the given vector.

Definition at line 208 of file quaternionI.H.

References Foam::conjugate().

Referenced by main(), and Foam::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 214 of file quaternionI.H.

References Foam::conjugate(), and quaternion::mulq0v().

Referenced by main().

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

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

Here is the call graph for this function:

◆ operator=() [1/3]

void operator= ( const quaternion q)
inline

Definition at line 289 of file quaternionI.H.

References quaternion::v_, and quaternion::w_.

◆ operator+=()

void operator+= ( const quaternion q)
inline

Definition at line 295 of file quaternionI.H.

References quaternion::v_, and quaternion::w_.

◆ operator-=()

void operator-= ( const quaternion q)
inline

Definition at line 301 of file quaternionI.H.

References quaternion::v_, and quaternion::w_.

◆ operator*=() [1/2]

void operator*= ( const quaternion q)
inline

Definition at line 307 of file quaternionI.H.

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

Here is the call graph for this function:

◆ operator/=() [1/2]

void operator/= ( const quaternion q)
inline

Definition at line 314 of file quaternionI.H.

References Foam::inv().

Here is the call graph for this function:

◆ operator=() [2/3]

void operator= ( const scalar  s)
inline

Definition at line 320 of file quaternionI.H.

References s().

Here is the call graph for this function:

◆ operator=() [3/3]

void operator= ( const vector v)
inline

Definition at line 326 of file quaternionI.H.

◆ operator*=() [2/2]

void operator*= ( const scalar  s)
inline

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

References s().

Here is the call graph for this function:

Friends And Related Function Documentation

◆ operator>>

Istream& operator>> ( Istream is,
quaternion  
)
friend

◆ operator<<

Ostream& operator<< ( Ostream os,
const quaternion C 
)
friend

Field Documentation

◆ w_

scalar w_
private

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

Definition at line 65 of file quaternion.H.

Referenced by quaternion::operator+=(), quaternion::operator-=(), and quaternion::operator=().

◆ v_

vector v_
private

Vector part of the quaternion ( = axis of rotation)

Definition at line 68 of file quaternion.H.

Referenced by quaternion::operator+=(), quaternion::operator-=(), and quaternion::operator=().

◆ typeName

const char *const typeName = "quaternion"
static

Definition at line 90 of file quaternion.H.

◆ zero

const Foam::quaternion zero
static

Definition at line 92 of file quaternion.H.

◆ I

const Foam::quaternion I
static

Definition at line 93 of file quaternion.H.


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