use cad_cs::libs::cs::abstracts::{
AbstractHelperCs3, AbstractMathCs2,
AbstractMathCs3,
};
use cad_cs::{
cs,
dms,
libs::{
angle::AngleFmt,
cs::{
Cs2,
Cs3,
model::{CoordsPolar, CoordsSpherical},
},
},
};
fn main() {
println!("🚀 cad-cs API demonstration\n");
let pt_2d = cs![3.0, 4.0];
let pt_3d = cs![3.0, 4.0, 12.0];
println!("🔷 2D Cartesian: {:?}", pt_2d);
println!("🔶 3D Cartesian: {:?}", pt_3d);
println!("📏 rxy (2D radius): {}", pt_2d.rxy());
println!("📏 rxyz (3D full radius): {}", pt_3d.rxyz());
println!("📐 arctan_y_x (2D azimuth): {:.4} rad", pt_2d.arctan_y_x());
println!("\n----------------------------------------------------\n");
let punkt_z_biegunowego: Cs2 = CoordsPolar {
r_d2: 10.0,
f_y_x: std::f64::consts::PI / 2.0, }
.into();
println!("🟪 Cs2 from polar (R=10, Φ=90°): {:?}", punkt_z_biegunowego);
let punkt_ze_sferycznego: Cs3 = CoordsSpherical {
r_d3: 20.0,
f_y_x: 0.0, t_z_r: std::f64::consts::PI / 4.0, }
.into();
println!("🟫 Cs3 from spherical (R=20, Φ=0°, Θ=45°): {:?}", punkt_ze_sferycznego);
println!("\n----------------------------------------------------\n");
let stawowa2 = cs![dms!(50, 14, 56.3), dms!(19, 8, 2.3)];
let r_ziemi = 6_371_000.0;
let stawowa_xyz = stawowa2.to_ecef_from_rad_sn_we(r_ziemi);
println!("🌐 Radian input (Lat, Lon): {:?}", stawowa2);
stawowa_xyz.print("stawowa_xyz", AngleFmt::Deg);
stawowa_xyz.print_dms_sn_we("stawowa_xyz_dms");
println!("📍 Location relative to Earth's core (meters):");
println!(" X: {:.2} m", stawowa_xyz[0]);
println!(" Y: {:.2} m", stawowa_xyz[1]);
println!(" Z: {:.2} m", stawowa_xyz[2]);
println!("📏 Distance from core (validation): {:.2} m", stawowa_xyz.rxyz());
let z_powrotem_na_powierzchnie = stawowa_xyz.to_dms_sn_we_from_xyz();
println!("🔄 Back to DMS: {:?}", z_powrotem_na_powierzchnie);
}