cml::quaternion< Element, ArrayType, Order, Cross > Class Template Reference

A configurable quaternion type. More...

#include <quaternion.h>

Collaboration diagram for cml::quaternion< Element, ArrayType, Order, Cross >:

Collaboration graph
[legend]

List of all members.

Public Types

enum  { array_size = 4 }
 Record result size as an enum. More...
enum  { W = order_type::W, X = order_type::X, Y = order_type::Y, Z = order_type::Z }
 Localize the ordering as an enum. More...
typedef cml::et::assignable_tag assignable_tag
typedef
vector_type::const_reference 
const_reference
typedef Cross cross_type
typedef const quaternion_typeexpr_const_reference
typedef quaternion_typeexpr_reference
typedef quaternion_type expr_type
typedef ArrayType::template
rebind< 4 >::other 
generator_type
typedef
vector_temporary::subvector_type 
imaginary_type
typedef vector_type::memory_tag memory_tag
typedef Order order_type
typedef quaternion< Element,
storage_type, order_type,
cross_type
quaternion_type
typedef vector_type::reference reference
typedef
cml::et::quaternion_result_tag 
result_tag
typedef vector_type::size_tag size_tag
typedef ArrayType storage_type
typedef quaternion< Element,
typename
vector_temporary::storage_type,
order_type, cross_type
temporary_type
typedef vector_type::value_type value_type
typedef vector_type::temporary_type vector_temporary
typedef vector< Element,
generator_type
vector_type

Public Member Functions

const vector_typeas_vector () const
 Return the vector representing the quaternion.
quaternion_typeconjugate ()
 Set this quaternion to the conjugate.
const vector_type::pointer data () const
 Return access to the data as a const raw pointer.
vector_type::pointer data ()
 Return access to the data as a raw pointer.
temporary_type exp (value_type tolerance=epsilon< value_type >::placeholder()) const
 Return the result of the exponential function as applied to this quaternion.
quaternion_typeidentity ()
 Set this quaternion to the multiplicative identity.
imaginary_type imaginary () const
 Return the imaginary vector.
quaternion_typeinverse ()
 Set this quaternion to the inverse.
value_type length () const
 Return the quaternion length.
value_type length_squared () const
 Return square of the quaternion length.
temporary_type log (value_type tolerance=epsilon< value_type >::placeholder()) const
 Return the log of this quaternion.
value_type norm () const
 Return the Cayley norm of the quaternion.
quaternion_typenormalize ()
 Normalize this quaternion (divide by its length).
template<typename XprT >
quaternion_typeoperator*= (QUATXPR_ARG_TYPE e)
 Accumulated multiplication with a quaternion expression.
quaternion_typeoperator*= (const quaternion_type &q)
 Accumulated multiplication with a quaternion.
reference operator[] (size_t i)
 Mutable access to the quaternion as a vector.
const_reference operator[] (size_t i) const
 Const access to the quaternion as a vector.
template<typename XprT >
 quaternion (const value_type &s, VECXPR_ARG_TYPE e)
 Initialize both the real and imaginary parts.
template<typename XprT >
 quaternion (VECXPR_ARG_TYPE e)
 Initialize from a VectorXpr.
 quaternion (const value_type &s, const value_type v[3])
 Initialize both the real and imaginary parts.
 quaternion (const value_type v[3], const value_type &s)
 Initialize both the real and imaginary parts.
 quaternion (const imaginary_type &v, const value_type &s)
 Initialize both the real and imaginary parts.
 quaternion (const value_type &s, const imaginary_type &v)
 Initialize both the real and imaginary parts.
 quaternion (const value_type &a, const value_type &b, const value_type &c, const value_type &d)
 Initialize from 4 scalars.
 quaternion (const value_type v[4])
 Initialize from an array of scalars.
 quaternion (const vector_type &v)
 Initialize from a 4-vector.
