Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

OpenCAL::Utils::Quaternion Class Reference

#include <Quaternion.h>

Collaboration diagram for OpenCAL::Utils::Quaternion:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 Quaternion (float scalar, const Vector3 &vector)
float getScalar () const
const Vector3getVector () const
void setScalar (float scalar)
void setVector (const Vector3 &vector)
Quaternion operator+ (const Quaternion &q) const
 Quaternion addition.
Quaternion operator- (const Quaternion &q) const
 Quaternion substraction.
Quaternion operator * (const Quaternion &q) const
 Quaternion multiplication.
Quaternion operator * (const Vector3 &v) const
 Vector multiplication.
Quaternion operator * (float factor) const
 Scalar product.
Quaternion operator/ (float factor) const
 Scalar division.
void operator+= (const Quaternion &q)
void operator-= (const Quaternion &q)
void operator *= (const Quaternion &q)
void operator *= (const Vector3 &v)
void operator *= (float factor)
void operator/= (float factor)
Quaternion operator- () const
 Negation.
bool operator== (const Quaternion &q) const
 Equality.
bool operator!= (const Quaternion &q) const
 Inequality.
 operator Matrix33 () const
float magnitude () const
float magnitudeSquared () const
void inverse ()
Quaternion inversed () const
void inversed (Quaternion *q) const
void normalize ()
Quaternion normalized () const
void normalized (Quaternion *q) const
float dotProduct (const Quaternion &q) const
void slerp (float u, const Quaternion &dest)
void slerp (float u, const Quaternion &source, const Quaternion &dest)
Quaternion slerped (float u, const Quaternion &dest) const
Quaternion slerped (float u, const Quaternion &source, const Quaternion &dest) const
Quaternion blended (float u, const Quaternion &dest) const
void fromAxisAngle (const Vector3 &axis, float degrees)
void toAxisAngle (Vector3 *axis, float *degrees) const
void fromEulerAngle (float rotX, float rotY, float rotZ)
void fromEulerAngle (const Vector3 &rot)
Vector3 toEulerAngle () const
void toEulerAngle (float *rotX, float *rotY, float *rotZ) const
void toEulerAngle (Vector3 *rot) const
void fromMatrix33 (const Matrix33 &matrix)
Matrix33 toMatrix33 () const
void toMatrix33 (Matrix33 *matrix) const
void print () const

Static Public Member Functions

Quaternion createFromAxisAngle (const Vector3 &axis, float degrees)

Static Public Attributes

const Quaternion identity

Protected Attributes

float m_scalar
Vector3 m_vector

Friends

Quaternion operator * (const Vector3 &v, const Quaternion &q)
Quaternion operator * (float factor, const Quaternion &q)
Quaternion operator/ (float factor, const Quaternion &q)
std::ostream & operator<< (std::ostream &stream, const Quaternion &q)

Detailed Description

This class represents a quaternion, with all it's operators and functions

Definition at line 27 of file Quaternion.h.


Member Function Documentation

void Quaternion::fromAxisAngle const Vector3 axis,
float  degrees
 

A quaternion q, composed from rotating $ \Theta $ degrees over axis v:

\[ q = Rot_{\Theta, v} = [\cos{\frac{\Theta}{2}}, \sin{\frac{\Theta}{2}} . v] \]

Definition at line 349 of file Quaternion.cpp.

void Quaternion::inverse  ) 
 

The inverse of a quaternion, $[s, v]^{-1}$, is obtained by negating its vector part and dividing both parts by the magnitude squared:

\[ q^{-1} = (\frac{1}{\Vert q \Vert})^2 \cdot [s, -v] \]

Definition at line 225 of file Quaternion.cpp.

void Quaternion::inversed Quaternion q  )  const
 

See also:
inverse()
Definition at line 246 of file Quaternion.cpp.

References setScalar(), and setVector().

Here is the call graph for this function:

Quaternion Quaternion::inversed  )  const
 

See also:
inverse()
Definition at line 236 of file Quaternion.cpp.

float Quaternion::magnitude  )  const
 

The magnitude of a quaternion: $ \Vert q \Vert = \sqrt{s^2 + x^2 + y^2 + z^2} $ Definition at line 196 of file Quaternion.cpp.

References OpenCAL::Utils::Vector3::getX(), OpenCAL::Utils::Vector3::getY(), and OpenCAL::Utils::Vector3::getZ().

Referenced by normalize().

Here is the call graph for this function:

void Quaternion::normalize  ) 
 

Normalizing a quaternion makes it a unit quaternion (length = 1) Normalizing is done by dividing each part by the magnitude: $ \frac{q}{\Vert q \Vert} $ Definition at line 259 of file Quaternion.cpp.

References magnitude().

Here is the call graph for this function:

Quaternion Quaternion::operator * const Quaternion q  )  const
 

Quaternion multiplication.

Quaternion multiplication:

\[ [s_1, v_1] . [s_2, v_2] = [s_1 . s_2 - v_1 \bullet v_2, s_1 . v_2 + s_2 . v_1 + v_1 \times v_2] \]

Quaternion multiplication is associative: $ (q_1 . q_2) . q_3 = q_1 . (q_2 . q_3) $, but not commutative: $ q_1 . q_2 \neq q_2 . q_1 $ Definition at line 82 of file Quaternion.cpp.

References OpenCAL::Utils::Vector3::crossProduct(), OpenCAL::Utils::Vector3::dotProduct(), m_scalar, and m_vector.

Referenced by operator *().

Here is the call graph for this function:

Quaternion Quaternion::operator+ const Quaternion q  )  const
 

Quaternion addition.

Quaternion addition: $ [s_1, v_1] + [s_2, v_2] = [s_1 + s_2, v_1 + v_2] $ Definition at line 56 of file Quaternion.cpp.

References m_scalar, and m_vector.

Quaternion Quaternion::slerped float  u,
const Quaternion source,
const Quaternion dest
const
 

Slerping produces linear interpolation between unit quaternions.

Parameters:
u: the interpolation factor
source: the source quaternion
dest: the destination quaternion
Returns:
the interpolated quaternion (normalized)
Definition at line 300 of file Quaternion.cpp.

References dotProduct().

Here is the call graph for this function:

void Quaternion::toEulerAngle Vector3 rot  )  const
 

Definition at line 433 of file Quaternion.cpp.

void Quaternion::toEulerAngle float *  rotX,
float *  rotY,
float *  rotZ
const
 

Definition at line 427 of file Quaternion.cpp.

Vector3 Quaternion::toEulerAngle  )  const
 

Definition at line 421 of file Quaternion.cpp.

void Quaternion::toMatrix33 Matrix33 matrix  )  const
 

I've got this from the Baraff and Witkin's siggraph course about physically based modelling, page G23 Definition at line 469 of file Quaternion.cpp.

References OpenCAL::Utils::Vector3::getX(), OpenCAL::Utils::Vector3::getY(), OpenCAL::Utils::Vector3::getZ(), OpenCAL::Utils::Matrix33::identity(), and OpenCAL::Utils::Matrix33::set().

Here is the call graph for this function:


The documentation for this class was generated from the following files:
Generated on Sun Aug 15 19:19:37 2004 for OpenCAL: Open Computer Animation Library by doxygen 1.3.8