微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

原文地址:https://www.jb51.cc/c/116148.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