給你一個以 (radius
, x_center
, y_center
) 表示的圓和一個與座標軸平行的矩形 (x1
, y1
, x2
, y2
),其中 (x1
, y1
) 是矩形左下角的座標,(x2
, y2
) 是右上角的座標。
如果圓和矩形有重疊的部分,請你返回 True ,否則返回 False 。
換句話說,請你檢測是否 存在 點 (xi, yi) ,它既在圓上也在矩形上(兩者都包括點落在邊界上的情況)。
示例 1:
輸入:radius = 1, x_center = 0, y_center = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1 輸出:true 解釋:圓和矩形有公共點 (1,0)
示例 2:
輸入:radius = 1, x_center = 0, y_center = 0, x1 = -1, y1 = 0, x2 = 0, y2 = 1 輸出:true
示例 3:
輸入:radius = 1, x_center = 1, y_center = 1, x1 = -3, y1 = -3, x2 = 3, y2 = 3 輸出:true
示例 4:
輸入:radius = 1, x_center = 1, y_center = 1, x1 = 1, y1 = -3, x2 = 2, y2 = -1 輸出:false
提示:
1 <= radius <= 2000
-10^4 <= x_center, y_center, x1, y1, x2, y2 <= 10^4
x1 < x2
y1 < y2
判斷圓心到正方形中心距離是否大於等於正方形對角線一半+圓的半徑,如果是,則不相交,否則相交
class Solution {
public:
bool checkOverlap(int radius, int x_center, int y_center, int x1, int y1, int x2, int y2) {
double x=(x1+x2)/2.0,y=(y1+y2)/2.0;
return (x-x_center)*(x-x_center)+(y-y_center)*(y-y_center)<=(radius+sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)))*(radius+sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)));
}
};