题目描述:
给你一个以 (radius, xCenter, yCenter) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2) ,其中 (x1, y1) 是矩形左下角的坐标,而 (x2, y2) 是右上角的坐标。
如果圆和矩形有重叠的部分,请你返回 true ,否则返回 false 。
换句话说,请你检测是否 存在 点 (xi, yi) ,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。
示例:
解题思路:
存不存在一个x∈(x1,x2),y∈(y1,y2)的坐标与圆的坐标的距离小于圆的半径。
距离计算要求:
存在点(x,y)使得(x-xCenter)²+(y-yCenter)²<=radius²
x∈(x1,x2)时,最小x-xCenter为
x1<=xCenter<=x2,x-xCenter=0
x1>xCenter,x=x1-xCenter
x2<xCenter,x=xCenter-x2
同理可得y-yCenter
代码附上:
class Solution {
public boolean checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {
return Math.pow(min(x1,xCenter,x2),2)+Math.pow(min(y1,yCenter,y2),2)<=Math.pow(radius,2);
}
public int min(int i,int j,int k) {
if(i<=j&&j<=k) return 0;
return i>j?i-j:j-k;
}
}