Skip to main content

example_energy/
example_energy.rs

1use zmatrix::physics::basic::{Energy, Distance, Mass, Velocity, PhysicalQuantity};
2
3fn main() {
4    println!("=== 能量物理量示例 ===\n");
5
6    // 1. 创建不同单位的能量
7    println!("1. 创建不同单位的能量:");
8    let e1 = Energy::from_joule(1.0); // 1 J
9    let e2 = Energy::from_mill_joule(1000.0); // 1000 mJ = 1 J
10    let e3 = Energy::from_micro_joule(1e6); // 1e6 μJ = 1 J
11    let e4 = Energy::from_nano_joule(1e9); // 1e9 nJ = 1 J
12    let e5 = Energy::from_kilo_joule(1e-3); // 1e-3 kJ = 1 J
13    let e6 = Energy::from_mega_joule(1e-6); // 1e-6 MJ = 1 J
14    let e7 = Energy::from_electron_volt(1.0 / 1.602176634e-19); // 1 J
15    let e8 = Energy::from_kilo_electron_volt(1.0 / 1.602176634e-16); // 1 J
16    let e9 = Energy::from_mega_electron_volt(1.0 / 1.602176634e-13); // 1 J
17
18    println!("   e1 = {} J", e1.as_joule());
19    println!("   e2 = {} mJ = {} J", e2.as_mill_joule(), e2.as_joule());
20    println!("   e3 = {} μJ = {} J", e3.as_micro_joule(), e3.as_joule());
21    println!("   e4 = {} nJ = {} J", e4.as_nano_joule(), e4.as_joule());
22    println!("   e5 = {} kJ = {} J", e5.as_kilo_joule(), e5.as_joule());
23    println!("   e6 = {} MJ = {} J", e6.as_mega_joule(), e6.as_joule());
24    println!("   e7 = {} eV = {} J", e7.as_electron_volt(), e7.as_joule());
25    println!("   e8 = {} keV = {} J", e8.as_kilo_electron_volt(), e8.as_joule());
26    println!("   e9 = {} MeV = {} J", e9.as_mega_electron_volt(), e9.as_joule());
27
28    // 2. 单位转换
29    println!("\n2. 单位转换:");
30    println!("   1 J = {} mJ", e1.as_mill_joule());
31    println!("   1 J = {} μJ", e1.as_micro_joule());
32    println!("   1 J = {} nJ", e1.as_nano_joule());
33    println!("   1 J = {} kJ", e1.as_kilo_joule());
34    println!("   1 J = {} MJ", e1.as_mega_joule());
35    println!("   1 J = {} eV", e1.as_electron_volt());
36    println!("   1 J = {} keV", e1.as_kilo_electron_volt());
37    println!("   1 J = {} MeV", e1.as_mega_electron_volt());
38
39    // 3. 能量运算
40    println!("\n3. 能量运算:");
41    let e_sum = e1 + e2; // 1 J + 1 J = 2 J
42    let e_diff = e_sum - e1; // 2 J - 1 J = 1 J
43    let e_scale = e1 * 3.0; // 1 J * 3 = 3 J
44    let e_div = e_scale / 2.0; // 3 J / 2 = 1.5 J
45
46    println!("   e1 + e2 = {} J", e_sum.as_joule());
47    println!("   e_sum - e1 = {} J", e_diff.as_joule());
48    println!("   e1 * 3 = {} J", e_scale.as_joule());
49    println!("   e_scale / 2 = {} J", e_div.as_joule());
50
51    // 4. 不同单位之间的运算
52    println!("\n4. 不同单位之间的运算:");
53    let e_micro = Energy::from_micro_joule(1e6); // 1 J
54    let e_mill = Energy::from_mill_joule(1000.0); // 1 J
55    let e_result = e_micro + e_mill; // 1 J + 1 J = 2 J
56    println!("   {} μJ + {} mJ = {} J", 
57             e_micro.as_micro_joule(), 
58             e_mill.as_mill_joule(), 
59             e_result.as_joule());
60
61    // 5. 标量与能量的运算
62    println!("\n5. 标量与能量的运算:");
63    let e_scaled = 5.0 * e1; // 5 × 1 J = 5 J
64    let e_divided = 10.0 / e1; // 10 / 1 J = 10 J
65    println!("   5.0 * {} J = {} J", e1.as_joule(), e_scaled.as_joule());
66    println!("   10.0 / {} J = {} J", e1.as_joule(), e_divided.as_joule());
67
68    // 6. 零值检查
69    println!("\n6. 零值检查:");
70    let e_zero = Energy::from_joule(0.0);
71    let e_nonzero = Energy::from_joule(1.0);
72    println!("   e_zero.is_zero() = {}", e_zero.is_zero());
73    println!("   e_nonzero.is_zero() = {}", e_nonzero.is_zero());
74
75    // 7. 实际应用示例
76    println!("\n7. 实际应用示例:");
77    
78    // 动能计算
79    let mass = Mass::from_kg(2.0); // 2 kg
80    let velocity = Velocity::from_m_per_sec(3.0); // 3 m/s
81    let kinetic_energy = Energy::from_joule(0.5 * mass.as_kg() * velocity.as_m_per_sec().powi(2));
82    println!("   质量: {} kg", mass.as_kg());
83    println!("   速度: {} m/s", velocity.as_m_per_sec());
84    println!("   动能: {} J", kinetic_energy.as_joule());
85
86    // 势能计算
87    let mass = Mass::from_kg(1.0); // 1 kg
88    let height = Distance::from_m(10.0); // 10 m
89    let g = 9.81; // 重力加速度 m/s²
90    let potential_energy = Energy::from_joule(mass.as_kg() * g * height.as_m());
91    println!("   质量: {} kg", mass.as_kg());
92    println!("   高度: {} m", height.as_m());
93    println!("   势能: {} J", potential_energy.as_joule());
94
95    // 电子伏特应用
96    let photon_energy = Energy::from_electron_volt(2.5); // 2.5 eV
97    println!("   光子能量: {} eV = {} J", 
98             photon_energy.as_electron_volt(), 
99             photon_energy.as_joule());
100
101    let nuclear_energy = Energy::from_mega_electron_volt(1.0); // 1 MeV
102    println!("   核能: {} MeV = {} J", 
103             nuclear_energy.as_mega_electron_volt(), 
104             nuclear_energy.as_joule());
105
106    println!("\n=== 示例完成 ===");
107}