49 lines
869 B
Rust
49 lines
869 B
Rust
use super::PhysPol;
|
|
use super::PhysVec;
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub enum Position {
|
|
Cartesian(PhysVec),
|
|
Polar(PhysPol),
|
|
}
|
|
|
|
impl Position {
|
|
pub fn new_cartesian(x: f64, y: f64) -> Self {
|
|
return Self::Cartesian(PhysVec { x, y });
|
|
}
|
|
|
|
pub fn new_polar(center: PhysVec, radius: f64, angle: f64) -> Self {
|
|
return Self::Polar(PhysPol {
|
|
center,
|
|
radius,
|
|
angle,
|
|
});
|
|
}
|
|
|
|
/*
|
|
pub fn to_polar(&self) -> Self {
|
|
match self {
|
|
Self::Cartesian(pv) => Self::Polar(pv.to_polar()),
|
|
Self::Polar(_) => self.clone(),
|
|
}
|
|
}
|
|
*/
|
|
|
|
pub fn to_cartesian(&self) -> Self {
|
|
match self {
|
|
Self::Cartesian(_) => self.clone(),
|
|
Self::Polar(pp) => Self::Cartesian(pp.to_cartesian()),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Into<PhysVec> for Position {
|
|
fn into(self) -> PhysVec {
|
|
let c = self.to_cartesian();
|
|
match c {
|
|
Self::Cartesian(pv) => pv,
|
|
_ => unreachable!(),
|
|
}
|
|
}
|
|
}
|