use nalgebra::Matrix3;
use nalgebra::Vector3;
use super::series;
use super::so3::hat;
pub fn left_jacobian_so3(phi: &Vector3<f64>) -> Matrix3<f64> {
let theta = phi.norm();
let hat_phi = hat(phi);
Matrix3::identity()
+ hat_phi * series::one_minus_cos_over_theta_sq(theta)
+ hat_phi * hat_phi * series::theta_minus_sin_over_theta_cubed(theta)
}
pub fn inverse_left_jacobian_so3(phi: &Vector3<f64>) -> Matrix3<f64> {
let theta = phi.norm();
let hat_phi = hat(phi);
Matrix3::identity() - hat_phi * 0.5
+ hat_phi * hat_phi * series::inverse_left_jacobian_coef(theta)
}