Существует ли алгоритм объединения диапазона угроз с произвольным диапазоном перемещения на двумерной сетке?
Я строю простую 2D-игру на основе сетки и ищу способ вычислить область "угрозы", которую каждый персонаж может оказать на игровое поле. Угрозу с текущей точки легко подсчитать - это красный бриллиант внизу. Но я собираюсь объединить эту информацию с произвольной областью "можно ходить здесь" (оранжевый).
Вместе алгоритм даст мне комбинацию всех тайлов, на которые мой персонаж может атаковать из всех доступных ходов и текущей позиции.
Конечно, я могу просто перебрать все возможные ходы, применить там форму ромба и создать набор всех квадратов угроз. Есть ли способ лучше?
1 ответ
Проблема, которую вы здесь решаете, аналогична 2D Convolution:
--------------- --------------- -------XX------
-------X------- --------------- ------XXXX-----
------XXX------ -------XX------ -----XXXXXX----
-----XXXXX----- * ------XXX------ = ----XXXXXXX----
------XXX------ --------X------ -----XXXXXX----
-------X------- --------------- ------XXXX-----
--------------- --------------- --------X------
В вашем случае, когда элемент только покрыт или не раскрыт (по сравнению со скалярным или векторным значением), это сводится к операции расширения в морфологии. Существует множество работ и примеров кода по эффективным реализациям расширения, и этот подход особенно подходит для вашей задачи.