Прежде всего - я знаю, что я здесь очень плотный.
После этого я пытаюсь написать реализацию этого алгоритма на C #:
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)))
Я взял это из этого огромного ресурса.
Моя проблема в том, что каждая реализация этого, которую я пробовал до сих пор, имела безумные результаты. Например, приведенный ниже код в настоящее время приводит к следующему:
и это:
Мой код в настоящее время выглядит так:
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);
}
}
Кто-нибудь может заметить здесь что-то не так Все предложения приветствуются. Я бился головой об этом некоторое время сейчас.
Спасибо!
Обновлено примечание: я использую осевые координаты в сетке. Обновление № 2: как указано ниже, у меня был неправильный цикл for..each и я не использовал дельты для разработки. Спасибо за помощь!
В настоящее время у меня есть проблема, как показано ниже с реализацией из ответов:
Я собираюсь продолжить расследование - если я выясню это, я опубликую полные результаты здесь. Спасибо всем!