如何在两点之间画直线并逃避障碍物?

时间:2019-04-12 14:01:16

标签: algorithm math canvas routing

我想在两点之间绘制路径,并且那里有一些矩形障碍物。路径必须使用直线段。 可能有一种算法。 谢谢!

2 个答案:

答案 0 :(得分:0)

一个想法:

  1. 画一条直线作为第一线段。
  2. 检查是否有任何线段命中矩形。 (如果没有,那么您就完成了。)
  3. 如果有的话,将线段替换为两条线段,这些线段到达矩形的两个角中的较近者,这意味着绕线。
  4. 重复步骤2。

在这里您可以看到此过程的三个迭代(红色→绿色→蓝色)。

enter image description here

当然,这只是关于入门的粗略想法。它不适用于相交的矩形(感谢@sneftel)或不完全位于该区域内的矩形,并且也不确定在简单情况下是否找到最佳解决方案。

要获得最佳路径,我想唯一的选择是遍历所有可能的矩形角组合(并进行一些可能的优化)。

答案 1 :(得分:0)

在最佳路径中,如果有一条,则每个线段的起点和终点都是矩形障碍物的起点,终点或拐角。

您可以在这些点的图形上使用A *算法来找到最短路径,如果两个点之间的线没有越过障碍,则两个点将通过图形中的一条边连接。

请参阅:https://en.wikipedia.org/wiki/A*_search_algorithm