判断两矩形是否相交

近期一次笔试中考到了这个题目,答题之后回来再看,发现网上的解答有些十分复杂,让人懒得去看。

隐约记得之前学习计算机图像学的课程时有这个算法。

我把自己的思路记下来,如有遗漏情况没有考虑或者方法有问题,欢迎拍砖:P

问题定义:给定两个边与坐标轴平行的矩形,分别由左上角与右下角两点指定,即矩形(P1,P2)与(P3,P4),判断两矩形是否相交。

我的思路:如下图所示,首先求出P1与P3点在X方向较大值与Y方向较大值的交点,在下图中就是P3,用红点(记为M点)表示。

然后求出P2与P4点在X方向较小值与Y方向较小值的交点,在下图中就是P2,用橙色点(记为N点)表示。

如果M点的X坐标和Y坐标值均比N点相应的X坐标和Y坐标值小,亦即M和N可以分别构成一个矩形的左上角点和右上角点,则两矩形相交;其余情况则不相交。

                                   图1

 

 

下图给出第二个示例,表明相交则矩形的某一个顶点位于另一矩形内部作为判断依据是错误的。

                            图2

 

图3给出了相互包含的情况:

                            图3

下图给出了不相交时的示例,两矩形为上下关系,可见红点不在橙色点左上角,不能构成矩形,因此不相交。

                          图4

 

下面的例子同上,给出了两矩形为左右关系的情况。

                 图5

转载于:https://www.cnblogs.com/avril/archive/2013/04/01/2993875.html

### Matlab 中判断矩形是否相交 为了在 MATLAB 中检测矩形是否相交,可以利用内置函数 `rectint` 或者手动编写逻辑来完成这一任务。 #### 使用内置函数 rectint MATLAB 提供了一个名为 `rectint` 的内建函数用于计算矩形之间的交集面积。当返回的结果大于零时,则表示这矩形存在重叠部分;反之则说明它们之间不存在任何交叉区域[^4]。 ```matlab % 定义矩形 A 和 B 的位置参数 (左下角坐标,宽度,高度) posA = [xa1 ya1 widthA heightA]; posB = [xb1 yb1 widthB heightB]; % 计算并打印交集面积 intersectionArea = rectint(posA, posB); if intersectionArea > 0 disp('Rectangles intersect.'); else disp('No intersection found.'); end ``` #### 手动实现算法 如果不希望通过调用库函数的方式解决问题,也可以通过比较各个边界条件来自定义解决方案: - 如果一个矩形完全位于另一个矩形左侧、右侧、上方或下方,则二者不会发生碰撞; - 只要满足上述任一情况之外的情形就意味着发生了碰撞。 具体代码如下所示: ```matlab function result = doRectsIntersect(xa1,ya1,xa2,ya2, xb1,yb1,xb2,yb2) % 判断是否有任何一个矩形处于另一矩形的一侧 if xa2 < xb1 || xa1 > xb2 || ya2 < yb1 || ya1 > yb2 result = false; else result = true; end end % 调用自定义函数进行测试 result = doRectsIntersect(Xa1,Ya1,Xa2,Ya2, Xb1,Yb1,Xb2,Yb2); if result disp('Rectangles intersect.'); else disp('No intersection found.'); end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值