天天看点

python判断圆和矩形是否有重叠_T1401、圆和矩形是否有重叠

给你一个以 (radius, x_center, y_center) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2),其中 (x1, y1) 是矩形左下角的坐标,(x2, y2) 是右上角的坐标。

如果圆和矩形有重叠的部分,请你返回 True ,否则返回 False 。

换句话说,请你检测是否 存在 点 (xi, yi) ,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。

示例 1

python判断圆和矩形是否有重叠_T1401、圆和矩形是否有重叠

image.png

输入:radius = 1, x_center = 0, y_center = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1

输出:true

解释:圆和矩形有公共点 (1,0)

将圆和矩形相交的情况分为和边相交和4个角相交,分别判断是否有重叠部分即可。

换一种理解:圆心距离矩形的最近点可以分为在矩形边上和在矩形4个角2种情况。

public boolean checkOverlap(int radius, int x_center, int y_center, int x1, int y1, int x2, int y2) {

int[][]check = new int[][]{{x1,y1},{x2,y2},{x2,y1},{x1,y2}};

for(int i = 0; i < 4; i++){

if(Math.sqrt(Math.pow(check[i][0] - x_center,2) + Math.pow(check[i][1] - y_center,2)) <= radius)

return true;

}

if(x_center >= x1 && x_center <= x2){

if(y_center <= y2 + radius && y_center >= y1 - radius)

return true;

}else if( y_center >= y1 && y_center <= y2){

if(x_center <= x2 + radius && x_center >= x1 - radius)

return true;

}

return false;

}