如何在给定的矩形列表中找到与特定矩形相邻的所有矩形?

时间:2018-10-09 12:00:18

标签: python algorithm computational-geometry

给出一个矩形R1和一个矩形列表R2,R3,... 如何找到与主矩形R1连接的所有矩形。

我不仅需要直接连接到R1的矩形,还需要所有间接连接到R1的矩形。 例如,如果R2连接到R1,而R3连接到R2。 R3被认为已连接到R1。

矩形以(xmin,ymin,xmax,ymax)形式给出。 所有矩形均与轴平行。 当矩形重叠或接触时,它们被视为已连接。 当他们仅碰触角落时,就不会被视为已连接。

示例:

____________
_111________
_11122______
____22______
____22______
____333333__ 
____22______
__55___4444_
__55___4444_ 

在此示例中,R1,R2,R3相互连接。所以我需要返回R1,R2,R3。

R4和R5未连接。

一个显而易见的解决方案是将每个矩形与另一个O(n ^ 2)进行比较。 但是我认为应该有更快的解决方案。 我尝试将“实施扫掠线算法”与“间隔树”一起使用。但这很慢。 我需要O(n log n)的解决方案

1 个答案:

答案 0 :(得分:0)

制作2个列表,一个包含X坐标对象,另一个包含Y对象。

对象将由(坐标,矩形编号以及坐标对应于最小还是最大)组成。

排序两个列表O(nlogn)并遍历任何一个。遇到最小坐标时,将矩形添加到堆栈中,遇到最大坐标时,将矩形删除。如果将多个矩形一起添加到堆栈中,则将它们添加到一个组中,同时删除一个矩形,该组将对应于所有重叠的矩形。存储此类组的信息。使用其他列表执行相同的过程。从X和Y列表中获得的组中的公共矩形将是重叠的矩形。

解决方案是O(nlogn)。