openvrml::quatf Struct Reference

A POD-struct comprising a quaternion. More...

#include <openvrml/basetypes.h>

Public Member Functions

quatfoperator*= (const quatf &quat) throw ()
 Multiply by a quaternion.
quatfoperator*= (float scalar) throw ()
 Multiply by a scalar.
quatfoperator/= (float scalar) throw ()
 Divide by a scalar.
quatfoperator+= (const quatf &quat) throw ()
 Add a quaternion.
quatfoperator-= (const quatf &quat) throw ()
 Subtract a quaternion.
const float & operator[] (std::size_t index) const throw ()
 Array element dereference operator (const version).
float & operator[] (std::size_t index) throw ()
 Array element dereference operator (non-const version).
float x () const throw ()
 Get the x component.
float y () const throw ()
 Get the y component.
float z () const throw ()
 Get the z component.
float w () const throw ()
 Get the w component.
void x (float value) throw ()
 Set the x component.
void y (float value) throw ()
 Set the y component.
void z (float value) throw ()
 Set the z component.
void w (float value) throw ()
 Set the w component.
const quatf conjugate () const throw ()
 Get the conjugate.
const quatf inverse () const throw ()
 Get the inverse.
float norm () const throw ()
 Get the norm.
const quatf normalize () const throw ()
 Normalize the quaternion.

Public Attributes

float quat [4]
 An array comprising the quaternion components.

Related Functions

(Note that these are not member functions.)

const openvrml::quatf make_quatf () throw()
 Create a default quatf.
const openvrml::quatf make_quatf (const float x, const float y, const float z, const float w) throw()
 Create a quatf from four values.
const openvrml::quatf make_quatf (const float(&quat)[4]) throw()
 Create a quatf from an array of four values.
const openvrml::quatf make_quatf (const mat4f &mat) throw()
 Create a quatf from a rotation matrix.
const openvrml::quatf make_quatf (const rotation &rot) throw()
 Create a quatf from a rotation.
const openvrml::quatf operator* (const quatf &lhs, const quatf &rhs) throw()
 Multiply two quaternions.
const openvrml::quatf operator* (const quatf &quat, const float scalar) throw()
 Multiply a quaternion by a scalar.
const openvrml::quatf operator* (const float scalar, const quatf &quat) throw()
 Multiply a scalar by a quaternion.
const openvrml::quatf operator/ (const quatf &quat, const float scalar) throw()
 Divide a quaternion by a scalar.
const openvrml::quatf operator+ (const quatf &lhs, const quatf &rhs) throw()
 Add two quaternions.
const openvrml::quatf operator- (const quatf &lhs, const quatf &rhs) throw()
 Take the difference between two quaternions.
std::ostream & operator<< (std::ostream &out, const quatf &quat)
 Stream output.
bool operator== (const quatf &lhs, const quatf &rhs) throw()
 Compare for equality.
bool operator!= (const quatf &lhs, const quatf &rhs) throw()
 Compare for inequality.

Detailed Description

A POD-struct comprising a quaternion.

Member Function Documentation

openvrml::quatf & openvrml::quatf::operator*= ( const quatf quat) throw ()

Multiply by a quaternion.

Note

\[ qr = ( \vec{q_v} \times \vec{r_v} + r_w \vec{q_v} + q_w \vec{r_v}, q_w r_w - \vec{q_v} \cdotp \vec{r_v}) \]

Parameters
[in]quatthe quaternion by which to multiply.
Returns
a reference to the object.
openvrml::quatf & openvrml::quatf::operator*= ( float  scalar) throw ()

Multiply by a scalar.

Parameters
[in]scalarvalue by which to multiply.
Returns
a reference to the object.
openvrml::quatf & openvrml::quatf::operator/= ( float  scalar) throw ()

Divide by a scalar.

Parameters
[in]scalarvalue by which to divide.
Returns
a reference to the object.
openvrml::quatf & openvrml::quatf::operator+= ( const quatf quat) throw ()

Add a quaternion.

Parameters
[in]quatthe quaternion to add.
Returns
a reference to the object.
openvrml::quatf & openvrml::quatf::operator-= ( const quatf quat) throw ()

Subtract a quaternion.

Parameters
[in]quatthe quaternion to subtract.
Returns
a reference to the object.
const float & openvrml::quatf::operator[] ( std::size_t  index) const throw ()
inline

Array element dereference operator (const version).

Parameters
[in]indexan index from 0–3.
Precondition
index is not larger than 3.
float & openvrml::quatf::operator[] ( std::size_t  index) throw ()
inline

Array element dereference operator (non-const version).

Parameters
[in]indexan index from 0–3.
Precondition
index is not larger than 3.
float openvrml::quatf::x ( ) const throw ()
inline

Get the x component.

Returns
the x component value.
float openvrml::quatf::y ( ) const throw ()
inline

Get the y component.

Returns
the y component value.
float openvrml::quatf::z ( ) const throw ()
inline

