圆和矩形是否有重叠

给你一个以  (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

提示:
        1  <=  radius  <=  2000
        -104 <=  x_center,  y_center,  x1,  y1,  x2,  y2  <=  104
        x1  <  x2
        y1  <  y2

自我解答

        唉,虽然知道这题是  “矩形重叠”的升级版,但看了提示,也没想出来。
        提示内容是:找出矩形中,离圆心最近的点,若两点距离小于圆半径,则说明有重叠。
        很简单呢。。。可是我硬生生没找出最近的点。
        我是拿矩形  4  个顶点算距离的,但最近的点,并不一定在这  4  个点中

题解

        最近的点,可以判断出来,假如最近点为  (x,  y),
                则  如果  x_center  >=  x2,  则  x  =  x2
                同理,  .....
                
        还是抽象思维能力不够强
        

class Solution:
    def checkOverlap(self, radius: int, x_center: int, y_center: int, x1: int, y1: int, x2: int, y2: int) -> bool:
        if x_center >= x2:
            x = x2
        elif x_center <= x1:
            x = x1
        else:
            x = x_center

        if y_center >= y2:
            y = y2
        elif y_center <= y1:
            y = y1
        else:
            y = y_center

        a, b = abs(x - x_center), abs(y - y_center)
        return a * a + b * b <= radius * radius

        
原题链接:https://leetcode-cn.com/problems/circle-and-rectangle-overlapping