題目描述:
給你乙個以 (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
方法1:
(1)根據圓和矩形可能的相對關係,分類討論;
(2)若圓的圓心在矩形的上下,左右,及中間幾個方位,可以根據圓心和矩形邊界的距離進行判讀;
(3)若圓的圓心在矩形的左上,左下,右上,右下四個方位,可以使用圓心和矩形的四個頂點的距離進行判斷;
class
solution
//若圓心在矩形的左右
if(y_center>=y1&&y_center<=y2)
//若圓心在矩形的四個角落方位
return
(x_center-x1)
*(x_center-x1)
+(y_center-y1)
*(y_center-y1)
<=radius*radius
||(x_center-x2)
*(x_center-x2)
+(y_center-y2)
*(y_center-y2)
<=radius*radius
||(x_center-x1)
*(x_center-x1)
+(y_center-y2)
*(y_center-y2)
<=radius*radius
||(x_center-x2)
*(x_center-x2)
+(y_center-y1)
*(y_center-y1)
<=radius*radius;}}
;
圓和矩形是否有重疊
寫這篇部落格主要是把它當做乙個雲筆記,順便幫助一下做這道題沒有思路的人。因為之前想的比較複雜,現在看這道題感覺是如此簡單 給你乙個以 radius,x center,y center 表示的圓和乙個與座標軸平行的矩形 x1,y1,x2,y2 其中 x1,y1 是矩形左下角的座標,x2,y2 是右上角...
leetcode第1401題圓和矩陣是否有重疊
做了乙個純數學的演算法題,一開始還以為是考慮不周,但是看了題解,也都是數學方法直接去解。給你乙個以 radius,x center,y center 表示的圓和乙個與座標軸平行的矩形 x1,y1,x2,y2 其中 x1,y1 是矩形左下角的座標,x2,y2 是右上角的座標。如果圓和矩形有重疊的部分,...
判斷兩個矩形是否重疊
兩個矩形的邊均與x軸或y軸平行,即軸對齊的矩形 將第乙個矩形記做a,第二個矩形記做b 判斷矩陣a與矩陣b是否重疊 邊沿重疊也認為是重疊 第一種方案,正向思維 按照一般的思路,先列舉出所有的矩形重疊的情況,然後,判斷是否是其中一種,如圖所示,共有四種重疊情況,我們使用紫色代表矩形a,紅色代表矩形b,並...