可以通过检查两个矩形的投影区间是否有重叠来判断它们是否相交。具体来说:
-
矩形
rec1 = [x1, y1, x2, y2]
-
矩形
rec2 = [a1, b1, a2, b2]
它们在 x 轴上重叠的条件是:
它们在 y 轴上重叠的条件是:
只有当上述两个条件都满足时,矩形才重叠。
Python 代码:
def isRectangleOverlap(rec1, rec2):
return (max(rec1[0], rec2[0]) < min(rec1[2], rec2[2]) and
max(rec1[1], rec2[1]) < min(rec1[3], rec2[3]))
# 测试
print(isRectangleOverlap([0, 0, 2, 2], [1, 1, 3, 3])) # True
print(isRectangleOverlap([0, 0, 1, 1], [1, 1, 2, 2])) # False
解释:
-
第一个测试用例:
-
max(0,1) = 1
,min(2,3) = 2
,满足1 < 2
-
max(0,1) = 1
,min(2,3) = 2
,满足1 < 2
-
矩形重叠,返回
True
-
-
第二个测试用例:
-
max(0,1) = 1
,min(1,2) = 1
,1 < 1
不成立 -
矩形仅在边界接触,不算重叠,返回
False
-
这样,我们就可以高效地判断两个矩形是否重叠了!