所以我目前正在使用A *为我的游戏寻找路径,目前它制作了路径,但路径非常不正确。我会粗略地画出它创造的路径:
Start Node
Second Node
Third Node
Fourth Node Sixth Node
Fifth Node Seventh Node
Eighth Node Tenth Node
Ninth Node Eleventh Node
End Node
在使用调试器之后,我确定在第五个节点,右上,右和右右节点都共享完全相同的fCost。在这一点上,我只能假设它与我的getH
函数的结果有关。这是:
public int getH(int row, int col, Node goal)
{
return (int)Math.sqrt((goal.row - row) * (goal.row - row) + (goal.col - col) * (goal.col - col));
}
所以我的问题是,我在这里做错了什么?
在较小的测试(较少的节点)上,我不会遇到只使用对角线的问题。此外,没有实现绕过障碍的功能,所以这不是正在发生的事情。
答案 0 :(得分:2)
您使用整数来计算成本。通过将平方根的结果转换为int,您基本上可以抛弃重要性。转换为int与舍入不同。所以在这种情况下:
getH(...): 4.9 --> 4
getH(...): 4.1 --> 4
在这两种情况下,这些成本将成为相同的价值。使用双打来比较解决此问题的成本。
相关:How to cast a double to an int in Java by rounding it down?