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)

C++

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


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find total area of two 
// overlapping Rectangles
class GFG
{
  
static class Point
{
    int x, y;
  
    public Point(int x, int y) 
    {
        this.x = x;
        this.y = y;
    }
};
  
// Returns Total Area of two overlap 
// rectangles
static int overlappingArea(Point l1, Point r1,
                           Point l2, Point r2)
{
    // Area of 1st Rectangle
    int area1 = Math.abs(l1.x - r1.x) *
                Math.abs(l1.y - r1.y);
  
    // Area of 2nd Rectangle
    int area2 = Math.abs(l2.x - r2.x) *
                Math.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 = (Math.min(r1.x, r2.x) - 
                 Math.max(l1.x, l2.x)) * 
                (Math.min(r1.y, r2.y) -
                 Math.max(l1.y, l2.y));
  
    return (area1 + area2 - areaI);
}
  
// Driver Code
public static void main(String[] args) 
{
    Point l1 = new Point( 2, 2 ), 
          r1 = new Point( 5, 7 );
    Point l2 = new Point( 3, 4 ), 
          r2 = new Point( 6, 9 );
    System.out.println(overlappingArea(l1, r1, l2, r2));
}
  
// This code is contributed by PrinciRaj1992

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.



Improved By : princiraj1992