# Axis–angle representation

__: Parameterization of a rotation into a unit vector and angle__

**Short description**In mathematics, the **axis–angle representation** parameterizes a rotation in a three-dimensional Euclidean space by two quantities: a unit vector **e** indicating the direction (geometry) of an axis of rotation, and an angle of rotation *θ* describing the magnitude and sense (e.g., clockwise) of the rotation about the axis. Only two numbers, not three, are needed to define the direction of a unit vector **e** rooted at the origin because the magnitude of **e** is constrained. For example, the elevation and azimuth angles of **e** suffice to locate it in any particular Cartesian coordinate frame.

By Rodrigues' rotation formula, the angle and axis determine a transformation that rotates three-dimensional vectors. The rotation occurs in the sense prescribed by the right-hand rule.

The rotation axis is sometimes called the **Euler axis**. The axis–angle representation is predicated on Euler's rotation theorem, which dictates that any rotation or sequence of rotations of a rigid body in a three-dimensional space is equivalent to a pure rotation about a single fixed axis.

It is one of many rotation formalisms in three dimensions.

## Rotation vector

The axis–angle representation is equivalent to the more concise **rotation vector**, also called the **Euler vector**. In this case, both the rotation axis and the angle are represented by a vector codirectional with the rotation axis whose length is the rotation angle θ,
[math]\displaystyle{ \boldsymbol{\theta} = \theta \mathbf{e} \,. }[/math]
It is used for the exponential and logarithm maps involving this representation.

Many rotation vectors correspond to the same rotation. In particular, a rotation vector of length *θ* + 2*πM*, for any integer M, encodes exactly the same rotation as a rotation vector of length θ. Thus, there are at least a countable infinity of rotation vectors corresponding to any rotation. Furthermore, all rotations by 2*πM* are the same as no rotation at all, so, for a given integer M, all rotation vectors of length 2*πM*, in all directions, constitute a two-parameter uncountable infinity of rotation vectors encoding the same rotation as the zero vector. These facts must be taken into account when inverting the exponential map, that is, when finding a rotation vector that corresponds to a given rotation matrix. The exponential map is *onto* but not *one-to-one*.

### Example

Say you are standing on the ground and you pick the direction of gravity to be the negative *z* direction. Then if you turn to your left, you will rotate -π/2 radians (or -90°) about the *-z* axis. Viewing the axis-angle representation as an ordered pair, this would be
[math]\displaystyle{ ( \mathrm{axis}, \mathrm{angle} ) = \left( \begin{bmatrix} e_x \\ e_y \\ e_z \end{bmatrix},\theta \right) = \left( \begin{bmatrix} 0 \\ 0 \\ -1 \end{bmatrix},\frac{-\pi}{2}\right). }[/math]

The above example can be represented as a rotation vector with a magnitude of π/2 pointing in the *z* direction,
[math]\displaystyle{ \begin{bmatrix} 0 \\ 0 \\ \frac{\pi}{2} \end{bmatrix}. }[/math]

## Uses

The axis–angle representation is convenient when dealing with rigid-body dynamics. It is useful to both characterize rotations, and also for converting between different representations of rigid body motion, such as homogeneous transformations^{[clarification needed]} and twists.

When a rigid body rotates around a fixed axis, its axis–angle data are a constant rotation axis and the rotation angle continuously dependent on time.

Plugging the three eigenvalues 1 and *e*^{±iθ} and their associated three orthogonal axes in a Cartesian representation into Mercer's theorem is a convenient construction of the Cartesian representation of the Rotation Matrix in three dimensions.

## Rotating a vector

Rodrigues' rotation formula, named after Olinde Rodrigues, is an efficient algorithm for rotating a Euclidean vector, given a rotation axis and an angle of rotation. In other words, Rodrigues' formula provides an algorithm to compute the exponential map from [math]\displaystyle{ \mathfrak{so}(3) }[/math] to SO(3) without computing the full matrix exponential.

If **v** is a vector in **R**^{3} and **e** is a unit vector rooted at the origin describing an axis of rotation about which **v** is rotated by an angle θ, Rodrigues' rotation formula to obtain the rotated vector is
[math]\displaystyle{
\mathbf{v}_\mathrm{rot} = (\cos\theta) \mathbf{v} + (\sin\theta) (\mathbf{e} \times \mathbf{v})
+ (1 - \cos\theta) (\mathbf{e} \cdot \mathbf{v}) \mathbf{e} \,.
}[/math]

