如果我有两个矩形,其位置使用两个二维向量(即左上角、右下角)定义,我如何检查它们相交的点?
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
假设原点left-top
在屏幕上。
如果检查一个矩形的左上角(x3,y3)
是否小于另一个矩形的右下角,(x2,y2)
则两者相交。
点是(x2,|y2-y3|)
和(|x2-x3|,y2)
。
这是针对矩形1右侧的矩形1和反应角度2。
对左平移应用逆。
两个矩形重叠是至少有一个内部点 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 个条件是必要的。它们是否足够也不是很明显,但事实也是如此。
如果您对完成这项工作的函数更感兴趣,而不是实现算法,
请查看Windows 上的IntersectRect 函数。