Сгенерируйте шестиугольный патерн HoneyComb в осевых координатах

Я искал алгоритм am для создания HoneyComb из шестиугольников, подобных этому, с использованием осевых координат:

это имеет радиус 4Но мне удалось найти генераторы только в координатах Куба.

Я задал этот вопрос только для того, чтобы поделиться своим решением.


person nemo9955    schedule 05.09.2014    source источник


Ответы (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 одинаковых прямоугольника и центральную часть.

person nemo9955    schedule 05.09.2014

Я хотел что-то подобное в 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);
person Fasani    schedule 06.04.2018