For the rotation of a single vector it may be more efficient than converting **e** and θ into a rotation matrix to rotate the vector.

## Relationship to other representations

There are several ways to represent a rotation. It is useful to understand how different representations relate to one another, and how to convert between them. Here the unit vector is denoted **ω** instead of **e**.

### Exponential map from 𝔰𝔬(3) to SO(3)

The exponential map effects a transformation from the axis-angle representation of rotations to rotation matrices, [math]\displaystyle{ \exp\colon \mathfrak{so}(3) \to \mathrm{SO}(3) \,. }[/math]

Essentially, by using a Taylor expansion one derives a closed-form relation between these two representations. Given a unit vector [math]\displaystyle{ \boldsymbol\omega \in \mathfrak{so}(3) = \R^3 }[/math] representing the unit rotation axis, and an angle, *θ* ∈ **R**, an equivalent rotation matrix R is given as follows, where **K** is the cross product matrix of **ω**, that is, **Kv** = * ω* ×

**v**for all vectors

**v**∈

**R**

^{3}, [math]\displaystyle{ R = \exp(\theta \mathbf{K}) = \sum_{k=0}^\infty\frac{(\theta \mathbf{K})^k}{k!} = I + \theta \mathbf{K} + \frac{1}{2!}(\theta \mathbf{K})^2 + \frac{1}{3!}(\theta \mathbf{K})^3 + \cdots }[/math]

Because **K** is skew-symmetric, and the sum of the squares of its above-diagonal entries is 1, the characteristic polynomial *P*(*t*) of **K** is *P*(*t*) = det(**K** − *t***I**) = −(*t*^{3} + *t*). Since, by the Cayley–Hamilton theorem, *P*(**K**) = 0, this implies that
[math]\displaystyle{ \mathbf{K}^3 = -\mathbf{K} \,. }[/math]
As a result, **K**^{4} = –**K**^{2}, **K**^{5} = **K**, **K**^{6} = **K**^{2}, **K**^{7} = –**K**.

This cyclic pattern continues indefinitely, and so all higher powers of **K** can be expressed in terms of **K** and **K**^{2}. Thus, from the above equation, it follows that
[math]\displaystyle{ R = I + \left(\theta - \frac{\theta^3}{3!} + \frac{\theta^5}{5!} - \cdots\right) \mathbf{K} + \left(\frac{\theta^2}{2!} - \frac{\theta^4}{4!} + \frac{\theta^6}{6!} - \cdots\right) \mathbf{K}^2 \,, }[/math]
that is,
[math]\displaystyle{ R = I + (\sin\theta) \mathbf{K} + (1-\cos\theta) \mathbf{K}^2\, , }[/math]

by the Taylor series formula for trigonometric functions.

This is a Lie-algebraic derivation, in contrast to the geometric one in the article Rodrigues' rotation formula.^{[1]}

Due to the existence of the above-mentioned exponential map, the unit vector **ω** representing the rotation axis, and the angle *θ* are sometimes called the *exponential coordinates* of the rotation matrix R.

### Log map from SO(3) to 𝔰𝔬(3)

Let **K** continue to denote the 3 × 3 matrix that effects the cross product with the rotation axis **ω**: **K**(**v**) = * ω* ×

**v**for all vectors

**v**in what follows.

To retrieve the axis–angle representation of a rotation matrix, calculate the angle of rotation from the trace of the rotation matrix: [math]\displaystyle{ \theta = \arccos\left( \frac{\operatorname{Tr}(R) - 1}{2} \right) }[/math] and then use that to find the normalized axis, [math]\displaystyle{ \boldsymbol{\omega} = \frac{1}{2 \sin \theta} \begin{bmatrix} R_{32}-R_{23} \\ R_{13}-R_{31} \\ R_{21}-R_{12} \end{bmatrix} ~, }[/math]

where [math]\displaystyle{ R_{ij} }[/math] is the component of the rotation matrix, [math]\displaystyle{ R }[/math], in the [math]\displaystyle{ i }[/math]-th row and [math]\displaystyle{ j }[/math]-th column.

