2012-07-01 19 views
6

我正在研究一种基于Theta *的寻路算法,这是一种A *的变体,它提供了一种不受网格约束的寻路系统,即使地形/障碍物基于网格模式。这个系统需要一个视线算法来确定一个特定的路径是否被阻塞。如何修改这个视线算法来接受穿过角落的光线?

我发现this非常有用的视线算法,我已经在我的代码中成功实现了它。不幸的是,它认为下面是一个无效的路径:

grid

然而,我的目的,我要考虑这样的路径有效。我试图通过使用基本的y = mx + b公式检测点是否在线上来修改算法,但算法的不一致性阻止了我依赖这样的系统。

是否有任何有效的方法来修改这个算法来允许这样的路径?有另一种算法可以更好地工作吗?请记住,路径的开始点和结束点将会由而不是必须限制在网格中,因此所有点都使用double精度。

回答

4

您引用的代码实际上忽略了显式处理线条穿过网格点(四个方格接触)的情况。您需要检查error == 0

在这种情况下,最多只能触摸网格点的四个正方形中的一个可能被阻挡,仍然有一条有效路径。

Regards, Erich

+0

好的,很酷,工作。但是,你能指出我为什么这么做吗?我*有点理解它,但我不完全。 –

+0

1.'error == 0'意味着你的服务水平正在达到一个网格点 –

+0

对,我明白了,但是你能详细说明'错误'值通常会起什么作用吗? –