【问题标题】:Flat topped hexes hexagonal grid coordinates To Pixel Coordinates平顶六边形六角网格坐标到像素坐标
【发布时间】:2015-09-28 15:54:42
【问题描述】:

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

我需要将我的立方体坐标转换为像素坐标。我已阅读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;解决方案必须正确确定鼠标在对角线的哪一侧。

标签: math coordinate-systems hexagonal-tiles


【解决方案1】:

我已经解决了,将不同的变量插入此处列出的等式Hexagonal Grid Coordinates To Pixel Coordinates

最后发现平顶六边形网格中的立方体坐标可以使用以下代码计算:

   /* 
* 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 即可?
猜你喜欢
  • 2019-02-14
  • 2023-01-10
  • 2022-11-18
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多