2013-11-01 65 views
0

hell-o guys!好吧,我在隨機散步。中點位移給出了一些不錯的成績,但我想這個屏幕上熱不走循環隨機遊走,像那些(黃色): enter image description here如何在中點位移時避免重疊? (2D)

我首先要解決這一問題的想法是檢查每個如果與所有其他片段有交集,則刪除兩個片段之間的步進環,並在片斷點處進行綁定。但對於一些散步,它會給一個奇怪的結果,這樣的一個:

enter image description here

,當黃色部分是一個循環,我們可以看到,走的很大一部分會,如果我這樣做被刪除我所說。

也許另一種方法是檢查中點位移時是否分段。如果有交叉路口,請換另一個位移。但它看起來變得非常快的時間耗費在細分數上升...

所以我想知道是否有避免這些循環

+0

你能提供一些鏈接到中點位移和隨機遊走的資源嗎?我對這些術語並不熟悉,Google主要回顧這個問題。 :-) – templatetypedef

+0

actualy我正在使用我自己的代碼。我沒有特殊資源。這個想法很簡單:在中點處劃分一段,在新點處添加一個隨機位移。再次通過分割每個片段開始,等等...... –

回答

0

這樣的方式......它似乎與打隨機數的幅度是避免重疊的好方法: enter image description hereenter image description here

沒有位移的路徑用青色繪製。我沒有與這些displacments得到重疊:

do{ 
    dx = (D>0)? 0.5*sqrt((double)(rand()%D)) - sqrt((double)D)/2. : 0 ; 
    dz = (D>0)? 0.5*sqrt((double)(rand()%D)) - sqrt((double)D)/2. : 0 ; 
    }while(dx*dx+dz*dz>D); 

其中D平方,我們想置換點的兩個neibourers之間距離。需要(D>0)?以避免一些Floating Point Exception