Rodrigues' rotation formula

From Wikipedia, the free encyclopedia
Jump to: navigation, search
This article is about the Rodrigues' rotation formula, which is distinct from 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 from an axis–angle representation. In other words, the Rodrigues formula provides an algorithm to compute the exponential map from so(3) to SO(3) without computing the full matrix exponent.

If v is a vector in \mathbb{R}^3 and k is a unit vector describing an axis of rotation about which we want to rotate v 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).


Rodrigues' rotation formula rotates v by an angle θ around an axis z by decomposing it into its components parallel and perpendicular to z, and rotating only the perpendicular component.

Given a rotation axis represented by a unit vector k and a vector v that we wish to rotate about k by the angle θ,

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

is the component of v parallel to k, also called the vector projection of v on k, and

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

is the component of v orthogonal to k, also called the vector rejection of v from k.


\mathbf{w} = \mathbf{k}\times\mathbf{v}.

The vectors v and w have the same length, but w is perpendicular to both k and v. This can be shown via

\mathbf{w} = \mathbf{k} \times \mathbf{v} = \mathbf{k} \times (\mathbf{v}_{\parallel} + \mathbf{v}_{\perp}) = \mathbf{k} \times \mathbf{v}_{\parallel} + \mathbf{k} \times \mathbf{v}_{\perp} = \mathbf{k} \times \mathbf{v}_{\perp} ,

since k has unit length, is parallel to v and is perpendicular to v.

The vector w can be viewed as a copy of v rotated by 90° about k. Using trigonometry, we can now rotate v by θ around k to obtain v⊥ rot. Thus,

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

v⊥ rot is also the rejection from k of the vector vrot, defined as the desired vector, v rotated about k by the angle θ. Since v is not affected by a rotation about k, the projection of vrot on k coincides with v. Thus,

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

as required.

Matrix notation[edit]

By representing v and k as column matrices, and defining a matrix [\mathbf{k}]_\times as the "cross-product matrix" for \mathbf{k}, i.e.,

 [\mathbf{k}]_\times \mathbf{v} = \mathbf{k}\times\mathbf{v} = 
0 & -k_3 & k_2 \\
k_3 & 0 & -k_1 \\
-k_2 & k_1 & 0

Rodrigues' formula can be written in matrix notation:

    \mathbf{v}_{\mathrm{rot}} &= \mathbf{v} \cos\theta + ([\mathbf{k}]_\times \mathbf{v}) \sin\theta 
                                  + \mathbf{k} (\mathbf{k}^\mathsf{T} \mathbf{v}) (1 - \cos\theta) \\
                              &= \mathbf{v} \cos\theta + [\mathbf{k}]_\times \mathbf{v} \sin\theta 
                                  + \mathbf{k} \mathbf{k}^\mathsf{T} \mathbf{v} (1 - \cos\theta).

Using the triple product expansion it can be written as:

                           +(\mathbf{k}(\mathbf{k}^\mathsf{T} \mathbf{v})-\mathbf{v}(\mathbf{k}\cdot\mathbf{k}))
                             (1-\cos\theta)+\mathbf{v}(\mathbf{k}^\mathsf{T} \mathbf{k}) \\

since \mathbf{k}^\mathsf{T} \mathbf{k}=1 for a normalized vector.

Conversion to rotation matrix[edit]

The equation can also be written as

  \mathbf{v}_{\mathrm{rot}} &= (I\cos\theta) \mathbf{v} + ([\mathbf{k}]_\times \sin\theta) \mathbf{v} 
    + (1 - \cos\theta)  \mathbf{k}  \mathbf{k}^\mathsf{T} \mathbf{v} \\ &=
  \left( I \cos\theta + [\mathbf{k}]_\times \sin\theta 
    + (1 - \cos\theta) \mathbf{k} \mathbf{k}^\mathsf{T} \right) \mathbf{v}\\
  &= R\mathbf{v} 

where I is the 3×3 identity matrix. Thus we have a formula for the rotation matrix R corresponding to an axis angle representation [k θ]:

  R = I \cos\theta + [\mathbf{k}]_\times \sin\theta + (1 - \cos\theta) \mathbf{k} \mathbf{k}^\mathsf{T}.

Noting that, using the outer product \mathbf{k} \mathbf{k}^\mathsf{T} = [\mathbf{k}]_\times^2 + I, we have

  R = I + [\mathbf{k}]_\times \sin\theta + (1 - \cos\theta) [\mathbf{k}]_\times^2

or, equivalently,

R = I + \sin\theta [\mathbf{k}]_\times + (1 - \cos\theta) (\mathbf{k} \mathbf{k}^\mathsf{T}-I).

For the inverse mapping, see Log map from SO(3) to so(3).

See also[edit]


  • 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]