Rectangle Area

medium math geometry

Problem

Given the bottom-left and top-right corners of two axis-aligned rectangles, compute the total covered area (overlap counted once).

InputA=(-3,0,3,4), B=(0,-1,9,2)
Output45
Areas 24 + 27 − overlap 6 = 45.

def compute_area(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2):
    area_a = (ax2 - ax1) * (ay2 - ay1)
    area_b = (bx2 - bx1) * (by2 - by1)
    ow = max(0, min(ax2, bx2) - max(ax1, bx1))
    oh = max(0, min(ay2, by2) - max(ay1, by1))
    return area_a + area_b - ow * oh
function computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {
  const areaA = (ax2 - ax1) * (ay2 - ay1);
  const areaB = (bx2 - bx1) * (by2 - by1);
  const ow = Math.max(0, Math.min(ax2, bx2) - Math.max(ax1, bx1));
  const oh = Math.max(0, Math.min(ay2, by2) - Math.max(ay1, by1));
  return areaA + areaB - ow * oh;
}
class Solution {
    public int computeArea(int ax1, int ay1, int ax2, int ay2,
                          int bx1, int by1, int bx2, int by2) {
        int areaA = (ax2 - ax1) * (ay2 - ay1);
        int areaB = (bx2 - bx1) * (by2 - by1);
        int ow = Math.max(0, Math.min(ax2, bx2) - Math.max(ax1, bx1));
        int oh = Math.max(0, Math.min(ay2, by2) - Math.max(ay1, by1));
        return areaA + areaB - ow * oh;
    }
}
int computeArea(int ax1, int ay1, int ax2, int ay2,
                int bx1, int by1, int bx2, int by2) {
    int areaA = (ax2 - ax1) * (ay2 - ay1);
    int areaB = (bx2 - bx1) * (by2 - by1);
    int ow = max(0, min(ax2, bx2) - max(ax1, bx1));
    int oh = max(0, min(ay2, by2) - max(ay1, by1));
    return areaA + areaB - ow * oh;
}
Time: O(1) Space: O(1)