如何将平顶六边形网格改为尖顶网格?已调顶点,需行列转换
平顶六边形网格转尖顶网格改造方案
核心改造步骤
坐标系映射调整
针对尖顶网格的排列逻辑,把原平顶网格的行列(q, r)做旋转式映射。假设你调整后的尖顶六边形宽为hex_width(对边距离)、高为hex_height(顶点距离),新的中心坐标计算公式应为:x = q * hex_width * 0.75 + (r % 2) * hex_width / 2 y = r * hex_height + (q % 2) * hex_height / 2这个公式的核心是:尖顶网格横向相邻六边形的中心间距为
hex_width * 0.75,纵向相邻(同列)间距为hex_height,且奇数列的六边形会在纵向偏移半个hex_height。邻居方向向量替换
原平顶网格的6个邻居方向要全部替换为尖顶网格的适配版本:- 原右邻居
(+1, 0)→ 保留 - 原左邻居
(-1, 0)→ 保留 - 原上邻居
(0, +1)→ 改为(+1, -1) - 原下邻居
(0, -1)→ 改为(-1, +1) - 原右上邻居
(+1, -1)→ 改为(0, +1) - 原左下邻居
(-1, +1)→ 改为(0, -1)
- 原右邻居
拾取/碰撞逻辑适配
如果原代码有点是否在六边形内的判断逻辑,最快的适配方式是:将待判断点相对于六边形中心旋转90度,再复用原平顶的判断逻辑;也可以直接修改尖顶六边形的顶点顺序(顶部→右上→右下→底部→左下→左上),用标准多边形点-in算法重新实现判断。渲染偏移校验
确认单个尖顶六边形的顶点坐标无误后,渲染网格时注意:奇数行(r为奇数)的每个六边形x坐标需要偏移半个hex_width,和原平顶网格的奇数列偏移逻辑对应,确保网格排列整齐。
快速验证方法
先渲染3×3的小网格,检查相邻六边形的对齐方式:尖顶网格中每个六边形的上下邻居是顶点对齐,左右邻居是边对齐,以此验证坐标系和方向向量是否正确。
内容的提问来源于stack exchange,提问作者mary-jane-s-not-the-same
相关产品推荐
相关产品推荐

