Are quaternions good or evil?

W.S. Harwin


race video


\( \def\RR{{\bf R}} \def\bold#1{{\bf my #1}} \renewcommand{\vec}[1]{\underline{{#1}}} \)

Good or evil?

The story of Broom bridge, Dublin

Here as he walked by on the 16th of October 1843 Sir William Rowan Hamilton in a flash of genius discovered the fundamental formula for quaternion multiplication $i^2 = j^2 = k^2 = ijk = -1$ and cut it on a stone of this bridge.

Broom bridge, Dublin

Coordinate transforms

Vector rotations

If we have a vector $v$ we can introduce an operator $L_{\theta,\vec{u}}(v)$ rotates $v$ around axis defined by a unit vector $\vec{u}$ by an angle $\theta$.

This operator can be interpreted in two ways.

Identical operations to rotation of a vector by $\theta$ about a vector around the $z$ axis (left) and to rotate the reference coordinate frame by $-\theta$ around the $z$ axis (right)

A rotational transform can be considered as

\[ {}^b\vec{v}=L_{\theta,\vec{u}}({}^r\vec{v}) \]

a vector rotation of $\theta$ about $\vec{u}$, where ${}^b\vec{v}$ is the blue vector and ${}^r\vec{v}$ is the red vector (left).

Or it can be considered as

\[ {}^n\vec{v}={}^n_sL_{-\theta,\vec{u}}({}^s\vec{v}) \]

that provides the coordinates of the vector in the new frame of reference rotated by $-\theta$ about the $z$ axis (right).

If $L_{-\theta,\vec{u}}$ has an inverse $L^{-1}_{-\theta,\vec{u}}=L_{\theta,\vec{u}}$ then

\[ {}^s\vec{v}={}^n_sL^{-1}_{-\theta,\vec{u}}({}^n\vec{v})={}^s_nL_{\theta,\vec{u}}({}^n\vec{v}) \]

Skew matrix arithmetic

If we have a vector

\[ \vec{u} = \begin{bmatrix} \omega _{x} & \omega _{y} & \omega _{z} \end{bmatrix}^T \]

We can use a skew operator to form a skew matrix of the form

\[ S(\vec{u})=\tilde{S}=S_u= \begin{bmatrix} 0 & -\omega _{z} & \omega _{y}\\ \omega _{z} & 0 & -\omega _{x}\\ -\omega _{y} & \omega _{x} & 0 \end{bmatrix} \]

$\tilde{S}$ or $S_u$ has the property that implements the cross product, i.e. $\vec{u}\times\vec{v}=\tilde{S}_u\vec{v}$ and $\vec{v}\times\vec{u}=-\tilde{S}_u\vec{v}=\tilde{S}_u^T\vec{v}$

It also has the following properties

\begin{align} S^T=-S\\ S^2-\vec{u}\vec{u}^T+I\vec{u}^T\vec{u}=0\\ S^3+S=(\vec{u}^T\vec{u}-1)S^T=(1-\vec{u}^T\vec{u})S \end{align}

If $\vec{u}$ is a unit vector then these properties simplify to

\begin{align} S^2-\vec{u}\vec{u}^T+I=0\label{eq:S4}\\ S^3=-S \label{eq:S5} \end{align}

Another property if $\vec{u}$ is a unit vector (from equation 4 and 5) of a unit vector skew matrix is that $S\vec{u}\vec{u}^T=0$

Further properties are

Rotation matrices and the exponential form

A property of $S_u$ is that the exponential will generate an orthogonal rotational matrix, usually expressed as

\begin{equation} R=e^{S(\vec{u})\theta}=e^{S_{\vec{u}}\theta} \label{eq:expform} \end{equation}

where $\vec{u}$ is a unit vector and $\theta$ represents some rotation about $\vec{u}$.

This can be demonstrated by expanding the exponential as

\[ R=I + S\theta + S^2\frac{\theta^2}{2!} + S^3\frac{\theta^3}{3!} + S^4\frac{\theta^4}{4!} +... \]\[ R=I + S\theta + S^2\frac{\theta^2}{2!} - S\frac{\theta^3}{3!} - S^2\frac{\theta^4}{4!} +... \]\[ R=I + \left(S\theta - S\frac{\theta^3}{3!} +...\right) + \left(S^2\frac{\theta^2}{2!} - S^2\frac{\theta^4}{4!} +...\right) \]\[ R=I + \sin\theta S + (1-\cos\theta)S^2 \]

This is sometimes called Euler's formula, possibly because it is an extension of $e^{i\theta}=\cos\theta+i\sin\theta$ but it is more properly called Rodrigues rotation formula.

Rodrigues formula was originally expressed in a vector notation, but using skew matrices is a more elegant approach.

Some variants of Rodrigues rotation formula

Using the properties of skew matrices above the following variants of Rodrigues rotation formula are possible.

\begin{align} R = e^{S_u\theta} &= I + \sin\theta S_u + (1-\cos\theta)S_u^2\\ &= I + \sin\theta S_u + S_u^2 -\cos\theta S_u^2\\ &= I + \sin\theta S_u+(1-\cos\theta)(\vec{u}\,\vec{u}^T - I)\\ &= I\cos\theta + \sin\theta S_u + (1-\cos\theta)\vec{u}\,\vec{u}^T\\ &= \sin\theta S_u + \vec{u}\,\vec{u}^T + (I-\vec{u}\,\vec{u}^T)\cos\theta \end{align}

and evidently

\[ R^T= e^{-S_u\theta}= e^{S^T_u\theta} =I-\sin\theta S_u + (1-\cos\theta) S_u^2 \]

Differentiation of a rotation matrix

if $S_u$ is based on a unit vector and constant and $R=e^{S_u\theta}$ (equation 6) then

\[ \frac{dR}{d\theta}=S_u e^{S_u\theta} = S_u R \]


\[ \dot{R}=\frac{dR}{dt}=\frac{dR}{d\theta}\frac{d\theta}{dt}=S_u \left(R\frac{d\theta}{dt}\right)=\omega S_u R \]

where $\omega=\frac{d\theta}{dt}$

Often the Skew matrix is considered as representing an angular velocity with components in a particular coordinate frame, that is \[\Omega=S_u \omega\] represents rotation about a unit vector $\vec{u}$ at an angular speed of $\omega$.

Quaternions vs rotation matrices

Quaternions (when used to calculate rotations) are a 4-tuple, i.e. a set of 4 Real numbers.

Advantages for quaternions

Advantages for matrices

Advantages angle axis

Belt trick from Christoph Schiller.
Belt trick for the exchange of two fermions.



Notation abuse

Quaternion basics

Quaternion conjugate

\[ q^* = q_0 -\vec{q_v}= (q_0, -\vec{q_v}) \]

Quaternion norm

\[ \|q\| = q_0^2+ \vec{q_v}\cdot \vec{q_v} \]

Quaternion multiplication


\[ r = (r_0,\vec{r_v}) \]\[ q = (q_0, \vec{q_v}) \]

we get

\begin{align*} q \otimes r = & (q_0 + \vec{q}_v)( r_0 + \vec{r}_v) = (q_0,\vec{q}_v)\otimes ( r_0, \vec{r}_v) \\ = &(q_0r_0 - \vec{q}_v{\bf.}\vec{r}_v), (q_0\vec{r}_v + r_0\vec{q}_v + \vec{q}_v\times\vec{r}_v) \end{align*}

where $\times$ is the vector cross product.

Quaternion inverse

\[ q^{-1} = \frac{q_0 -\vec{q}_v}{q_0^2+ \vec{q}_v\cdot\vec{q}_v} \]

which can be expressed as the conjugate over the squared norm.

unit quaternions

Any quaternion with a norm of 1. A useful unit quaternion is

\[ q=\left(\cos\left(\frac\theta{2}\right),\vec{u}\sin\left(\frac\theta{2}\right)\right) \]

where $u$ is a unit vector.

Quaternion rotation

Rotation of a quaternion representing a vector $v$ about a unit vector $\vec{u}$ through an angle $(\theta)$ is given by $$ q' = rqr^{-1}$$ where

\[ r=\cos(\theta/2) + \sin(\theta/2) \vec{u} \]

and the quaternion $q=(0,\vec{v})$ is a vector subset of the quaternion group.

Expanding the generalised rotation in vector notation (and using the conjugate rather than the inverse to saved work)

\[ rqr^* = q_0(r_0^2+\vec{r_v}{\bf .}\vec{r_v}) \,,\, (r_0^2 - \vec{r_v}{\bf .}\vec{r_v})\vec{q_u}+2r_0(\vec{r_v}\times\vec{q_u}) +2(\vec{q_u}{\bf .}\vec{r_v})\vec{r_v} \]

if $q_0=0$

\[ rqr^* = (r_0^2 - \vec{r_v}{\bf .}\vec{r_v})\vec{q_u}+2r_0(\vec{r_v}\times\vec{q_u}) +2(\vec{q_u}{\bf .}\vec{r_v})\vec{r_v} \]

which is a vector

This can be rewritten (expanding the half angles to full angles) as

\begin{equation} rqr^* = \cos(\theta)\vec{q_u} + \sin(\theta)(\vec{r_v}\times\vec{q_u})+(1-\cos(\theta))(\vec{q_u}{\bf .}\vec{r_v})\vec{r_v} \label{eq:rod99} \end{equation}

rewriting the quaternion elements

\[ \displaystyle L_{\theta,\vec{k}}(\vec{v}) = \cos(\theta)\vec{v} + \sin(\theta)(\vec{k}\times\vec{v})+(1-\cos(\theta))(\vec{v}{\bf .}\vec{k})\vec{k} \]

The equation 12 is the vector form of Rodrigues rotation formula

Rodrigues again


Quaternions as a matrix

$q\otimes r$ can be done as matrix product $Q_L r$ if $Q_L$ is a 'left product' matrix and $r$ is considered as a 4 element vector.

The conjugate is simply the matrix transpose so $q^*\,r$ can be done as $Q_L^T r$

\[ Lmatrix= Q_L= \begin{bmatrix} q_{0} & -q_{1} & -q_{2} & -q_{3}\\ q_{1} & q_{0} & -q_{3} & q_{2}\\ q_{2} & q_{3} & q_{0} & -q_{1}\\ q_{3} & -q_{2} & q_{1} & q_{0} \end{bmatrix} = \begin{bmatrix} q_0 & -\vec{q}_v^T\\ \vec{q}_v & S_{\vec{q}}+I q_0 \end{bmatrix} \]

A `right product' matrix is needed and $r\otimes q$ is then done as the calculation $r^T Q_R$ where

\[ Rmatrix= Q_R= \begin{bmatrix} q_0 & \vec{q}_v^T\\ -\vec{q}_v & S_{\vec{q}}+I q_0 \end{bmatrix} \]

Note that $Q^T_L\ne Q_R$

It is then possible to calculate

\[ r'=qrq*=Q_L(r^T Q_R^T)^T \]

The resulting 4x4 matrix $Q_L Q_R$ embeds the 3x3 rotation matrix in the lower right corner.

Quaternion differentiation

Consider a quaternion changing over an incremental period of time from $q(t)$ to $q(t+\Delta t)$. This incremental change is given by

\[ q(t+\Delta t) =q(\Delta t)\,\, q(t) \]

If $q(t+\Delta t)$ and $q(t)$ are unit quaternions then $q(\Delta t)$ must be a unit quaternion. Assume that in the incremental time $\Delta t$ the angle of $q(\Delta t)$ changes by some $\Delta\theta$

so define the quaternion differential to be

\[ \frac{d q}{d t}=\dot{q}=\lim_{\Delta t\to 0}\frac{q(t+\Delta t)-q(t)}{\Delta t}\\ =\lim_{\Delta t \to 0}\frac{q(\Delta t)\,\,q(t)-q(t)}{\Delta t}\\ =\lim_{\Delta t \to 0}\frac{(q(\Delta t)\,-\,1)q(t)}{\Delta t} \]

If we assume $q(\Delta t)$ is of the form

\[ q(\Delta t)=\left(\cos\left(\Delta\theta/2\right)+\vec{u}\sin\left(\Delta\theta/2\right)\right) \]

Then as $\Delta t$ approaches 0, $q(\Delta\theta)$ approaches $(1+\vec{u}\,\Delta\theta/2)$ and hence

\[ \frac{d q}{d t} =\lim_{\Delta \to 0}\frac{(1+\vec{u}\Delta\theta/2\,-\,1)q(t)}{\Delta t} =\lim_{\Delta \to 0}\frac{\vec{u}\Delta\theta/2}{\Delta t}q(t) =\frac12\vec{u}\frac{d\theta}{d t}q(t) \]

If $q$ defines a vector or coordinate frame then the differential can be considered as an angular velocity around unit $\vec{u}$ at a speed of $\frac{d\theta}{d t}$ so

\[ \frac{d q}{d t} =\frac12 \vec{\omega} q(t) \]

and $\vec\omega$ is the angular velocity vector.

A more complete explanation given in [Jia2020]

So good or evil?

Vote now.





Shuster, M. 1993, "A Survey of Attitude Representations", Journal of the Astronautical Sciences, 41(4):349-517 See equations and discussion in the paper above, p463-464. (

Yan-Bin Jia, Problem Solving Techniques for Applied Computer Science, Quaternions Lecture course Sep 3, 2020 ( (

Quaternions, Interpolation and Animation Erik B. Dam Martin Koch Martin Lillholm (

Lee, Byung-Uk (1991). Unit Quaternion Representation of Rotation - Appendix A, Differentiation with Quaternions - Appendix B (PDF) (Ph. D. Thesis). Stanford University (


Plenty of details at Wolfram Mathworld, Wikipedia, Numberphile (although surprisingly quiet about differentiation)


Possibly a good explanation! ( google:Differentiation with respect to the rotation quaternion



Differential of Rodrigues form

\[ dR=(\cos\theta S_u +\sin\theta S_u^2)d\theta \]