【发布时间】:2017-03-15 17:17:45
【问题描述】:
我想获取几个重叠矩形的外边界。
我已经编写了一个函数来计算给定矩形的邻居,但我想看看是否有办法获得相邻矩形的外边界。
这是我所拥有的:
def get_neighboring_rectangles (r, rectList):
overlapDict = {}
rminX, rmaxX, rminY, rmaxY = return_bbox_of_rectangle(r)
for rectCheck,ri in rectList:
if r == rectCheck: continue
rcminX, rcmaxX, rcminY, rcmaxY = return_bbox_of_rectangle(rectCheck)
for d in ['E', 'W', 'N', 'S']:
if not ((rcmaxY < rminY or rcminY > rmaxY) or (rcmaxY == rminY) or (rcminY == rmaxY)):
if d == 'W' and rcmaxX == rminX:
if d not in overlapDict: overlapDict[d] = []
overlapDict[d].append((rectCheck,ri))
if d == 'E' and rcminX == rmaxX:
if d not in overlapDict: overlapDict[d] = []
overlapDict[d].append((rectCheck,ri))
if not ((rcmaxX < rminX or rcminX > rmaxX) or (rcmaxX == rminX) or (rcminX == rmaxX)):
if d == 'S' and rcmaxY == rminY:
if d not in overlapDict: overlapDict[d] = []
overlapDict[d].append((rectCheck,ri))
if d == 'N' and rcminY == rmaxY:
if d not in overlapDict: overlapDict[d] = []
overlapDict[d].append((rectCheck,ri))
return overlapDict
上述程序返回每个方向的邻居:E、W、N、S。
以下是此功能涵盖的情况:
该函数只返回什么是直接邻居,但我希望有一个功能来返回所有相邻矩形的外边界:
在这种情况下,输入将是所有 3 个矩形的边界列表:
[[(0,0) (7,0) (7,4) (0,4)] [(4,4) (7,4) (7,6) (4,6)] [(1,6) (7,6) (7,10) (1,10)]]
预期输出 - [(0,0) (7,0) (7,10) (1,10) (1,6) (4,6) (4,4) (0,4)]
另外,请注意,可能有第四个矩形与上面的 3 个矩形不相邻。理想情况下,第四个边界应按原样返回。 (我可以使用我的邻居检测算法来完成)
对于如何解决这个问题,我有点迷茫。有没有具有这种功能的 Python 库?
【问题讨论】:
-
嘿,你能在输入中添加预期输出吗?
-
感谢您指出这一点。我现在已经添加了。
标签: python rectangles