# 题目: 223. 矩形面积

给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积。

每个矩形由其 左下 顶点和 右上 顶点坐标表示:

  • 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。
  • 第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。

# 示例1:

20210930073911

输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2
输出:45

# 示例2:

输入:ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2
输出:16

# 提示:

# 题解: 计算重叠面积

两个矩形覆盖的总面积等于两个矩形面积之和减去两个矩形重叠的部分。

# 矩形面积计算

因为左下顶点,右上顶点已知,因此可以:

# 重叠面积计算

通过 两个已存在矩形的左下和右上顶点 来得出重叠矩形的左下和右上顶点

左下:

  • x: 两个左下较大的x
  • y: 两个左下较大的y

右上:

  • x: 两个右上较小的x
  • y: 两个右上较小的y

右上的x,y 必须要比 左下的x,y要大,以确保两个矩形产生了重叠面积,否则则重叠面积为0。

# 代码

var computeArea = function(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {
    const rectangleArea =  (ax2-ax1)*(ay2-ay1) + (bx2-bx1)*(by2-by1)
    const overlapWidth = Math.min(ax2,bx2) - Math.max(ax1,bx1)
    const overlapHeight = Math.min(ay2,by2) - Math.max(ay1,by1)
    if(overlapWidth<=0||overlapHeight<=0){
        return rectangleArea
    }
    return rectangleArea - overlapWidth*overlapHeight
};

# 参考资料