3

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

4

4 回答 4

4

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

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
于 2009-12-04T10:03:35.790 回答
2

假设原点left-top在屏幕上。

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

点是(x2,|y2-y3|)(|x2-x3|,y2)

这是针对矩形1右侧的矩形1和反应角度2。

对左平移应用逆。

于 2009-12-04T09:59:24.507 回答
1

两个矩形重叠是至少有一个内部点 X,Y 两者共有。让第一个矩形成为{T1, L1, B1, R1}第二个{T2, L2, B2, R2}(上、左、下、右)。现在它遵循(X>L1)and(X<R1)(Y>T1)and (Y<B1),并且对于矩形 2 类似。从(X>L1)and(X<R2)它遵循(L1<R2)。同样(L2<R1)(T1<B2)(T2<B1)

因此,这 4 个条件是必要的。它们是否足够也不是很明显,但事实也是如此。

于 2009-12-04T10:00:42.937 回答
0

如果您对完成这项工作的函数更感兴趣,而不是实现算法,
请查看Windows 上的IntersectRect 函数

于 2009-12-04T10:18:03.780 回答