Degenerate Conic

Algorithms • Modern Fortran Programming • Orbital Mechanics

Jul 21, 2014

Rodrigues' Rotation Formula

Rodrigues' rotation formula can be used to rotate a vector \(\mathbf{v}\) a specified angle \(\theta\) about a specified rotation axis \(\mathbf{k}\):

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

A Fortran routine to accomplish this (taken from the vector module in the Fortran Astrodynamics Toolkit) is:

subroutine rodrigues_rotation(v,k,theta,vrot)

implicit none

real(wp),dimension(3),intent(in) :: v !vector to rotate
real(wp),dimension(3),intent(in) :: k !rotation axis
real(wp),intent(in) :: theta !rotation angle [rad]
real(wp),dimension(3),intent(out) :: vrot !result

real(wp),dimension(3) :: khat
real(wp) :: ct,st

ct = cos(theta)
st = sin(theta)
khat = unit(k)

vrot = v*ct + cross(khat,v)*st + &
khat*dot_product(khat,v)*(one-ct)

end subroutine rodrigues_rotation

This operation can also be converted into a rotation matrix, using the equation:

$$ \mathbf{R} = \mathbf{I} + [\hat{\mathbf{k}}\times]\sin \theta + [\hat{\mathbf{k}}\times] [\hat{\mathbf{k}}\times](1-\cos \theta)$$

Where the matrix \([\hat{\mathbf{k}}\times]\) is the skew-symmetric cross-product matrix and \(\mathbf{v}_\mathrm{rot} = \mathbf{R} \mathbf{v}\).

References

  1. Rotation Formula [Mathworld]
  2. Rodrigues' Rotation Formula [Mathworld]
  3. Do We Really Need Quaternions? [Gamedev.net]
  4. R. T. Savely, B. F. Cockrell, and S. Pines, "Apollo Experience Report -- Onboard Navigational and Alignment Software", NASA TN D-6741, March 1972. See the Appendix by P. F. Flanagan and S. Pines, "An Efficient Method for Cartesian Coordinate Transformations".