4.4. Quaternions 169

### 4.4 Quaternions

We’ve seen that a 3 × 3 matrix can be used to represent an arbitrary rotation in

three dimensions. However, a matrix is not always an ideal representation of

a rotation, for a number of reasons:

- We need nine fl oating-point values to represent a rotation, which seems

excessive considering that we only have three degrees of freedom—

pitch, yaw, and roll. - Rotating a vector requires a vector-matrix multiplication, which involves

three dot products, or a total of nine multiplications and six additions.

We would like to fi nd a rotational representation that is less expensive

to calculate, if possible. - In games and computer graphics, it’s oft en important to be able to fi nd

rotations that are some percentage of the way between two known rota-

tions. For example, if we are to smoothly animate a camera from some

starting orientation A to some fi nal orientation B over the course of a

few seconds, we need to be able to fi nd lots of intermediate rotations be-

tween A and B over the course of the animation. It turns out to be diffi -

cult to do this when the A and B orientations are expressed as matrices.

Thankfully, there is a rotational representation that overcomes these three

problems. It is a mathematical object known as a quaternion. A quaternion

looks a lot like a four-dimensional vector, but it behaves quite diff erently.

We usually write quaternions using non-italic, non-boldface type, like this:

q = [ qx qy qz qw ].

Quaternions were developed by Sir William Rowan Hamilton in 1843 as

an extension to the complex numbers. They were fi rst used to solve prob-

lems in the area of mechanics. Technically speaking, a quaternion obeys a

set of rules known as a four-dimensional normed division algebra over the real

numbers. Thankfully, we won’t need to understand the details of these rather

esoteric algebraic rules. For our purposes, it will suffi ce to know that the unit-

length quaternions (i.e., all quaternions obeying the constraint qx^2 + qy^2 + qz^2 +

qw^2 = 1) represent three-dimensional rotations.

There are a lot of great papers, web pages, and presentations on quater-

nions available on the web, for further reading. Here’s one of my favorites:

htt p://graphics.ucsd.edu/courses/cse169_w05/CSE169_04.ppt.

4.4.1. Unit Quaternions as 3D Rotations

A unit quaternion can be visualized as a three-dimensional vector plus a

fourth scalar coordinate. The vector part qV is the unit axis of rotation, scaled