计算网格中一组六边形的小中心六边形的坐标

Calculate the coordinate of the small center hexagon of a group of hexagon in a grid

我遇到了一个似乎很容易解决但似乎无法确定正确公式的问题。

我有一个立方体坐标系中的六边形组列表。我知道组的立方体坐标,但我需要计算给定组中小六边形的 "global" 坐标。

例如,在下图中,我知道 GroupA (x=0, y=0, z=0)GroupB (x=-1, y=1, z=0) 的坐标。鉴于每个组具有相同的半径(在本例中半径为 1)并且它们不相互重叠(让我们将其视为从 0 开始的组的平铺,我如何计算 GroupB 的中心图块的坐标, 0,0 创建六角网格)?

在这个简单的例子中,作为一个人,我知道 GroupB 的中心图块是 (x=-1, y=3, z=-2),但我需要以一种计算机可以为地图。我不是特别需要代码本身的帮助,而是整体逻辑。

在这篇文章中,作者做了相反的事情(从小六边形开始并试图找到它的组): https://observablehq.com/@sanderevers/hexagon-tiling-of-an-hexagonal-grid

如有任何帮助,我们将不胜感激! 谢谢!

看来我找到了一些似乎有用的东西。

如有错误欢迎指正

根据我在原始问题中链接的文章,我提出了一种算法,该算法根据其较高的组坐标计算小六边形中心坐标(在这种情况下,我使用了一个半径为10).我采用了原始算法并删除了作者所做的区域划分。代码在 javascript 中。 i、j 和 k 变量是组的立方体坐标。函数returns中心小六角立方体坐标:

getGroupCentralTileCoordinates(i, j, k)
{
    let r = 10;
    let shift = 3 * r + 2;

    let xh = shift * i + j;
    let yh = shift * j + k;
    let zh = shift * k + i;

    return {
        'x': (1 + xh - yh) / 3, 
        'y': (1 + yh - zh) / 3, 
        'z': (1 + zh - xh) / 3
    };
}