我有一个类似图片中的六边形网格,想要找到计算两个六边形之间距离的最简单方法(或者是公式)。当然,我的网格比这个大,但我想找到一种类似于在常规网格(具有水平和垂直轴)中计算两个节点之间距离时使用的欧几里德距离公式的公式。
我阅读了一些方法,但它们都说Y轴应该是60度,然后提供一些公式(六边形网格中瓦片之间的曼哈顿距离)。是否有一种使用与我上传的图片中相同的“坐标系”来计算距离的方法?
我有一个类似图片中的六边形网格,想要找到计算两个六边形之间距离的最简单方法(或者是公式)。当然,我的网格比这个大,但我想找到一种类似于在常规网格(具有水平和垂直轴)中计算两个节点之间距离时使用的欧几里德距离公式的公式。
我阅读了一些方法,但它们都说Y轴应该是60度,然后提供一些公式(六边形网格中瓦片之间的曼哈顿距离)。是否有一种使用与我上传的图片中相同的“坐标系”来计算距离的方法?
你可以使用应用于计算位置的普通公式来计算欧几里得距离。
假设我们从位置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))