Contents User Forum Source Index APIs by Task APIs by Level Data


G3D::Quat Class Reference

Unit quaternions are used in computer graphics to represent rotation about an axis. More...

#include <Quat.h>

List of all members.

Public Member Functions

float average () const
Quat conj () const
void deserialize (class BinaryInput &b)
float dot (const Quat &other) const
Quat exp () const
bool fuzzyEq (const Quat &q)
Vector3imag ()
const Vector3imag () const
Quat inverse () const
bool isUnit (float tolerance=1e-5) const
Quat log () const
float magnitude () const
Quat nlerp (const Quat &other, float alpha) const
float norm () const
Quat operator * (const Quat &other) const
Quat operator * (float s) const
Quatoperator *= (float s)
Quat operator+ (const Quat &other) const
Quat operator- (const Quat &other) const
Quat operator- () const
Quat operator/ (const Quat &other) const
Quat operator/ (float s) const
float & operator[] (int i)
const float & operator[] (int i) const
Quat pow (float x) const
 Quat (const Vector3 &v, float _w=0)
 Quat (float _x, float _y, float _z, float _w)
 Quat (const Matrix3 &rot)
 Quat ()
float & real ()
const float & real () const
bool sameRotation (const Quat &q)
void serialize (class BinaryOutput &b) const
Quat slerp (const Quat &other, float alpha, float threshold=0.05f) const
float sum () const
void toAxisAngleRotation (Vector3 &axis, float &angle) const
void toAxisAngleRotation (Vector3 &axis, double &angle) const
void toRotationMatrix (Matrix3 &rot) const
Matrix3 toRotationMatrix () const
Quat toUnit () const
void unitize ()
Vector2 ww () const
Vector3 www () const
Vector4 wwww () const
Vector4 wwwx () const
Vector4 wwwy () const
Vector4 wwwz () const
Vector3 wwx () const
Vector4 wwxw () const
Vector4 wwxx () const
Vector4 wwxy () const
Vector4 wwxz () const
Vector3 wwy () const
Vector4 wwyw () const
Vector4 wwyx () const
Vector4 wwyy () const
Vector4 wwyz () const
Vector3 wwz () const
Vector4 wwzw () const
Vector4 wwzx () const
Vector4 wwzy () const
Vector4 wwzz () const
Vector2 wx () const
Vector3 wxw () const
Vector4 wxww () const
Vector4 wxwx () const
Vector4 wxwy () const
Vector4 wxwz () const
Vector3 wxx () const
Vector4 wxxw () const
Vector4 wxxx () const
Vector4 wxxy () const
Vector4 wxxz () const
Vector3 wxy () const
Vector4 wxyw () const
Vector4 wxyx () const
Vector4 wxyy () const
Vector4 wxyz () const
Vector3 wxz () const
Vector4 wxzw () const
Vector4 wxzx () const
Vector4 wxzy () const
Vector4 wxzz () const
Vector2 wy () const
Vector3 wyw () const
Vector4 wyww () const
Vector4 wywx () const
Vector4 wywy () const
Vector4 wywz () const
Vector3 wyx () const
Vector4 wyxw () const
Vector4 wyxx () const
Vector4 wyxy () const
Vector4 wyxz () const
Vector3 wyy () const
Vector4 wyyw () const
Vector4 wyyx () const
Vector4 wyyy () const
Vector4 wyyz () const
Vector3 wyz () const
Vector4 wyzw () const
Vector4 wyzx () const
Vector4 wyzy () const
Vector4 wyzz () const
Vector2 wz () const
Vector3 wzw () const
Vector4 wzww () const
Vector4 wzwx () const
Vector4 wzwy () const
Vector4 wzwz () const
Vector3 wzx () const
Vector4 wzxw () const
Vector4 wzxx () const
Vector4 wzxy () const
Vector4 wzxz () const
Vector3 wzy () const
Vector4 wzyw () const
Vector4 wzyx () const
Vector4 wzyy () const
Vector4 wzyz () const
Vector3 wzz () const
Vector4 wzzw () const
Vector4 wzzx () const
Vector4 wzzy () const
Vector4 wzzz () const
Vector2 xw () const
Vector3 xww () const
Vector4 xwww () const
Vector4 xwwx () const
Vector4 xwwy () const
Vector4 xwwz () const
Vector3 xwx () const
Vector4 xwxw () const
Vector4 xwxx () const
Vector4 xwxy () const
Vector4 xwxz () const
Vector3 xwy () const
Vector4 xwyw () const
Vector4 xwyx () const
Vector4 xwyy () const
Vector4 xwyz () const
Vector3 xwz () const
Vector4 xwzw () const
Vector4 xwzx () const
Vector4 xwzy () const
Vector4 xwzz () const
Vector2 xx () const
Vector3 xxw () const
Vector4 xxww () const
Vector4 xxwx () const
Vector4 xxwy () const
Vector4 xxwz () const
Vector3 xxx () const
Vector4 xxxw () const
Vector4 xxxx () const
Vector4 xxxy () const
Vector4 xxxz () const
Vector3 xxy () const
Vector4 xxyw () const
Vector4 xxyx () const
Vector4 xxyy () const
Vector4 xxyz () const
Vector3 xxz () const
Vector4 xxzw () const
Vector4 xxzx () const
Vector4 xxzy () const
Vector4 xxzz () const
Vector2 xy () const
Vector3 xyw () const
Vector4 xyww () const
Vector4 xywx () const
Vector4 xywy () const
Vector4 xywz () const
Vector3 xyx () const
Vector4 xyxw () const
Vector4 xyxx () const
Vector4 xyxy () const
Vector4 xyxz () const
Vector3 xyy () const
Vector4 xyyw () const
Vector4 xyyx () const
Vector4 xyyy () const
Vector4 xyyz () const
Vector3 xyz () const
Vector4 xyzw () const
Vector4 xyzx () const
Vector4 xyzy () const
Vector4 xyzz () const
Vector2 xz () const
Vector3 xzw () const
Vector4 xzww () const
Vector4 xzwx () const
Vector4 xzwy () const
Vector4 xzwz () const
Vector3 xzx () const
Vector4 xzxw () const
Vector4 xzxx () const
Vector4 xzxy () const
Vector4 xzxz () const
Vector3 xzy () const
Vector4 xzyw () const
Vector4 xzyx () const
Vector4 xzyy () const
Vector4 xzyz () const
Vector3 xzz () const
Vector4 xzzw () const
Vector4 xzzx () const
Vector4 xzzy () const
Vector4 xzzz () const
Vector2 yw () const
Vector3 yww () const
Vector4 ywww () const
Vector4 ywwx () const
Vector4 ywwy () const
Vector4 ywwz () const
Vector3 ywx () const
Vector4 ywxw () const
Vector4 ywxx () const
Vector4 ywxy () const
Vector4 ywxz () const
Vector3 ywy () const
Vector4 ywyw () const
Vector4 ywyx () const
Vector4 ywyy () const
Vector4 ywyz () const
Vector3 ywz () const
Vector4 ywzw () const
Vector4 ywzx () const
Vector4 ywzy () const
Vector4 ywzz () const
Vector2 yx () const
Vector3 yxw () const
Vector4 yxww () const
Vector4 yxwx () const
Vector4 yxwy () const
Vector4 yxwz () const
Vector3 yxx () const
Vector4 yxxw () const
Vector4 yxxx () const
Vector4 yxxy () const
Vector4 yxxz () const
Vector3 yxy () const
Vector4 yxyw () const
Vector4 yxyx () const
Vector4 yxyy () const
Vector4 yxyz () const
Vector3 yxz () const
Vector4 yxzw () const
Vector4 yxzx () const
Vector4 yxzy () const
Vector4 yxzz () const
Vector2 yy () const
Vector3 yyw () const
Vector4 yyww () const
Vector4 yywx () const
Vector4 yywy () const
Vector4 yywz () const
Vector3 yyx () const
Vector4 yyxw () const
Vector4 yyxx () const
Vector4 yyxy () const
Vector4 yyxz () const
Vector3 yyy () const
Vector4 yyyw () const
Vector4 yyyx () const
Vector4 yyyy () const
Vector4 yyyz () const
Vector3 yyz () const
Vector4 yyzw () const
Vector4 yyzx () const
Vector4 yyzy () const
Vector4 yyzz () const
Vector2 yz () const
Vector3 yzw () const
Vector4 yzww () const
Vector4 yzwx () const
Vector4 yzwy () const
Vector4 yzwz () const
Vector3 yzx () const
Vector4 yzxw () const
Vector4 yzxx () const
Vector4 yzxy () const
Vector4 yzxz () const
Vector3 yzy () const
Vector4 yzyw () const
Vector4 yzyx () const
Vector4 yzyy () const
Vector4 yzyz () const
Vector3 yzz () const
Vector4 yzzw () const
Vector4 yzzx () const
Vector4 yzzy () const
Vector4 yzzz () const
Vector2 zw () const
Vector3 zww () const
Vector4 zwww () const
Vector4 zwwx () const
Vector4 zwwy () const
Vector4 zwwz () const
Vector3 zwx () const
Vector4 zwxw () const
Vector4 zwxx () const
Vector4 zwxy () const
Vector4 zwxz () const
Vector3 zwy () const
Vector4 zwyw () const
Vector4 zwyx () const
Vector4 zwyy () const
Vector4 zwyz () const
Vector3 zwz () const
Vector4 zwzw () const
Vector4 zwzx () const
Vector4 zwzy () const
Vector4 zwzz () const
Vector2 zx () const
Vector3 zxw () const
Vector4 zxww () const
Vector4 zxwx () const
Vector4 zxwy () const
Vector4 zxwz () const
Vector3 zxx () const
Vector4 zxxw () const
Vector4 zxxx () const
Vector4 zxxy () const
Vector4 zxxz () const
Vector3 zxy () const
Vector4 zxyw () const
Vector4 zxyx () const
Vector4 zxyy () const
Vector4 zxyz () const
Vector3 zxz () const
Vector4 zxzw () const
Vector4 zxzx () const
Vector4 zxzy () const
Vector4 zxzz () const
Vector2 zy () const
Vector3 zyw () const
Vector4 zyww () const
Vector4 zywx () const
Vector4 zywy () const
Vector4 zywz () const
Vector3 zyx () const
Vector4 zyxw () const
Vector4 zyxx () const
Vector4 zyxy () const
Vector4 zyxz () const
Vector3 zyy () const
Vector4 zyyw () const
Vector4 zyyx () const
Vector4 zyyy () const
Vector4 zyyz () const
Vector3 zyz () const
Vector4 zyzw () const
Vector4 zyzx () const
Vector4 zyzy () const
Vector4 zyzz () const
Vector2 zz () const
Vector3 zzw () const
Vector4 zzww () const
Vector4 zzwx () const
Vector4 zzwy () const
Vector4 zzwz () const
Vector3 zzx () const
Vector4 zzxw () const
Vector4 zzxx () const
Vector4 zzxy () const
Vector4 zzxz () const
Vector3 zzy () const
Vector4 zzyw () const
Vector4 zzyx () const
Vector4 zzyy () const
Vector4 zzyz () const
Vector3 zzz () const
Vector4 zzzw () const
Vector4 zzzx () const
Vector4 zzzy () const
Vector4 zzzz () const

