欢迎光临散文网 会员登陆 & 注册

六角格棋盘距离计算的一种思路

2023-06-23 19:45 作者:查稽查稽查稽  | 我要投稿

六角格棋盘广泛应用于战棋游戏中。比起四角格棋盘,六角格棋盘的距离计算更加复杂。关于六角格的距离计算,有非常多的思路和解决方案,本文仅从数学的角度简单介绍一种方法。


一、如何定义六角格棋盘的距离

在平面上,与某点距离相同的点集合是一个圆。在六角格棋盘中,与某格距离相同的格集合是个“六边形”,如图1所示,用相同颜色表示距离相同的格。

图1  六角格棋盘的距离


二、六角格棋盘的坐标

    1. 四角格棋盘的坐标

先来分析较为简单的四角格,如图2所示。

图2  四角格棋盘中有四个运动方向

在四角格中,由某一格向相邻的格移动时,有四个运动方向:i,-i,j,-j

i%3D(1%2C%5C%200)

-i%3D(-1%2C%5C%200)

j%3D(0%2C%5C%201)

-j%3D(0%2C%5C%20-1)

从格(0%2C%5C%200)经过若干次运动到达某一格,每次运动的向量和,即为该格的坐标。由此绘制四角格棋盘的坐标,如图3所示。

图3  四角格棋盘的坐标


    2. 六角格棋盘的坐标

在六角格中,由某一格向相邻的格移动时,有六个运动方向:i,-i,j,-j,k,-k

i%3D(1%2C%5C%200%2C%5C%200)

-i%3D(-1%2C%5C%200%2C%5C%200)

j%3D(0%2C%5C%201%2C%5C%200)

-j%3D(0%2C%5C%20-1%2C%5C%200)

k%3D(0%2C%5C%200%2C%5C%201)

-k%3D(0%2C%5C%200%2C%5C%20-1)

如图4所示。


图4  六角格棋盘中有六个方向

从格%5Cleft(0%2C0%2C0%5Cright)经过若干次运动到达某一格,每次运动的向量和,即为该格的坐标。

但是这样会带来一个问题:我们都知道平面上的一点只需要两个坐标就可以确定了,现在我们用了三个坐标,必然有一个是不独立的。由 i%2Bj%2Bk%3D0 可知,坐标

(a%2C%5C%20b%2C%5C%20c)

(a%2B1%2C%5C%20b%2B1%2C%5C%20c%2B1)

(a%2B2%2C%5C%20b%2B2%2C%5C%20c%2B2)

……

(a%2Bk%2C%5C%20b%2Bk%2C%5C%20c%2Bk)

……

描述的是同一个格。

因此,我们设法舍掉一个坐标。对于坐标(a%2C%5C%20b%2C%5C%20c)来说,%5Cleft(a-c%2Cb-c%2C0%5Cright)是同一个格。将第三个坐标变为0并舍去,每个格就有了统一的坐标%5Cleft(a-c%2Cb-c%5Cright)。如图5所示。


图5  六角格棋盘的坐标

不难看出,用两个坐标想要直观计算六角格棋盘的距离还是太困难,在推导中仍将采用三坐标进行计算,最后再将结果双坐标化表示。


三、六角格棋盘的距离计算

    1. 四角格棋盘的距离

易知,四角格棋盘中格(a%2C%5C%20b)与格(0%2C%5C%200)的距离r

r%3D%5Cleft%7Ca%5Cright%7C%2B%5Cleft%7Cb%5Cright%7C

推导过程如下:

假设我们从格(0%2C%5C%200)出发,走任意路径到达格(a%2C%5C%20b),设我们进行i运动的次数是A_1-i运动的次数是A_2j运动的次数是B_1-j运动的次数是B_2,那么我们走过的路程s

s%3DA_1%2BA_2%2BB_1%2BB_2

且有

a%3DA_1-A_2

%7Bb%3DB%7D_1-B_2

定义

s_A%3DA_1%2BA_2

s_A%5E2%3DA_1%5E2%2BA_2%5E2%2B2A_1A_2%3Da%5E2%2B4A_1A_2%5Cgeq%20a%5E2

s_A%5Cgeq%5Cleft%7Ca%5Cright%7C

取等条件A_1%3D0A_2%3D0

同理有

s_B%3DB_1%2BB_2%5Cgeq%5Cleft%7Cb%5Cright%7C

s%3Ds_A%2Bs_B%5Cgeq%5Cleft%7Ca%5Cright%7C%2B%5Cleft%7Cb%5Cright%7C

定义所有路径中路程最小值为距离r,则有

r%3D%5Cleft%7Ca%5Cright%7C%2B%5Cleft%7Cb%5Cright%7C

