在Python中查找多个重叠矩形的交集区域

Fal*_*908 3 python rectangles area

我尝试使用此处显示的算法:https://discuss.leetcode.com/topic/15733/my-java-solution-sum-of-areas-overlapped-area

然而,该算法仅涉及找到仅两个重叠矩形的区域.

如果我知道每个矩形的长度和宽度,我将如何继续找到3个,4个或5个等重叠矩形的交叉区域?

ben*_*ten 7

对于像这样的东西,Shapely是一个很好的库.

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
Run Code Online (Sandbox Code Playgroud)

想象一下这里发生了什么.我绘制矩形及其交点:

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 看看文档:https://pypi.python.org/pypi/Shapely.如果您使用的是Anaconda dist,则可以在命令行中使用`conda install shapely`(推荐). (2认同)
  • 好吧,如果我们假设所有输入矩形彼此相交,那么建议的 for 循环计算似乎是合理的。但是一般情况下给出了一个矩形列表,如何有效地找到多个矩形(> 2)是否有任何重叠区域。 (2认同)