算法——判断圆和矩形是否有重叠

一.问题描述

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/circle-and-rectangle-overlapping
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二.分析思路

1、根据圆心相对于矩形的位置,我们可以将其分为大致t分为图中这四种情况
在这里插入图片描述

(1)圆心的横坐标在矩形的两个横坐标范围以内,那么此时横坐标就无需考虑,只要考虑圆心的纵坐标到两个边长之间的最短距离,若圆心纵坐标到矩形的两个长之间距离的最小值小于等于圆的半径,则发生了重叠
(2)圆心的纵坐标在矩形的两个纵坐标范围内,那么此时就只需考虑圆心横坐标到矩形两个宽之间的距离,若圆心横坐标到矩形两个宽之间的最短距离小于等于圆的半径,则发生了重叠
(3)假如圆心的横纵坐标都不在矩形的横纵坐标范围内,那么此时就要考虑圆到矩形顶点的最短距离,如果圆心到顶点的最小距离小于等于半径,那么也发生了重叠
(4)圆心的横纵坐标都在矩形的范围内,那么横纵坐标都无需考虑,它们必然是相交的。

三.代码示例(javascript)

var checkOverlap = function(radius, x_center, y_center, x1, y1, x2, y2) {
       var xx=(x_center>=x1&&x_center<=x2)?0:Math.min(Math.abs(x_center-x1),Math.abs(x_center-x2));
       var yy=(y_center>=y1&&y_center<=y2)?0:Math.min(Math.abs(y_center-y1),Math.abs(y_center-y2));
       return xx*xx+yy*yy<=radius*radius;
};
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值