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

原创 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再好好弄弄,这里想说声抱歉

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

http://051031wangcj.blog.163.com/blog/static/334067622010112841335693/ 问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,...

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

http://051031wangcj.blog.163.com/blog/static/334067622010112841335693/ 问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,...

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

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

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

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

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

最近在用opencv寫一個文本定位的程序,獲取到字符輪廓之後需要進行合並,涉及到判斷矩形是否相交的問題,記得去年去三星通信研究院面試同樣問到了這個問題,如何判斷兩條線段是否相交,如何判斷兩個矩形是否相...

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

http://blog.csdn.net/cxf7394373/article/details/7535105 最近在用opencv寫一個文本定位的程序,獲取到字符輪廓之後需要進行合並,涉及到判斷矩...

【算法】计算机图形学的一些经典小题:判断点在多边形内,随机生成三角形内的点,判断两个矩形是否相交等

前几天面试的时候被问到了,如何随机在三角形内生成点,我按照我的想法回答了一遍,但觉得回答的不够好。最后面试官说了一个最优的方法。觉得不错,顺带总结一下最近看到的一些关于计算机图形学方面的经典小题,知乎...

Halcon实战记录之二《判断两个直线或者矩形是否相交》

项目中使用到需要判断两个矩形是否相交,由于我使用Halcon不久,对其算子还不熟悉,不知道是否有现成的算子可以直接实现,如果有,还请各位朋友给留言指出,先谢谢了,我这里用了如下的方法。...

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

如果两个矩形相交,则必然存在线条交叉,而能交叉的线条只有横线和竖线,两根横线或两根竖线都不可能交叉。所以,这个问题就转化成寻找是否存在交叉的横线与竖线。   另外,A线与B线交叉等价于B线与A线交叉...

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

http://toumao.blog.sohu.com/13648650.html   有朋友在论坛上提问,如何判断两个矩形是否相交,他自己的初步想法是这样的:   1、一个矩形只有一个角的点在另...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算两个矩形是否相交以及相交的矩形
举报原因:
原因补充:

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