Rodrigues' rotation formula

From Wikipedia, the free encyclopedia
Jump to: navigation, search
This article is about the Rodrigues' rotation formula, which is distinct from the related Euler–Rodrigues parameters and The Euler–Rodrigues formula for 3D rotation.

In the theory of three-dimensional rotation, Rodrigues' rotation formula, named after Olinde Rodrigues, is an efficient algorithm for rotating a vector in space, given an axis and angle of rotation. By extension, this can be used to transform all three basis vectors to compute a rotation matrix in SO(3), the group of all rotation matrices, from an axis–angle representation. In other words, the Rodrigues' formula provides an algorithm to compute the exponential map from so(3), the Lie algebra of SO(3), to SO(3) without actually computing the full matrix exponential.


If v is a vector in 3 and k is a unit vector describing an axis of rotation about which v rotates by an angle θ according to the right hand rule, the Rodrigues formula is

\mathbf{v}_\mathrm{rot} = \mathbf{v} \cos\theta + (\mathbf{k} \times \mathbf{v})\sin\theta + \mathbf{k} (\mathbf{k} \cdot \mathbf{v}) (1 - \cos\theta)~.

An alternative statement is to write the axis vector as a cross product a × b of any two nonzero vectors a and b which define the plane of rotation, and the sense of the angle θ is measured away from a and towards b. Letting α denote the angle between these vectors, the two angles θ and α are not necessarily equal, but they are measured in the same sense. Then the unit axis vector can be written

\mathbf{k} = \frac{\mathbf{a}\times\mathbf{b}}{|\mathbf{a}\times\mathbf{b}|} = \frac{\mathbf{a}\times\mathbf{b}}{|\mathbf{a}||\mathbf{b}|\sin\alpha}\,.

This form may be more useful when two vectors defining a plane are involved. An example in physics is the Thomas precession which includes the rotation given by Rodrigues' formula, in terms of two non-collinear boost velocities, and the axis of rotation is perpendicular to their plane.


Rodrigues' rotation formula rotates v by an angle θ around vector k by decomposing it into its components parallel and perpendicular to k, and rotating only the perpendicular component.
Vector geometry of Rodrigues' rotation formula, as well as the decomposition into parallel and perpendicular components.

Let k be a unit vector defining a rotation axis, and let v be any vector to rotate about k by through angle θ anticlockwise.

Using the dot and cross products, the vector v can be decomposed into a components parallel and perpendicular to the axis a,

 \mathbf{v} = \mathbf{v}_\parallel + \mathbf{v}_\perp \,,

where the component parallel to a is

 \mathbf{v}_\parallel = (\mathbf{v} \cdot \mathbf{k}) \mathbf{k}

called the vector projection of v on k, and the component perpendicular to a is

\mathbf{v}_{\perp} = \mathbf{v} - \mathbf{v}_{\parallel} = \mathbf{v} - (\mathbf{k} \cdot \mathbf{v}) \mathbf{k} = - \mathbf{k}\times(\mathbf{k}\times\mathbf{v})

called the vector rejection of v from k.

The vector k×v can be viewed as a copy of v rotated anticlockwise by 90° about k, so their magnitudes are equal but directions are perpendicular. Likewise the vector k×(k×v) a copy of v rotated anticlockwise through 180° about k, so that k×(k×v) and v are equal in magnitude but in opposite directions (i.e. they are negatives of each other, hence the minus sign). Expanding the vector triple product establishes the connection between the parallel and perpendicular components, for reference the formula is a×(b×c) = (a·c)b − (a·b)c given any three vectors a, b, c.

The component parallel to the axis will not change magnitude nor direction under the rotation,

 \mathbf{v}_{\parallel\mathrm{rot}} = \mathbf{v}_\parallel \,,

only the perpendicular component will change direction but retain its magnitude, according to

 |\mathbf{v}_{\perp\mathrm{rot}}| = |\mathbf{v}_\perp| \,,
 \mathbf{v}_{\perp\mathrm{rot}} = \cos\theta \mathbf{v}_\perp + \sin\theta \mathbf{k}\times\mathbf{v}_\perp \,,

and since k and v are parallel, their cross product is zero k×v = 0, so that

 \mathbf{k} \times \mathbf{v}_\perp = \mathbf{k} \times (\mathbf{v} - \mathbf{v}_{\parallel}) = \mathbf{k} \times \mathbf{v} - \mathbf{k} \times \mathbf{v}_{\parallel} = \mathbf{k} \times \mathbf{v}

and it follows

 \mathbf{v}_{\perp\mathrm{rot}} = \cos\theta \mathbf{v}_\perp + \sin\theta \mathbf{k}\times\mathbf{v} \,.

This rotation is correct since the vectors v and k×v have the same length, and k×v is v rotated anticlockwise through 90° about k. An appropriate scaling of v and k×v using the trigonometric functions sine and cosine gives the rotated perpendicular component. The form of the rotated component is similar to the radial vector in 2d plane polar coordinates r, θ in the Cartesian basis

 \mathbf{r} = r\cos\theta \mathbf{e}_x + r\sin\theta \mathbf{e}_y \,,

where ex, ey are unit vectors in their indicated directions.

