六边形网格上的2个六边形之间的距离 [英] Distance between 2 hexagons on hexagon grid

查看:1586
本文介绍了六边形网格上的2个六边形之间的距离的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个六角形网格:





如何计算两个六边形之间的距离?





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



< ,2),(1,4))= 2

解决方案

首先应用transform(y,x)| - >



现在,面部邻接看起来像

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

让点数为(u1,v1)和(u2,v2)。令du = u2-u1和dv = v2-v1。距离是

 如果du和dv具有相同的符号:max(| du |,| dv |),对角线
如果du和dv有不同的符号:| du | + | dv |,因为对角线是无效的

在Python中:

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


I have a hexagon grid:

with template type coordinates T. How I can calculate distance between two hexagons?

For example:

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

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

解决方案

First apply the transform (y, x) |-> (u, v) = (x, y + floor(x / 2)).

Now the facial adjacency looks like

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

Let the points be (u1, v1) and (u2, v2). Let du = u2 - u1 and dv = v2 - v1. The distance is

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

In 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)

这篇关于六边形网格上的2个六边形之间的距离的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