iRoCS Toolbox  1.1.0
Public Member Functions | Related Functions
atb::Quaternion< Type > Class Template Reference

The Quaternion class implements templated quaternions with few important operations. More...

#include <Quaternion.hh>

Collaboration diagram for atb::Quaternion< Type >:

Public Member Functions

 Quaternion (const Type &q0=Type(), const Type &q1=Type(), const Type &q2=Type(), const Type &q3=Type())
 Create a new quaternion $q := q_0 + i q_1 + j q_2 + k q_3$. More...
 
template<typename Type2 >
 Quaternion (Quaternion< Type2 > const &q)
 Create a new quaternion form the given quaternion. More...
 
Type & operator() (const int index)
 Get a reference to the coefficient for the given quaternion dimension. More...
 
Type const & operator() (const int index) const
 Get a read-only reference to the coefficient for the given quaternion dimension. More...
 
Quaternion< Type > & operator*= (Type const &scalar)
 Scale this quaternion with the given scalar value. More...
 
template<typename Type2 >
Quaternion< Type > & operator*= (Quaternion< Type2 > const &q)
 Multiply this quaternion with the given quaternion. More...
 
Quaternion< Type > & operator+= (Type const &scalar)
 Add the given real number to this quaternion. More...
 
template<typename Type2 >
Quaternion< Type > & operator+= (Quaternion< Type2 > const &q)
 Add the given quaternion to this quaternion. More...
 
Quaternion< Type > & operator-= (Type const &scalar)
 Subtract the given real number from this quaternion. More...
 
template<typename Type2 >
Quaternion< Type > & operator-= (Quaternion< Type2 > const &q)
 Subtract the given quaternion from this quaternion. More...
 
Quaternion< Type > & operator/= (Type const &scalar)
 Divide this quaternion by the given scalar value. More...
 
template<typename Type2 >
Quaternion< Type > & operator/= (Quaternion< Type2 > const &q)
 Divide this quaternion by the given quaternion. More...
 
Quaternion< Type > & operator= (Type const &scalar)
 Set this quaternion to the given real number. More...
 
template<typename Type2 >
Quaternion< Type > & operator= (Quaternion< Type2 > const &q)
 Set this quaternion to the given quaternion. More...
 

Related Functions

(Note that these are not member functions.)

template<typename Type >
Type abs (const Quaternion< Type > &t)
 
template<typename Type >
Quaternion< Type > conj (const Quaternion< Type > &t)
 
template<typename Type >
bool operator!= (const Quaternion< Type > &t1, const Quaternion< Type > &t2)
 
template<typename Type >
bool operator!= (const Quaternion< Type > &t1, const Type &t2)
 
template<typename Type >
bool operator!= (const Type &t1, const Quaternion< Type > &t2)
 
template<typename Type >
Quaternion< Type > operator* (const Quaternion< Type > &t1, const Quaternion< Type > &t2)
 
template<typename Type >
Quaternion< Type > operator* (const Quaternion< Type > &t1, const Type &t2)
 
template<typename Type >
Quaternion< Type > operator* (const Type &t1, const Quaternion< Type > &t2)
 
template<typename Type >
Quaternion< Type > operator+ (const Quaternion< Type > &t1, const Quaternion< Type > &t2)
 
template<typename Type >
Quaternion< Type > operator+ (const Quaternion< Type > &t1, const Type &t2)
 
template<typename Type >
Quaternion< Type > operator+ (const Type &t1, const Quaternion< Type > &t2)
 
template<typename Type >
Quaternion< Type > operator+ (const Quaternion< Type > &t)
 
template<typename Type >
Quaternion< Type > operator- (const Quaternion< Type > &t1, const Quaternion< Type > &t2)
 
template<typename Type >
Quaternion< Type > operator- (const Quaternion< Type > &t1, const Type &t2)
 
template<typename Type >
Quaternion< Type > operator- (const Type &t1, const Quaternion< Type > &t2)
 
template<typename Type >
Quaternion< Type > operator- (const Quaternion< Type > &t)
 
template<typename Type >
Quaternion< Type > operator/ (const Quaternion< Type > &t1, const Quaternion< Type > &t2)
 
