example_angular_relations/
example_angular_relations.rs1use zmatrix::physics::basic::{AngularMomentum, AngularVelocity, Torque};
2
3fn main() {
4 println!("=== 角动量、角速度和力矩之间的运算关系示例 ===\n");
5
6 println!("1. 角动量 × 角速度 = 力矩");
8 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;
11 println!(" 角动量: {} kg·m²/s", angular_momentum.as_kg_m2_per_second());
12 println!(" 角速度: {} rad/s", angular_velocity.as_rad_per_second());
13 println!(" 力矩: {} N·m", torque.as_nm());
14 println!(" 验证: 10 × 5 = 50 ✓\n");
15
16 println!("2. 角速度 × 角动量 = 力矩(满足交换律)");
18 let torque2 = angular_velocity * angular_momentum;
19 println!(" 角速度: {} rad/s", angular_velocity.as_rad_per_second());
20 println!(" 角动量: {} kg·m²/s", angular_momentum.as_kg_m2_per_second());
21 println!(" 力矩: {} N·m", torque2.as_nm());
22 println!(" 验证: 5 × 10 = 50 ✓\n");
23
24 println!("3. 力矩 ÷ 角速度 = 角动量");
26 let torque3 = Torque::from_nm(20.0); let angular_velocity3 = AngularVelocity::from_rad_per_second(4.0); let angular_momentum3 = torque3 / angular_velocity3;
29 println!(" 力矩: {} N·m", torque3.as_nm());
30 println!(" 角速度: {} rad/s", angular_velocity3.as_rad_per_second());
31 println!(" 角动量: {} kg·m²/s", angular_momentum3.as_kg_m2_per_second());
32 println!(" 验证: 20 ÷ 4 = 5 ✓\n");
33
34 println!("4. 角动量 ÷ 角速度 = 转动惯量");
36 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;
39 println!(" 角动量: {} kg·m²/s", angular_momentum4.as_kg_m2_per_second());
40 println!(" 角速度: {} rad/s", angular_velocity4.as_rad_per_second());
41 println!(" 转动惯量: {} kg·m²", moment_of_inertia.as_kg_m2());
42 println!(" 验证: 20 ÷ 4 = 5 ✓\n");
43
44 println!("5. 不同单位的测试");
46 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;
49 println!(" 角动量: {} kg·km²/s", angular_momentum5.as_kg_km2_per_second());
50 println!(" 角速度: {}°/s = {} rad/s", angular_velocity5.as_deg_per_second(), angular_velocity5.as_rad_per_second());
51 println!(" 力矩: {} N·m", torque5.as_nm());
52 println!(" 验证: 1e6 × π ≈ 3.14159e6 ✓\n");
53
54 println!("6. 新添加的Nms单位测试");
56 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());
62 println!(" 1000 mN·m·s = {} kg·m²/s", angular_momentum_mill.as_kg_m2_per_second());
63 println!(" 1000000 μN·m·s = {} kg·m²/s", angular_momentum_micro.as_kg_m2_per_second());
64 println!(" 1000000000 nN·m·s = {} kg·m²/s", angular_momentum_nano.as_kg_m2_per_second());
65 println!(" 验证: 100 = 1 = 0.001 = 0.000001 ✓\n");
66
67 println!("7. 不同Nms单位之间的运算");
69 let sum = angular_momentum_nms + angular_momentum_mill + angular_momentum_micro + angular_momentum_nano;
70 println!(" 100 N·m·s + 1000 mN·m·s + 1000000 μN·m·s + 1000000000 nN·m·s = {} N·m·s", sum.as_nms());
71 println!(" 验证: 100 + 1 + 0.001 + 0.000001 = 101.001001 ✓\n");
72
73 println!("8. Nms单位与角速度的运算");
75 let omega = AngularVelocity::from_rad_per_second(2.0); let torque_from_nms = angular_momentum_nms * omega;
77 println!(" 100 N·m·s × 2 rad/s = {} N·m", torque_from_nms.as_nm());
78 println!(" 验证: 100 × 2 = 200 ✓\n");
79
80 println!("=== 物理意义说明 ===");
81 println!("• 角动量 (L) = 转动惯量 (I) × 角速度 (ω)");
82 println!("• 力矩 (τ) = 角动量 (L) × 角速度 (ω)");
83 println!("• 在旋转动力学中,这些关系非常重要");
84 println!("• 所有运算都支持不同单位之间的自动转换");
85 println!("• 新增的Nms单位:N·m·s, mN·m·s, μN·m·s, nN·m·s");
86 println!("• 1 N·m·s = 1 kg·m²/s(数值相等)");
87}