G3D::Quat Class ReferenceUnit 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) |
| Vector3 & | imag () |
| const Vector3 & | imag () 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 |
| Quat & | operator *= (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.
| 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] |
| 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] |
|