Try   HackMD

Leetcode 1401. Circle and Rectangle Overlapping

給定一個圓心以及半徑,以及一個矩形的左下以及右上的x,y座標,判斷兩個圖形有沒有重疊。

想法

數學解

找到矩形中距離圓心最近的一點(x,y),判斷它距離圓心距離是否在半徑之內。

如果 x_center在x1與x2之間,則代表x之距離為0,否則則計算x1和x2誰與x_center距離為最近。

如果 y_center在y1與y2之間,則代表y之距離為0,否則則計算y1和y2誰與y_center距離為最近。

最後則利用畢氏定理確定是否在圓內。

程式碼:

def checkOverlap(self, radius: int, x_center: int, y_center: int, x1: int, y1: int, x2: int, y2: int) -> bool:
        if(x1 <= x_center <= x2):
            tag = 0
        else:
            tag = min(abs(x1-x_center),abs(x2-x_center))
        
        if(y1 <= y_center <= y2):
            tag1 = 0
        else:
            tag1 = min(abs(y1-y_center),abs(y2-y_center))
        return tag**2+tag1**2<=radius**2