# [836] 矩形重叠
矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。
如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形,判断它们是否重叠并返回结果。
示例 1:
输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
输出:true
示例 2:
输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
输出:false
提示:
两个矩形 rec1 和 rec2 都以含有四个整数的列表的形式给出。
矩形中的所有坐标都处于 -10^9 和 10^9 之间。
x 轴默认指向右,y 轴默认指向上。
你可以仅考虑矩形是正放的情况。
这道题我们可以通过反证的方式来思考。即若两矩形不重合,那么应满足什么条件。
当两矩形不重合时,矩形2(x3,y3,x4,y4)对于矩形1(x1,y1,x2,y2)的方位一共有上、下、左、右四种可能。分别来考虑:
- 当矩形2在左时,即矩形2的右边坐标小于矩形1的左边坐标,即x4 <= x1
- 当矩形2在右时,即矩形2的左边坐标大于矩形1的右边坐标,即x3 >= x2
- 当矩形2在下时,即矩形2的上边坐标小于矩形1的下边坐标,即y4 <= y1
- 当矩形2在上时,即矩形2的下边坐标大于矩形1的上边坐标,即y3 >= y2
结合四种情况,即可得出,两矩形不重合的条件为:x4 <= x1 || x3 >= x2 || y4 <= y1 || y3 >= y2
那么将该条件取反,即可得到两矩形重合的条件了:x4 > x1 && x3 < x2 && y4 > y1 && y3 < y2
var isRectangleOverlap = function(rec1, rec2) {
return rec2[2] > rec1[0] && rec2[0] < rec1[2] && rec2[3] > rec1[1] && rec2[1] < rec1[3]
};