Quaternions

The quaternions, devised by Hamilton (1843), generalize complex numbers.
H = {a 1 + b i + c j + d k | a,b,c,d ∈ R},   where i2 = j2 = k2 = ijk = -1,
 
from which it follows that
 
* 1 i j k
1 1 i j k
i i -1 k -j
j j -k -1 i
k k j -i -1
(note, multiplication is non-commutative)
and
(a+bi+cj+dk) (A+Bi+Cj+Dk) = (aA-bB-cC-dD) + (aB+bA+cD-dC)i + (aC-bD+cA+dB)j + (aD+bC-cB+dA)k.
 
Suppose  q = a + bi + cj + dk;  q may also be written (a, b, c, d);  define
conjugate( q ) = q* = a - bi - cj - dk,
norm( q ) = ||q|| = √( q q* ) = √( a2 + b2 + c2 + d2 ),
inverse( q ) = q-1 = q* / ||q||2,
 
e.g.,
 
Note that
(p q)* = q* p*,
||p q|| = ||p|| ||q||,   and
(p q)-1 = q-1 p-1.

Vectors

A 3-D vector, v, can be mapped to, and from, a quaternion with zero real-part:
V2Q(<vx,vy,vz>) = (0,vx,vy,vz).

Rotations

The rotation of a 3-D vector, v, by angle, θ, about the axis specified by the unit vector, n, is
 
rotation(θ, n) =
let q = cos θ/2 + (nx sin θ/2) i + (ny sin θ/2) j + (nz sin θ/2) k
in function( v ) Q2V( q V2Q(v) q-1 )
 
This gives three degrees of freedom when choosing a rotation: θ, and <nx, ny, nz> subject to nx2 + ny2 + nz2 = 1.
 
e.g.,