docs: def _rodrigues_to_dcm(axis, angle):
      '''
      Generates transformation matrix from unit vector
      and rotation angle. The rotation is applied in the direction
      of the axis which is a unit vector following the right hand rule.
  
      Inputs :
  
          axis : unit vector of the direction of the rotation
          angle : angle of rotation in rads
  
      Returns : 3x3 Rotation matrix
      '''
      ux, uy, uz = axis / np.linalg.norm(axis)
  
      uxx = ux * ux
      uyy = uy * uy
      uzz = uz * uz
      uxy = ux * uy
      uxz = ux * uz
      uyz = uy * uz
  
      sn = _sin(angle)
      cs = _sin(np.pi / 2. - angle)
      cs1 = 1. - cs
  
      R = np.zeros([3, 3])
  
      R[0, 0] = cs + uxx * cs1
      R[0, 1] = uxy * cs1 - uz * sn
      R[0, 2] = uxz * cs1 + uy * sn
  
      R[1, 0] = uxy * cs1 + uz * sn
      R[1, 1] = cs + uyy * cs1
      R[1, 2] = uyz * cs1 - ux * sn
  
      R[2, 0] = uxz * cs1 - uy * sn
      R[2, 1] = uyz * cs1 + ux * sn
      R[2, 2] = cs + uzz * cs1
  
      return R