六角形グリッドの xyz 座標を生成する反復関数を考え出そうとしています。16 進数の開始位置 (簡単にするために 0,0,0 とします) を使用して、次に示すように、連続する六角形の「リング」ごとに座標を計算します。
これまでのところ、私が思いついたのはこれだけです(javascriptの例):
var radius = 3
var xyz = [0,0,0];
// for each ring
for (var i = 0; i < radius; i++) {
var tpRing = i*6;
var tpVect = tpRing/3;
// for each vector of ring
for (var j = 0; j < 3; j++) {
// for each tile in vector
for(var k = 0; k < tpVect; k++) {
xyz[0] = ???;
xyz[1] = ???;
xyz[2] = ???;
console.log(xyz);
}
}
}
各リングには前のリングよりも 6 個多くのポイントが含まれており、各 120° ベクトルには中心からのステップごとに 1 つの追加ポイントが含まれていることがわかっています。私はまたx + y + z = 0
、すべてのタイルについてそれを知っています。しかし、以下のシーケンスに従う座標のリストを生成するにはどうすればよいでしょうか?
0, 0, 0
0,-1, 1
1,-1, 0
1, 0,-1
0, 1,-1
-1, 1, 0
-1, 0, 1
0,-2, 2
1,-2, 1
2,-2, 0
2,-1,-1
2, 0,-2
1, 1,-2
0, 2,-2
-1, 2,-1
-2, 2, 0
-2, 1, 1
-2, 0, 2
-1,-1, 2