沙钢智慧能源系统前端代码
houzhongjian
2024-10-09 314507f8ddadd9c66e98d260c3b2a5dad1a04015
提交 | 用户 | 时间
314507 1 // 坐标点
H 2 export interface Point {
3   x: number
4   y: number
5 }
6
7 // 矩形
8 export interface Rect {
9   // 左上角 X 轴坐标
10   left: number
11   // 左上角 Y 轴坐标
12   top: number
13   // 右下角 X 轴坐标
14   right: number
15   // 右下角 Y 轴坐标
16   bottom: number
17   // 矩形宽度
18   width: number
19   // 矩形高度
20   height: number
21 }
22
23 /**
24  * 判断两个矩形是否重叠
25  * @param a 矩形 A
26  * @param b 矩形 B
27  */
28 export const isOverlap = (a: Rect, b: Rect): boolean => {
29   return (
30     a.left < b.left + b.width &&
31     a.left + a.width > b.left &&
32     a.top < b.top + b.height &&
33     a.height + a.top > b.top
34   )
35 }
36 /**
37  * 检查坐标点是否在矩形内
38  * @param hotArea 矩形
39  * @param point 坐标
40  */
41 export const isContains = (hotArea: Rect, point: Point): boolean => {
42   return (
43     point.x >= hotArea.left &&
44     point.x < hotArea.right &&
45     point.y >= hotArea.top &&
46     point.y < hotArea.bottom
47   )
48 }
49
50 /**
51  * 在两个坐标点中间,创建一个矩形
52  *
53  * 存在以下情况:
54  * 1. 两个坐标点是同一个位置,只占一个位置的正方形,宽高都为 1
55  * 2. X 轴坐标相同,只占一行的矩形,高度为 1
56  * 3. Y 轴坐标相同,只占一列的矩形,宽度为 1
57  * 4. 多行多列的矩形
58  *
59  * @param a 坐标点一
60  * @param b 坐标点二
61  */
62 export const createRect = (a: Point, b: Point): Rect => {
63   // 计算矩形的范围
64   const [left, left2] = [a.x, b.x].sort()
65   const [top, top2] = [a.y, b.y].sort()
66   const right = left2 + 1
67   const bottom = top2 + 1
68   const height = bottom - top
69   const width = right - left
70
71   return { left, right, top, bottom, height, width }
72 }