Skip to main content

example_vector_quantity_restriction/
example_vector_quantity_restriction.rs

1use zmatrix::physics::basic::{Distance, Velocity, Force, Vector3};
2
3fn main() {
4    println!("=== Vector3 类型约束验证示例 ===\n");
5
6    // 1. 验证支持向量的物理量可以用于 Vector3
7    println!("1. 支持向量的物理量可以用于 Vector3:");
8    
9    let distance_vector = Vector3::new(
10        Distance::from_m(1.0),
11        Distance::from_m(2.0),
12        Distance::from_m(3.0)
13    );
14    println!("   ✓ Distance Vector: ({}, {}, {}) m", 
15             distance_vector.x.as_m(), 
16             distance_vector.y.as_m(), 
17             distance_vector.z.as_m());
18
19    let velocity_vector = Vector3::new(
20        Velocity::from_m_per_sec(4.0),
21        Velocity::from_m_per_sec(5.0),
22        Velocity::from_m_per_sec(6.0)
23    );
24    println!("   ✓ Velocity Vector: ({}, {}, {}) m/s", 
25             velocity_vector.x.as_m_per_sec(), 
26             velocity_vector.y.as_m_per_sec(), 
27             velocity_vector.z.as_m_per_sec());
28
29    let force_vector = Vector3::new(
30        Force::from_newton(10.0),
31        Force::from_newton(20.0),
32        Force::from_newton(30.0)
33    );
34    println!("   ✓ Force Vector: ({}, {}, {}) N", 
35             force_vector.x.as_newton(), 
36             force_vector.y.as_newton(), 
37             force_vector.z.as_newton());
38
39    // 2. 验证不支持向量的物理量无法用于 Vector3
40    println!("\n2. 不支持向量的物理量无法用于 Vector3:");
41    println!("   ✓ 以下代码会在编译时被拒绝:");
42    println!("     let mass_vector = Vector3::new(");
43    println!("         Mass::from_kg(1.0),");
44    println!("         Mass::from_kg(2.0),");
45    println!("         Mass::from_kg(3.0)");
46    println!("     );");
47    println!("\n   ✓ 以下代码会在编译时被拒绝:");
48    println!("     let energy_vector = Vector3::new(");
49    println!("         Energy::from_joule(1.0),");
50    println!("         Energy::from_joule(2.0),");
51    println!("         Energy::from_joule(3.0)");
52    println!("     );");
53
54    // 3. 列出所有支持向量的物理量
55    println!("\n3. 支持向量的物理量列表:");
56    println!("   ✓ Distance (距离/位移)");
57    println!("   ✓ Velocity (速度)");
58    println!("   ✓ Acceleration (加速度)");
59    println!("   ✓ Angular (角度)");
60    println!("   ✓ AngularVelocity (角速度)");
61    println!("   ✓ AngularAcceleration (角加速度)");
62    println!("   ✓ Coef (系数)");
63    println!("   ✓ AngularMomentum (角动量)");
64    println!("   ✓ Momentum (动量)");
65    println!("   ✓ MagneticInduction (磁感应强度)");
66    println!("   ✓ MagneticMoment (磁矩)");
67    println!("   ✓ Torque (力矩)");
68    println!("   ✓ Force (力)");
69    println!("   ✓ MagneticAngularVelocity (磁角速度)");
70
71    // 4. 列出不支持向量的物理量
72    println!("\n4. 不支持向量的物理量列表:");
73    println!("   ✗ Mass (质量)");
74    println!("   ✗ Energy (能量)");
75    println!("   ✗ Power (功率)");
76    println!("   ✗ Volume (体积)");
77    println!("   ✗ Area (面积)");
78    println!("   ✗ Time (时间)");
79
80    println!("\n=== 验证完成 ===");
81    println!("Vector3 现在只能用于支持向量的物理量,这确保了类型安全!");
82}