1401. 圆和矩形是否有重叠
# 1401. 圆和矩形是否有重叠 (opens new window)
矩形与圆的相交问题:考虑临界状态,也就是相切或者是只有一个点正好落在圆的边上。进一步转化为圆形到达最短横边和竖边的问题:
- 考虑圆心x
- 如果圆心x被矩形y=x1与y=x2包夹,此时圆心到达矩形的最短距离就是圆心到达x=y1和x=y2这两条边的最短距离。
- 如果圆心x处在矩形的一侧,那么计算圆心x在水平方向上到达y=x1与y=x2的最短距离。
- 考虑圆心y
- 如果圆心y被矩形x=y1与x=y2包夹,此时圆心到达矩形的最短距离就是圆心到达y=x1和y=x2这两条边的最短距离。
- 如果圆心y处在矩形的一侧,那么计算圆心y在水平方向上到达x=y1与x=y2的最短距离。

class Solution {
public boolean checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {
int x=0,y=0;
if(xCenter<x1||xCenter>x2){
x=xCenter<x1?(xCenter-x1)*(xCenter-x1):(xCenter-x2)*(xCenter-x2);
}
if(yCenter<y1||yCenter>y2){
y=yCenter<y1?(yCenter-y1)*(yCenter-y1):(yCenter-y2)*(yCenter-y2);
}
return x+y<=radius*radius;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57