簡體   English   中英

如何在給定的矩形列表中找到與特定矩形相鄰的所有矩形?

[英]How can I find all rectangles adjacent to particular rectangle on a given list of rectangles?

給定一個矩形 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) 的解決方案

制作 2 個列表,一個包含 X 坐標對象,一個包含包含 Y 坐標的對象。

對象將由(坐標、矩形編號以及坐標對應於最小值還是最大值)組成。

對兩個列表進行排序 O(nlogn) 並遍歷任何一個。 在遇到最小坐標時將矩形添加到堆棧中,在遇到最大坐標時刪除矩形。 如果多個矩形堆疊在一起,則將它們添加到一個組中,而刪除一個矩形時,該組將對應於所有重疊的矩形。 存儲此類組的信息。 使用另一個列表執行相同的過程。 從 X 和 Y 列表中獲得的組中的公共矩形將是重疊矩形。

解決方案是 O(nlogn)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM