判断矩形是否和圆有公共点,只需判断矩形上是否存在一点(x,y)满足点(x,y)到圆心的距离大于等于半径,如果满足则说明有公共点,不满足则说明没有公共点。
现在要找矩形上一点(x,y)到圆心的距离最小(如果最短的距离都在圆上,那其他点更不可能在圆上)。观察公式可得出,要想使d最小,只需找出最小的(x-x0)和(y-y0)。
找(x-x0):
1.如果x1<=x0<=x2:则(x-x0)min=0
2.如果x1>x0:则(x-x0)min=x1-x0
3.如果x2<x0:则(x-x0)min=x0-x2
同理可求得最小的(y-y0) ;
求出最小的(x-x0)和(y-y0)即可得出矩形上的点到圆的最短距离,再与半径比较即可。
class Solution {
public:
bool checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {
int xm=fun(x1,x2,xCenter);
int ym=fun(y1,y2,yCenter);
return xm*xm+ym*ym<=radius*radius;
}
int fun(int a,int b,int c)
{
if(c<=b&&c>=a) return 0;
else if(a>c) return abs(a-c);
else return abs(b-c);
}
};