做了一个纯数学的算法题,一开始还以为是考虑不周,但是看了题解,也都是数学方法直接去解。
题目:
给你一个以 (radius, x_center, y_center) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2),其中 (x1, y1) 是矩形左下角的坐标,(x2, y2) 是右上角的坐标。
如果圆和矩形有重叠的部分,请你返回 True ,否则返回 False 。
换句话说,请你检测是否 存在 点 (xi, yi) ,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。
示例一:
输入:radius = 1, x_center = 0, y_center = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1
输出:true
解释:圆和矩形有公共点 (1,0)
示例二:
输入:radius = 1, x_center = 0, y_center = 0, x1 = -1, y1 = 0, x2 = 0, y2 = 1
输出:true
示例三:
输入:radius = 1, x_center = 1, y_center = 1, x1 = -3, y1 = -3, x2 = 3, y2 = 3
输出:true
示例四:
输入:radius = 1, x_center = 1, y_center = 1, x1 = 1, y1 = -3, x2 = 2, y2 = -1
输出:false
代码如下:
bool checkOverlap(int radius, int x_center, int y_center, int x1, int y1, int x2, int y2){
int i,j ;
for(i=x1;i<=x2;i++)
{
float changdu;
for(j=y1;j<=y2;j++)
{
changdu = sqrt((i - x_center)*(i-x_center)+(j-y_center)*(j-y_center));
if(changdu<=radius)
{
return true;
}
}
}
return false;
}