我处理这个问题的第一个想法是检查每个段是否存在与所有其他段的交集,然后删除两个段之间的步行循环并在交互点处绑定。但是对于一些散步,它会产生一个奇怪的结果,就像那个:
黄色部分是一个循环,我们可以看到,如果按照我所说的那样,将删除大部分步行。
也许另一种方法是检查中间点的位移,如果这些段是相互关联的。如果有交叉路口,则获得另一个位移。但是当细分数量增加时,它看起来很快就会变得非常耗时......
所以我想知道是否有办法避免这些循环
答案 0 :(得分:0)
所以...它似乎正在玩随机数的幅度是避免重叠的好方法:
没有位移的路径以青色绘制。我没有与这些位移重叠:
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
。