use crate::libs::cs::model::Cs;
use crate::libs::cs::utils::SignStrExt;
impl Cs<2> {
#[rustfmt::skip] #[inline] pub fn rxy(&self) -> f64 { self.0[0].hypot(self.0[1]) }
#[rustfmt::skip] #[inline] pub fn arctan_y_x(&self) -> f64 { self.0[1].atan2(self.0[0]) }
#[rustfmt::skip] #[inline] pub fn arctan_x_y(&self) -> f64 { self.0[0].atan2(self.0[1]) }
#[rustfmt::skip] #[inline] pub fn to_rf_from_xy(&self) -> Cs<2> { Cs([self.rxy(), self.arctan_y_x()]) }
pub fn to_ecef_from_rad_sn_we(&self, r: f64) -> Cs<3> {
let (sin_lat, cos_lat) = self.0[0].sin_cos();
let (sin_lon, cos_lon) = self.0[1].sin_cos();
Cs([
r * cos_lat * cos_lon, r * cos_lat * sin_lon, r * sin_lat ])
}
#[rustfmt::skip] #[inline]
pub fn q(&self) -> u8 {
match (self.0[0] >= 0.0, self.0[1] >= 0.0) {
(true, true) => 1, (false, true) => 2, (false, false) => 3, (true, false) => 4,
}
}
#[rustfmt::skip] #[inline]
pub fn q_sign(&self) -> [&'static str; 2] {
[self.0[0].sign_str(), self.0[1].sign_str()]
}
#[rustfmt::skip] #[inline] pub fn rxy_sq(&self) -> f64 { self.0[0] * self.0[0] + self.0[1] * self.0[1] }
#[rustfmt::skip] #[inline]
pub fn cross(&self, other: &Cs<2>) -> f64 { self.0[0] * other.0[1] - self.0[1] * other.0[0] }
#[rustfmt::skip] #[inline]
pub fn perp(&self) -> Cs<2> { Cs([-self.0[1], self.0[0]]) }
}