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}