cmtool_core/coordinates/
points.rs1use super::Coords3;
4
5#[derive(Debug, Clone, Copy, Default)]
18pub struct CylindricalCoordinates(pub Coords3);
19#[derive(Debug, Clone, Copy, Default)]
20pub struct CartesianCoordinates(pub Coords3);
21
22impl From<&CartesianCoordinates> for CylindricalCoordinates {
23 fn from(cart: &CartesianCoordinates) -> Self {
24 let r = f64::sqrt(cart.0[0] * cart.0[0] + cart.0[1] * cart.0[1]);
25 let theta = cart.0[1].atan2(cart.0[0]); Self([r, theta, cart.0[2]])
27 }
28}
29
30impl From<CartesianCoordinates> for CylindricalCoordinates {
31 fn from(cart: CartesianCoordinates) -> Self {
32 CylindricalCoordinates::from(&cart)
33 }
34}
35
36impl From<&CylindricalCoordinates> for CartesianCoordinates {
37 fn from(value: &CylindricalCoordinates) -> Self {
38 CartesianCoordinates([
39 value.0[0] * value.0[1].cos(),
40 value.0[0] * value.0[1].sin(),
41 value.0[2],
42 ])
43 }
44}
45
46impl From<CylindricalCoordinates> for CartesianCoordinates {
47 fn from(value: CylindricalCoordinates) -> Self {
48 CartesianCoordinates::from(&value)
49 }
50}