java - 如何在给定起点坐标的情况下找到最近的目标?

标签 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: 我的人工智能玩家只能走 4 个方向,所以对角线被排除在外。我的另一个想法是使用毕达哥拉斯来计算距离。

最佳答案

稍微修改一下你的方法就应该可以工作。您不想取完整表达式的绝对值,而是取每个分量的绝对值:

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

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

关于java - 如何在给定起点坐标的情况下找到最近的目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271040/

相关文章:

javascript - 如何使用 __dirname 返回 1 级文件夹?

python - TensorFlow 中的简单分类

python - os.makedirs 不理解我路径中的 "~"

java - 在 CalendarView 中为日期着色

Linux 中的 Java 进程状态

python - 由于运行时错误,一个测试用例失败

math - 数组的加权质心

找不到指定的路径: CreateDirectoryW

java - ListView复选框位于文本之上,如何填充文本并强制复选框标准颜色?

java - 如何修复 jframe 上的空白屏幕并从文本字段设置 vgap 和 hgap 的值