template<typename Type >
Quaternion< Type > operator/ (const Quaternion< Type > &t1, const Type &t2)
 
template<typename Type >
Quaternion< Type > operator/ (const Type &t1, const Quaternion< Type > &t2)
 
template<typename Type , typename CharT , class Traits >
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &os, const Quaternion< Type > &t)
 
template<typename Type >
bool operator== (const Quaternion< Type > &t1, const Quaternion< Type > &t2)
 
template<typename Type >
bool operator== (const Quaternion< Type > &t1, const Type &t2)
 
template<typename Type >
bool operator== (const Type &t1, const Quaternion< Type > &t2)
 
template<typename Type , typename CharT , class Traits >
std::basic_istream< CharT, Traits > & operator>> (std::basic_istream< CharT, Traits > &is, Quaternion< Type > &t)
 

Detailed Description

template<typename Type>
class atb::Quaternion< Type >

The Quaternion class implements templated quaternions with few important operations.

Quaternions are an extension to complex numbers. They consist of 3 imaginary units $i$, $j$ and $k$ and a real part, and thus span a 4-D space. A typical quaternion is given by $q = q_0 + i q_1 + j q_2 + k q_3$

Operations:

Addition:

$p + q = p_0 + q_0 + i \cdot (p_1 + q_1) + j \cdot (p_2 + q_2) + k \cdot (p_3 + q_3)$

Multiplication:

$p \cdot q = p_0 q_0 - p_1 q_1 - p_2 q_2 - p_3 q_3 + i \cdot (p_0 q_1 + p_1 q_0 + p_2 q_3 - p_3 q_2) + j \cdot (p_0 q_2 - p_1 q_3 + p_2 q_0 + p_3 q_1) + k \cdot (p_0 q_3 + p_1 q_2 - p_2 q_1 + p_3 q_0)$

Conjugate:

$\bar{q} = q_0 - i q_1 - j q_2 - k q_3$

The multiplication rule can be obtained from:

$i^2 = j^2 = k^2 = -1$, $i j = -j i = k$, $j k = -k j = i$ and $k i = -i k = j$

Template Parameters
TypeThe basic numeric type (typically float or double) of the quaternion coefficients

Definition at line 75 of file Quaternion.hh.

Constructor & Destructor Documentation

◆ Quaternion() [1/2]

template<typename Type >
atb::Quaternion< Type >::Quaternion ( const Type &  q0 = Type(),
const Type &  q1 = Type(),
const Type &  q2 = Type(),
const Type &  q3 = Type() 
)
inline

Create a new quaternion $q := q_0 + i q_1 + j q_2 + k q_3$.

Parameters
q0,q1,q2,q3Quaternion coefficients

Definition at line 269 of file Quaternion.hh.

◆ Quaternion() [2/2]

template<typename Type >
template<typename Type2 >
atb::Quaternion< Type >::Quaternion ( Quaternion< Type2 > const &  q)
inline

Create a new quaternion form the given quaternion.

Parameters
qThe quaternion to copy. This function allows to promote the basic type to a different data type
Template Parameters
Type2The basic data type of the source quaternion

Definition at line 283 of file Quaternion.hh.

Member Function Documentation

◆ operator()() [1/2]

template<typename Type >
Type & atb::Quaternion< Type >::operator() ( const int  index)
inline

Get a reference to the coefficient for the given quaternion dimension.

Parameters
indexThe dimension to get the quaternion coefficient for
Returns
A random-access reference to the requested coefficient
Exceptions
out_of_rangeIf the given index is not within the [0, 3] range

Definition at line 292 of file Quaternion.hh.

◆ operator()() [2/2]

template<typename Type >
Type const & atb::Quaternion< Type >::operator() ( const int  index) const
inline

Get a read-only reference to the coefficient for the given quaternion dimension.

Parameters
indexThe dimension to get the quaternion coefficient for
Returns
A read-only reference to the requested coefficient
Exceptions
out_of_rangeIf the given index is not within the [0, 3] range

Definition at line 306 of file Quaternion.hh.

◆ operator=() [1/2]

template<typename Type >
Quaternion< Type > & atb::Quaternion< Type >::operator= ( Type const &  scalar)
inline

