vector_example/
vector-example.rs

1use openmaths::Vector3;
2
3fn main() {
4  // Create two Vector3 instances
5  let mut v1 = Vector3::new(1.0, 2.0, 3.0);
6  let v2 = Vector3::new(4.0, 5.0, 6.0);
7
8  // Vector addition
9  v1.add(&v2);
10  println!("1. Elements of v1 after addition: ({}, {}, {})", v1.x, v1.y, v1.z);
11
12  // Adding a Scalar value to a Vector3
13  let mut v3 = Vector3::new(1.0, 3.0, 2.0);
14  v3.add_scalar(2.0);
15  println!("2. Adding a Scalar to v3, new elements: ({}, {}, {})", v3.x, v3.y, v3.z);
16
17  // Subtracting a Vector3
18  let mut v4 = Vector3::new(10.0, 9.0, 8.0);
19  v4.subtract(&v2);
20  println!("3. Elements of v4 after subtraction: ({}, {}, {})", v4.x, v4.y, v4.z);
21
22  // Subtracting a Scalar value from a Vector3
23  let mut v5 = Vector3::new(5.0, 6.0, 7.0);
24  v5.subtract_scalar(3.0);
25  println!("4. Subtracting a Scalar from v5, new elements: ({}, {}, {})", v5.x, v5.y, v5.z);
26
27  // Cloning a Vector3
28  let v6 = v1.clone();
29  println!("5. Cloned Vector3 v6: ({}, {}, {})", v6.x, v6.y, v6.z);
30
31  // Zeroing a Vector3
32  let mut v7 = Vector3::new(8.0, 9.0, 10.0);
33  v7.zero();
34  println!("6. Zeroed Vector3 v7: ({}, {}, {})", v7.x, v7.y, v7.z);
35
36  // Copying a Vector3
37  let mut v8 = Vector3::new(2.0, 3.0, 4.0);
38  v8.copy(&v6);
39  println!("7. Copied Vector3 v8 from v6: ({}, {}, {})", v8.x, v8.y, v8.z);
40
41  // Multiplying a Vector3 by a scalar
42  let mut v9 = Vector3::new(1.0, 2.0, 3.0);
43  v9.multiply_scalar(2.0);
44  println!("8. v9 after multiplying by scalar: ({}, {}, {})", v9.x, v9.y, v9.z);
45
46  // Multiply two vectors
47  let v10 = Vector3::new(2.0, 3.0, 4.0);
48  let v11 = Vector3::new(5.0, 6.0, 7.0);
49  let mut v12 = v10.clone();
50  v12.multiply(&v11);
51  println!("9. v12 after multiplying v10 and v11: ({}, {}, {})", v12.x, v12.y, v12.z);
52
53  // Divide a Vector3 by a scalar
54  let mut v13 = Vector3::new(10.0, 20.0, 30.0);
55  v13.divide_scalar(2.0);
56  println!("10. v13 after dividing by scalar: ({}, {}, {})", v13.x, v13.y, v13.z);
57
58  // Divide two vectors
59  let mut v14 = Vector3::new(20.0, 30.0, 40.0);
60  let v15 = Vector3::new(2.0, 3.0, 4.0);
61  v14.divide(&v15);
62  println!("11. v14 after dividing by v15: ({}, {}, {})", v14.x, v14.y, v14.z);
63
64  // Negate a Vector3
65  let mut v16 = Vector3::new(1.0, -2.0, 3.0);
66  v16.negate();
67  println!("12. v16 after negation: ({}, {}, {})", v16.x, v16.y, v16.z);
68
69  // Dot product of two vectors
70  let v17 = Vector3::new(1.0, 2.0, 3.0);
71  let v18 = Vector3::new(4.0, 5.0, 6.0);
72  let dot_product = v17.dot(&v18);
73  println!("13. Dot product of v17 and v18: {}", dot_product);
74
75  // Magnitude of a Vector3
76  let v19 = Vector3::new(3.0, 4.0, 0.0);
77  let magnitude = v19.magnitude();
78  println!("14. Magnitude/Length of v19: {}", magnitude);
79
80  // Normalize a Vector3
81  let mut v20 = Vector3::new(3.0, 4.0, 0.0);
82  v20.normalize();
83  println!("15. Normalized v20: ({}, {}, {})", v20.x, v20.y, v20.z);
84
85  // Cross product of two vectors
86  let v21 = Vector3::new(1.0, 0.0, 0.0);
87  let v22 = Vector3::new(0.0, 1.0, 0.0);
88  let v23 = v21.cross(&v22);
89  println!("16. Cross product of v21 and v22: ({}, {}, {})", v23.x, v23.y, v23.z);
90
91  // Distance between two vectors
92  let v24 = Vector3::new(1.0, 2.0, 3.0);
93  let v25 = Vector3::new(4.0, 5.0, 6.0);
94  let distance = v24.distance(&v25);
95  println!("17. Distance between v24 and v25: {}", distance);
96
97  // Apply a transformation matrix with translation at 2 in x axis, to a vector
98  let mut v26 = Vector3::new(1.0, 2.0, 3.0);
99  let matrix = openmaths::Matrix4::set(
100    1.0, 0.0, 0.0, 2.0,
101    0.0, 1.0, 0.0, 5.0,
102    0.0, 0.0, 1.0, 0.0,
103    0.0, 0.0, 0.0, 1.0
104  );
105  v26.apply_matrix4(matrix);
106  println!("18. v26 after applying transformation matrix: ({}, {}, {})", v26.x, v26.y, v26.z);
107}