Skip to main content

example_angular_relations/
example_angular_relations.rs

1use zmatrix::physics::basic::{AngularMomentum, AngularVelocity, Torque};
2
3fn main() {
4    println!("=== 角动量、角速度和力矩之间的运算关系示例 ===\n");
5
6    // 示例1: 角动量 × 角速度 = 力矩
7    println!("1. 角动量 × 角速度 = 力矩");
8    let angular_momentum = AngularMomentum::from_kg_m2_per_second(10.0); // 10 kg·m²/s
9    let angular_velocity = AngularVelocity::from_rad_per_second(5.0);    // 5 rad/s
10    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    // 示例2: 角速度 × 角动量 = 力矩(满足交换律)
17    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    // 示例3: 力矩 ÷ 角速度 = 角动量
25    println!("3. 力矩 ÷ 角速度 = 角动量");
26    let torque3 = Torque::from_nm(20.0); // 20 N·m
27    let angular_velocity3 = AngularVelocity::from_rad_per_second(4.0); // 4 rad/s
28    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    // 示例4: 角动量 ÷ 角速度 = 转动惯量
35    println!("4. 角动量 ÷ 角速度 = 转动惯量");
36    let angular_momentum4 = AngularMomentum::from_kg_m2_per_second(20.0); // 20 kg·m²/s
37    let angular_velocity4 = AngularVelocity::from_rad_per_second(4.0);    // 4 rad/s
38    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    // 示例5: 不同单位的测试
45    println!("5. 不同单位的测试");
46    let angular_momentum5 = AngularMomentum::from_kg_km2_per_second(1.0); // 1 kg·km²/s
47    let angular_velocity5 = AngularVelocity::from_deg_per_second(180.0);  // 180°/s = π rad/s
48    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    // 示例6: 新添加的Nms单位测试
55    println!("6. 新添加的Nms单位测试");
56    let angular_momentum_nms = AngularMomentum::from_nms(100.0); // 100 N·m·s
57    let angular_momentum_mill = AngularMomentum::from_mill_nms(1000.0); // 1000 mN·m·s
58    let angular_momentum_micro = AngularMomentum::from_micro_nms(1000000.0); // 1000000 μN·m·s
59    let angular_momentum_nano = AngularMomentum::from_nano_nms(1000000000.0); // 1000000000 nN·m·s
60    
61    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    // 示例7: 不同Nms单位之间的运算
68    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    // 示例8: Nms单位与角速度的运算
74    println!("8. Nms单位与角速度的运算");
75    let omega = AngularVelocity::from_rad_per_second(2.0); // 2 rad/s
76    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}