用算法绘制六角网格的最简单方法是什么?我应该如何在数据中呈现它们?
例如,在方形网格中,我可以只保存 xy 坐标..
用算法绘制六角网格的最简单方法是什么?我应该如何在数据中呈现它们?
例如,在方形网格中,我可以只保存 xy 坐标..
所以hexagon 是一个简洁的 AS3 游戏库,它有一些 hexagon 类可能在你的研究中很方便。这篇文章有一些关于 Flash 中六边形图块的非常好的细节。
有几种方法可以管理十六进制地图坐标,其中大多数不直观地坚持将它们映射到仅对渲染很重要的 xy 坐标。某种形式的极坐标通常是最好的。我有一个用于管理大多数矢量计算的 perl 库,它是非常有用的参考点计算,如 AI 和其他搜索树。
http://en.wikipedia.org/wiki/Polar_coordinate_system
对于廉价座位,极坐标将一个点绘制为原点(如标准 xy 笛卡尔图),选择一个向量作为基线(如笛卡尔),然后将点指定为(幅度,度数)。
十六进制地图真正击中本垒打的地方在于,每个纯角度都是 60 度的倍数。如果您为每个六角边分配一个面 ((a,b,d,e,f,g) 并应用一个向量作为幅度和面,就会出现几个有用的属性。
1)每个十六进制可以表示为两个相邻向量的总和(或单个向量,其中第二个向量是大小为 0 或单位元素)。例如 1a+1b = 1a1b 或 1b1a。无论哪种方式,它都是 2 个十六进制的遍历,大小为 2,并从原点 (0,0) 指定一个唯一的十六进制。2) 应用这些规则,非相邻向量总是可以简化为两个相邻向量: 2) 否定:1A + 1D = 0, 1B + 1E = 0, 1C + 1F = 0,例如 3) 组合:1A + 1C = 1B , 1B + 1D = 1C, 1C + 1E = 1D, 1D + 1F = 1E, 1E + 1A = 1F
牢记这些原则,必须穿越实际空间的导弹需要将向量保留为较小遍历的串联或顺序。1A + 1A + 1C + 1C 代表一枚导弹,它向外移动两个六角形,然后急速倾斜(120 度)并移动两个六角形,在距离初始方向只有 2 个六角形但偏离航向 60 度的情况下结束它的遍历。
然而,目标计算机或由此产生的爆炸可能只关心范围,因此使用这些规则简化这些向量可能很重要。要找出任意两点之间的最短距离,只需连接向量并简化它们。
创建一个十六进制地图并渲染它也很容易创建一个十六进制对象作为具有属性的原点,Magnitude = 0,Vector = NULL,Label(可选)=一些字符串(我喜欢让它成为人类可读的值),名称= 0(幅度和矢量的串联),并且 Exits = Array(您将填充 6 个节点,除了虫洞或其他)。以您选择作为地图中心的像素为中心绘制原点。渲染十六进制。为您的地图选择半径
Foreach Magnitude,---用相邻向量的每个组合填充环。有很多方法可以做到这一点,但最简单的方法是选择一个向量作为基础,然后以适当的方向和 60 度转弯的轨道遍历 Magnitude hex。例如,对于 3 级,从 3E 开始,然后执行 3A、3B、3C、3D、3E、3F,将每个十六进制计算为最后遍历的十六进制和新的单个十六进制向量的总和。---在每个十六进制中,应用一些三角函数来计算中心像素相对于原始像素的位置并渲染十六进制
希望对某人有所帮助。十六进制地图摇滚。渲染它们有点糟糕。