use crate::Elements6;
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct ClassicalElements {
pub semi_major_axis: f64,
pub eccentricity: f64,
pub inclination: f64,
pub longitude_ascending_node: f64,
pub argument_periapsis: f64,
pub true_anomaly: f64,
}
impl ClassicalElements {
#[must_use]
pub const fn new(
semi_major_axis: f64,
eccentricity: f64,
inclination: f64,
longitude_ascending_node: f64,
argument_periapsis: f64,
true_anomaly: f64,
) -> Self {
Self {
semi_major_axis,
eccentricity,
inclination,
longitude_ascending_node,
argument_periapsis,
true_anomaly,
}
}
#[must_use]
pub const fn to_array(self) -> Elements6 {
[
self.semi_major_axis,
self.eccentricity,
self.inclination,
self.longitude_ascending_node,
self.argument_periapsis,
self.true_anomaly,
]
}
}
impl From<Elements6> for ClassicalElements {
fn from(values: Elements6) -> Self {
Self::new(
values[0], values[1], values[2], values[3], values[4], values[5],
)
}
}
impl From<ClassicalElements> for Elements6 {
fn from(elements: ClassicalElements) -> Self {
elements.to_array()
}
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct ModifiedEquinoctialElements {
pub semilatus_rectum: f64,
pub f: f64,
pub g: f64,
pub h: f64,
pub k: f64,
pub true_longitude: f64,
}
impl ModifiedEquinoctialElements {
#[must_use]
pub const fn new(
semilatus_rectum: f64,
f: f64,
g: f64,
h: f64,
k: f64,
true_longitude: f64,
) -> Self {
Self {
semilatus_rectum,
f,
g,
h,
k,
true_longitude,
}
}
#[must_use]
pub const fn to_array(self) -> Elements6 {
[
self.semilatus_rectum,
self.f,
self.g,
self.h,
self.k,
self.true_longitude,
]
}
}
impl From<Elements6> for ModifiedEquinoctialElements {
fn from(values: Elements6) -> Self {
Self::new(
values[0], values[1], values[2], values[3], values[4], values[5],
)
}
}
impl From<ModifiedEquinoctialElements> for Elements6 {
fn from(elements: ModifiedEquinoctialElements) -> Self {
elements.to_array()
}
}