Set this quaternion to the given real number.

Parameters
scalarThe scalar value to set this quaternion to.
Returns
A reference to this quaternion for operator chaining

Definition at line 321 of file Quaternion.hh.

◆ operator+=() [1/2]

template<typename Type >
Quaternion< Type > & atb::Quaternion< Type >::operator+= ( Type const &  scalar)
inline

Add the given real number to this quaternion.

Parameters
scalarThe scalar value to add to this quaternion.
Returns
A reference to this quaternion for operator chaining

Definition at line 332 of file Quaternion.hh.

◆ operator-=() [1/2]

template<typename Type >
Quaternion< Type > & atb::Quaternion< Type >::operator-= ( Type const &  scalar)
inline

Subtract the given real number from this quaternion.

Parameters
scalarThe scalar value to subtract from this quaternion.
Returns
A reference to this quaternion for operator chaining

Definition at line 340 of file Quaternion.hh.

◆ operator*=() [1/2]

template<typename Type >
Quaternion< Type > & atb::Quaternion< Type >::operator*= ( Type const &  scalar)
inline

Scale this quaternion with the given scalar value.

Parameters
scalarThe scaling factor to apply
Returns
A reference to this quaternion for operator chaining

Definition at line 348 of file Quaternion.hh.

◆ operator/=() [1/2]

template<typename Type >
Quaternion< Type > & atb::Quaternion< Type >::operator/= ( Type const &  scalar)
inline

Divide this quaternion by the given scalar value.

Parameters
scalarThe value to divide this quaternion with
Returns
A reference to this quaternion for operator chaining

Definition at line 359 of file Quaternion.hh.

◆ operator=() [2/2]

template<typename Type >
template<typename Type2 >
Quaternion< Type > & atb::Quaternion< Type >::operator= ( Quaternion< Type2 > const &  q)
inline

Set this quaternion to the given quaternion.

Parameters
qThe quaternion to copy into this quaternion.
Returns
A reference to this quaternion for operator chaining
Template Parameters
Type2The source quaternion basic scalar type

Definition at line 371 of file Quaternion.hh.

◆ operator+=() [2/2]

template<typename Type >
template<typename Type2 >
Quaternion< Type > & atb::Quaternion< Type >::operator+= ( Quaternion< Type2 > const &  q)
inline

Add the given quaternion to this quaternion.

Parameters
qThe quaternion to add to this quaternion.
Returns
A reference to this quaternion for operator chaining
Template Parameters
Type2The source quaternion basic scalar type

Definition at line 383 of file Quaternion.hh.

◆ operator-=() [2/2]

template<typename Type >
template<typename Type2 >
Quaternion< Type > & atb::Quaternion< Type >::operator-= ( Quaternion< Type2 > const &  q)
inline

Subtract the given quaternion from this quaternion.

Parameters
qThe quaternion to subtract from this quaternion.
Returns
A reference to this quaternion for operator chaining
Template Parameters
Type2The source quaternion basic scalar type

Definition at line 395 of file Quaternion.hh.

◆ operator*=() [2/2]

template<typename Type >
template<typename Type2 >
Quaternion< Type > & atb::Quaternion< Type >::operator*= ( Quaternion< Type2 > const &  q)
inline

Multiply this quaternion with the given quaternion.

Parameters
qThe quaternion to multiply to this quaternion.
Returns
A reference to this quaternion for operator chaining
Template Parameters
Type2The source quaternion basic scalar type

Definition at line 407 of file Quaternion.hh.

◆ operator/=() [2/2]

template<typename Type >
template<typename Type2 >
Quaternion< Type > & atb::Quaternion< Type >::operator/= ( Quaternion< Type2 > const &  q)
inline

Divide this quaternion by the given quaternion.

Parameters
qThe quaternion to divide this quaternion by.
Returns
A reference to this quaternion for operator chaining
Template Parameters
Type2The source quaternion basic scalar type

Definition at line 426 of file Quaternion.hh.

Friends And Related Function Documentation

◆ operator+() [1/4]

template<typename Type >
Quaternion< Type > operator+ ( const Quaternion< Type > &  t1,
const Quaternion< Type > &  t2 
)
related

