Tim*_*mmy 4 algorithm flash actionscript-3 hexagonal-tiles
在算法上绘制十六进制网格的最简单方法是什么?我该如何在数据中展示它们?
例如,在方格中,我可以保存xy坐标..
小智 6
有几种方法可以管理十六进制地图坐标,其中大多数都非常直观地坚持将它们映射到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(幅度和矢量的连接),以及退出=数组(您将填充6个节点,禁止虫洞或其他).以您选择的像素为中心绘制原点,使其成为地图的中心.渲染十六进制.为地图选择半径
Foreach Magnitude,---用相邻向量的每个组合填充环.有很多方法可以做到这一点,但最简单的方法是选择一个矢量作为基础,然后在适当的方向和60度转弯的轨道上遍历Magnitude六角形.例如,对于幅度3,从3E开始,然后转到3A,3B,3C,3D,3E,3F计算每个十六进制,作为最后一个经过的六边形和新的单个十六进制矢量的总和.---在每个这些六边形中,应用一些触发来计算中心像素相对于原始像素的位置并渲染十六进制
希望能帮助别人.Hex Maps摇滚.渲染它们有点糟糕.