Шестнадцатеричная сетка (заостренная вершина) в Unreal C++: обработка точности с плавающей запятой для вершин/реберC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Шестнадцатеричная сетка (заостренная вершина) в Unreal C++: обработка точности с плавающей запятой для вершин/ребер

Сообщение Anonymous »

У меня есть генератор шестиугольной сетки с заостренной вершиной, реализованный в Unreal Engine C++. Недавно я расширил его для доски в стиле Catan и добавил генерацию вершин и ребер поверх существующей генерации тайлов.
У меня также есть функция TileUnderMouse (выбор), которая находит ближайший тайл, край или вершину на основе текущего положения мыши. Это работало правильно, когда все было сгенерировано с использованием координат с плавающей запятой.
Однако из-за проблем с точностью с плавающей запятой некоторые вершины, которые должны быть общими для плиток, в конечном итоге дублируются (например, такие значения, как 0,333333 и 0,333334). Чтобы это исправить, я попытался масштабировать систему координат так, чтобы дробные значения (например, 1/3) стали целыми числами (например, умножив индексы/координаты на 6).
После этого сама генерация сетки по-прежнему работает, но логика TileUnderMouse теперь нарушена и больше не возвращает правильный тайл/край/вершину. Я подозреваю, что проблема заключается в математических вычислениях, используемых для преобразования из мирового пространства (положения мыши) обратно в шестнадцатеричные индексы/плитки/края/вершины.
В чем мне нужна помощь:
  • Правильный математический подход для создания фрагментов, ребер и вершин для шестигранной сетки с заостренной вершиной без проблем с дублированием чисел с плавающей запятой
  • Является ли масштабирование координат (например, на 6) разумным решением или существует лучший подход с целочисленными/осевыми/кубическими координатами
  • Как следует адаптировать выбор (мир → шестигранник/ребро/вершина), если внутреннее представление масштабируется или является целочисленным
  • Рекомендации по созданию параметров генерации (шестнадцатеричный размер, интервал, масштаб), настраиваемый с помощью объекта данных в Unreal
Будем признательны за любые ссылки, формулы или советы, специфичные для Unreal, для надежной математики шестнадцатеричной сетки.
Найдите текущие ссылки для вставки кода ниже:

HexBoardConfig.h

HexBoardConfig.cpp
HexGridPlacement.h

HexGridPlacement.cpp

Подробнее здесь: https://stackoverflow.com/questions/798 ... ices-edges
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»