Static Public Member Functions

static Quat fromAxisAngleRotation (const Vector3 &axis, float angle)
static Quat unitRandom ()

Public Attributes

float w
float x
float y
float z

Friends

Quat operator * (float s, const Quat &q)


Detailed Description

Unit quaternions are used in computer graphics to represent rotation about an axis.

Any 3x3 rotation matrix can be stored as a quaternion.

A quaternion represents the sum of a real scalar and an imaginary vector: ix + jy + kz + w. A unit quaternion representing a rotation by A about axis v has the form [sin(A/2)*v, cos(A/2)]. For a unit quaternion, q.conj() == q.inverse() is a rotation by -A about v. -q is the same rotation as q (negate both the axis and angle).

A non-unit quaterion q represents the same rotation as q.unitize() (Dam98 pg 28).

Although quaternion-vector operations (eg. Quat + Vector3) are well defined, they are not supported by this class because they typically are bugs when they appear in code.

Do not subclass.

BETA API -- subject to change

Referenced Code:
Erik B. Dam, Martin Koch, Martin Lillholm, Quaternions, Interpolation and Animation. Technical Report DIKU-TR-98/5, Department of Computer Science, University of Copenhagen, Denmark. 1998.


Constructor & Destructor Documentation

G3D::Quat::Quat (  )  [inline]