对于更一般的情况,格(a_1%2C%5C%20b_1)与格(a_2%2C%5C%20b_2)的距离r

r%3D%5Cleft%7Ca_2-a_1%5Cright%7C%2B%5Cleft%7Cb_2-b_1%5Cright%7C


    2. 六角格棋盘的距离

根据对四角格的讨论,我们得到路程s和距离r有以下结论:

s%5Cgeq%5Cleft%7Ca%5Cright%7C%2B%5Cleft%7Cb%5Cright%7C

r%3D%5Cleft%7Ca%5Cright%7C%2B%5Cleft%7Cb%5Cright%7C

在六角格中,假如我们从(0%2C%5C%200%2C%5C%200)出发,走任意路径到达(a%2C%5C%20b%2C%5C%20c),类比易得如下结论:

s%5Cgeq%5Cleft%7Ca%5Cright%7C%2B%5Cleft%7Cb%5Cright%7C%2B%5Cleft%7Cc%5Cright%7C

那么

r%3D%5Cleft%7Ca%5Cright%7C%2B%5Cleft%7Cb%5Cright%7C%2B%5Cleft%7Cc%5Cright%7C

是否也成立呢?

答案是不成立,因为abc三个坐标并不是唯一的。根据对六角格棋盘坐标的讨论,我们可以得到:

s%5Cgeq%5Cleft%7Ca%5Cright%7C%2B%5Cleft%7Cb%5Cright%7C%2B%5Cleft%7Cc%5Cright%7C

s%5Cgeq%5Cleft%7Ca%2B1%5Cright%7C%2B%5Cleft%7Cb%2B1%5Cright%7C%2B%5Cleft%7Cc%2B1%5Cright%7C

s%5Cgeq%5Cleft%7Ca%2B2%5Cright%7C%2B%5Cleft%7Cb%2B2%5Cright%7C%2B%5Cleft%7Cc%2B2%5Cright%7C

……

s%5Cgeq%5Cleft%7Ca%2Bk%5Cright%7C%2B%5Cleft%7Cb%2Bk%5Cright%7C%2B%5Cleft%7Cc%2Bk%5Cright%7C

……

在这些右式中的最小值才是距离r

如何求得这个最小值,关键是找到对应的k。在数轴上,%5Cleft%7Ca%2Bk%5Cright%7C对应a-k的距离,%5Cleft%7Cb%2Bk%5Cright%7C对应b-k的距离,%5Cleft%7Cc%2Bk%5Cright%7C对应c-k的距离。不妨假设a%5Cle%20b%5Cle%20c,那么:

%5Cleft%7Ca%2Bk%5Cright%7C%2B%5Cleft%7Cc%2Bk%5Cright%7C%5Cgeq%5Cleft%7Ca-c%5Cright%7C

取等时a%5Cle%20-k%5Cle%20c

s%5Cgeq%5Cleft%7Ca%2Bk%5Cright%7C%2B%5Cleft%7Cb%2Bk%5Cright%7C%2B%5Cleft%7Cc%2Bk%5Cright%7C%5Cgeq%5Cleft%7Ca-c%5Cright%7C%2B%5Cleft%7Cb%2Bk%5Cright%7C%5Cgeq%5Cleft%7Ca-c%5Cright%7C

取等时k%3D-b

s%5Cgeq%20max%5C%7Ba%2C%5C%20b%2C%5C%20c%5C%7D-min%5C%7Ba%2C%5C%20b%2C%5C%20c%5C%7D

r%3Dmax%5C%7Ba%2C%5C%20b%2C%5C%20c%5C%7D-min%5C%7Ba%2C%5C%20b%2C%5C%20c%5C%7D

以上为三坐标下六角格的距离。

若以双坐标(a%2C%5C%20b)进行表示:

假如我们从(0%2C%5C%200)出发,走任意路径到达(a%2C%5C%20b)→假如我们从(0%2C%5C%200%2C%5C%200)出发,走任意路径到达(a%2C%5C%20b%2C%5C%200)

c%3D0的特殊情况,有

r%3Dmax%5C%7Ba%2C%5C%20b%2C%5C%200%5C%7D-min%5C%7Ba%2C%5C%20b%2C%5C%200%5C%7D

对于更一般的情况,格(a_1%2C%5C%20b_1)与格(a_2%2C%5C%20b_2)的距离r

r%3Dmax%5C%7Ba_2-a_1%2Cb_2-b_1%2C%5C%200%5C%7D-min%5C%7Ba_2-a_1%2Cb_2-b_1%2C%5C%200%5C%7D

此式即为六角格棋盘中任意两格的距离。


六角格棋盘距离计算的一种思路的评论 (共 条)

分享到微博请遵守国家法律