use simple_si_units::base::{Distance, Mass}; use simple_si_units::mechanical::{Acceleration}; pub fn calc_gravity(mass: Mass, dist: Distance) -> Acceleration{ const G: f64 = 6.67408e-11; // m3 kg-1 s-2 let d_squared = dist * dist; return Acceleration::from_mps2(G * mass.to_kg() / d_squared.to_m2()) } use simple_si_units::NumLike; pub fn calc_gravity_generic(mass: Mass, dist: Distance) -> Acceleration where T: NumLike+From { const G: f64 = 6.67408e-11; // m3 kg-1 s-2 let d_squared = &dist * &dist; return Acceleration::from_mps2(T::from(G) * mass.to_kg() / d_squared.to_m2()) } #[test] fn test_earth_orbit_gravity(){ let a = calc_gravity(Mass::from_solar_mass(1.0), Distance::from_au(1.0)); println!("Solar gravity at Earth orbital distance: {}", a); // generic version let a = calc_gravity_generic(Mass::from_solar_mass(1.0), Distance::from_au(1.0)); println!("Solar gravity at Earth orbital distance: {} (generic)", a); }