Próbuję wymyślić funkcję iteracyjną, która generuje współrzędne xyz dla siatki sześciokątnej. Matematyka nigdy nie była dla mnie łatwa (jestem po prostu niezbyt mądra!) I ten problem mnie zaskoczył. Z pozycji wyjściowej hex (powiedzmy 0,0,0 dla simplicty) Chcę obliczyć współrzędne dla każdego kolejnego „pierścień” sześciokątów, jak pokazano tutaj:Generowanie współrzędnych trójkątnych/heksagonalnych (xyz)
Jak dotąd, wszystko mam udało się wymyślić jest to (przykład w 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);
}
}
}
znam każdy pierścień zawiera sześć więcej punktów niż poprzedni i każde 120 ° wektor zawiera jeden dodatkowy punkt za każdym kroku od centrum miasta. Wiem też, że x + y + z = 0. Ale zawsze jak mogę wygenerować listę współrzędnych, które następują tę sekwencję:
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
Jestem prawdopodobnie będzie zakłopotany przez prostotę, ale proszę o odpowiedź nie pozwól, aby cię to powstrzymało! ;) Tak jak mówię, po prostu nie jestem sprytny!
Dzięki wielu,
JS
Mała korekta.Każdy pierścień zawiera ** 6 * k ** punktów lub ** 6 * (k-1) ** więcej punktów niż poprzedni, gdzie k jest indeksem pierścienia, który zaczyna się od zera. –