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

两个矩形之间的位置关系无外乎图中的5中case.




难道我们要每个case都要判断一边,然后决定是否相交?

其实是有通用方法的。

如果两个矩形相交,那么矩形A B的中心点和矩形的边长是有一定关系的。

Case 2345中,两个中心点间的距离肯定小于AB边长和的一半。

Case 1中就像等了。

设A[x01,y01,x02,y02]  B[x11,y11,x12,y12].

矩形A和矩形B物理中心点X方向的距离为Lx:abs( (x01+x02)/2 – (x11+x12) /2)

矩形A和矩形B物理中心点Y方向的距离为Ly:abs( (y01+y02)/2 – (y11+y12) /2)

矩形A和矩形B X方向的边长为 Sax:abs(x01-x02)  Sbx: abs(x11-x12)

矩形A和矩形B Y方向的边长为 Say:abs(y01-y02)  Sby: abs(y11-y12)

如果AB相交,则满足下列关系:

Lx <= (Sax + Sbx)/2 && Ly <=(Say+ Sby)/2

C code:

static uint8_t is_rect_intersect(int x01, int x02, int y01, int y02,
	int x11, int x12, int y11, int y12)
{
	int zx = abs(x01 + x02 -x11 - x12);
	int x  = abs(x01 - x02) + abs(x11 - x12);
	int zy = abs(y01 + y02 - y11 - y12);
	int y  = abs(y01 - y02) + abs(y11 - y12);
	if(zx <= x && zy <= y)
		return 1;
	else
		return 0;
}
针对此问题,matlab中还有增强版的实现函数rectint(A,B) 返回交集的面积。有兴趣的可以单步调试下,看看实现方法。


Ref:

http://www.cnblogs.com/avril/archive/2012/11/13/2767577.html


  • 19
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
判断两个矩形是否相交,可以使用矩形对象的成员方法intersect或静态方法intersects进行判断。在Android开发中,可以使用Rect或RectF类来表示矩形。 根据引用的内容,两个矩形相交的条件是:两个矩形的重心距离在X和Y轴上都小于两个矩形长或宽的一半之和。可以将这个条件分成两次判断,首先计算两个矩形的重心距离,然后分别判断X轴和Y轴上的距离是否小于两个矩形长或宽的一半之和。 另外,引用提到在使用opencv编写文本定位程序时,也需要判断矩形是否相交。你可以参考上述方法来判断两个矩形是否相交。 总结来说,判断两个矩形是否相交可以使用矩形对象的intersect或intersects方法,或者按照两个矩形重心距离和长、宽的一半之和的条件进行判断。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [判断两个矩形是否相交](https://blog.csdn.net/hello____world_0109/article/details/114535827)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [判断两个矩形是否相交的4个方法](https://blog.csdn.net/weixin_30256901/article/details/96290400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值