如果我有两个矩形,它们的位置是使用两个二维向量定义的(即左上角,右下角),那么如何检查它们相交的点?
矩形rect1 = (l1, t1, r1, b1)和矩形rect2 = (l2, t2, r2, b2)的交集又是一个矩形:
rectIntersection = ( max(l1, l2), max(t1, t2), min(r1, r2), min(b1, b2) )
如果假设一个矩形是左/上包含,右/下不包含的,并且 left >= right || top >= bottom
,那么rectIntersection当然为空。
如果矩形相交,则满足以下条件:
l1 < r2 && l2<r1 && t1<b2 && t2<t1
(x3,y3)
是否小于另一个矩形的右下角坐标 (x2,y2)
,则两个矩形相交。(x2,|y2-y3|)
和 (|x2-x3|,y2)
。如果两个矩形有至少一个内部点X,Y是共同的,则它们重叠。设第一个矩形为{T1, L1, B1, R1}
,第二个矩形为{T2, L2, B2, R2}
(上、左、下、右)。现在有(X>L1)
和(X<R1)
以及(Y>T1)
和(Y<B1)
,对于矩形2也是类似的。从(X>L1)
和(X<R2)
可以得出(L1<R2)
。同样地,(L2<R1)
,(T1<B2)
和(T2<B1)
。
这4个条件是必要的。它们是否充分并不直接明显,但事实上也是如此。
fsel
,现代编译器也完全能够为您优化这样的代码。只要不妨碍它,那就可以了。 无论如何,这个解决方案给出了_正确_的结果(不像其他一些解决方案)。 如果需要,它可以在以后进行优化。 - Tomek Szpakowiczl3,t3,r3,b3
表示中间交集结果,那么仅检查r3-l3 <0 || b3-t3 <0
是否更快? - Philip Kamenarsky