Game Development Reference
proach that lets you keep the advantages rotation matrices have to offer, but at a cheaper
price. That alternative, quaternions, is the subject of the next section.
Quaternions are somewhat of a mathematical oddity. They were developed over 100
years ago by William Hamilton through his work in complex (imaginary) math but have
found very little practical use. A quaternion is a quantity, kind of like a vector, but made
up of four components. It is typically written in the form:
q = q 0 + q x i + q y j + q z k
A quaternion is really a four-dimensional quantity in complex space and, unfortunately,
does not lend itself to visualization. Don't worry, though: our use of quaternions to
represent orientation in three dimensions does allow us to attach a physical meaning to
them, as you'll see in a moment.
Of particular interest to us is what's known as a unit quaternion that satisfies the fol‐
q 0 2 + q x 2 + q y 2 + q z 2 = 1
This is analogous to a normalized, or unit, vector.
You can also write a quaternion in the form q = [ q 0 , v ], where v is the vector, q x i + q y j
+ q z k , and q 0 is a scalar. In the context of rotation, v represents the direction in which
the axis of rotation points. For a given rotation, θ, about an arbitrary axis represented
by the unit vector u , the representative quaternion can be written as follows:
q = [cos(θ/2) , sin(θ/2) u ]
This is illustrated in Figure 11-3 for an arbitrary rigid body rotating about an axis passing
through its center of gravity. The rigid body rotates through an angle θ from the position
shown in light gray to the position shown in dark gray. Here, the unit vector u is the
vector v normalized to unit length.