2016-04-26 107 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时间复杂度,但它应该能够生成各种路径。

在实现数据结构方面,双向链表似乎是直接候选。

相关问题