Total area of two overlapping rectangles

Given two overlapping rectangles on a plane. We are given bottom left and top right points of the two rectangles. We need to find the total area (Green and pink areas in below diagram).

Examples:

Input : Point l1 = {2, 2}, r1 = {5, 7};
        Point l2 = {3, 4}, r2 = {6, 9};
Output : Total Area = 24 

Input :Point l1 = {2, 1}, r1 = {5, 5};
       Point l2 = {3, 2}, r2 = {5, 7};
Output : Total Area = 16

Asked in Juniper



We basically add areas of two rectangles. This includes intersecting part twice, so we subtract area of intersecting part.

Total Area = (Area of 1st rectangle + 
              Area of 2nd rectangle) - 
              Area of Intersecting part

Area of Rectangle = x_distance * y_distance

Where,
x_distance for 1st rectangle = abs(l1.x – r1.x)
y_distance for 1st rectangle = abs(l1.y – r1.y)

Similarly, we can compute area of 2nd rectangle.

For area of intersecting part,
x_distance for intersecting rectangle =
min(r1.x, r2.x) – max(l1.x, l2.x)
y_distance for 1st rectangle =
min(r1.y, r2.y) – max(l1.y, l2.y)

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find total area of two 
// overlapping Rectangles
#include <bits/stdc++.h>
using namespace std;
  
struct Point {
    int x, y;
};
  
// Returns Total Area  of two overlap 
// rectangles
int overlappingArea(Point l1, Point r1,
                    Point l2, Point r2)
{
    // Area of 1st Rectangle
    int area1 = abs(l1.x - r1.x) *
                abs(l1.y - r1.y);
  
    // Area of 2nd Rectangle
    int area2 = abs(l2.x - r2.x) *
                abs(l2.y - r2.y);
  
    // Length of intersecting part i.e 
    // start from max(l1.x, l2.x) of 
    // x-coordinate and end at min(r1.x,
    // r2.x) x-coordinate by subtracting 
    // start from end we get required 
    // lengths
    int areaI = (min(r1.x, r2.x) - 
                 max(l1.x, l2.x)) * 
                (min(r1.y, r2.y) -
                 max(l1.y, l2.y));
  
    return (area1 + area2 - areaI);
}
  
// Driver's Code
int main()
{
    Point l1 = { 2, 2 }, r1 = { 5, 7 };
    Point l2 = { 3, 4 }, r2 = { 6, 9 };
    cout << overlappingArea(l1, r1, l2, r2);
    return 0;
}

chevron_right


Output:

24


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.