船舶运动算法

时间:2010-12-02 10:49:46

标签: algorithm geometry path-finding

假设我们有一个长方形的海。它非常大 - 10000x20000。

我们也有岛屿。为简单起见,我们假设它们也是矩形的。我们知道它们的确切位置(坐标)。

如果我们在地图上的某个地方有一艘船 - (x1,y1),我们怎样才能找到到地图上另一个点(x2,y2)的最短路径而不越过任何一个岛?

更新:到目前为止,对船舶或海洋没有任何限制。如果我们可以通过添加一些来简化(并加速)事情 - 这非常受欢迎。

路径甚至不一定是最好的 - 例如可以10%折扣 - 完全可以接受。

4 个答案:

答案 0 :(得分:6)

  1. aproximate islands与2D poligons的边界
  2. 将分离的poligons(以及起点和终点)的顶点与边连接(它们不能跨越岛)
  3. 将A *应用于结果图
  4. 此图表远小于10000x20000网格,让我们在更好的时间内找到更真实的路径

    更新:如果岛屿不大,您可以沿着终点方向移动船只并绕过左侧或右侧边界的岛屿

答案 1 :(得分:1)

我会尝试将网格表示为图形并运行Dijkstra算法。

图表可能需要1G甚至更多,但它适合任何现代计算机中的RAM。

算法复杂度为O(E + V * log(V)),即O(网格的大小)。由于有~10 ^ 8个节点,我猜它一定是可行的。假设每个节点有大约1000个CPU刻度。如果我们有4G CPU,则刻度为2.5 * 10 ^ -10秒,即我们有2.5 * 10-7秒。每个节点。对于2 * 10 ^ 8个节点,我们有~1分钟。

答案 2 :(得分:0)

如果这些岛屿看起来比较稀疏,你可以使用我去年实施的算法,让机器人在有物体的环境中追逐移动球。

我所做的是定义机器人,球和障碍物周围的网格点,并在整个环境中添加稀疏的均匀网格。两个网格点之间的边缘成本取决于障碍物与该边缘的接近程度(如果边缘穿过障碍物成本将是无限的)。然后使用A *计算最佳路线。这在旧笔记本电脑上每秒完成40次,用Java编程。

答案 3 :(得分:0)

与Tiendil的建议相关,LaValle的规划算法书中讨论了如果岛是二维多边形,graphs for shortest-path searches中要包含哪些边。