圆与矩形的相交条件有以下2个:

我们约定矩形左下角坐标为(x1,y1),右上角坐标为(x2,y2),圆形坐标为(cx,cy),半径为r,矩形中心横坐标 x0 = (x2+x1)/2,纵坐标为y0 = (y1 + y2)/2;约定这些是为了下边描述更加方便

一、矩形顶点在圆内

如上图所示,当矩形四个顶点有一个顶点在圆内时,可以认为矩形与圆是相交的,即:

//找出x方向与cx最接近的
minx = min(abs(x1 - cx), abs(x2 - cx));
//找出y方向与cy最接近的
miny = min(abs(y1 - cy), abs(y2 - cy));
if (minx * minx + miny * miny < r * r)return true;

二、圆与矩形边相交(包含圆在矩形内)

如上边两种情况,第一种情况中圆心与矩形中心在竖直方向上距离小于(圆直径+矩形高)/2,并且圆心横坐标在矩形长边内;同理第二种情况是圆心与矩形中心在水平方向上距离小于(圆直径+矩形长)/2,并且圆心纵坐标在矩形短边内;可以发现如果圆在矩形内部的话,实际上也已经满足了该条件。

if ((abs(x0 - cx) < abs(x2 - x1) / 2 + r) && abs(cy - y0) < abs(y2 - y1) / 2)return true;
if ((abs(y0 - cy) < abs(y2 - y1) / 2 + r) && abs(cx - x0) < abs(x2 - x1) / 2)return true;

因此,以上两个条件是圆与矩形相交的充要判据

总代码

bool check(double x1,double y1,double x2,double y2,double cx,double cy,double r) {//条件1double minx, miny;//找出x方向与cx最接近的minx = min(abs(x1 - cx), abs(x2 - cx));//找出y方向与cy最接近的miny = min(abs(y1 - cy), abs(y2 - cy));if (minx * minx + miny * miny < r * r)return true;//条件2double x0 = (x1 + x2) / 2;double y0 = (y1 + y2) / 2;if ((abs(x0 - cx) < abs(x2 - x1) / 2 + r) && abs(cy - y0) < abs(y2 - y1) / 2)return true;if ((abs(y0 - cy) < abs(y2 - y1) / 2 + r) && abs(cx - x0) < abs(x2 - x1) / 2)return true;return 0;
}

参考文献:

https://www.cnblogs.com/llkey/p/3707351.html

平面中圆与矩形相交判定相关推荐

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

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

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

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

  3. OpenCV中绘制外围矩形框和圆框

    OpenCV中绘制外围矩形框和圆框 利用边界寻找函数找到的边界坐标信息.然后利用每一条寻找到的边际信息去找到图形的矩形边界和圆形边界. 一. OpenCV中绘制外围矩形框 根据已知的边界信息点.将边界 ...

  4. 在Canvas中绘制圆角矩形

    问题的提出 要在Canvas中绘制一个矩形,使用strokeRect或fillRect函数即可. var canvas = document.getElementById("canvas&q ...

  5. 射线与圆、球相交检测

    射线与圆.球相交检测 本篇讨论2D中射线和圆的相交检测,本方法同样适用于3D中射线和球的相交检测,这是因为可以在包含射线和球心的平面中进行检测,从而将3D问题转化为2D问题.如果射线穿过球心,那么平面 ...

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

    圆和矩形的重叠问题 一.问题描述 二.分析思路 三.代码示例(javascript) 一.问题描述 给你一个以 (radius, x_center, y_center) 表示的圆和一个与坐标轴平行的矩 ...

  7. ArcGIS.Server.9.2.DotNet在ElementGraphicsLayer画点、线、折线、面、圆、矩形的代码

    ArcGIS.Server.9.2.DotNet在ElementGraphicsLayer画点.线.折线.面.圆.矩形的代码:   1public class AddTool:IMapServerTo ...

  8. android paint 圆角 绘制_[BOT] 一种android中实现“圆角矩形”的方法

    内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...

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

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

  10. 如何判断两个矩形相交

    假定矩形是用一对点表达的(minx, miny) (maxx, maxy),那么两个矩形        rect1{(minx1, miny1)(maxx1, maxy1)}        rect2 ...

最新文章

  1. Common Number(奇偶二分+找规律)
  2. 您是否尝试过MicroProfile Starter?
  3. 用了5年Excel,换了这个神奇的报表工具,不禁感叹:国产真香
  4. 对于未定义为 System.String 的列,唯一有效的值是(引发异常)。
  5. Glide在github上的jar包下载方法
  6. c#使用webbrowser时,设定IE版本
  7. uplift模型实战代码
  8. [笑话]让古龙看了要痛哭的高考作文(作品相当强,但得了零分,据说被破格入取了)!!!...
  9. 一文读懂ICS工业控制系统架构
  10. php readystate,php – 当readyState为4时,为什么我在脚本中调用的Ajax函数连续运行两次?...
  11. 『转载』完全用Linux工作 王垠
  12. ip地址合不合法怎么看_怎样判断IP地址的非法性?
  13. AMM敏捷成熟度评估框架介绍
  14. STL系列之四 heap 堆
  15. python之matplotlib制作基础图表以及图例,标注,marker,中文设置
  16. 2020年找工作总结之【自我介绍】
  17. mac 支持node的服务器,在Mac中使用node开启一个服务器
  18. [BFS][贝祖定理]leetcode365:水壶问题(medium)
  19. 国产手机乱世已来临。
  20. 我的金工实习心得(二):铸工第一天

热门文章

  1. 获取浏览器唯一标识_探讨浏览器指纹 fingerprint
  2. 数商云:传统建筑行业产业转型,轻松实现建筑材料信息系统撮合交易智能化、数字化管理
  3. linux系统重装win系统教程,Win10如何重装linux系统 Win10重装linux系统教程
  4. gps测试软件搜索不到星,手机搜不到星 搜星慢终极解决方法!
  5. c语言:数组插入处理
  6. 《西游记》的读后感4000字
  7. 魔兽世界mysql启动不了_WOW 魔兽世界单机版 3.3 不能启动服务器的解决方案 | 学步园...
  8. 高德地图Amap绘制路线首尾相连问题
  9. C语言实现约分最简分式
  10. 自然之州阿肯色及温泉国家公园