我一直在和一个使用三角形网格的朋友卡在一个小游戏原型上。 弄清楚如何建立坐标系是一个噩梦。 三角形超级怪异! 目前,我们已经对其进行了设置,以使每排三角形共享一个y坐标,然后x坐标会根据您所处的y位置而有所波动。 像这样:
这对于将地图存储在内存中非常方便,但是对于回答诸如“这两个三角形彼此之间的距离有多远”或“玩家单击了哪个三角形”甚至什至“我在哪里绘制此三角形”这样的问题都不太好三角形”。 在此坐标系中,(0,0)和(2,1)之间还有另外两个三角形,但是(1,0)和(3,1)共享一个公共点。 因此,弄清楚三角形的相邻位置取决于该三角形的特定位置。
阿米特·帕特尔(Amit Patel)当然已经考虑了这个问题。 他建议使用类似偏斜正方形网格的坐标系,在该坐标系中,将每个正方形沿对角线一分为二。 在此系统中,存在三个坐标: x , y和R。 x和y坐标告诉您所处的菱形, R坐标告诉您是处于菱形的左下角三角形的一半还是右上角的三角形,因此它只是二进制0或1。 (Amit标记了两个选项L和R ,但这似乎有点令人困惑,因为第三个坐标的名称也是R。 )
平方直角坐标系要想弄清楚玩家单击的位置要容易得多,因为它只是一点矩阵数学,可以消除世界的剪切力,然后您可以使用常规的方格数学来计算x和y ,然后只需要弄清楚自己是在正方形的左下角还是右上角(即未剪切的菱形)中,就可以得到R值。 但是,( x , y , R )系统对于计算距离而言并不是那么好,因此Amit撰写了另一篇文章。
这个系统的想法是,任何两个三角形之间的距离是您从一个三角形走到另一个三角形时需要跨越的线数。 有点像在正方形网格上的曼哈顿距离。
不过,我在上面绘制的( a , b , c )系统有点多余:对于任何( a , b )对, c仅有两个可能的值。 例如,如果a = 0和b = 0,则c必须为0或1。这与( x , y , R )系统中的R坐标几乎相同,但并非总是为0或1。 1,它是两个相邻数字之一,具体取决于您在网格中的位置。 在我上面绘制的系统中, c坐标始终等于( –a – b )或
(– a – b + 1)。
这三个系统对我来说似乎都不是很自然的。 正方形包装的系统仅使用两个坐标,这对于二维网格来说似乎是正确的,其中其他坐标使用三个坐标,其中一个坐标被限制为两个值之一。 平方直角系统具有一个奇怪的二进制第三坐标,其几何含义有些不透明。 ( a , b , c )系统的坐标在几何上都具有明显的几何意义,但是它的第三个坐标却像剪平方系统一样受到了奇怪的约束。 令我惊讶的是,十六进制网格变得更加简单,并且只存储两个坐标。