Tout d'abord - je sais que je suis super dense ici.
Avec cela à l'écart, j'essaie d'écrire une implémentation C # de cet algorithme:
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)))
J'ai tiré cela de cette formidable ressource.
Mon problème est que chaque implémentation de ce que j'ai essayé jusqu'à présent a eu des résultats fous. Par exemple, le code ci-dessous donne actuellement ceci:
et ça:
Mon code se trouve actuellement comme ceci:
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);
}
}
Quelqu'un peut-il repérer quelque chose de mal ici? Toutes les suggestions sont les bienvenues. Je me tape la tête sur celui-ci depuis un moment maintenant.
Merci!
Note mise à jour: j'utilise des coordonnées axiales dans la grille. Mise à jour # 2: comme indiqué ci-dessous, ma boucle for..each était incorrecte et je n'utilisais pas de deltas pour le travail. Merci pour l'aide!
J'ai actuellement un problème comme indiqué ci-dessous avec la mise en œuvre des réponses:
Je vais continuer à enquêter - si je le comprends, je posterai les résultats complets ici. Merci a tous!