However, that algorithm only deals with finding the areas of only TWO overlapped rectangles.

How would I go on about finding the area of the intersection of say 3, or 4 or 5, etc number of overlapping rectangles, if I know the length, breadth of each rectangle?

解决方案

Shapely is a good library for stuff like this.

from shapely.geometry import box

# make some rectangles (for demonstration purposes and intersect with each other)

rect1 = box(0,0,5,2)

rect2 = box(0.5,0.5,3,3)

rect3 = box(1.5,1.5,4,6)

rect_list = [rect1, rect2, rect3]

# find intersection of rectangles (probably a more elegant way to do this)

for rect in rect_list[1:]:

rect1 = rect1.intersection(rect)

intersection = rect1

To visualize what's happening here. I plot the rectangles and their intersection:

from matplotlib import pyplot as plt

from matplotlib.collections import PatchCollection

from matplotlib.patches import Polygon

# plot the rectangles before and after merging

patches = PatchCollection([Polygon(a.exterior) for a in rect_list], facecolor='red', linewidth=.5, alpha=.5)

intersect_patch = PatchCollection([Polygon(intersection.exterior)], facecolor='red', linewidth=.5, alpha=.5)

# make figure

fig, ax = plt.subplots(1,2, subplot_kw=dict(aspect='equal'))

ax[0].add_collection(patches, autolim=True)

ax[0].autoscale_view()

ax[0].set_title('separate polygons')

ax[1].add_collection(intersect_patch, autolim=True)

ax[1].set_title('intersection = single polygon')

ax[1].set_xlim(ax[0].get_xlim())

ax[1].set_ylim(ax[0].get_ylim())

plt.show()

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