template<typename XprT >
 quaternion (QUATXPR_ARG_TYPE e)
 Copy construct from a QuaternionXpr.
template<typename E , class AT >
 quaternion (const quaternion< E, AT, order_type, cross_type > &q)
 Construct from a quaternion having a different array type.
 quaternion (const quaternion_type &q)
 Copy construct from the same type of quaternion.
 quaternion (Element *const array)
 Initializer for an external<> vector type.
 quaternion ()
 Default initializer.
void random (value_type min, value_type max)
 Fill quaternion with random elements.
value_type real () const
 Return the scalar part.

Protected Member Functions

void assign (const value_type &a, const value_type &b, const value_type &c, const value_type &d, vector_first)
 Overloaded function to assign the quaternion from 4 scalars.
void assign (const value_type &a, const value_type &b, const value_type &c, const value_type &d, scalar_first)
 Overloaded function to assign the quaternion from 4 scalars.

Protected Attributes

vector_type m_q

Private Member Functions

 CML_STATIC_REQUIRE_M ((same_type< ArrayType, fixed<> >::is_true||same_type< ArrayType, external<> >::is_true), quaternion_requires_fixed_size_array_type_error)


Detailed Description

template<typename Element, class ArrayType, class Order, class Cross>
class cml::quaternion< Element, ArrayType, Order, Cross >

A configurable quaternion type.

Note:
Quaternions with two different orders cannot be used in the same expression.

Definition at line 46 of file quaternion.h.


Member Typedef Documentation

template<typename Element, class ArrayType, class Order, class Cross>
typedef cml::et::assignable_tag cml::quaternion< Element, ArrayType, Order, Cross >::assignable_tag

Definition at line 109 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef vector_type::const_reference cml::quaternion< Element, ArrayType, Order, Cross >::const_reference

Definition at line 77 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef Cross cml::quaternion< Element, ArrayType, Order, Cross >::cross_type

Definition at line 72 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef const quaternion_type& cml::quaternion< Element, ArrayType, Order, Cross >::expr_const_reference

Definition at line 94 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef quaternion_type& cml::quaternion< Element, ArrayType, Order, Cross >::expr_reference

Definition at line 93 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef quaternion_type cml::quaternion< Element, ArrayType, Order, Cross >::expr_type

Definition at line 85 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef ArrayType::template rebind<4>::other cml::quaternion< Element, ArrayType, Order, Cross >::generator_type

Definition at line 58 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef vector_temporary::subvector_type cml::quaternion< Element, ArrayType, Order, Cross >::imaginary_type

Definition at line 103 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef vector_type::memory_tag cml::quaternion< Element, ArrayType, Order, Cross >::memory_tag

Definition at line 97 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef Order cml::quaternion< Element, ArrayType, Order, Cross >::order_type

Definition at line 69 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef quaternion<Element,storage_type,order_type,cross_type> cml::quaternion< Element, ArrayType, Order, Cross >::quaternion_type

Definition at line 82 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef vector_type::reference cml::quaternion< Element, ArrayType, Order, Cross >::reference

Definition at line 76 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef cml::et::quaternion_result_tag cml::quaternion< Element, ArrayType, Order, Cross >::result_tag

Definition at line 106 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef vector_type::size_tag cml::quaternion< Element, ArrayType, Order, Cross >::size_tag

Definition at line 100 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef ArrayType cml::quaternion< Element, ArrayType, Order, Cross >::storage_type

Definition at line 57 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef quaternion< Element, typename vector_temporary::storage_type, order_type, cross_type> cml::quaternion< Element, ArrayType, Order, Cross >::temporary_type

Definition at line 90 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef vector_type::value_type cml::quaternion< Element, ArrayType, Order, Cross >::value_type

Definition at line 75 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef vector_type::temporary_type cml::quaternion< Element, ArrayType, Order, Cross >::vector_temporary

