我有一个平面图,上面有许多代表摊位的d3.js多边形对象。我想知道最好的方法是找到两个不与其他对象重叠的对象之间的路径。这里的用例是我们有摊位,并希望向用户展示如何步行从a点到b点最有效率。我们可以假设路径必须只包含90或45度转弯。
我们开始使用Dijkstra,但它的规模似乎远离了我们。
我们系统的示例快照:
我们的限制是需要在浏览器中运行。如果它与d3.js一起使用会很好。
答案 0 :(得分:4)
由于布局是矩阵(或嵌套矩阵),这不是Dijkstra问题,它比这更简单。该问题的技术名称是“Manhatten路由”。我将向您展示下图中最佳路径(蓝线)的示例,而不是给出代码算法。从这一点可以明显看出算法是什么:
请注意,这里有一个微妙的细微差别,那就是你总是希望最大化慢跑的数量,因为即使整体形状是一个矩阵,在每个角落,这个人实际上会对角走(想想一个人在对角线上切割四路交叉口)。因此,简单地向北走,然后向西走是错误的,因为你只能切出一个角落,但是在显示的路线上你可以切出5个弯角。
答案 1 :(得分:2)
这个问题被称为寻找具有多边形障碍的两点之间的最短路径,并且在文献中进行了大量研究。有关示例,请参阅here。所有算法都是通过将问题转换为图论问题然后运行Dijkstra。要做到这一点:
现在我们准备运行任何最短路径算法。困难的部分是三角测量,我认为triangle库适合您的要求。更简单的方法是通过我在第一行中说的关键字来搜索网络以查找实现。我没有链接到任何实现,因为我认为最好以算法的方式说它对未来的读者有用。