算法——判断圆和矩形是否有重叠
圆和矩形的重叠问题
- 一.问题描述
- 二.分析思路
- 三.代码示例(javascript)
一.问题描述
给你一个以 (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;
};
算法——判断圆和矩形是否有重叠相关推荐
- Java黑皮书课后题第3章:**3.29(几何:两个圆)编写程序,提示用户输入两个圆的中心坐标和各自的半径值,然后判断圆是在第一个圆内,还是和第一个圆重叠
**3.29(几何:两个圆)编写程序,提示用户输入两个圆的中心坐标和各自的半径值,然后判断圆是在第一个圆内,还是和第一个圆重叠 题目 题目概述 运行示例 代码 题目 题目概述 **3.29(几何:两个 ...
- Java黑皮书课后题第3章:**3.28(几何:两个矩形)编写一个程序,提示用户输入两个矩形中心的x坐标和y坐标以及矩形的宽度和高度,然后判断第二个矩形是在第一个矩形内,还是和第一个矩形重叠
**3.28(几何:两个矩形)编写一个程序,提示用户输入两个矩形中心的x坐标和y坐标以及矩形的宽度和高度,然后判断第二个矩形是在第一个矩形内,还是和第一个矩形重叠 题目 题目概述 运行示例 破题 代码 ...
- 计算机与数学 —— 圆与矩形相交判定算法的优化
这篇博客介绍了用于判定圆与矩形相交的Arvo's algorithm的优化版本以及对应思路. Arvo's Algorithm 在用于判定圆与AABB矩形的判定中,Arvo提出的算法被广泛运用.关于这 ...
- 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
一,原理介绍 这回有点复杂,不过看懂了还是很好理解的.当然,我不敢保证这种算法在任何情况下都会起效果,如果有同学测试时,发现出现错误,请及时联系我. 我们首先来建立一个以圆心为原点的坐标系: 然后要检 ...
- 判断两个矩形相交以及求出相交的区域
问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2). (1)设计一个算法,确定两 ...
- java判断两个矩形是否相交_判断矩形相交以及求出相交的区域
问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2). (1)设计一个算法,确定两 ...
- 平面中判断线段与矩形是否相交
文章目录 1. 原理 2. 实现 3. 参考 1. 原理 这个问题的算法思路挺简单的.分成两步来判断: 判断线段的两个端点是否在矩形内,如果两个端点至少有一个在矩形内,说明线段与矩形相交. 如果两个端 ...
- 【运筹优化】蚁群算法求解二维矩形装箱问题(java代码实现)
文章目录 1 前言 2 代码迁移 3 蚁群算法 3.1 蚂蚁类 Ant 3.2 蚁群算法类 ACO_Packing 4 运行结果 5 后话 [运筹优化]求解二维矩形装箱问题的算法合辑(Java代码实现 ...
- 【运筹优化】结合天际线启发式的蚁群算法求解二维矩形装箱问题 + Java代码实现
文章目录 一.天际线启发式 二.蚁群算法结合天际线启发式 2.1 构建序列 2.1.1 思路一 2.1.2 思路二 2.1.3 思路N 三.Java代码实现 3.1 项目结构 3.2 Ant 3.3 ...
最新文章
- html表格重置标签,HTML——表格标签
- SBS2003 migrate to SBS2008 资料准备
- SQL2008 附加数据库提示 5120错误
- ubuntu shell实现加减乘除
- 研发管理---(1)持续交付
- 数据库mysql基本查询语句_数据库mysql基础查询语句实录
- 网页设计常用字体(转)
- 什么是电子商务——百科
- 贝叶斯分类器matlab实现
- 百度翻译API的调用
- Java Promblem/Demand And Solution
- 通过1688APP分享商品链接淘口令获取商品详情接口,淘口令返利接口,1688淘口令API接口,淘口令解析接口,1688短链接接口接入方案
- 路由与交换技术-18-热备份路由选择协议HSRP
- 使用poi导出excel
- c语言延时100us程序,编写100MS软件延时程序 汇编语言编写延时程序
- 理解boot menu
- Shell 编程4(退出,测试,判断)
- 怎么把html文档转换成doc,Word文档如何把docx格式转换成doc格式
- 德云社怒怼信息泄露 300元买600多明星证件号
- 无障碍(二)检测与防范