Definition at line 66 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
typedef vector<Element, generator_type> cml::quaternion< Element, ArrayType, Order, Cross >::vector_type

Definition at line 63 of file quaternion.h.


Member Enumeration Documentation

template<typename Element, class ArrayType, class Order, class Cross>
anonymous enum

Record result size as an enum.

Enumerator:
array_size 

Definition at line 115 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
anonymous enum

Localize the ordering as an enum.

Enumerator:
W 
X 
Y 
Z 

Definition at line 118 of file quaternion.h.


Constructor & Destructor Documentation

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion (  )  [inline]

Default initializer.

Note:
The default constructor cannot be used with an external<> array type.

Definition at line 243 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( Element *const   array  )  [inline]

Initializer for an external<> vector type.

Definition at line 246 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const quaternion_type q  )  [inline]

Copy construct from the same type of quaternion.

Definition at line 249 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
template<typename E , class AT >
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const quaternion< E, AT, order_type, cross_type > &  q  )  [inline]

Construct from a quaternion having a different array type.

Definition at line 252 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
template<typename XprT >
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( QUATXPR_ARG_TYPE  e  )  [inline]

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const vector_type v  )  [inline]

Initialize from a 4-vector.

If Order is scalar_first, then v[0] is the real part. Otherwise, v[3] is the real part.

Definition at line 272 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const value_type  v[4]  )  [inline]

Initialize from an array of scalars.

If Order is scalar_first, then v[0] is the real part. Otherwise, v[3] is the real part.

Note:
The target vector must have CML_VEC_COPY_FROM_ARRAY implemented, so this cannot be used with external<> vectors.

Definition at line 282 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const value_type a,
const value_type b,
const value_type c,
const value_type d 
) [inline]

Initialize from 4 scalars.

If Order is scalar_first, then a is the real part, and (b,c,d) is the imaginary part. Otherwise, (a,b,c) is the imaginary part, and d is the real part.

Definition at line 290 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::assign().

Here is the call graph for this function:

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const value_type s,
const imaginary_type v 
) [inline]

Initialize both the real and imaginary parts.

The imaginary part is given by a 3-vector. Although the imaginary part is specified first, the proper coefficient order (vector or scalar first) is maintained.

Definition at line 304 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q, cml::quaternion< Element, ArrayType, Order, Cross >::W, cml::quaternion< Element, ArrayType, Order, Cross >::X, cml::quaternion< Element, ArrayType, Order, Cross >::Y, and cml::quaternion< Element, ArrayType, Order, Cross >::Z.

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const imaginary_type v,
const value_type s 
) [inline]

Initialize both the real and imaginary parts.

The imaginary part is given by a 3-vector. Although the imaginary part is specified second, the proper coefficient order (vector or scalar first) is maintained.

Definition at line 314 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q, cml::quaternion< Element, ArrayType, Order, Cross >::W, cml::quaternion< Element, ArrayType, Order, Cross >::X, cml::quaternion< Element, ArrayType, Order, Cross >::Y, and cml::quaternion< Element, ArrayType, Order, Cross >::Z.

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const value_type  v[3],
const value_type s 
) [inline]

Initialize both the real and imaginary parts.

The imaginary part is given by an array of scalars. Although the imaginary part is specified first, the proper coefficient order (vector or scalar first) is maintained.

Definition at line 324 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q, cml::quaternion< Element, ArrayType, Order, Cross >::W, cml::quaternion< Element, ArrayType, Order, Cross >::X, cml::quaternion< Element, ArrayType, Order, Cross >::Y, and cml::quaternion< Element, ArrayType, Order, Cross >::Z.

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const value_type s,
const value_type  v[3] 
) [inline]

Initialize both the real and imaginary parts.

The imaginary part is given by an array of scalars. Although the imaginary part is specified second, the proper coefficient order (vector or scalar first) is maintained.

