我給出了一組座標。座標的順序有些隨意,但座標聚集在一起以形成不同的區域。我正在努力創建一個算法,以便按照正確的順序創建各個路徑。我一直在尋找通過尋路和圖像處理解決方案來解決這個問題,但迄今爲止沒有運氣。將座標點排序到路徑
座標可以如下所示。
任何人都可以提供一些幫助,創造一個算法將這些座標(以正確的順序)爲路徑排序?
我給出了一組座標。座標的順序有些隨意,但座標聚集在一起以形成不同的區域。我正在努力創建一個算法,以便按照正確的順序創建各個路徑。我一直在尋找通過尋路和圖像處理解決方案來解決這個問題,但迄今爲止沒有運氣。將座標點排序到路徑
座標可以如下所示。
任何人都可以提供一些幫助,創造一個算法將這些座標(以正確的順序)爲路徑排序?
該問題似乎有點具有挑戰性,因爲其中一條路徑實際上由兩個循環組成。在此圖像中它仍然是可行的,如果正確的起始位置選擇,但考慮到這一點:
XXX XX XXX XXXXX
X X X XXX X X X
X X X X X XXXXX X
XXX XX XX X XXXX
XXXXXXX XX
很容易地看到,在任意路徑,我們將結束與柯尼斯堡*七橋」(順便說一句。 ,這個問題是時下可能的,因爲在橋的數量有些變化,解決...)
至少有兩種可能如何改變的問題,使之可解:
找到路徑段並不是很具有挑戰性,但將它們組合成循環需要更詳細地定義問題。
在路徑查找中,我們需要能夠確定路徑從屬於路徑的單個點開始走向的所有方向。這可以通過考慮像素的所有可能的3×3鄰域來完成。
還有一個額外的要求:如果一條路徑從像素A到相鄰像素B,則必須在這兩條路徑之間存在反向路徑。這個要求縮小了可能性。此外,還有很多對稱性(90°旋轉,鏡像)。
應當注意的是,可能有多達4個近鄰(以下配置):
.X. X.X
XXX .X.
.X. X.X
在評論中介紹的優先規則上面是一個很好的一個。所以:
後者規則可以由所示的直接鄰居路徑/ :
.XX .N.
XX. => N .
..X ..N
其中N代表鄰居。
因此,每個點都有一個0..4個相鄰點的列表。鄰近點有類似的列表,所以連接是一對一的。
但現在我們有挑戰性的部分。如何將連接信息合併到列表中?
最簡單的情況:
之後,我們有段和交叉口。以這個答案開頭的例子,我們有:
111 33 666 AAAAA
1 1 3 X5X 6 A A
1 1 3 4 7 X8X99 A
11X X4 77 B XAAA
2222222 BB
這裏0..B表示段和X是他們的3或4交叉。
似乎是能夠被用來簡化該結果至少一種有用的規則:
在我們的例子中這可以被應用到最左邊的循環:
111 33 666 AAAAA
1 1 3 X5X 6 A A
1 1 3 4 7 X8X99 A
111 X4 77 B XAAA
1111111 BB
然後對每3交叉,有三種方法來連接它:
/ / /
/ / /
/ /
----- --- -- |
\ \
\ \ \
\ \ \
對於每個4交叉有四種不同的可能性:
| | | |
/ \
--------- --- --- --- --- --- ---
/ \
| | | |
正如我的圖具有五個3點和一個4交叉,有3^5 x 4 = 972不同的方式來連接這些段。這可以通過詳盡的搜索來完成,但是必須確定哪個解決方案最好。可能需要最小化路徑的數量,但是最大化最長路徑還是最大化最短路徑會更好?或者是其他東西?
還有一些優化的空間,因爲幾種不同的組合段的方式可能會得到基本相同的結果(在3個交叉點處的所有末端的迴路可以運行兩種方式)。
總結:
找到鄰近連接
易箱子連接成段(0,1,或2個鄰居)
的情況下,在曲中所示的結果estion不需要最後一條規則,因爲只有兩個微不足道的3交叉點。
一種解決方案:
重複此操作,直到圖像爲空。您將有一組路徑。
不幸的是,這並不能確保路徑中座標的順序是正確的。 (https://www.dropbox.com/s/mha4tb51aguq6kb/coordinates.jpg)我怎麼能確定這裏座標的順序是(a,b,...,c,d)而不是(a ,c,...,b,d)? – gromit190
只需在對角線之前嘗試水平/垂直鄰居 – Thomash
恐怕在對角線將座標分成三條路徑之前,優先考慮水平/垂直鄰居。 (https://www.dropbox.com/s/2izertblaa6hmxd/coordinates2.jpg)考慮順序將在這裏:第一條路徑(a,d,c,...,e,f,...,b) 。下一個路徑將是(g,...)。 區域1和區域2應合併爲一條單一路徑。 – gromit190
這是一個非常有用的答案,非常感謝! – gromit190
如果你發現它有用(和工作),你甚至可以接受它作爲anwser。但是,如果您發現邏輯中存在一些缺陷,請告訴它,以便提高答案! – DrV
其實任何座標都不會出現4交叉。我將用JavaScript方法制作一個網頁以顯示我當前的解決方案,鏈接將在今天晚些時候發佈 – gromit190