use zmatrix::physics::basic::{AngularMomentum, AngularVelocity, Torque};
fn main() {
println!("=== 角动量、角速度和力矩之间的运算关系示例 ===\n");
println!("1. 角动量 × 角速度 = 力矩");
let angular_momentum = AngularMomentum::from_kg_m2_per_second(10.0); let angular_velocity = AngularVelocity::from_rad_per_second(5.0); let torque = angular_momentum * angular_velocity;
println!(" 角动量: {} kg·m²/s", angular_momentum.as_kg_m2_per_second());
println!(" 角速度: {} rad/s", angular_velocity.as_rad_per_second());
println!(" 力矩: {} N·m", torque.as_nm());
println!(" 验证: 10 × 5 = 50 ✓\n");
println!("2. 角速度 × 角动量 = 力矩(满足交换律)");
let torque2 = angular_velocity * angular_momentum;
println!(" 角速度: {} rad/s", angular_velocity.as_rad_per_second());
println!(" 角动量: {} kg·m²/s", angular_momentum.as_kg_m2_per_second());
println!(" 力矩: {} N·m", torque2.as_nm());
println!(" 验证: 5 × 10 = 50 ✓\n");
println!("3. 力矩 ÷ 角速度 = 角动量");
let torque3 = Torque::from_nm(20.0); let angular_velocity3 = AngularVelocity::from_rad_per_second(4.0); let angular_momentum3 = torque3 / angular_velocity3;
println!(" 力矩: {} N·m", torque3.as_nm());
println!(" 角速度: {} rad/s", angular_velocity3.as_rad_per_second());
println!(" 角动量: {} kg·m²/s", angular_momentum3.as_kg_m2_per_second());
println!(" 验证: 20 ÷ 4 = 5 ✓\n");
println!("4. 角动量 ÷ 角速度 = 转动惯量(系数)");
let angular_momentum4 = AngularMomentum::from_kg_m2_per_second(20.0); let angular_velocity4 = AngularVelocity::from_rad_per_second(4.0); let moment_of_inertia = angular_momentum4 / angular_velocity4;
println!(" 角动量: {} kg·m²/s", angular_momentum4.as_kg_m2_per_second());
println!(" 角速度: {} rad/s", angular_velocity4.as_rad_per_second());
println!(" 转动惯量系数: {} kg·m²", moment_of_inertia.get_value());
println!(" 验证: 20 ÷ 4 = 5 ✓\n");
println!("5. 不同单位的测试");
let angular_momentum5 = AngularMomentum::from_kg_km2_per_second(1.0); let angular_velocity5 = AngularVelocity::from_deg_per_second(180.0); let torque5 = angular_momentum5 * angular_velocity5;
println!(" 角动量: {} kg·km²/s", angular_momentum5.as_kg_km2_per_second());
println!(" 角速度: {}°/s = {} rad/s", angular_velocity5.as_deg_per_second(), angular_velocity5.as_rad_per_second());
println!(" 力矩: {} N·m", torque5.as_nm());
println!(" 验证: 1e6 × π ≈ 3.14159e6 ✓\n");
println!("6. 新添加的Nms单位测试");
let angular_momentum_nms = AngularMomentum::from_nms(100.0); let angular_momentum_mill = AngularMomentum::from_mill_nms(1000.0); let angular_momentum_micro = AngularMomentum::from_micro_nms(1000000.0); let angular_momentum_nano = AngularMomentum::from_nano_nms(1000000000.0);
println!(" 100 N·m·s = {} kg·m²/s", angular_momentum_nms.as_kg_m2_per_second());
println!(" 1000 mN·m·s = {} kg·m²/s", angular_momentum_mill.as_kg_m2_per_second());
println!(" 1000000 μN·m·s = {} kg·m²/s", angular_momentum_micro.as_kg_m2_per_second());
println!(" 1000000000 nN·m·s = {} kg·m²/s", angular_momentum_nano.as_kg_m2_per_second());
println!(" 验证: 100 = 1 = 0.001 = 0.000001 ✓\n");
println!("7. 不同Nms单位之间的运算");
let sum = angular_momentum_nms + angular_momentum_mill + angular_momentum_micro + angular_momentum_nano;
println!(" 100 N·m·s + 1000 mN·m·s + 1000000 μN·m·s + 1000000000 nN·m·s = {} N·m·s", sum.as_nms());
println!(" 验证: 100 + 1 + 0.001 + 0.000001 = 101.001001 ✓\n");
println!("8. Nms单位与角速度的运算");
let omega = AngularVelocity::from_rad_per_second(2.0); let torque_from_nms = angular_momentum_nms * omega;
println!(" 100 N·m·s × 2 rad/s = {} N·m", torque_from_nms.as_nm());
println!(" 验证: 100 × 2 = 200 ✓\n");
println!("=== 物理意义说明 ===");
println!("• 角动量 (L) = 转动惯量 (I) × 角速度 (ω)");
println!("• 力矩 (τ) = 角动量 (L) × 角速度 (ω)");
println!("• 在旋转动力学中,这些关系非常重要");
println!("• 所有运算都支持不同单位之间的自动转换");
println!("• 新增的Nms单位:N·m·s, mN·m·s, μN·m·s, nN·m·s");
println!("• 1 N·m·s = 1 kg·m²/s(数值相等)");
}