计算网格中一组六边形的小中心六边形的坐标
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
};
}
我遇到了一个似乎很容易解决但似乎无法确定正确公式的问题。
我有一个立方体坐标系中的六边形组列表。我知道组的立方体坐标,但我需要计算给定组中小六边形的 "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
};
}