Skip to main content

example_vector_quantity/
example_vector_quantity.rs

1use zmatrix::physics::basic::{VectorQuantity, Distance, Velocity, Force, Torque, MagneticInduction, Vector3};
2
3fn main() {
4    println!("=== VectorQuantity Trait 验证示例 ===\n");
5
6    // 验证支持向量的物理量
7    println!("1. 验证支持向量的物理量:");
8    
9    // 创建一些支持向量的物理量
10    let distance = Distance::from_m(10.0);
11    let velocity = Velocity::from_m_per_sec(5.0);
12    let force = Force::from_newton(20.0);
13    let torque = Torque::from_nm(15.0);
14    let magnetic_induction = MagneticInduction::from_tesla(0.5);
15
16    println!("   Distance: {} m", distance.as_m());
17    println!("   Velocity: {} m/s", velocity.as_m_per_sec());
18    println!("   Force: {} N", force.as_newton());
19    println!("   Torque: {} N·m", torque.as_nm());
20    println!("   MagneticInduction: {} T", magnetic_induction.as_tesla());
21
22    // 验证这些类型都实现了 VectorQuantity trait
23    println!("\n2. 验证 VectorQuantity trait 实现:");
24    
25    // 这些函数调用会验证类型是否实现了 VectorQuantity trait
26    check_vector_quantity(distance);
27    check_vector_quantity(velocity);
28    check_vector_quantity(force);
29    check_vector_quantity(torque);
30    check_vector_quantity(magnetic_induction);
31
32    println!("   ✓ 所有物理量都正确实现了 VectorQuantity trait");
33
34    // 创建 Vector3 实例来验证向量操作
35    println!("\n3. 验证 Vector3 操作:");
36    
37    let distance_vector = Vector3::new(
38        Distance::from_m(1.0),
39        Distance::from_m(2.0),
40        Distance::from_m(3.0)
41    );
42    
43    let velocity_vector = Vector3::new(
44        Velocity::from_m_per_sec(4.0),
45        Velocity::from_m_per_sec(5.0),
46        Velocity::from_m_per_sec(6.0)
47    );
48
49    println!("   Distance Vector: ({}, {}, {}) m", 
50             distance_vector.x.as_m(), 
51             distance_vector.y.as_m(), 
52             distance_vector.z.as_m());
53    
54    println!("   Velocity Vector: ({}, {}, {}) m/s", 
55             velocity_vector.x.as_m_per_sec(), 
56             velocity_vector.y.as_m_per_sec(), 
57             velocity_vector.z.as_m_per_sec());
58
59    // 验证向量运算 - 只能对相同类型的向量进行运算
60    let sum_distance = distance_vector + distance_vector;
61    println!("   Sum Distance Vector: ({}, {}, {}) m", 
62             sum_distance.x.as_m(), 
63             sum_distance.y.as_m(), 
64             sum_distance.z.as_m());
65
66    println!("\n=== 验证完成 ===");
67}
68
69// 这个函数要求参数实现 VectorQuantity trait
70fn check_vector_quantity<T: VectorQuantity>(_value: T) {
71    // 这个函数体是空的,但类型约束确保了 T 实现了 VectorQuantity
72}