Definition at line 334 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q, cml::quaternion< Element, ArrayType, Order, Cross >::W, cml::quaternion< Element, ArrayType, Order, Cross >::X, cml::quaternion< Element, ArrayType, Order, Cross >::Y, and cml::quaternion< Element, ArrayType, Order, Cross >::Z.

template<typename Element, class ArrayType, class Order, class Cross>
template<typename XprT >
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( VECXPR_ARG_TYPE  e  )  [inline]

Initialize from a VectorXpr.

Definition at line 342 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
template<typename XprT >
cml::quaternion< Element, ArrayType, Order, Cross >::quaternion ( const value_type s,
VECXPR_ARG_TYPE  e 
) [inline]


Member Function Documentation

template<typename Element, class ArrayType, class Order, class Cross>
const vector_type& cml::quaternion< Element, ArrayType, Order, Cross >::as_vector (  )  const [inline]

Return the vector representing the quaternion.

Definition at line 142 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q.

template<typename Element, class ArrayType, class Order, class Cross>
void cml::quaternion< Element, ArrayType, Order, Cross >::assign ( const value_type a,
const value_type b,
const value_type c,
const value_type d,
vector_first   
) [inline, protected]

template<typename Element, class ArrayType, class Order, class Cross>
void cml::quaternion< Element, ArrayType, Order, Cross >::assign ( const value_type a,
const value_type b,
const value_type c,
const value_type d,
scalar_first   
) [inline, protected]

