Я искал алгоритм am для создания HoneyComb из шестиугольников, подобных этому, с использованием осевых координат:
Но мне удалось найти генераторы только в координатах Куба.
Я задал этот вопрос только для того, чтобы поделиться своим решением.
Я искал алгоритм am для создания HoneyComb из шестиугольников, подобных этому, с использованием осевых координат:
Но мне удалось найти генераторы только в координатах Куба.
Я задал этот вопрос только для того, чтобы поделиться своим решением.
При этом будут созданы все 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 одинаковых прямоугольника и центральную часть.
Я хотел что-то подобное в 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);