圆和矩形的重叠问题

  • 一.问题描述
  • 二.分析思路
  • 三.代码示例(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;
};

算法——判断圆和矩形是否有重叠相关推荐

  1. Java黑皮书课后题第3章:**3.29(几何:两个圆)编写程序,提示用户输入两个圆的中心坐标和各自的半径值,然后判断圆是在第一个圆内,还是和第一个圆重叠

    **3.29(几何:两个圆)编写程序,提示用户输入两个圆的中心坐标和各自的半径值,然后判断圆是在第一个圆内,还是和第一个圆重叠 题目 题目概述 运行示例 代码 题目 题目概述 **3.29(几何:两个 ...

  2. Java黑皮书课后题第3章:**3.28(几何:两个矩形)编写一个程序,提示用户输入两个矩形中心的x坐标和y坐标以及矩形的宽度和高度,然后判断第二个矩形是在第一个矩形内,还是和第一个矩形重叠

    **3.28(几何:两个矩形)编写一个程序,提示用户输入两个矩形中心的x坐标和y坐标以及矩形的宽度和高度,然后判断第二个矩形是在第一个矩形内,还是和第一个矩形重叠 题目 题目概述 运行示例 破题 代码 ...

  3. 计算机与数学 —— 圆与矩形相交判定算法的优化

    这篇博客介绍了用于判定圆与矩形相交的Arvo's algorithm的优化版本以及对应思路. Arvo's Algorithm 在用于判定圆与AABB矩形的判定中,Arvo提出的算法被广泛运用.关于这 ...

  4. 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞

    一,原理介绍 这回有点复杂,不过看懂了还是很好理解的.当然,我不敢保证这种算法在任何情况下都会起效果,如果有同学测试时,发现出现错误,请及时联系我. 我们首先来建立一个以圆心为原点的坐标系: 然后要检 ...

  5. 判断两个矩形相交以及求出相交的区域

    问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2). (1)设计一个算法,确定两 ...

  6. java判断两个矩形是否相交_判断矩形相交以及求出相交的区域

    问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2). (1)设计一个算法,确定两 ...

  7. 平面中判断线段与矩形是否相交

    文章目录 1. 原理 2. 实现 3. 参考 1. 原理 这个问题的算法思路挺简单的.分成两步来判断: 判断线段的两个端点是否在矩形内,如果两个端点至少有一个在矩形内,说明线段与矩形相交. 如果两个端 ...

  8. 【运筹优化】蚁群算法求解二维矩形装箱问题(java代码实现)

    文章目录 1 前言 2 代码迁移 3 蚁群算法 3.1 蚂蚁类 Ant 3.2 蚁群算法类 ACO_Packing 4 运行结果 5 后话 [运筹优化]求解二维矩形装箱问题的算法合辑(Java代码实现 ...

  9. 【运筹优化】结合天际线启发式的蚁群算法求解二维矩形装箱问题 + Java代码实现

    文章目录 一.天际线启发式 二.蚁群算法结合天际线启发式 2.1 构建序列 2.1.1 思路一 2.1.2 思路二 2.1.3 思路N 三.Java代码实现 3.1 项目结构 3.2 Ant 3.3 ...

最新文章

  1. html表格重置标签,HTML——表格标签
  2. SBS2003 migrate to SBS2008 资料准备
  3. SQL2008 附加数据库提示 5120错误
  4. ubuntu shell实现加减乘除
  5. 研发管理---(1)持续交付
  6. 数据库mysql基本查询语句_数据库mysql基础查询语句实录
  7. 网页设计常用字体(转)
  8. 什么是电子商务——百科
  9. 贝叶斯分类器matlab实现
  10. 百度翻译API的调用
  11. Java Promblem/Demand And Solution
  12. 通过1688APP分享商品链接淘口令获取商品详情接口,淘口令返利接口,1688淘口令API接口,淘口令解析接口,1688短链接接口接入方案
  13. 路由与交换技术-18-热备份路由选择协议HSRP
  14. 使用poi导出excel
  15. c语言延时100us程序,编写100MS软件延时程序 汇编语言编写延时程序
  16. 理解boot menu
  17. Shell 编程4(退出,测试,判断)
  18. 怎么把html文档转换成doc,Word文档如何把docx格式转换成doc格式
  19. 德云社怒怼信息泄露 300元买600多明星证件号
  20. 无障碍(二)检测与防范

热门文章

  1. 微信公众号第三方授权开发——推送component_verify_ticket协议
  2. Vue框架-01-了解并使用Vue
  3. mysql 8.0版本 error 3516 ;error 3618
  4. 将项目生成api及maven依赖,用feign暴露接口给外部调用
  5. BGP邻居建立及特点
  6. 2021致自己一段话真实的话
  7. 天之痕第四章攻略java_轩辕剑参外传:天之痕第四章图文攻略 过关技巧分享
  8. 纹理、贴图、材质的区别
  9. csp-2022复赛复习模板
  10. STM32Cube学习笔记-SPI通讯