use zmatrix::physics::basic::{Force, Distance, Energy, Mass, Acceleration, PhysicalQuantity};
fn main() {
println!("=== 力物理量示例 ===\n");
println!("1. 创建不同单位的力:");
let f1 = Force::from_newton(1.0); let f2 = Force::from_mill_newton(1000.0); let f3 = Force::from_micro_newton(1000000.0); let f4 = Force::from_nano_newton(1000000000.0); let f5 = Force::from_kilo_newton(0.001); let f6 = Force::from_mega_newton(0.000001);
println!(" f1 = {} N", f1.as_newton());
println!(" f2 = {} mN = {} N", f2.as_mill_newton(), f2.as_newton());
println!(" f3 = {} μN = {} N", f3.as_micro_newton(), f3.as_newton());
println!(" f4 = {} nN = {} N", f4.as_nano_newton(), f4.as_newton());
println!(" f5 = {} kN = {} N", f5.as_kilo_newton(), f5.as_newton());
println!(" f6 = {} MN = {} N", f6.as_mega_newton(), f6.as_newton());
println!("\n2. 单位转换:");
println!(" 1 N = {} mN", f1.as_mill_newton());
println!(" 1 N = {} μN", f1.as_micro_newton());
println!(" 1 N = {} nN", f1.as_nano_newton());
println!(" 1 N = {} kN", f1.as_kilo_newton());
println!(" 1 N = {} MN", f1.as_mega_newton());
println!("\n3. 力的运算:");
let f_sum = f1 + f2; let f_diff = f_sum - f1; let f_scale = f1 * 3.0; let f_div = f_scale / 2.0;
println!(" f1 + f2 = {} N", f_sum.as_newton());
println!(" f_sum - f1 = {} N", f_diff.as_newton());
println!(" f1 * 3 = {} N", f_scale.as_newton());
println!(" f_scale / 2 = {} N", f_div.as_newton());
println!("\n4. 力与距离的乘积(得到功/能量):");
let force = Force::from_newton(10.0); let distance = Distance::from_m(5.0); let energy: Energy = force * distance;
println!(" 力: {} N", force.as_newton());
println!(" 距离: {} m", distance.as_m());
println!(" 功/能量: {} J", energy.as_joule());
println!(" 验证: 10 N × 5 m = 50 J ✓");
println!("\n5. 距离与力的乘积(满足交换律):");
let energy2: Energy = distance * force; println!(" 距离 × 力 = {} J", energy2.as_joule());
println!(" 验证: 5 m × 10 N = 50 J ✓");
println!("\n6. 质量与加速度的乘积(得到力):");
let mass = Mass::from_kg(2.0); let acceleration = Acceleration::from_m_per_s2(5.0); let force_from_ma: Force = mass * acceleration;
println!(" 质量: {} kg", mass.as_kg());
println!(" 加速度: {} m/s²", acceleration.as_m_per_s2());
println!(" 力: {} N", force_from_ma.as_newton());
println!(" 验证: 2 kg × 5 m/s² = 10 N ✓");
println!("\n7. 加速度与质量的乘积(满足交换律):");
let force_from_am: Force = acceleration * mass; println!(" 加速度 × 质量 = {} N", force_from_am.as_newton());
println!(" 验证: 5 m/s² × 2 kg = 10 N ✓");
println!("\n8. 不同单位之间的运算:");
let f_micro = Force::from_micro_newton(1000000.0); let f_kilo = Force::from_kilo_newton(0.001); let f_result = f_micro + f_kilo; println!(" {} μN + {} kN = {} N",
f_micro.as_micro_newton(),
f_kilo.as_kilo_newton(),
f_result.as_newton());
println!("\n9. 零值检查:");
let f_zero = Force::from_newton(0.0);
let f_nonzero = Force::from_newton(1.0);
println!(" f_zero.is_zero() = {}", f_zero.is_zero());
println!(" f_nonzero.is_zero() = {}", f_nonzero.is_zero());
println!("\n10. 实际应用示例:");
let mass_earth = Mass::from_kg(70.0); let g = Acceleration::from_m_per_s2(9.81); let weight: Force = mass_earth * g; println!(" 人体重量: {} kg × {} m/s² = {} N",
mass_earth.as_kg(), g.as_m_per_s2(), weight.as_newton());
let spring_force = Force::from_newton(20.0); let compression = Distance::from_m(0.1); let spring_energy: Energy = spring_force * compression; println!(" 弹簧做功: {} N × {} m = {} J",
spring_force.as_newton(), compression.as_m(), spring_energy.as_joule());
let engine_force = Force::from_kilo_newton(2.0); let travel_distance = Distance::from_m(100.0); let work_done: Energy = engine_force * travel_distance; println!(" 发动机做功: {} kN × {} m = {} kJ",
engine_force.as_kilo_newton(), travel_distance.as_m(), work_done.as_kilo_joule());
println!("\n=== 示例完成 ===");
}