Primero: sé que estoy siendo súper denso aquí.
Con eso fuera del camino, estoy tratando de escribir una implementación en C # de este algoritmo:
var results = []
for each -N ≤ dx ≤ N:
for each max(-N, -dx-N) ≤ dy ≤ min(N, -dx+N):
var dz = -dx-dy
results.append(cube_add(center, Cube(dx, dy, dz)))
He tomado esto de este tremendo recurso.
Mi problema es que cada implementación de esto que he probado hasta ahora ha tenido resultados locos. Por ejemplo, el código que se muestra a continuación actualmente da como resultado esto:
y esto:
Mi código actualmente se encuentra así:
for (int x = this.CellPositionX - distance; x <= this.CellPositionX + distance; x++)
{
for (int y = this.CellPositionY - Math.Max(-distance, -x - distance); y <= this.CellPositionY + Math.Min(distance, -x + distance); y++)
{
HexPosition rangePosition = new HexPosition(x, y);
range.Add(rangePosition);
}
}
¿Alguien puede ver algo mal aquí? Todas las sugerencias son bienvenidas. He estado golpeándome la cabeza con esto hace un tiempo.
¡Gracias!
Nota actualizada: estoy usando coordenadas axiales en la cuadrícula. Actualización n. ° 2: como se señala a continuación, tenía mal mi ciclo ... cada uno y no estaba usando deltas para hacer ejercicio. ¡Gracias por la ayuda!
Actualmente tengo un problema como se muestra a continuación con la implementación de las respuestas:
Seguiré investigando; si lo descubro, publicaré los resultados completos aquí. ¡Gracias a todos!