Leetcode 1401. 圆和矩形是否有重叠

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

思路
和题目描述的一致,需要确定的即是否存在某个点,既在正方形内(含边界),又在圆内(含边界)
对此,只需要找到正方形内(含边界)距离圆心最近的点,判断其到圆心的距离是否小于等于半径
然而,距离

d ^ 2 = (x1 - x2) ^ 2 + (y1 - y2) ^ 2

因此实际上在正方形内要找的是某点的两个坐标,其横坐标与圆心横坐标最接近,其纵坐标与圆心纵坐标最接近,找到之后计算距离即可

代码

class Solution {
public:
    bool checkOverlap(int radius, int x_center, int y_center, int x1, int y1, int x2, int y2) {
        int x,y;  //离圆心最近的点
        if(x_center>x2) x=x2;
        else if(x_center<x1) x=x1;
        else x=x_center;

        if(y_center>y2) y=y2;
        else if(y_center<y1) y=y1;
        else y=y_center;

        int d=pow(x-x_center,2)+pow(y-y_center,2);  //判断半径与点到圆心的距离
        if(d<=radius*radius) return true;
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ac1011_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值