python六边形网格_六边形网格地图算法细节介绍

本文介绍了如何通过调整六边形网格的坐标排布来简化距离计算公式和邻接单元格的遍历。采用新的坐标系统,距离公式变为 `d = min(dx+dy, max(dx, dy))`,并且遍历临近单元格的步骤变得更加清晰。尽管地图视觉上呈现平行四边形而非传统的长方形,但这种设计大大减少了计算复杂度,尤其适用于需要快速遍历和距离计算的游戏场景。" 118443673,10763799,解决MySQL批量插入与唯一索引大小写问题,"['数据库', 'MySQL', '索引']
摘要由CSDN通过智能技术生成

六边形网格通常用于战棋类游戏,目的是提供比四边形地图更平滑的距离体验(尤其是圆看起来更像圆了)。关于他的好处和坏处我不想多说,通常来讲,大家会认为他的计算复杂度要远高于四边形地图。

实际上大多数的六边形地图看起来是这样:

1,1 --- 2,1 --- 3,1 --- 4,1

--- 1,2 --- 2,2 --- 3,2 --- 4,2

1,3 --- 2,3 --- 3,3 --- 4,3

--- 1,4 --- 2,4 --- 3,4 --- 4,4

这确实使得我们在距离计算上出现了一些麻烦(有兴趣的朋友可以自行推导距离公式)

但是最近我发现,如果我们改变一下坐标排布,那么很多事情会变得简单起来

(当然,虽然大多数市面上游戏都是上面这样显示的,但他们底层的算法并不公开,所以不能说明他们的坐标系就是这么设计的,但三国志11显示了每个格子的坐标,这使得我常年以来是按照他的方式去设计坐标系的,也许更多游戏早就采用了我下面所说的方法吧)

当我尝试着将坐标系调整成:

1,1 --- 2,1 --- 3,1 --- 4,1

--- 1,2 --- 2,2 --- 3,2 --- 4,2

--- --- 1,3 --- 2,3 --- 3,3 --- 4,3

--- --- --- 1,4 --- 2,4 --- 3,4 --- 4,4

我惊讶的发现,距离公式变成了

d = min( dx+dy, max(dx, dy))

其中dx,dy分别是两点x,y坐标差的绝对值(实际上,两点连线斜率为负时,是max(dx,dy),否则是dx+dy)

这使得很

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值