2009-11-20 49 views
4

在算法上绘制一个十六进制网格最简单的方法是什么?我应该如何在数据中呈现它们?在Flash中绘制一个六角形网格?

例如,以正方形格子,我可以保存X-Y坐标..

+1

十六进制坐标,当然! :P – 2009-11-20 22:04:00

回答

6

有几种方法可以管理十六进制地图坐标,并且大多数方法不会直观地坚持将它们映射到只对渲染很重要的x-y坐标。某些形式的极坐标通常是最好的。我有一个用于管理大多数矢量计算的perl库,这是非常有用的参考计算,如AI和其他搜索树。

http://en.wikipedia.org/wiki/Polar_coordinate_system

对于廉价座位,极坐标绘制的一个点作为原点(如标准XY笛卡尔图表),选取一个向量作为基线(如笛卡尔),然后指定点为(大小,度)。

这里真正命中带有十六进制图的本垒打是每个纯角都是60度的倍数。如果你为每个十六进制面分配一个面((a,b,d,e,f,g))并将一个向量作为幅值和面向,将会出现几个有用的属性。两个相邻矢量(或其中第二个矢量是幅度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格。

但是,目标计算机或产生的爆炸可能只关注范围,因此使用这些规则简化这些向量可能很重要。要找出任意两点之间的最短距离,只需简单地连接矢量并简化它们即可。

创建十六进制贴图并渲染它也很容易 创建一个十六进制对象作为具有属性的原点,Magnitude = 0,Vector = NULL,Label(可选)=一些字符串(我喜欢使它成为人类可读值),Name = 0(Magnitude和Vector的连接)和Exits = Array(你将填充6个节点,禁止虫洞或其他)。 以您选择制作地图中心的像素为中心绘制原点。 渲染十六进制。 为你的地图选择一个半径

Foreach Magnitude, ---用相邻矢量的每个组合填充环。有很多方法可以做到这一点,但最简单的方法是选择一个单独的矢量作为基础,然后在60度转弯的适当方向和轨道上运行幅度格。例如对于幅度3,从3E开始,然后转到3A,3B,3C,3D,3E,3F,计算每个十六进制为最后一个十六进制数与新的单个十六进制矢量的和。 ---在每个这些格子中,应用一些trig来计算中心像素应该相对于原点像素的位置,并渲染十六进制。希望可以帮助某人。 Hex地图摇滚。渲染他们有点尴尬。

+0

谢谢,会做数学! – Timmy 2011-02-11 17:51:04