计算六边形之间的网格距离

时间:2013-11-29 16:37:48

标签: hexagonal-tiles

enter image description here

我有一个像图片中那样的六边形网格,我试图找到最简单的方法(可能是一个公式)来计算这个网格内两个六边形之间的距离。当然,我的网格大小比这大,但是当我们计算规则网格中两个节点之间的距离(水平轴和垂直轴)时,我试图找到一个类似于欧几里德距离公式的公式。

我读了一些方法,但他们都说Y轴应该是60度,然后他们提供一些公式(Manhattan Distance between tiles in a hexagonal grid)。有没有办法使用与我上传的图片相同的“坐标系”来计算距离?

1 个答案:

答案 0 :(得分:2)

欧几里德距离

您可以使用应用于计算位置的常规公式来计算欧氏距离。

假设我们从位置a0,b0和a1,b1开始。

x位置由b * w给出,其中w是一个取决于六边形大小的常数。

y位置由(a + b / 2)* h给出。所以完整的公式是:

x0 = b0*w
x1 = b1*w
y0 = (a0+b0/2)*h
y1 = (a1+b1/2)*h 
dist = sqrt( (x1-x0)^2 + (y1-y0)^2 )

h是六边形的高度

w是六边形列之间的水平距离

w也可以作为h的函数计算:

w=sqrt(3)*h/2

六角距离

假设您可以从六边形移动到相邻的六边形。

您可以通过以下方式计算从一个六边形到另一个六边形的移动次数计数:

x0 = a0-floor(b0/2)
y0 = b0
x1 = a1-floor(b1/2)
y1 = b1
dx = x1 - x0
dy = y1 - y0
dist = max(abs(dx), abs(dy), abs(dx+dy))