Estoy tratando de encontrar una función iterativa que genere coordenadas xyz para una cuadrícula hexagonal. Las matemáticas nunca han sido fáciles para mí (¡no soy muy inteligente!) Y este problema me ha dejado perplejo. Con una posición de partida hexagonal (0,0,0 decir para simplicty) Quiero calcular las coordenadas de cada "anillo" sucesiva de hexágonos, como se ilustra aquí:Generando coordenadas triangulares/hexagonales (xyz)
Hasta ahora, todo lo que he logrado llegar a es este (ejemplo en 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);
}
}
}
sé cada anillo contiene seis puntos más que el anterior y cada 120 ° vector contiene un punto adicional para cada paso del centro. También sé que x + y + z = 0. Pero siempre cómo puedo generar una lista de coordenadas que siguen esta secuencia:
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
Probablemente voy a ser avergonzado por la simplicidad de la respuesta, pero por favor, ¡no dejes que eso te impida contribuir! ;) Como digo, ¡simplemente no soy muy inteligente!
Muchas gracias,
JS
Pequeña corrección.Cada anillo contiene ** 6 * k ** puntos, o ** 6 * (k-1) ** más puntos que el anterior, donde k es el índice del anillo que se inicia desde cero. –