圆和矩形是否有重叠

引言:

写这篇博客主要是把它当做一个云笔记,顺便帮助一下做这道题没有思路的人。
因为之前想的比较复杂,现在看这道题感觉是如此简单…

题目描述:

给你一个以 (radius, x_center, y_center) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2),其中 (x1, y1) 是矩形左下角的坐标,(x2, y2) 是右上角的坐标。
如果圆和矩形有重叠的部分,请你返回 True ,否则返回 False 。
换句话说,请你检测是否 存在 点 (xi, yi) ,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。

输入输出:

在这里插入图片描述

题解:

首先判断圆心坐标是否矩形范围内。
如果圆心横坐标在矩形范围内,那么只要比较圆心到矩形的两个宽所在的两条直线的距离,选择最小的距离和半径比较,如果距离大于半径,那么没有重叠,反之则有重叠。圆心纵坐标也同理。
如果圆心横纵坐标都不在矩形范围内,那么就和矩形的四个顶点的距离比较。如果圆心到顶点的最小距离大于半径,那么没有重叠,反之则有重叠。

总结:
如果圆心横纵坐标都不在矩形范围内,那么就把圆心到顶点最短距离和半径作比较。
如果圆心横纵坐标不是都不在矩形范围内,那么就把圆心到四个边最短距离和半径作比较。

代码:

class Solution {
public:
    bool checkOverlap(int radius, int x, int y, int x1, int y1, int x2, int y2) {
        int xx=(x>=x1&&x<=x2)?0:min(abs(x-x1),abs(x-x2));
        int yy=(y>=y1&&y<=y2)?0:min(abs(y-y1),abs(y-y2));
        return xx*xx+yy*yy<=radius*radius;
    }
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值