在轴向坐标中生成HoneyComb六边形图案

时间:2014-09-05 11:00:46

标签: hexagonal-tiles

我正在寻找算法,使用轴坐标生成像这样的六边形HoneyComb:

this has a radius of 4 但我只设法在Cube坐标中找到生成器。

我提出这个问题只是为了分享我的解决方案。

2 个答案:

答案 0 :(得分:2)

这将生成六边形螺旋图案的所有r*(r-1)*3+1个图块。 该方法的一个缺点是它假设您将形状放在(0,0)。

   public void makeHoneyComb(int radius){

    makeCell(ta, 0, 0);
    for (int r = 0; r > -radius; r--)
        for (int q = -r - 1; q > -radius - r; q--)
            makeCell( q, r);

    for (int r = 1; r < radius; r++)
        for (int q = 0; q > -radius; q--)
            makeCell( q, r);

    for (int q = 1; q < radius; q++)
        for (int r = -q; r < radius - q; r++)
            makeCell( q, r);
    }

这是基于这样一个事实:像凸轮这样的形状可以分成3个相似的Rectagles和中心部分。

答案 1 :(得分:1)

我想在JavaScript中使用类似的东西,所以我在这里修改了代码,现在这里是JS版本:

function makeHoneyComb(rings) {

  var cells = [];

  cells.push({
    c: 0,
    r: 0,
  });

  for (r = 0; r > -rings; r--) {
    for (c = -r - 1; c > -rings - r; c--) {
      cells.push({ c: c, r: r });
    }
  }

  for (r = 1; r < rings; r++) {
    for (c = 0; c > -rings; c--) {
      cells.push({ c: c, r: r });
    }
  }

  for (c = 1; c < rings; c++) {
    for (r = -c; r < rings - c; r++) {
      cells.push({ c: c, r: r });
    }
  }

  return cells;
}

var honeyCombArray = makeHoneyComb(3);