Add two quaternions

Parameters
t1The lhs quaternion
t2The rhs quaternion
Returns
t1 + t2

Definition at line 450 of file Quaternion.hh.

◆ operator+() [2/4]

template<typename Type >
Quaternion< Type > operator+ ( const Quaternion< Type > &  t1,
const Type &  t2 
)
related

Add quaternion and scalar

Parameters
t1The lhs quaternion
t2The rhs scalar
Returns
t1 + t2

Definition at line 470 of file Quaternion.hh.

◆ operator+() [3/4]

template<typename Type >
Quaternion< Type > operator+ ( const Type &  t1,
const Quaternion< Type > &  t2 
)
related

Add scalar and quaternion

Parameters
t1The lhs scalar
t2The rhs quaternion
Returns
t1 + t2

Definition at line 490 of file Quaternion.hh.

◆ operator-() [1/4]

template<typename Type >
Quaternion< Type > operator- ( const Quaternion< Type > &  t1,
const Quaternion< Type > &  t2 
)
related

Compute difference between two quaternions

Parameters
t1The lhs quaternion
t2The rhs quaternion
Returns
t1 - t2

Definition at line 510 of file Quaternion.hh.

◆ operator-() [2/4]

template<typename Type >
Quaternion< Type > operator- ( const Quaternion< Type > &  t1,
const Type &  t2 
)
related

Subtract scalar from quaternion.

Parameters
t1The lhs quaternion
t2The rhs scalar
Returns
t1 - t2

Definition at line 530 of file Quaternion.hh.

◆ operator-() [3/4]

template<typename Type >
Quaternion< Type > operator- ( const Type &  t1,
const Quaternion< Type > &  t2 
)
related

Subtract quaternion from scalar.

Parameters
t1The lhs scalar
t2The rhs quaternion
Returns
t1 - t2

Definition at line 550 of file Quaternion.hh.

◆ operator*() [1/3]

template<typename Type >
Quaternion< Type > operator* ( const Quaternion< Type > &  t1,
const Quaternion< Type > &  t2 
)
related

Compute product of two quaternions

Parameters
t1The lhs quaternion
t2The rhs quaternion
Returns
t1 * t2

Definition at line 570 of file Quaternion.hh.

◆ operator*() [2/3]

template<typename Type >
Quaternion< Type > operator* ( const Quaternion< Type > &  t1,
const Type &  t2 
)
related

Compute product of quaternion and scalar

Parameters
t1The lhs quaternion
t2The rhs scalar
Returns
t1 * t2

Definition at line 590 of file Quaternion.hh.

◆ operator*() [3/3]

template<typename Type >
Quaternion< Type > operator* ( const Type &  t1,
const Quaternion< Type > &  t2 
)
related

Compute product of scalar and quaternion

Parameters
t1The lhs scalar
t2The rhs quaternion
Returns
t1 * t2

Definition at line 610 of file Quaternion.hh.

◆ operator/() [1/3]

template<typename Type >
Quaternion< Type > operator/ ( const Quaternion< Type > &  t1,
const Quaternion< Type > &  t2 
)
related

Compute quotient of two quaternions

Parameters
t1The lhs quaternion
t2The rhs quaternion
Returns
t1 / t2

Definition at line 630 of file Quaternion.hh.

◆ operator/() [2/3]

template<typename Type >
Quaternion< Type > operator/ ( const Quaternion< Type > &  t1,
const Type &  t2 
)
related

Compute quotient of quaternion and scalar

Parameters
t1The lhs quaternion
t2The rhs scalar
Returns
t1 / t2

Definition at line 650 of file Quaternion.hh.

◆ operator/() [3/3]

template<typename Type >
Quaternion< Type > operator/ ( const Type &  t1,
const Quaternion< Type > &  t2 
)
related

Compute quotient of scalar and quaternion

Parameters
t1The lhs scalar
t2The rhs quaternion
Returns
t1 / t2

Definition at line 670 of file Quaternion.hh.

◆ operator+() [4/4]

template<typename Type >
Quaternion< Type > operator+ ( const Quaternion< Type > &  t)
related

Unary PLUS operator