template<typename Element, class ArrayType, class Order, class Cross>
cml::quaternion< Element, ArrayType, Order, Cross >::CML_STATIC_REQUIRE_M ( (same_type< ArrayType, fixed<> >::is_true||same_type< ArrayType, external<> >::is_true ,
quaternion_requires_fixed_size_array_type_error   
) [private]

template<typename Element, class ArrayType, class Order, class Cross>
quaternion_type& cml::quaternion< Element, ArrayType, Order, Cross >::conjugate (  )  [inline]

Set this quaternion to the conjugate.

Definition at line 170 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
const vector_type::pointer cml::quaternion< Element, ArrayType, Order, Cross >::data (  )  const [inline]

Return access to the data as a const raw pointer.

Definition at line 452 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q.

template<typename Element, class ArrayType, class Order, class Cross>
vector_type::pointer cml::quaternion< Element, ArrayType, Order, Cross >::data (  )  [inline]

Return access to the data as a raw pointer.

Definition at line 449 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q.

template<typename Element, class ArrayType, class Order, class Cross>
temporary_type cml::quaternion< Element, ArrayType, Order, Cross >::exp ( value_type  tolerance = epsilon<value_type>::placeholder()  )  const [inline]

Return the result of the exponential function as applied to this quaternion.

Definition at line 206 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::imaginary(), and cml::quaternion< Element, ArrayType, Order, Cross >::length().

Here is the call graph for this function:

template<typename Element, class ArrayType, class Order, class Cross>
quaternion_type& cml::quaternion< Element, ArrayType, Order, Cross >::identity (  )  [inline]

template<typename Element, class ArrayType, class Order, class Cross>
imaginary_type cml::quaternion< Element, ArrayType, Order, Cross >::imaginary (  )  const [inline]

template<typename Element, class ArrayType, class Order, class Cross>
quaternion_type& cml::quaternion< Element, ArrayType, Order, Cross >::inverse (  )  [inline]

Set this quaternion to the inverse.

Definition at line 175 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
value_type cml::quaternion< Element, ArrayType, Order, Cross >::length (  )  const [inline]

Return the quaternion length.

Definition at line 157 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::length_squared().

Referenced by cml::quaternion< Element, ArrayType, Order, Cross >::exp(), cml::length(), and cml::quaternion< Element, ArrayType, Order, Cross >::normalize().

Here is the call graph for this function:

Here is the caller graph for this function:

template<typename Element, class ArrayType, class Order, class Cross>
value_type cml::quaternion< Element, ArrayType, Order, Cross >::length_squared (  )  const [inline]

Return square of the quaternion length.

Definition at line 152 of file quaternion.h.

References cml::dot().

Referenced by cml::quaternion< Element, ArrayType, Order, Cross >::length(), cml::length_squared(), cml::norm(), and cml::quaternion< Element, ArrayType, Order, Cross >::norm().

Here is the call graph for this function:

Here is the caller graph for this function:

template<typename Element, class ArrayType, class Order, class Cross>
temporary_type cml::quaternion< Element, ArrayType, Order, Cross >::log ( value_type  tolerance = epsilon<value_type>::placeholder()  )  const [inline]

Return the log of this quaternion.

Definition at line 189 of file quaternion.h.

References cml::acos_safe(), cml::quaternion< Element, ArrayType, Order, Cross >::imaginary(), and cml::quaternion< Element, ArrayType, Order, Cross >::real().

Here is the call graph for this function:

template<typename Element, class ArrayType, class Order, class Cross>
value_type cml::quaternion< Element, ArrayType, Order, Cross >::norm (  )  const [inline]

Return the Cayley norm of the quaternion.

Definition at line 147 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::length_squared().

Here is the call graph for this function:

template<typename Element, class ArrayType, class Order, class Cross>
quaternion_type& cml::quaternion< Element, ArrayType, Order, Cross >::normalize (  )  [inline]

Normalize this quaternion (divide by its length).

Todo:
Make this return a QuaternionXpr.

Definition at line 165 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::length().

Referenced by cml::normalize(), and cml::quaternion_rotation_vec_to_vec().

Here is the call graph for this function:

Here is the caller graph for this function:

template<typename Element, class ArrayType, class Order, class Cross>
template<typename XprT >
quaternion_type& cml::quaternion< Element, ArrayType, Order, Cross >::operator*= ( QUATXPR_ARG_TYPE  e  )  [inline]

Accumulated multiplication with a quaternion expression.

Compute p = p * e for a quaternion p and a quaternion expression e.

Definition at line 444 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
quaternion_type& cml::quaternion< Element, ArrayType, Order, Cross >::operator*= ( const quaternion_type q  )  [inline]

Accumulated multiplication with a quaternion.

Compute p = p * q for two quaternions p and q.

Definition at line 429 of file quaternion.h.

template<typename Element, class ArrayType, class Order, class Cross>
reference cml::quaternion< Element, ArrayType, Order, Cross >::operator[] ( size_t  i  )  [inline]

Mutable access to the quaternion as a vector.

Definition at line 224 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q.

template<typename Element, class ArrayType, class Order, class Cross>
const_reference cml::quaternion< Element, ArrayType, Order, Cross >::operator[] ( size_t  i  )  const [inline]

Const access to the quaternion as a vector.

Definition at line 221 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q.

template<typename Element, class ArrayType, class Order, class Cross>
void cml::quaternion< Element, ArrayType, Order, Cross >::random ( value_type  min,
value_type  max 
) [inline]

Fill quaternion with random elements.

Warning:
This does not generate uniformly random rotations.

Definition at line 230 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q, and cml::random_real().

Here is the call graph for this function:

template<typename Element, class ArrayType, class Order, class Cross>
value_type cml::quaternion< Element, ArrayType, Order, Cross >::real (  )  const [inline]

Return the scalar part.

Definition at line 129 of file quaternion.h.

References cml::quaternion< Element, ArrayType, Order, Cross >::m_q, and cml::quaternion< Element, ArrayType, Order, Cross >::W.

Referenced by cml::quaternion< Element, ArrayType, Order, Cross >::log(), and cml::real().

Here is the caller graph for this function:


Member Data Documentation

template<typename Element, class ArrayType, class Order, class Cross>
vector_type cml::quaternion< Element, ArrayType, Order, Cross >::m_q [protected]


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

Generated on Sat Jul 18 19:35:38 2009 for CML 1.0 by  doxygen 1.5.9