The axis-angle representation is not unique since a rotation of [math]\displaystyle{ -\theta }[/math] about [math]\displaystyle{ -\boldsymbol{\omega} }[/math] is the same as a rotation of [math]\displaystyle{ \theta }[/math] about [math]\displaystyle{ \boldsymbol{\omega} }[/math].

The above calculation of axis vector [math]\displaystyle{ \omega }[/math] **does not work** if R is symmetric. For the general case the [math]\displaystyle{ \omega }[/math] may be found using null space of R-I, see rotation matrix#Determining the axis.

The matrix logarithm of the rotation matrix R is [math]\displaystyle{ \log R = \begin{cases} 0 & \text{if } \theta = 0 \\ \dfrac{\theta}{2 \sin \theta } \left(R - R^\mathsf{T}\right) & \text{if } \theta \ne 0 \text{ and } \theta \in (-\pi, \pi) \end{cases} }[/math]

An exception occurs when *R* has eigenvalues equal to −1. In this case, the log is not unique. However, even in the case where *θ* = *π* the Frobenius norm of the log is
[math]\displaystyle{ \| \log(R) \|_\mathrm{F} = \sqrt{2} |\theta |\,. }[/math]
Given rotation matrices A and B,
[math]\displaystyle{ d_g(A,B) := \left\| \log\left(A^\mathsf{T} B\right)\right\|_\mathrm{F} }[/math]
is the geodesic distance on the 3D manifold of rotation matrices.

For small rotations, the above computation of θ may be numerically imprecise as the derivative of arccos goes to infinity as *θ* → 0. In that case, the off-axis terms will actually provide better information about θ since, for small angles, *R* ≈ *I* + *θ***K**. (This is because these are the first two terms of the Taylor series for exp(*θ***K**).)

This formulation also has numerical problems at *θ* = *π*, where the off-axis terms do not give information about the rotation axis (which is still defined up to a sign ambiguity). In that case, we must reconsider the above formula.

[math]\displaystyle{ R = I + \mathbf{K} \sin\theta + \mathbf{K}^2 (1-\cos\theta) }[/math]
At *θ* = *π*, we have
[math]\displaystyle{ R = I + 2 \mathbf{K}^2 = I + 2(\boldsymbol{\omega} \otimes \boldsymbol{\omega} - I) = 2 \boldsymbol{\omega} \otimes \boldsymbol{\omega} - I }[/math]
and so let
[math]\displaystyle{ B := \boldsymbol{\omega} \otimes \boldsymbol{\omega} = \frac{1}{2}(R+I) \,, }[/math]
so the diagonal terms of *B* are the squares of the elements of **ω** and the signs (up to sign ambiguity) can be determined from the signs of the off-axis terms of B.

### Unit quaternions

the following expression transforms axis–angle coordinates to versors (unit quaternions): [math]\displaystyle{ Q = \left(\cos\tfrac{\theta}{2}, \boldsymbol{\omega} \sin\tfrac{\theta}{2}\right) }[/math]

Given a versor *q* = *s* + **x** represented with its scalar s and vector **x**, the axis–angle coordinates can be extracted using the following:
[math]\displaystyle{ \begin{align}
\theta &= 2\arccos s \\[8px]
\boldsymbol{\omega} &=
\begin{cases}
\dfrac{\mathbf{x}}{ \sin \tfrac{\theta}{2} }, & \text{if } \theta \neq 0 \\
0, & \text{otherwise}.
\end{cases}
\end{align} }[/math]

A more numerically stable expression of the rotation angle uses the atan2 function:
[math]\displaystyle{ \theta = 2 \operatorname{atan2}(|\mathbf{x}|,s)\,, }[/math]
where |**x**| is the Euclidean norm of the 3-vector **x**.

## See also

- Homogeneous coordinates
- Pseudovector
- Rotations without a matrix
- Screw theory, a representation of rigid-body motions and velocities using the concepts of twists, screws, and wrenches

## References

- ↑ This holds for the triplet representation of the rotation group, i.e., spin 1. For higher dimensional representations/spins, see Curtright, T. L.; Fairlie, D. B.; Zachos, C. K. (2014). "A compact formula for rotations as spin matrix polynomials".
*SIGMA***10**: 084. doi:10.3842/SIGMA.2014.084. Bibcode: 2014SIGMA..10..084C.

Original source: https://en.wikipedia.org/wiki/Axis–angle representation.
Read more |