Complex Numbers as Rotations
We
just built
the rotation matrix R(\theta) the honest way — by chasing basis
vectors. Now for the magic trick. There is a second number system in which rotation isn't a
matrix at all, but a single multiplication: the
complex numbers.
It is a beautiful shortcut in its own right, and — more importantly for a game engine — it is
the exact pattern that quaternions will extend to three dimensions.
A point in the plane is a complex number
Step 1 — identify the plane with the complex numbers. A 2-D point
(x, y) and the complex number z = x + iy
carry exactly the same information: the real part is the
x-coordinate, the imaginary part the
y-coordinate. So the screen is the complex plane in
disguise:
(x, y) \;\longleftrightarrow\; z = x + iy.
Step 2 — pick a rotor. By
Euler's formula,
the unit-length complex number at angle \theta is
e^{i\theta} = \cos\theta + i\sin\theta,
a number sitting on the unit circle. Call it the rotor. The claim is that
multiplying any point z by this rotor rotates it by
\theta.
Multiplying by the rotor rotates the point
Step 3 — multiply e^{i\theta} by
z = x + iy, expanding every term against every term:
(\cos\theta + i\sin\theta)(x + iy) = x\cos\theta + iy\cos\theta + ix\sin\theta + i^2 y\sin\theta.
Step 4 — use i^2 = -1 on the last term, turning
i^2 y\sin\theta into -y\sin\theta:
= (x\cos\theta - y\sin\theta) + i\,(x\sin\theta + y\cos\theta).
Step 5 — read off the real and imaginary parts as a new point
(x', y'):
x' = x\cos\theta - y\sin\theta, \qquad y' = x\sin\theta + y\cos\theta.
Step 6 — compare with the rotation matrix. Those are precisely the two rows
of R(\theta)\,(x, y) from the previous page:
\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix}.
One complex multiplication packs the entire 2 \times 2 rotation
matrix into a single number on the unit circle. 2-D rotation is complex
multiplication. (This is the engine-room version of
complex multiplication as rotation.)
Composing rotations is multiplying rotors
Step 7 — chain two rotations. Rotate by \beta,
then by \alpha: that is multiplying by
e^{i\beta}, then by e^{i\alpha}. The
exponents just add:
e^{i\alpha}\,e^{i\beta} = e^{i(\alpha + \beta)}.
Composing rotations becomes multiplying their rotors, and the angles add automatically — the
eight-line matrix proof from the previous page collapses to one rule of exponents. There are
no trig identities to expand by hand; the algebra of the exponent does the
bookkeeping for you. That economy is exactly why engines reach for this idea.
Identify a 2-D point (x, y) with the complex number
z = x + iy. Then:
-
the rotor e^{i\theta} = \cos\theta + i\sin\theta is the
unit-length complex number at angle \theta;
-
multiplying by the rotor rotates by \theta:
e^{i\theta} z has the same modulus as
z and its argument increased by
\theta;
-
this matches the rotation matrix exactly —
e^{i\theta}(x+iy) gives the same
(x', y') as R(\theta)(x, y);
-
composing rotations is multiplying rotors:
e^{i\alpha} e^{i\beta} = e^{i(\alpha + \beta)}, so angles add.
Hold onto the shape of what just happened: a rotation became multiply by a unit-length
number, and composition became multiplying those numbers. That pattern is too good to
leave in the plane — and it doesn't have to. To rotate three-dimensional space, engines
enlarge the complex numbers into the
quaternions,
which add three imaginary units i, j, k (all squaring to
-1) instead of one. A unit quaternion is a 3-D rotor, and
multiplying by it spins 3-D space the way e^{i\theta} spins the
plane.
That is why every modern game stores an object's orientation as a quaternion: rotations
compose by a single product, interpolate smoothly, and never suffer the
ordering headaches of stacked matrices. The plane was the rehearsal; quaternions are the
performance.
Spin a point with one multiplication
The Argand plane below shows a fixed number z (blue) and the
product e^{i\theta} z (orange). Drag \theta:
the product swings around the origin on a circle of fixed radius — its length never changes,
because the rotor has modulus 1 — while the angle
\theta is simply added to the argument. Set
\theta = 90^\circ to see the quarter-turn of multiplying by
i.