Exponential coordinates provide the inverse of Rodrigues’ Formula: given a rotation matrix R∈SO(3), extract the axis ω and angle θ such that R=eω^θ. This is the logarithmic map from the Lie group SO(3) back to its Lie algebra so(3).
The forward and inverse maps form a pair:
exp:so(3)→SO(3),ω^θ↦eω^θ log:SO(3)→so(3),R↦ω^θ
Definition: The vector ωθ∈R3, where ∥ω∥=1 and eω^θ=R, is called the exponential coordinate of R.
The existence of this decomposition for every R is guaranteed by Euler’s Rotation Theorem: every rotation in 3D can be represented as a rotation by some angle θ∈[0,π] about a fixed unit axis ω∈R3.
The key relationship linking R to θ is:
tr(R)=1+2cosθ
Combined with the antisymmetric part R−RT=2sinθω^, this gives a constructive algorithm for recovering (ω,θ) in all cases.
Intuition
The exponential map connects two spaces that both have 3 degrees of freedom but very different geometry:
so(3) — the Lie algebra
SO(3) — the Lie group
3×3 skew-symmetric matrices
3×3 orthogonal matrices with det=1
A flat vector space (≅R3)
A curved 3D manifold
Additive (you can add skew matrices)
Multiplicative (you compose rotations)
Tangent space at the identity of SO(3)
The rotation group itself
The exponential map “wraps” the flat tangent space around the curved group, just like eiθ wraps the real line around the unit circle. The log map “unwraps” it back.
SO(3) can be visualized as a solid ball of radius π: each point at distance θ from the center in direction ω represents the rotation eω^θ. The center is the identity, and antipodal points on the surface (θ=π) are identified because (ω,π)∼(−ω,π).
Properties
(Surjectivity / Euler’s Theorem) The exponential map is surjective: every R∈SO(3) has at least one preimage. The proof is constructive — the three cases below give an explicit algorithm.
(Non-injectivity) The map is not injective globally: (ω,θ) and (ω,θ+2π) give the same rotation. Even restricting to θ∈[0,π] and ∥ω∥=1, the map is only nearly bijective — the remaining ambiguity is at θ=π, where (ω,π) and (−ω,π) coincide.
The Three Cases of the Log Map
Since tr(R)=1+2cosθ, the trace determines θ, and there are three regimes:
(Case 1: tr(R)=3) θ=0, R=I. No rotation occurred. ω is undefined (any axis suffices for a zero-angle rotation).
(Case 2: tr(R)∈(−1,3)) θ∈(0,π) — the generic case. Solve for both θ and ω:
θ=cos−1(2tr(R)−1) ω1=2sinθr32−r23,ω2=2sinθr13−r31,ω3=2sinθr21−r12
This works because the antisymmetric part of Rodrigues’ formula isolates ω^: the matrix R−RT=2sinθ⋅ω^.
(Case 3: tr(R)=−1) θ=π. Since sinθ=0, the Case 2 formulas divide by zero. Instead, Rodrigues’ formula simplifies to R=I+2ω^2, so R+I=2ωωT. This is rank-1: every nonzero column points in the ±ω direction — normalize any one to find ω (up to sign).
(Summary)
tr(R)
θ
ω
Notes
3
0
undefined
R=I
(−1,3)
cos−1(2tr(R)−1)
2sinθ1(R−RT)∨
Generic, unique
−1
π
normalize nonzero col of R+I
Sign ambiguity
(Trace Derivation) From the explicit Rodrigues expansion with ω=[ω1,ω2,ω3]T, the diagonal entries of R are ωi2(1−cosθ)+cosθ. Summing and using ω12+ω22+ω32=1:
tr(R)=(1−cosθ)+3cosθ=1+2cosθ
Examples
Identity Matrix
R=I, tr(R)=3. Case 1: θ=0, ω undefined. Confirmed by Rodrigues’: eω^⋅0=I for any ω.
90° about z
Solution R=010−100001,tr(R)=0+0+1=1
Case 2: θ=cos−1(21−1)=cos−1(0)=2π.
ω1=20−0=0,ω2=20−0=0,ω3=21−(−1)=1
So ω=[0,0,1]T and θ=π/2. Correct: this is a 90° rotation about z.
180° about x
Solution R=1000−1000−1,tr(R)=1−1−1=−1
Case 3: θ=π. Compute R+I=200000000.
First column is [2,0,0]T. Normalize: ω=[1,0,0]T. This is a 180° rotation about x.
Implementation
import numpy as npdef log_map(R): """R in SO(3) -> (omega, theta) exponential coordinates""" tr = np.trace(R) if np.isclose(tr, 3.0): # Case 1 return np.zeros(3), 0.0 elif np.isclose(tr, -1.0): # Case 3 theta = np.pi RpI = R + np.eye(3) col = RpI[:, np.argmax(np.linalg.norm(RpI, axis=0))] omega = col / np.linalg.norm(col) return omega, theta else: # Case 2 theta = np.arccos((tr - 1) / 2) omega_hat = (R - R.T) / (2 * np.sin(theta)) omega = np.array([omega_hat[2,1], omega_hat[0,2], omega_hat[1,0]]) return omega, theta