c – 六角网格上的2个六边形之间的距离

我有一个六角网格:

使用模板类型坐标T.如何计算两个六边形之间的距离?

例如:

dist((3,3),(5,5))= 3

dist((1,2),(1,4))= 2

解决方法

首先应用变换(y,x)| – > (u,v)=(x,y floor(x / 2)).

现在面部的邻接看起来像

0 1 2 3
0*-*-*-*
 |\|\|\|
1*-*-*-*
 |\|\|\|
2*-*-*-*

让点成为(u1,v1)和(u2,v2).令du = u2 – u1和dv = v2 – v1.距离是

if du and dv have the same sign: max(|du|,|dv|),by using the diagonals
if du and dv have different signs: |du| + |dv|,because the diagonals are unproductive

在Python中:

def dist(p1,p2):
    y1,x1 = p1
    y2,x2 = p2
    du = x2 - x1
    dv = (y2 + x2 // 2) - (y1 + x1 // 2)
    return max(abs(du),abs(dv)) if ((du >= 0 and dv >= 0) or (du < 0 and dv < 0)) else abs(du) + abs(dv)

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...