扁平化的六边形格子坐标转像素坐标

3

我正在使用平顶六边形网格(按照此处列出的手册 http://www.redblobgames.com/grids/hexagons/)。

enter image description here

我需要将我的立方体坐标转换为像素坐标。我已经阅读了Hexagonal Grid Coordinates To Pixel Coordinates,但那里列出的解决方案需要进行一些修改才能与平顶网格一起使用。逻辑必须类似于上面链接的问题中描述的那样,但我无法解决它。

对于平顶六边形而言,x坐标可用作x像素坐标。因此,从立方体坐标计算X像素坐标相对容易。假设$this->hexSize是六边形的总宽度,$cubeCoordinate是一个由x、y和z坐标组成的数组,则x像素坐标将是:

$pixelCoordinate['x'] = $this->hexSize * $cubeCoordinate['x'] * 3/4;

我不知道如何计算y像素坐标。相邻六边形之间的高度应该是$this->hexSize,但如何根据立方体坐标计算偏移量呢?

我正在使用类似于这样的平面网格,并尝试确定在哪里定位一个正方形图像,以突出显示/选择正确的六边形。因此,我从鼠标x,y转换为六边形正方形图像的视口x,y。看起来vx和vy都将取决于mx和my;解决方案必须正确确定鼠标位于对角线的哪一侧。 - Shavais
1个回答

4
我已经解决了问题,将不同的变量插入到此处列出的方程式中六边形网格坐标转像素坐标
最后,我发现在平顶六边形网格中的立方体坐标可以使用以下代码计算:
   /* 
* Changes cube coordinates into offset one
        */
        public function coordinates_CubetoOffset($cube)
        {

            $return['x'] = $this->hexSize * $cube['x'] * 3/4;
            $return['y'] = sqrt(3)/2 * $this->hexSize * ($cube['x']/2 + $cube['y']);


            return $return;
        }

谢谢您的帖子。我正在按照相同的指南进行操作,并遇到了平面网格的相同问题。您是否使用负坐标(0,0在中心),并且如何处理?只需将网格大小的一半添加到x和y即可。 - Ryan Langton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接