Intersection of N rectangles
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
Introduction
The intersection of N rectangles is a classic problem in computational geometry with applications in computer graphics, geospatial analysis, and operations research. This article delves into the technical aspects of the problem, exploring efficient algorithms and providing examples to illustrate the concepts.
Problem Statement
Given N axis-aligned rectangles in a 2D plane, the objective is to determine the intersection area shared by all rectangles. This involves finding a polygon (or possibly degenerate to a point or line) that represents the common region.
Technical Explanation
To solve the intersection problem, consider the basic properties of axis-aligned rectangles:
- Each rectangle can be described by two pairs of coordinates: `(x1, y1)` for the bottom-left corner and `(x2, y2)` for the top-right corner.
- The problem boils down to computing the overlapping area defined by these coordinates.
Conditions for Intersection
For two rectangles defined by `(x1, y1, x2, y2)` and `(x1', y1', x2', y2')`, the intersection exists if and only if:
- `x1 < x2'` and `x2 > x1'`
- `y1 < y2'` and `y2 > y1'`
These conditions ensure that the rectangles overlap in both the x and y directions.
Generalization to N Rectangles
For more than two rectangles, this concept is extended by repeatedly applying the intersection conditions across all pairs. Define the intersection coordinates `(x_min, y_min, x_max, y_max)` by:
- `x_min = max(x1, x1', ..., xN1)`
- `y_min = max(y1, y1', ..., yN1)`
- `x_max = min(x2, x2', ..., xN2)`
- `y_max = min(y2, y2', ..., yN2)`
The intersection area, if it exists, is given by the conditions:
- `x_min < x_max`
- `y_min < y_max`
Algorithm
- Initialize the intersection bounds: `x_min = -∞`, `y_min = -∞`, `x_max = ∞`, `y_max = ∞`.
- Iterate over each rectangle and update the bounds:
- `x_min = max(x_min, rect.x1)`
- `y_min = max(y_min, rect.y1)`
- `x_max = min(x_max, rect.x2)`
- `y_max = min(y_max, rect.y2)`
- Check the intersection conditions:
- If `x_min < x_max` and `y_min < y_max`, compute intersection area: `(x_max - x_min) * (y_max - y_min)`.
- Otherwise, the intersection area is zero.
Example
Consider three rectangles:
- Rect1: `(1, 2, 3, 4)`
- Rect2: `(2, 1, 4, 5)`
- Rect3: `(0, 3, 5, 6)`
Following the algorithm:
- Compute `x_min = max(1, 2, 0) = 2`
- Compute `y_min = max(2, 1, 3) = 3`
- Compute `x_max = min(3, 4, 5) = 3`
- Compute `y_max = min(4, 5, 6) = 4`
The intersection is valid since `x_min < x_max` and `y_min < y_max`. The area is `(3 - 2) * (4 - 3) = 1`.
Applications
- Computer Graphics: Handling overlapping objects efficiently in rendering pipelines.
- Geospatial Analysis: Finding common areas in geographic information systems (GIS) for urban planning.
- Operations Research: Optimizing resource allocation that fits within overlapping constraints.
Key Points Summary
Here's a table summarizing the key concepts and conditions:
| Property | Description |
| Rectangle Description | (x1, y1) - Bottom-left corner (x2, y2) - Top-right corner |
| Intersection Existence (2 Rectangles) | Conditions: x1 \< x2', x2 > x1'
y1 \< y2', y2 > y1' |
| N-Rectangle Intersection Coordinates | x\_min = max(x1, x1', ..., xN1)
y\_min = max(y1, y1', ..., yN1)
x\_max = min(x2, x2', ..., xN2)
y\_max = min(y2, y2', ..., yN2) |
| Intersection Area | If x\_min \< x\_max and y\_min \< y\_max, then area =(x\_max - x\_min)\*(y\_max - y\_min) |
Conclusion
The intersection of N rectangles is a fundamental problem with broad applicability. Understanding the principles behind computing shared areas and the algorithmic approach helps solve complex spatial problems across various disciplines.
Related reading
- Intersection of polygons
- Intersection of two convex polygons
- Interview challenge Find the different elements in two arrays
- Interview question - Search in sorted array X for index i such that Xi i
- Inverting a 4x4 matrix
- Is 161803398 A 'Special' Number? Inside of Math.Random
- Interview question Check if one string is a rotation of other string
- Interview Question Data structure for a large social network

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.