Get the z component.

Returns
the z component value.
float openvrml::quatf::w ( ) const throw ()
inline

Get the w component.

Returns
the w component value.
void openvrml::quatf::x ( float  value) throw ()
inline

Set the x component.

Parameters
[in]valuex component value.
void openvrml::quatf::y ( float  value) throw ()
inline

Set the y component.

Parameters
[in]valuey component value.
void openvrml::quatf::z ( float  value) throw ()
inline

Set the z component.

Parameters
[in]valuez component value.
void openvrml::quatf::w ( float  value) throw ()
inline

Set the w component.

Parameters
[in]valuew component value.
const openvrml::quatf openvrml::quatf::conjugate ( ) const throw ()

Get the conjugate.

Note

\[ q^* = (- \vec{q_v}, q_w) \]

Returns
the conjugate of the quaternion.
const openvrml::quatf openvrml::quatf::inverse ( ) const throw ()

Get the inverse.

Note

\[ q^{-1} = \frac{q^*}{n(q)} \]

Returns
the multiplicative inverse.
float openvrml::quatf::norm ( ) const throw ()

Get the norm.

Note

\[ n(q) = q_x^2 + q_y^2 + q_z^2 + q_w^2 \]

Returns
the norm.
const openvrml::quatf openvrml::quatf::normalize ( ) const throw ()

Normalize the quaternion.

Returns
a unit quaternion derived from the quaternion.

Friends And Related Function Documentation

const openvrml::quatf make_quatf ( ) throw()
related

Create a default quatf.

Returns
a quatf with the value [0.0, 0.0, 0.0, 1.0].
const openvrml::quatf make_quatf ( const float  x,
const float  y,
const float  z,
const float  w 
) throw()
related

Create a quatf from four values.

Parameters
[in]xthe x vector component.
[in]ythe y vector component.
[in]zthe z vector component.
[in]wthe scalar value w.
Returns
a quatf with the value [x, y, z, w].
const openvrml::quatf make_quatf ( const float(&)  quat[4]) throw()
related

Create a quatf from an array of four values.

Parameters
[in]quatthe first three values in the array are used for the x, y, and z vector components, respectively. The fourth value in the array is used for the scalar part of the quaternion.
Returns
a quatf with the values in quat.
const openvrml::quatf make_quatf ( const mat4f mat) throw()
related

Create a quatf from a rotation matrix.

Parameters
[in]mata rotation matrix.
Returns
a quatf corresponding to the rotation applied by mat.
const openvrml::quatf make_quatf ( const rotation rot) throw()
related

Create a quatf from a rotation.

Parameters
[in]rota rotation.
Returns
a quatf corresponding to the rotation applied by rot.
const openvrml::quatf operator* ( const quatf lhs,
const quatf rhs 
) throw()
related

Multiply two quaternions.

Parameters
[in]lhsleft-hand operand.
[in]rhsright-hand operand.
Returns
the product of lhs and rhs.
const openvrml::quatf operator* ( const quatf quat,
const float  scalar 
) throw()
related

Multiply a quaternion by a scalar.

Parameters
[in]quatquaternion.
[in]scalarscalar.
Returns
the product of quat and scalar.
const openvrml::quatf operator* ( const float  scalar,
const quatf quat 
) throw()
related

Multiply a scalar by a quaternion.

Parameters
[in]scalarscalar.
[in]quatquaternion.
Returns
the product of scalar and quat.
const openvrml::quatf operator/ ( const quatf quat,
const float  scalar 
) throw()
related

Divide a quaternion by a scalar.

Parameters
[in]quatquaternion.
[in]scalarscalar.
Returns
the result of dividing quat by scalar.
const openvrml::quatf operator+ ( const quatf lhs,
const quatf rhs 
) throw()
related

Add two quaternions.

Parameters
[in]lhsleft-hand operand.
[in]rhsright-hand operand.
Returns
the sum of lhs and rhs.
const openvrml::quatf operator- ( const quatf lhs,
const quatf rhs 
) throw()
related

Take the difference between two quaternions.

Parameters
[in]lhsleft-hand operand.
[in]rhsright-hand operand.
Returns
the difference between lhs and rhs.
std::ostream & operator<< ( std::ostream &  out,
const quatf quat 
)
related

Stream output.

Parameters
[in,out]outan output stream.
[in]quata quaternion.
Returns
out.
bool operator== ( const quatf lhs,
const quatf rhs 
) throw()
related

Compare for equality.

Parameters
[in]lhsleft-hand operand.
[in]rhsright-hand operand.
Returns
true if lhs and rhs are equal; false otherwise.
bool operator!= ( const quatf lhs,
const quatf rhs 
) throw()
related

Compare for inequality.

Parameters
[in]lhsleft-hand operand.
[in]rhsright-hand operand.
Returns
true if lhs and rhs are not equal; false otherwise.

Member Data Documentation

float openvrml::quatf::quat[4]

An array comprising the quaternion components.