use crate::libs::cs::{
abstracts::AbstractProjectionsCs2,
model::{Cs, *},
types::Cs2,
};
impl From<CoordsXy> for Cs2 {
#[inline]
fn from(c: CoordsXy) -> Self { Cs([c.x, c.y]) }
}
impl From<CoordsPolar> for Cs2 {
#[inline]
fn from(c: CoordsPolar) -> Self {
let (sin_f, cos_f) = c.f_y_x.sin_cos();
Cs([c.r_d2 * cos_f, c.r_d2 * sin_f])
}
}
impl AbstractProjectionsCs2 for Cs<2> {
#[rustfmt::skip] #[inline]
fn new_from_rf(r: f64, phi_rad: f64) -> Self {
let (sin_phi, cos_phi) = phi_rad.sin_cos();
Cs([r * cos_phi, r * sin_phi])
}
#[rustfmt::skip] #[inline] fn new_as_xy(&self) -> Cs<3> { Cs([self.0[0], self.0[1], 0.0]) }
#[rustfmt::skip] #[inline] fn new_as_xz(&self) -> Cs<3> { Cs([self.0[0], 0.0, self.0[1]]) }
#[rustfmt::skip] #[inline] fn new_as_yz(&self) -> Cs<3> { Cs([0.0, self.0[0], self.0[1]]) }
#[rustfmt::skip] #[inline]
fn new_as_xy_from_rf(&self) -> Cs<2> {
let (sin_phi, cos_phi) = self.0[1].sin_cos();
Cs([self.0[0] * cos_phi, self.0[0] * sin_phi])
}
#[rustfmt::skip] #[inline]
fn new_as_xyz_from_rf_with_z(&self, z: f64) -> Cs<3> {
let (sin_phi, cos_phi) = self.0[1].sin_cos();
Cs([self.0[0] * cos_phi, self.0[0] * sin_phi, z])
}
#[rustfmt::skip] #[inline]
fn new_as_xyz_from_rf_with_y(&self, y: f64) -> Cs<3> {
let (sin_phi, cos_phi) = self.0[1].sin_cos();
Cs([self.0[0] * cos_phi, y, self.0[0] * sin_phi])
}
#[rustfmt::skip] #[inline]
fn new_as_xyz_from_rf_with_x(&self, x: f64) -> Cs<3> {
let (sin_phi, cos_phi) = self.0[1].sin_cos();
Cs([x, self.0[0] * cos_phi, self.0[0] * sin_phi])
}
}