rs_math/vector/vector_2d.rs
1/// 定义二维向量结构体。
2///
3/// 该结构体包含两个分量,分别表示向量的 x 和 y 坐标。
4///
5/// # 字段
6///
7/// * `x`:向量的 x 坐标。
8/// * `y`:向量的 y 坐标。
9///
10/// # 示例
11///
12/// ```rust
13/// use rs_math::vector::vector_2d::Vector2D;
14///
15/// let v = Vector2D { x: 1.0, y: 2.0 };
16///
17/// ```
18
19pub struct Vector2D {
20 pub x: f64,
21 pub y: f64,
22}
23
24// 实现一个方法来创建新的二维向量
25impl Vector2D {
26 /// 创建新的二维向量。
27 ///
28 /// 该函数创建一个新的二维向量,其 x 坐标和 y 坐标分别为 `x` 和 `y`。
29 ///
30 /// # 参数
31 ///
32 /// * `x`:向量的 x 坐标。
33 /// * `y`:向量的 y 坐标。
34 ///
35 /// # 返回值
36 ///
37 /// 返回新的二维向量。
38 ///
39 /// # 示例
40 ///
41 /// ```rust
42 /// use rs_math::vector::vector_2d::Vector2D;
43 ///
44 /// let v = Vector2D::new(1.0, 2.0);
45 ///
46 /// ```
47 pub fn new(x: f64, y: f64) -> Vector2D {
48 Vector2D { x, y }
49 }
50
51 /// 计算二维向量的模(长度)。
52 ///
53 /// 该函数使用欧几里得范数计算二维向量的模(长度)。
54 ///
55 /// # 参数
56 ///
57 /// * `self`:二维向量。
58 ///
59 /// # 返回值
60 ///
61 /// 返回二维向量的模(长度)。
62 ///
63 /// # 示例
64 ///
65 /// ```rust
66 /// use rs_math::vector::vector_2d::Vector2D;
67 ///
68 /// let v = Vector2D::new(1.0, 2.0);
69 ///
70 /// ```
71 pub fn magnitude(&self) -> f64 {
72 (self.x.powi(2) + self.y.powi(2)).sqrt()
73 }
74
75
76 /// 计算两个二维向量的和,返回一个新的向量。
77 ///
78 /// 该函数使用算术加法运算计算两个二维向量的和。
79 ///
80 /// # 参数
81 ///
82 /// * `self`:调用该方法的向量。
83 /// * `other`:要与 `self` 相加的另一个向量。
84 ///
85 /// # 返回值
86 ///
87 /// 返回一个新的向量,表示 `self` 和 `other` 的和。
88 ///
89 /// # 示例
90 ///
91 /// ```rust
92 /// use rs_math::vector::vector_2d::Vector2D;
93 ///
94 /// let v1 = Vector2D::new(1.0, 2.0);
95 /// let v2 = Vector2D::new(3.0, 4.0);
96 ///
97 /// let v3 = v1.add(v2);
98 ///
99 /// ```
100 pub fn add(self, other: Vector2D) -> Vector2D {
101 Vector2D { x: self.x + other.x, y: self.y + other.y }
102 }
103
104 /// 向量减法。
105 ///
106 /// # 参数
107 ///
108 /// - `other`:要减去的向量。
109 ///
110 /// # 返回值
111 ///
112 /// 返回新的向量,表示两个向量的差。
113 ///
114 /// # 示例
115 ///
116 /// ```
117 /// use rs_math::vector::vector_2d::Vector2D;
118 ///
119 /// let vector1 = Vector2D { x: 3.0, y: 2.0 };
120 /// let vector2 = Vector2D { x: 1.0, y: 4.0 };
121 /// let result = vector1.subtract(vector2);
122 /// ```
123 pub fn subtract(self, other: Vector2D) -> Vector2D {
124 Vector2D { x: self.x - other.x, y: self.y - other.y }
125 }
126
127 /// 向量点积。
128 ///
129 /// # 参数
130 ///
131 /// - `other`:要进行点积计算的向量。
132 ///
133 /// # 返回值
134 ///
135 /// 返回两个向量的点积结果。
136 ///
137 /// # 示例
138 ///
139 /// ```
140 /// use rs_math::vector::vector_2d::Vector2D;
141 ///
142 /// let vector1 = Vector2D { x: 3.0, y: 2.0 };
143 /// let vector2 = Vector2D { x: 1.0, y: 4.0 };
144 /// let result = vector1.dot_product(vector2);
145 /// ```
146 pub fn dot_product(self, other: Vector2D) -> f64 {
147 self.x * other.x + self.y * other.y
148 }
149
150 /// 向量叉积。
151 ///
152 /// # 参数
153 ///
154 /// - `other`:要进行叉积计算的向量。
155 ///
156 /// # 返回值
157 ///
158 /// 返回两个向量的叉积结果。
159 ///
160 /// # 示例
161 ///
162 /// ```
163 /// use rs_math::vector::vector_2d::Vector2D;
164 ///
165 /// let vector1 = Vector2D { x: 3.0, y: 2.0 };
166 /// let vector2 = Vector2D { x: 1.0, y: 4.0 };
167 /// let result = vector1.cross_product(vector2);
168 /// ```
169 pub fn cross_product(self, other: Vector2D) -> f64 {
170 self.x * other.y - self.y * other.x
171 }
172}