Parameters
tThe quaternion to apply the operator to
Returns
t

Definition at line 689 of file Quaternion.hh.

◆ operator-() [4/4]

template<typename Type >
Quaternion< Type > operator- ( const Quaternion< Type > &  t)
related

Unary MINUS operator

Parameters
tThe quaternion to apply the operator to
Returns
-t

Definition at line 707 of file Quaternion.hh.

◆ operator==() [1/3]

template<typename Type >
bool operator== ( const Quaternion< Type > &  t1,
const Quaternion< Type > &  t2 
)
related

Equals comparison operator.

Parameters
t1The lhs quaternion
t2The rhs quaternion
Returns
true if both quaternions are equal, false otherwise

Definition at line 726 of file Quaternion.hh.

◆ operator==() [2/3]

template<typename Type >
bool operator== ( const Quaternion< Type > &  t1,
const Type &  t2 
)
related

Equals comparison operator.

Parameters
t1The lhs quaternion
t2The rhs scalar
Returns
true if quaternion and scalar are equal, false otherwise

Definition at line 747 of file Quaternion.hh.

◆ operator==() [3/3]

template<typename Type >
bool operator== ( const Type &  t1,
const Quaternion< Type > &  t2 
)
related

Equals comparison operator.

Parameters
t1The lhs scalar
t2The rhs quaternion
Returns
true if quaternion and scalar are equal, false otherwise

Definition at line 768 of file Quaternion.hh.

◆ operator!=() [1/3]

template<typename Type >
bool operator!= ( const Quaternion< Type > &  t1,
const Quaternion< Type > &  t2 
)
related

Unequal comparison operator.

Parameters
t1The lhs quaternion
t2The rhs quaternion
Returns
false if both quaternions are equal, true otherwise

Definition at line 789 of file Quaternion.hh.

◆ operator!=() [2/3]

template<typename Type >
bool operator!= ( const Quaternion< Type > &  t1,
const Type &  t2 
)
related

Unequal comparison operator.

Parameters
t1The lhs quaternion
t2The rhs scalar
Returns
false if scalar and quaternion are equal, true otherwise

Definition at line 810 of file Quaternion.hh.

◆ operator!=() [3/3]

template<typename Type >
bool operator!= ( const Type &  t1,
const Quaternion< Type > &  t2 
)
related

Unequal comparison operator.

Parameters
t1The lhs scalar
t2The rhs quaternion
Returns
false if scalar and quaternion are equal, true otherwise

Definition at line 831 of file Quaternion.hh.

◆ operator>>()

template<typename Type , typename CharT , class Traits >
std::basic_istream< CharT, Traits > & operator>> ( std::basic_istream< CharT, Traits > &  is,
Quaternion< Type > &  t 
)
related

Read a quaternion from its string (stream) representation.

Parameters
isThe input stream to read a quaternion from
tThe quaternion to store the parsed string to
Returns
A reference to the input stream for operator chaining

Definition at line 852 of file Quaternion.hh.

◆ operator<<()

template<typename Type , typename CharT , class Traits >
std::basic_ostream< CharT, Traits > & operator<< ( std::basic_ostream< CharT, Traits > &  os,
const Quaternion< Type > &  t 
)
related

Write a quaternion to a character stream.

Parameters
osThe output stream to write the quaternion to
tThe quaternion to write
Returns
A reference to the output stream for operator chaining

Definition at line 901 of file Quaternion.hh.

◆ abs()

template<typename Type >
Type abs ( const Quaternion< Type > &  t)
related

Compute the absolute value of the given quaternion.

Parameters
tThe quaternion to compute the absolute value of
Returns
The absolute scalar value of the quaternion (its "length")

Definition at line 924 of file Quaternion.hh.

◆ conj()

template<typename Type >
Quaternion< Type > conj ( const Quaternion< Type > &  t)
related

Compute the conjugate of the given quaternion.

$\bar{q} = q_0 - i q_1 - j q_2 - k q_3$

Parameters
tThe quaternion to compute the conjugate for
Returns
The conjugate of the given quaternion

Definition at line 945 of file Quaternion.hh.

Referenced by atb::Quaternion< Type >::operator/=().


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