跳至主要內容

0836. 矩形重叠

ITCharge大约 1 分钟

0836. 矩形重叠open in new window

  • 标签:几何、数学
  • 难度:简单

题目链接

题目大意

给定两个矩形的左下角、右上角坐标:[x1, y1, x2, y2]。[x1, y1] 表示左下角坐标,[x2, y2] 表示右上角坐标。如果两个矩形相交面积大于 0,则称两矩形重叠。

要求:根据给定的矩形 rec1 和 rec2 的左下角、右上角坐标,如果重叠,则返回 True,否则返回 False。

解题思路

如果两个矩形重叠,则两个矩形的水平边投影到 x 轴上的线段会有交集,同理竖直边投影到 y 轴上的线段也会有交集。因此我们可以把问题看做是:判断两条线段是否有交集。

矩形 rec1 和 rec2 水平边投影到 x 轴上的线段为 (rec1[0], rec1[2])(rec2[0], rec2[2])。如果两条线段有交集,则 min(rec1[2], rec2[2]) > max(rec1[0], rec2[0])

矩形 rec1 和 rec2 竖直边投影到 y 轴上的线段为 (rec1[1], rec1[3])(rec2[1], rec2[3])。如果两条线段有交集,则 min(rec1[3], rec2[3]) > max(rec1[1], rec2[1])

判断是否满足上述条件,若满足则说明两个矩形重叠,返回 True,若不满足则返回 False。

代码

class Solution:
    def isRectangleOverlap(self, rec1: List[int], rec2: List[int]) -> bool:
         return min(rec1[2], rec2[2]) > max(rec1[0], rec2[0]) and min(rec1[3], rec2[3]) > max(rec1[1], rec2[1])