给定起点坐标如何找到最近的目标?

时间:2016-10-26 19:52:32

标签: java math path distance

我的游戏中有2个目标。我正在使用广度优先搜索找到其中一个的路径。我想知道如何使用它们的坐标确定哪个是最近的目标。我有我的目标的X和Y坐标(所有int类型)。

 int result = 0;
 int target1dist = (playerX - target1x) + (playerY - target1y);
 int target2dist = (playerX - target2x) + (playerY - target2y);

 if (target1dist < target2dist){
     result = BFS(target1x,target1y,playerX ,playerY);
 } else {
     result = BFS(target2x,target2y,playerX ,playerY);
 }

当其中一个目标的距离为负时,这无效。所以我添加了绝对值功能。因此target1dist和target2dist不能为负数。

int target1dist =Math.abs ((playerX - target1x) + (playerY - target1y));

这是否是找到最近目标的有效方法,以便我的AI玩家可以指向它? P.S:我的Ai玩家只能走4个方向,所以排除了对角线。我的另一个想法是用毕达哥拉斯找到距离。

1 个答案:

答案 0 :(得分:0)

稍作修改,您的方法应该有效。您不希望获取完整表达式的绝对值,而是每个组件:

int traget1dist = Math.abs(playerX - target1x) + Math.abs(playerY - target1y);

这称为Manhattan distance,是基于磁贴的搜索的常用衡量标准。作为广度优先搜索是guaranteed to find the optimal solution,您的解决方案将起作用。