use geometry_cs::Spheroid;
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct DirectResult {
pub lon2: f64,
pub lat2: f64,
pub reverse_azimuth: f64,
pub reduced_length: f64,
pub geodesic_scale: f64,
}
impl Default for DirectResult {
fn default() -> Self {
Self {
lon2: 0.0,
lat2: 0.0,
reverse_azimuth: 0.0,
reduced_length: 0.0,
geodesic_scale: 1.0,
}
}
}
impl DirectResult {
#[cfg(feature = "std")]
pub(crate) fn solved(
longitude1: f64,
latitude1: f64,
azimuth1: f64,
spheroid: Spheroid,
lon2: f64,
lat2: f64,
reverse_azimuth: f64,
) -> Self {
let quantities = super::differential::differential_quantities(
longitude1,
latitude1,
lon2,
lat2,
azimuth1,
reverse_azimuth,
spheroid,
);
Self {
lon2,
lat2,
reverse_azimuth,
reduced_length: quantities.reduced_length,
geodesic_scale: quantities.geodesic_scale,
}
}
}
#[cfg(feature = "std")]
pub(crate) fn normalize_longitude(mut longitude: f64) -> f64 {
let pi = core::f64::consts::PI;
let two_pi = 2.0 * pi;
while longitude > pi {
longitude -= two_pi;
}
while longitude < -pi {
longitude += two_pi;
}
longitude
}