Sto provando a creare una funzione iterativa che genera le coordinate xyz per una griglia esagonale. La matematica non è mai stata facile per me (non sono molto intelligente!) E questo problema mi ha bloccato. Con una posizione di partenza esagonale (0,0,0 dire per simplicty) voglio calcolare le coordinate di ogni "anello" successivi di esagoni, come illustrato qui:Generazione di coordinate triangolari/esagonali (xyz)
Finora, tutto quello che ho riuscito a venire con questo (esempio in 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);
}
}
}
so ogni anello contiene più di sei punti rispetto al precedente ed ogni 120 ° vettore contiene un punto addizionale per ogni passo dal centro. So anche che x + y + z sempre = 0. Ma come faccio a generare un elenco di coordinate che seguono questa sequenza:
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
Sono probabilmente andando a essere imbarazzato dalla semplicità della risposta ma per favore non lasciare che questo ti impedisca di contribuire! ;) Come ho detto, non sono molto intelligente!
Grazie,
JS
Piccola correzione.Ogni anello contiene ** 6 * k ** punti, o ** 6 * (k-1) ** più punti rispetto al precedente, dove k è l'indice dell'anello che viene avviato da zero. –