Now the full rotated vector is

 \mathbf{v}_{\mathrm{rot}} = \mathbf{v}_{\parallel\mathrm{rot}} + \mathbf{v}_{\perp\mathrm{rot}} \,,

so eliminating the parallel component gives

& = \mathbf{v}_\parallel + \cos\theta (\mathbf{v} - \mathbf{v}_\parallel) + \sin\theta \mathbf{k}\times\mathbf{v} \\
& = \cos\theta \mathbf{v} + (1 - \cos\theta) \mathbf{v}_\parallel + \sin\theta \mathbf{k}\times\mathbf{v} \\
& = \cos\theta \mathbf{v} + (1 - \cos\theta ) (\mathbf{k} \cdot \mathbf{v})\mathbf{k} + \sin\theta \mathbf{k}\times\mathbf{v} \\

while the elimination of the perpendicular component gives

& = (\mathbf{v} - \mathbf{v}_\perp) + \cos\theta \mathbf{v}_\perp + \sin\theta \mathbf{k}\times\mathbf{v} \\
& = \mathbf{v} + (\cos\theta -1 ) \mathbf{v}_\perp + \sin\theta \mathbf{k}\times\mathbf{v} \\
& = \mathbf{v} + (\cos\theta-1)(-\mathbf{k}\times(\mathbf{k}\times\mathbf{v})) + \sin\theta \mathbf{k}\times\mathbf{v} \\
& = \mathbf{v} + (1-\cos\theta)\mathbf{k}\times(\mathbf{k}\times\mathbf{v}) + \sin\theta \mathbf{k}\times\mathbf{v} \\

The factors (1 − cosθ) and sinθ can be seen geometrically in the diagram above.

Matrix notation[edit]

Representing v and k×v as column matrices, the cross product can be expressed as a matrix product

\begin{bmatrix} (\mathbf{k}\times\mathbf{v})_x \\ (\mathbf{k}\times\mathbf{v})_y \\ (\mathbf{k}\times\mathbf{v})_z \end{bmatrix} = \begin{bmatrix} k_y v_z - k_z v_y \\ k_z v_x - k_x v_z \\ k_x v_y - k_y v_x \end{bmatrix} = \begin{bmatrix} 0 & -k_z & k_y \\ k_z & 0 & -k_x \\ -k_y & k_x & 0 \end{bmatrix} \begin{bmatrix} v_x \\ v_y \\ v_z \end{bmatrix} \,.

Letting K denote the "cross-product matrix" for the vector k,

0 & -k_3 & k_2 \\
k_3 & 0 & -k_1 \\
-k_2 & k_1 & 0

the matrix equation is symbolically

\mathbf{K}\mathbf{v} = \mathbf{k}\times\mathbf{v}

for any vector v. (In fact, K is the unique matrix with this property). Iterating the cross product on the left is equivalent to multiplying by the cross product matrix on the left, in particular

\mathbf{K}(\mathbf{K}\mathbf{v}) = \mathbf{K}^2\mathbf{v} = \mathbf{k}\times(\mathbf{k}\times\mathbf{v}) \,.

The previous rotation formula in matrix language is therefore

\mathbf{v}_{\mathrm{rot}} = \mathbf{v} + (\sin\theta) \mathbf{K}\mathbf{v} + (1-\cos\theta)\mathbf{K}^2\mathbf{v} \,,

and factorizing the v allows the compact expression

\mathbf{v}_{\mathrm{rot}} &= \mathbf{R}\mathbf{v} 


   \mathbf{R} = \mathbf{I} + (\sin\theta) \mathbf{K} + (1-\cos\theta)\mathbf{K}^2  ~.

is the rotation matrix through an angle θ anticlockwise about the axis k, and I the 3×3 identity matrix. This matrix R is an element of the rotation group SO(3) of 3, and K is an element of the Lie algebra so(3) generating that Lie group (note that K is skew-symmetric, which characterizes so(3)). In terms of the matrix exponential,

 \mathbf{R} = \exp (\theta\mathbf{K})\,.

To see that the last identity holds, one notes that

\mathbf{R}(\theta) \mathbf{R}(\phi)= \mathbf{R} (\theta+\phi), \quad \mathbf{R}(0) = \mathbf{I}~,

characteristic of a one-parameter subgroup, i.e. exponential, and that the formulas match for infinitesimal θ.

For an alternative derivation based on this exponential relationship, see Axis–angle representation#Exponential map from so(3) to SO(3). For the inverse mapping, see Axis–angle representation#Log map from SO(3) to so(3).

See also[edit]


  • Leonhard Euler, "Problema algebraicum ob affectiones prorsus singulares memorabile", Commentatio 407 Indicis Enestoemiani, Novi Comm. Acad. Sci. Petropolitanae 15 (1770), 75–106.
  • Olinde Rodrigues, "Des lois géometriques qui regissent les déplacements d' un systéme solide dans l' espace, et de la variation des coordonnées provenant de ces déplacement considérées indépendent des causes qui peuvent les produire", J. Math. Pures Appl. 5 (1840), 380–440.
  • Don Koks, (2006) Explorations in Mathematical Physics, Springer Science+Business Media,LLC. ISBN 0-387-30943-8. Ch.4, pps 147 et seq. A Roundabout Route to Geometric Algebra'

External links[edit]