【问题标题】:Calculate distance in 2D int array efficiently有效计算二维 int 数组中的距离
【发布时间】:2017-05-16 04:59:28
【问题描述】:

我正在制作一个轰炸机类型的游戏。我想计算两点之间的距离;玩家可以向四个方向移动。如果我在 (0,0) 并且想去 (5,5),我可以使用出租车距离公式 ((5-0) + (5-0)) 计算距离,因为我只能水平移动和垂直的。

但现在我想在游戏中实现玩家无法通过的墙。

我目前的距离实现仅使用出租车公式。

int distanceTo(Position Pos)
{
    return (abs(this->x - Pos.x) + abs(this->y - Pos.y));
}

考虑到中间的不可移动的盒子/墙,我如何找到两点 (x1,y1) 和 (x2,y2) 之间的距离?

【问题讨论】:

  • 你的问题不是很清楚
  • @eyllanesc 请告诉我哪个部分不清楚,以便我进行相应的编辑。
  • 我不明白你想要什么。
  • @eyllanesc 完成编辑,请检查它现在是否可以理解。
  • 如果您想找到步数最少且可能有障碍物的路径,请阅读算法 A (又名 A 星)。 en.wikipedia.org/wiki/A_search_algorithm

标签: c++14 getdistance


【解决方案1】:

有了障碍物,您需要用更复杂的寻路算法替换简单的出租车距离公式。

你的网格有多大? Dijkstra 的算法适用于小网格,A*(Dijkstra 的修改)适用于较大的网格。

Amit Patel 有一个很好的资源来描述 Dijkstra 和 A*,以及每个的实现细节。您可以查看here

【讨论】:

  • 您好,感谢您的回答。我的网格是 11 X 13。如果我使用常量 0 表示可移动的位置,使用常量 1 表示不可移动的位置,你能告诉我一个实现吗?我真的很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 2021-01-19
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
相关资源
最近更新 更多