计算圆形地图上2个点之间的距离

时间:2012-07-08 09:42:49

标签: algorithm 2d

我目前正在尝试创建一个视频游戏,其中角色是人工智能,并且是一个带有资源的圆形地图。

我目前正在尝试计算此地图上2点之间的最短距离,但我的问题是地图是圆形的:例如

如果我的地图是20 * 20并且我在(0,0)中,则(19,0)点的距离仅为1。我一直在网上看,但我没有找到问题的答案。 我必须照顾我的角色的方向(西南东北),他必须转向点,距离必须更长。

是否有现有公式?

感谢阅读!

2 个答案:

答案 0 :(得分:5)

对于每个坐标选择最小距离,然后照常使用。

int dx = min(abs(x0-x1),20-abs(x0-x1));
int dy = min(abs(y0-y1),20-abs(y0-y1));

对于欧几里德距离:

double dist = sqrt(dx * dx + dy * dy);

对于曼哈顿距离:

int dist = dx + dy;

答案 1 :(得分:3)

问题仍然是图表中的shortest path problem,您只需要为圆形地图添加边缘:

G = (V,E)其中V = {all squares}E = { (u,v) | [(u.x + 1 % 20 = v.x or u.x -1 % 20 = v.x) and u.y == v.y] or ... [same for y] }

上面的数学符号是什么:如果(并且仅当),两个正方形之间存在边缘,它们的x或y坐标之间的差异在Z 20 中为1或-1(modolus 20环)。由于环Z 20 本身就是圆形 - 它解决了地图的圆度问题。

根据此图表,您可以使用BFS从单个来源查找最短路径(不需要dijkstra算法,因为图表未加权)

注意:如果没有障碍物,只需使用常规距离函数计算,但在数学中使用Z 20 环而不是Z字段。