计算两个矩形是否相交以及相交的矩形

原创 2015年11月21日 13:45:14

最近在开发的时候遇到一个问题,就是要判断在同一个直角坐标系下,两个边与坐标轴平行的矩形是否相交。

(应用到三维坐标系上也是同样的道理,就是先降维,再把条件&&起来,这里就不再赘述了)


在网上看到了很多解决方案,都是分情况讨论,虽然复杂度并不高,但是觉得代码量有点冗余。最后想到了如下算法能够判断出结果。


既然难以判断讨论相交关系,就直接判断不相交

显而易见的是,如果一个矩形在另一个矩形的上方/下方/左方/右方,那么俩个矩形一定不相交

我们设REC1的重心是P1(x1, y1),宽为W1,高为H1;REC2的重心是P2(x2, y2),宽为W2,高为H2

那么两个矩形重心的距离就是new Vector2 dis(x2 - x1, y2 - y1)

如果在x轴方向上重心距离小于两个矩形边长的和的一半,那么显然在x轴方向上它们相交,y轴同理

则:

if (((W1 + W2) / 2 >= dis.x) && ((H1 + H2) / 2 >= dis.y)) {

return true;

}

至于为什么用大于等于,是因为在我的应用中,边重合也算是相交


说完了如何判断相交,再说一下判断相交之后的矩形

我们可以想象到的是,通过重心距离依然可以判断相交区域


那么相交区域在X轴上的长就是 min((W1 + W2) / 2 - dis.x, min(W1, W2))

为什么要和min(W1, W2)比较呢,这是考虑包含的情况,这时相交区域总不能比矩形本身还大吧

Y轴同理


相交区域的边长求出来了,怎么求相交区域的顶点啥的呢?这里就不说了,按照这个思路大家自己也想想


以上,我自己也知道排版一塌糊涂,等有时间我学下Markdown再好好弄弄,这里想说声抱歉

计算几何----判断两矩形是否相交

问题定义:给定两个边与坐标轴平行的矩形,分别由左上角与右下角两点指定(以此同时,我们可以用右上和左下的两个点来进行推出同样的结果。),即矩形(P1,P2)与(P3,P4),判断两矩形是否相交。 ...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016年04月08日 00:01
  • 2131

Java——计算矩形是否相交、交集面积

按照这张图作为例子,两个矩形相交一定符合下面这个公式: (r1.x2  > r2.x1 &&     r2.x2 > r1.x1 &&    r1.y2 > r2.y1 &&   r2.y2...
  • u012476249
  • u012476249
  • 2016年11月24日 14:38
  • 1060

判断两矩形是否相交,相交的话 求出相交的面积和相交处比例

opencv_判断两矩形是否相交,相交的话 求出相交的面积和相交处比例 float bbOverlap(const BoundingBox& box1,const BoundingBox& box2)...
  • xiao_lxl
  • xiao_lxl
  • 2015年05月30日 10:10
  • 1953

判断矩形相交以及求出相交的区域

问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角坐标为(Xb2,Yb2)。           (1)...
  • chengyingzhilian
  • chengyingzhilian
  • 2013年03月13日 09:33
  • 2017

Opencv求两个矩形是否相交,以及他们的重叠度

在图像处理中经常会遇到判断两个矩形是否相交,以及相交的比例的情况,下面是来自TLD算法中源码的求法: float bbOverlap(const BoundingBox& box1,const ...
  • kezunhai
  • kezunhai
  • 2013年04月21日 14:20
  • 2814

快速判断两个矩形是否相交

两个矩形之间的位置关系无外乎图中的5中case. 难道我们要每个case都要判断一边,然后决定是否相交? 其实是有通用方法的。 如果两个矩形相交,那么矩形A B的中心...
  • szfhy
  • szfhy
  • 2015年11月09日 16:26
  • 1188

判断两个矩形是否相交(C++)

最近在研究opencv识别红绿灯的任务,用的是机器学习+图像处理的方法,但有个麻烦的问题就是误识别率很高,为了把这些误识别出的物体给过滤点,我想到了通过颜色占比的方法来过滤,结果是可以过滤点一部分,但...
  • woaitingting1985
  • woaitingting1985
  • 2016年12月05日 16:02
  • 1024

如何判断两个矩形是否相交

http://toumao.blog.sohu.com/13648650.html   有朋友在论坛上提问,如何判断两个矩形是否相交,他自己的初步想法是这样的:   1、一个矩形只有一个角的点在另...
  • szv123_rier
  • szv123_rier
  • 2012年10月22日 10:26
  • 3294

用js写了一个判断矩形相交的函数

基本思想求两个矩形是否相连或相交,两个矩形的最小外包矩形宽小于两个矩形宽的和,且两个矩形最小外包矩形的的高小于两个矩形高的和,则两个矩形相交。 外包矩形的宽等于两个矩形的y轴最大值减去y轴的最小值。...
  • qq_16253013
  • qq_16253013
  • 2017年09月30日 21:31
  • 208

判断两个矩形是否相交的算法

转载:http://blog.sina.com.cn/s/blog_7865b083010100ah.html 判断两个矩形是否相交的算法  (2011-11-07 19:38:48)...
  • u011483306
  • u011483306
  • 2015年04月29日 16:31
  • 1343
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算两个矩形是否相交以及相交的矩形
举报原因:
原因补充:

(最多只允许输入30个字)