如何在中点位移期间避免重叠? (2D)

时间:2013-11-01 02:08:06

标签: c++ random-walk

地狱啊伙计们! 好吧,我正在玩随机游走。中点位移给出了一些不错的结果,但是我想要一个没有步行循环的随机游走,就像这个屏幕上的那些(黄色) - 热: enter image description here

我处理这个问题的第一个想法是检查每个段是否存在与所有其他段的交集,然后删除两个段之间的步行循环并在交互点处绑定。但是对于一些散步,它会产生一个奇怪的结果,就像那个:

enter image description here

黄色部分是一个循环,我们可以看到,如果按照我所说的那样,将删除大部分步行。

也许另一种方法是检查中间点的位移,如果这些段是相互关联的。如果有交叉路口,则获得另一个位移。但是当细分数量增加时,它看起来很快就会变得非常耗时......

所以我想知道是否有办法避免这些循环

1 个答案:

答案 0 :(得分:0)

所以...它似乎正在玩随机数的幅度是避免重叠的好方法: enter image description here enter image description here

没有位移的路径以青色绘制。我没有与这些位移重叠:

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