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}