Initializes to a zero degree rotation.

G3D::Quat::Quat ( const Matrix3 rot  ) 

G3D::Quat::Quat ( float  _x,
float  _y,
float  _z,
float  _w 
) [inline]

G3D::Quat::Quat ( const Vector3 v,
float  _w = 0 
) [inline]

Defaults to a pure vector quaternion.


Member Function Documentation

float G3D::Quat::average (  )  const [inline]

Quat G3D::Quat::conj (  )  const [inline]

Negates the imaginary part.

void G3D::Quat::deserialize ( class BinaryInput b  ) 

float G3D::Quat::dot ( const Quat other  )  const [inline]

Quat G3D::Quat::exp (  )  const [inline]

exp q = [sin(A) * v, cos(A)] where q = [Av, 0].

Only defined for pure-vector quaternions

static Quat G3D::Quat::fromAxisAngleRotation ( const Vector3 axis,
float  angle 
) [static]

q = [sin(angle/2)*axis, cos(angle/2)]

bool G3D::Quat::fuzzyEq ( const Quat q  )  [inline]

Note: two quats can represent the Quat::sameRotation and not be equal.

Vector3& G3D::Quat::imag (  )  [inline]

const Vector3& G3D::Quat::imag (  )  const [inline]

Returns the imaginary part (x, y, z).

Quat G3D::Quat::inverse (  )  const [inline]

Note that q-1 = q.conj() for a unit quaternion.

Referenced Code:
Dam99 page 13

bool G3D::Quat::isUnit ( float  tolerance = 1e-5  )  const [inline]

Is the magnitude nearly 1.0?

Quat G3D::Quat::log (  )  const [inline]

float G3D::Quat::magnitude (  )  const [inline]

Quat G3D::Quat::nlerp ( const Quat other,
float  alpha 
) const

Normalized linear interpolation of quaternion components.

float G3D::Quat::norm (  )  const [inline]

The linear algebra 2-norm, sqrt(q dot q).

This matches the value used in Dam's 1998 tech report but differs from the n(q) value used in Eberly's 1999 paper, which is the square of the norm.

Quat G3D::Quat::operator * ( const Quat other  )  const

Quaternion multiplication (composition of rotations).

Note that this does not commute.

Quat G3D::Quat::operator * ( float  s  )  const [inline]

Quat& G3D::Quat::operator *= ( float  s  )  [inline]

Quat G3D::Quat::operator+ ( const Quat other  )  const [inline]

Quat G3D::Quat::operator- ( const Quat other  )  const [inline]

Quat G3D::Quat::operator- (  )  const [inline]

Quat G3D::Quat::operator/ ( const Quat other  )  const [inline]