2023.6.25每日一题

         判断矩形是否和圆有公共点,只需判断矩形上是否存在一点(x,y)满足点(x,y)到圆心的距离大于等于半径,如果满足则说明有公共点,不满足则说明没有公共点。

        d=\sqrt{(x-x0)^{2}+(y-y0)^{2}}

        现在要找矩形上一点(x,y)到圆心的距离最小(如果最短的距离都在圆上,那其他点更不可能在圆上)。观察公式可得出,要想使d最小,只需找出最小的(x-x0)和(y-y0)。

        找(x-x0):

                1.如果x1<=x0<=x2:则(x-x0)min=0

                 2.如果x1>x0:则(x-x0)min=x1-x0

                 3.如果x2<x0:则(x-x0)min=x0-x2

        同理可求得最小的(y-y0) ;

        求出最小的(x-x0)和(y-y0)即可得出矩形上的点到圆的最短距离,再与半径比较即可。

class Solution {
public:
    bool checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {
       int xm=fun(x1,x2,xCenter);
       int ym=fun(y1,y2,yCenter);
       return xm*xm+ym*ym<=radius*radius;
    }

    int fun(int a,int b,int c)
    {
        if(c<=b&&c>=a) return 0;
        else if(a>c) return abs(a-c);
        else return abs(b-c);
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值