2016-04-26 48 views
3

我需要生成一個具有25個段的隨機路徑,它們決不會在1000x1000區域中的兩個位置之間穿越。什麼是一個好的算法來做到這一點?什麼是生成隨機路徑的好算法?

我最初的想法是生成一個好結果,使用space partitioning method生成一個隨機多邊形,然後移除一邊。

結果是這樣的: output

這種方法的缺點是,一開始總是相當接近結束(因爲它們最初是由一條線連接)。

另一個缺點是因爲它們是一個多邊形,整體形狀會產生某種形式或扭曲的圓。有很多類型的路徑永遠不會生成,如螺旋。

有沒有人知道一個算法,可以幫助我生成這些路徑?

回答

2

這裏有一個想法(免責聲明:我的頭,沒有經過測試,驗證或什麼...的頂部):

繪製隨機座標和「嘗試」以線繪製的順序連接 - 讓你有P1 (X1,Y1)然後P2 (x2,y2)和您連線,然後P3 (X3,Y3)只要創建無交集(你必須測試每次),你不斷繪製和連接。最終會生成十字路口 - 然後嘗試將最後一個點(Pn-1:在新創建的點之前)連接到形成相交線的兩個點的較早點(我們稱這些爲Pi & 皮+ J。如果這是有效的(意思是,它不跨越任何其他線路),您斷開連接線,你PN-1連接皮+ J不再來)並從Pi + j(現在根據點順序變成Pn-1)恢復。 f連接Pn-1Pi是無效的,你做同樣的事情,但與新發現的十字路口。

最終你會解決的交點(S)和將連接到最新的點 - 光合速率並且可以正常恢復。

這個算法的一個明顯缺點是它有一個非常危險的Big-O時間複雜度,但它應該能夠生成各種路徑。

在實現數據結構方面,雙向鏈表似乎是直接候選。