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)

示例 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 {
public:
    bool checkOverlap(int radius, int x_center, int y_center, int x1, int y1, int x2, int y2) {
    	//若圆心在矩形的上下
        if(x_center>=x1&&x_center<=x2){
            return y_center>=y1-radius&&y_center<=y2+radius;
        }
        //若圆心在矩形的左右
        if(y_center>=y1&&y_center<=y2){
            return x_center>=x1-radius&&x_center<=x2+radius;
        }
        //若圆心在矩形的四个角落方位
        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;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值