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

5

enter image description here

我有一个类似图片中的六边形网格,想要找到计算两个六边形之间距离的最简单方法(或者是公式)。当然,我的网格比这个大,但我想找到一种类似于在常规网格(具有水平和垂直轴)中计算两个节点之间距离时使用的欧几里德距离公式的公式。

我阅读了一些方法,但它们都说Y轴应该是60度,然后提供一些公式(六边形网格中瓦片之间的曼哈顿距离)。是否有一种使用与我上传的图片中相同的“坐标系”来计算距离的方法?


你想要从 (0,0) 到 (1,1) 的距离是多少?是 2(即计算方块数),还是你想要实际的欧几里得距离(在这种情况下,边长是多少)? - Peter de Rivaz
1个回答

5

欧几里得距离

你可以使用应用于计算位置的普通公式来计算欧几里得距离。

假设我们从位置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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接