rs_math/graphical/
point_2d.rs

1/// 二维空间中的点的结构体表示。
2#[derive(Debug, PartialEq, Clone)]
3pub struct Point2D {
4    /// X 坐标
5    pub x: f64,
6
7    /// Y 坐标
8    pub y: f64,
9}
10
11#[allow(dead_code)]
12impl Point2D
13{
14    /// 计算两个点之间的欧几里德距离。
15    ///
16    /// # 参数
17    ///
18    /// - `point2`: 第二个点的坐标。
19    ///
20    /// # 返回值
21    ///
22    /// 两点之间的欧几里德距离。
23    ///
24    /// # 示例
25    ///
26    /// ```
27    /// use rs_math::graphical::point_2d::Point2D;
28    ///
29    /// let point1 = Point2D { x: 1.0, y: 2.0 };
30    /// let point2 = Point2D { x: 4.0, y: 6.0 };
31    /// let distance = point1.distance_between_points(point2);
32    /// // 验证距离是否符合预期
33    /// ```
34    pub fn distance_between_points(&self, point2: Point2D) -> f64 {
35        let dx = point2.x - self.x;
36        let dy = point2.y - self.y;
37        (dx * dx + dy * dy).sqrt()
38    }
39
40    /// 绕原点逆时针旋转点。
41    ///
42    /// # 参数
43    ///
44    /// - `angle`: 旋转角度(弧度)。
45    ///
46    /// # 返回值
47    ///
48    /// 旋转后的点的坐标。
49    ///
50    /// # 示例
51    ///
52    /// ```
53    /// use rs_math::graphical::point_2d::Point2D;
54    ///
55    /// let point = Point2D { x: 3.0, y: 4.0 };
56    /// let rotated_point = point.rotate(std::f64::consts::FRAC_PI_2);
57    /// // 验证旋转后的坐标是否符合预期
58    /// ```
59    pub fn rotate(&self, angle: f64) -> Point2D {
60        let cos_theta = angle.cos();
61        let sin_theta = angle.sin();
62
63        let new_x = self.x * cos_theta - self.y * sin_theta;
64        let new_y = self.x * sin_theta + self.y * cos_theta;
65
66        Point2D { x: new_x, y: new_y }
67    }
68
69    /// 计算点到另一点的欧几里德距离。
70    ///
71    /// # 参数
72    ///
73    /// - `other`: 另一点的坐标。
74    ///
75    /// # 返回值
76    ///
77    /// 两点之间的欧几里德距离。
78    ///
79    /// # 示例
80    ///
81    /// ```
82    /// use rs_math::graphical::point_2d::Point2D;
83    ///
84    /// let point1 = Point2D { x: 1.0, y: 2.0 };
85    /// let point2 = Point2D { x: 4.0, y: 6.0 };
86    /// let distance = point1.distance_to(&point2);
87    ///
88    /// ```
89    pub fn distance_to(&self, other: &Point2D) -> f64 {
90        ((self.x - other.x).powi(2) + (self.y - other.y).powi(2)).sqrt()
91    }
92
93    /// 将两个点的坐标相加,得到新的点。
94    ///
95    /// # 参数
96    ///
97    /// - `p1`: 第一个点的坐标。
98    /// - `p2`: 第二个点的坐标。
99    ///
100    /// # 返回值
101    ///
102    /// 两点坐标相加后得到的新点。
103    ///
104    /// # 示例
105    ///
106    /// ```
107    /// use rs_math::graphical::point_2d::Point2D;
108    ///
109    /// let point1 = Point2D { x: 1.0, y: 2.0 };
110    /// let point2 = Point2D { x: 3.0, y: 4.0 };
111    /// let result = Point2D::add_points(&point1, &point2);
112    ///
113    /// ```
114    pub fn add_points(p1: &Point2D, p2: &Point2D) -> Point2D {
115        Point2D { x: p1.x + p2.x, y: p1.y + p2.y }
116    }
117}