检查两个矩形之间的交叉点?

时间:2009-12-04 09:44:45

标签: c++ intersection testing

如果我有两个矩形,其位置是使用两个2D矢量定义的(即左上角,右下角),我如何检查它们相交的点?

4 个答案:

答案 0 :(得分:4)

我假设您实际上想要交叉的结果,而不仅仅是两个矩形相交的测试。

rect1 =(l1,t1,r1,b1)和rect2 =(l2,t2,r2,b2)的交点也是一个矩形:

rectIntersection = ( max(l1, l2), max(t1, t2), min(r1, r2), min(b1, b2) )

rectIntersection当然是空的,如果left >= right || top >= bottom假设一个矩形是左/顶 - 包含和右/底 - 独占。

如果

,矩形相交
l1 < r2 && l2<r1 && t1<b2 && t2<t1

答案 1 :(得分:2)

假设原点位于屏幕的left-top

如果检查一个矩形(x3,y3)的左上角是否小于另一个矩形(x2,y2)的右下角,则两个矩形相交。

积分为(x2,|y2-y3|)(|x2-x3|,y2)

这是针对rectangle1右侧的rectangle1和reactangle2。

对左翻译应用反向。

答案 2 :(得分:1)

两个矩形重叠是至少有一个内部点X,Y两者共有。让第一个rectable为{T1, L1, B1, R1},第二个为{T2, L2, B2, R2}(top,left,bottom,right)。现在它遵循(X>L1)(X<R1)以及(Y>T1)(Y<B1),类似于矩形2.从(X>L1)(X<R2)开始,{ {1}}。同样,(L1<R2)(L2<R1)(T1<B2)

这四个条件因此是必要的。直接显而易见的是它们也足够了,但情况也是如此。

答案 3 :(得分:0)

如果您对功能更感兴趣,而不是实现算法,
在Windows上查看IntersectRect Function