Skip to main content

AngularMomentum

Struct AngularMomentum 

Source
pub struct AngularMomentum {
    pub v: f64,
    /* private fields */
}
Expand description

角动量物理量结构体

表示物体绕轴旋转的动量,是质量、速度和距离的乘积

§示例

use zmatrix::physics::basic::AngularMomentum;

let angular_momentum = AngularMomentum::from_kg_m2_per_second(1.0);
println!("角动量: {} kg·m²/s", angular_momentum.as_kg_m2_per_second());

Fields§

§v: f64

Implementations§

Source§

impl AngularMomentum

Source

pub fn from_kg_m2_per_second(kg: f64) -> Self

Examples found in repository?
examples/example_angular_relations.rs (line 8)
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}
Source

pub fn from_kg_km2_per_second(kg: f64) -> Self

Examples found in repository?
examples/example_angular_relations.rs (line 46)
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}
Source

pub fn from_nms(nms: f64) -> Self

Examples found in repository?
examples/example_angular_relations.rs (line 56)
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}
Source

pub fn from_mill_nms(mill_nms: f64) -> Self

Examples found in repository?
examples/example_angular_relations.rs (line 57)
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}
Source

pub fn from_micro_nms(micro_nms: f64) -> Self

Examples found in repository?
examples/example_angular_relations.rs (line 58)
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}
Source

pub fn from_nano_nms(nano_nms: f64) -> Self

Examples found in repository?
examples/example_angular_relations.rs (line 59)
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}
Source

pub fn as_kg_m2_per_second(&self) -> f64

Examples found in repository?
examples/example_angular_relations.rs (line 11)
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}
Source

pub fn as_kg_km2_per_second(&self) -> f64

Examples found in repository?
examples/example_angular_relations.rs (line 49)
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}
Source

pub fn as_nms(&self) -> f64

Examples found in repository?
examples/example_angular_relations.rs (line 70)
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}
Source

pub fn as_mill_nms(&self) -> f64

Source

pub fn as_micro_nms(&self) -> f64

Source

pub fn as_nano_nms(&self) -> f64

Trait Implementations§

Source§

impl Add for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the + operator.
Source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
Source§

impl<'a> Add<&'a AngularMomentum> for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the + operator.
Source§

fn add(self, rhs: &'a AngularMomentum) -> Self::Output

Performs the + operation. Read more
Source§

impl<'a, 'b> Add<&'b AngularMomentum> for &'a AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the + operator.
Source§

fn add(self, rhs: &'b AngularMomentum) -> Self::Output

Performs the + operation. Read more
Source§

impl<'a> Add<AngularMomentum> for &'a AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the + operator.
Source§

fn add(self, rhs: AngularMomentum) -> Self::Output

Performs the + operation. Read more
Source§

impl Add<f64> for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the + operator.
Source§

fn add(self, rhs: f64) -> Self::Output

Performs the + operation. Read more
Source§

impl Clone for AngularMomentum

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for AngularMomentum

Source§

impl Debug for AngularMomentum

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for AngularMomentum

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Display for AngularMomentum

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Div for AngularMomentum

Source§

type Output = Coef

The resulting type after applying the / operator.
Source§

fn div(self, rhs: Self) -> Self::Output

Performs the / operation. Read more
Source§

impl<'a> Div<&'a AngularVelocity> for AngularMomentum

Source§

type Output = Inertia

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &'a AngularVelocity) -> Self::Output

Performs the / operation. Read more
Source§

impl<'a> Div<&'a Inertia> for AngularMomentum

Source§

type Output = AngularVelocity

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &'a Inertia) -> Self::Output

Performs the / operation. Read more
Source§

impl<'a, 'b> Div<&'b AngularVelocity> for &'a AngularMomentum

Source§

type Output = Inertia

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &'b AngularVelocity) -> Self::Output

Performs the / operation. Read more
Source§

impl<'a, 'b> Div<&'b Inertia> for &'a AngularMomentum

Source§

type Output = AngularVelocity

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &'b Inertia) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<AngularMomentum> for f64

Source§

type Output = AngularMomentum

The resulting type after applying the / operator.
Source§

fn div(self, rhs: AngularMomentum) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<AngularVelocity> for AngularMomentum

Source§

type Output = Inertia

The resulting type after applying the / operator.
Source§

fn div(self, rhs: AngularVelocity) -> Self::Output

Performs the / operation. Read more
Source§

impl<'a> Div<AngularVelocity> for &'a AngularMomentum

Source§

type Output = Inertia

The resulting type after applying the / operator.
Source§

fn div(self, rhs: AngularVelocity) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<Coef> for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the / operator.
Source§

fn div(self, rhs: Coef) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<Inertia> for AngularMomentum

Source§

type Output = AngularVelocity

The resulting type after applying the / operator.
Source§

fn div(self, rhs: Inertia) -> Self::Output

Performs the / operation. Read more
Source§

impl<'a> Div<Inertia> for &'a AngularMomentum

Source§

type Output = AngularVelocity

The resulting type after applying the / operator.
Source§

fn div(self, rhs: Inertia) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<f64> for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the / operator.
Source§

fn div(self, rhs: f64) -> Self::Output

Performs the / operation. Read more
Source§

impl<'a> Mul<&'a AngularVelocity> for AngularMomentum

Source§

type Output = Torque

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &'a AngularVelocity) -> Self::Output

Performs the * operation. Read more
Source§

impl<'a, 'b> Mul<&'b AngularVelocity> for &'a AngularMomentum

Source§

type Output = Torque

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &'b AngularVelocity) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<AngularMomentum> for f64

Source§

type Output = AngularMomentum

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: AngularMomentum) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<AngularMomentum> for AngularVelocity

Source§

type Output = Torque

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: AngularMomentum) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<AngularMomentum> for Coef

Source§

type Output = AngularMomentum

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: AngularMomentum) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<AngularVelocity> for AngularMomentum

Source§

type Output = Torque

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: AngularVelocity) -> Self::Output

Performs the * operation. Read more
Source§

impl<'a> Mul<AngularVelocity> for &'a AngularMomentum

Source§

type Output = Torque

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: AngularVelocity) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<Coef> for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: Coef) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<f64> for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: f64) -> Self::Output

Performs the * operation. Read more
Source§

impl Neg for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the - operator.
Source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
Source§

impl NonCoefficient for AngularMomentum

Source§

impl PartialEq for AngularMomentum

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PhysicalQuantity for AngularMomentum

Source§

fn as_any(&self) -> &dyn Any

Source§

fn is_zero(&self) -> bool

Source§

fn default_unit_value(&self) -> f64

Source§

fn set_value(&mut self, value: f64)

Source§

fn unit_display_name(&self) -> String

返回物理量名称和单位,如 “Distance (m)”, “Velocity (m/s)”
Source§

impl StructuralPartialEq for AngularMomentum

Source§

impl Sub for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more
Source§

impl<'a> Sub<&'a AngularMomentum> for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: &'a AngularMomentum) -> Self::Output

Performs the - operation. Read more
Source§

impl<'a, 'b> Sub<&'b AngularMomentum> for &'a AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: &'b AngularMomentum) -> Self::Output

Performs the - operation. Read more
Source§

impl<'a> Sub<AngularMomentum> for &'a AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: AngularMomentum) -> Self::Output

Performs the - operation. Read more
Source§

impl Sub<f64> for AngularMomentum

Source§

type Output = AngularMomentum

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: f64) -> Self::Output

Performs the - operation. Read more
Source§

impl VectorQuantity for AngularMomentum

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V