判断两个矩形相交以及求出相交的区域
来源:互联网 发布:网络教育毕业鉴定 编辑:程序博客网 时间:2024/05/21 07:49
http://051031wangcj.blog.163.com/blog/static/334067622010112841335693/
问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2)。
(1)设计一个算法,确定两个矩形是否相交(即有重叠区域)
(2)如果两个矩形相交,设计一个算法,求出相交的区域矩形
(1) 对于这个问题,一般的思路就是判断一个矩形的四个顶点是否在另一个矩形的区域内。这个思路最简单,但是效率不高,并且存在错误,错误在哪里,下面分析一 下。
如上图,把矩形的相交(区域重叠)分成三种(可能也有其他划分),对于第三种情况,如图中的(3),两个矩形相交,但并不存在一个矩形的顶点在另一个矩形 内部。所以那种思路存在一个错误,对于这种情况的相交则检查不出。
仔细观察上图,想到另一种思路,那就是判断两个矩形的中心坐标的水平和垂直距离,只要这两个值满足某种条件就可以相交。
矩形A的宽 Wa = Xa2-Xa1 高 Ha = Ya2-Ya1
矩形B的宽 Wb = Xb2-Xb1 高 Hb = Yb2-Yb1
矩形A的中心坐标 (Xa3,Ya3) = ( (Xa2+Xa1)/2 ,(Ya2+Ya1)/2 )
矩形B的中心坐标 (Xb3,Yb3) = ( (Xb2+Xb1)/2 ,(Yb2+Yb1)/2 )
所以只要同时满足下面两个式子,就可以说明两个矩形相交。
1) | Xb3-Xa3 | <= Wa/2 + Wb/2
2) | Yb3-Ya3 | <= Ha/2 + Hb/2
即:
| Xb2+Xb1-Xa2-Xa1 | <= Xa2-Xa1 + Xb2-Xb1
| Yb2+Yb1-Ya2-Ya1 | <=Y a2-Ya1 + Yb2-Yb1
(2) 对于这个问题,假设两个矩形相交,设相交之后的矩形为C,且矩形C的左上角坐标为(Xc1,Yc1),右下角坐标为(Xc2,Yc2),经过观察上图,很 显然可以得到:
Xc1 = max(Xa1,Xb1)
Yc1 = max(Ya1,Yb1)
Xc2 = min(Xa2,Xb2)
Yc2 = min(Ya2,Yb2)
这样就求出了矩形的相交区域。
另外,注意到在不假设矩形相交的前提下,定义(Xc1,Yc1),(Xc2,Yc2),且Xc1,Yc1,Xc2,Yc2的值由上面四个式子得出。这样, 可以依据Xc1,Yc1,Xc2,Yc2的值来判断矩形相交。
Xc1,Yc1,Xc2,Yc2只要同时满足下面两个式子,就可以说明两个矩形相交。
3) Xc1 <= Xc2
4) Yc1 <= Yc2
即:
max(Xa1,Xb1) <= min(Xa2,Xb2)
max(Ya1,Yb1) <= min(Ya2,Yb2)
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域(生成的相交矩形)
- 判断矩形相交以及求出相交的区域
- 判断矩形相交以及求出相交的区域
- 【矩阵相交】矩形相交以及求出相交的区域的原理解析
- 判断两个矩形是否相交,相交区域面积
- opencv_判断两矩形是否相交,相交的话 求出相交的面积和相交处比例
- 计算两个矩形是否相交以及相交的矩形
- 矩形相交 判断 - 相交区域坐标计算
- 判断两个矩形是否相交的算法
- Opencv求两个矩形是否相交,以及相交的比值
- Opencv求两个矩形是否相交,以及相交的比值
- 如何判断两个矩形相交
- 判断两个矩形是否相交
- 微信公众平台开发教程(六)获取个性二维码
- 微信二维码登录原理
- 数字革命——美联邦政府先行一步颠覆管理模式
- 20160907给全志R58增加一个lunch为cb5801.txt
- Android仿iOS样式的dialog
- 判断两个矩形相交以及求出相交的区域
- ubuntu 环境下qt的安装
- WEB前端面试题整理
- angularjs directive 获取scope内容不正确的问题。
- 实现最简单的TCP连接
- poj 3894 迷宫
- 微信公众平台开发教程(七)安全策略
- 端口二三事
- oracle多表查询