计算两个矩形是否相交以及相交的矩形
来源:互联网 发布:淘宝卖家怎么发布宝贝 编辑:程序博客网 时间:2024/05/01 20:58
最近在开发的时候遇到一个问题,就是要判断在同一个直角坐标系下,两个边与坐标轴平行的矩形是否相交。
(应用到三维坐标系上也是同样的道理,就是先降维,再把条件&&起来,这里就不再赘述了)
在网上看到了很多解决方案,都是分情况讨论,虽然复杂度并不高,但是觉得代码量有点冗余。最后想到了如下算法能够判断出结果。
既然难以判断讨论相交关系,就直接判断不相交
显而易见的是,如果一个矩形在另一个矩形的上方/下方/左方/右方,那么俩个矩形一定不相交
我们设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再好好弄弄,这里想说声抱歉
- 计算两个矩形是否相交以及相交的矩形
- Opencv求两个矩形是否相交,以及相交的比值
- Opencv求两个矩形是否相交,以及相交的比值
- 两个矩形是否相交
- 判断两个矩形是否相交的算法
- 判断两个矩形是否相交
- 判断两个矩形是否相交
- 判断两个矩形是否相交
- 判断两个矩形是否相交
- 判断两个矩形是否相交
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域(生成的相交矩形)
- 矩形相交区域的计算
- 矩形相交区域的计算
- MFC-局域网聊天工具bug集锦
- div+css制作网页的一些分享
- Android Intent匹配解析
- 简单定制Android控件(2) - 点赞列表控件
- centOS6.5安装配置openVPN
- 计算两个矩形是否相交以及相交的矩形
- hog自学
- 《剑指offer》——把数组排成最小的数
- NOIP 2015 简记
- [转载]如何在德州仪器网站查找下载封装
- impress.js的绚丽演示文稿效果
- Apache虚拟目录与虚拟主机配置
- ble协议栈cc2540x-1.3.2之通过key处理过程看任务、事件、消息机制
- 传智播客javase总结 3