Объект находится в точке A и хочет переместиться в точку B. Я хочу рассчитать там вектор движения, который не перемещается в пределах расстояния D от точек, которых следует избегать в массиве C.
Таким образом, если вектор движения (B-A), нормализованный и умноженный на скорость объекта, приведет его в пределах D от любой точки в C, вектор будет повернут так, что это не так.
Это в двух измерениях. Кроме того, если у этой операции есть имя, пожалуйста, оставьте комментарий или отредактируйте этот вопрос самостоятельно, поскольку я понятия не имел, как это назвать.
Кроме того, моим первым побуждением было разделить активную область на узлы и запустить A*, но я хочу попробовать математический подход к этому, несколько экспериментов с флокированием создают впечатление, что это можно сделать.
Обновление (из комментариев): это изображение очень близко к решению, которое я хочу:
![]()
Предполагая, что мы начинаем с точки слева, мы начинаем поворачивать направо к цели (другой точке), мы обнаруживаем стену справа, поэтому прекращаем поворачиваться и двигаемся вперед. Стены больше нет, поэтому мы можем снова начать поворачивать к цели и так далее. Я знаю, что это может привести к тому, что объект вообще не попадет туда, но я хочу определить поведение, а не обязательно решение, если вы понимаете, о чем я.
Update2: преобразование активной области в набор узлов может оказаться неэффективным. A* и другие эвристические алгоритмы обхода графа отлично подходят для задач низкой размерности. Но область, по которой я хочу двигаться, бесконечна по размеру и имеет лишь несколько препятствий, разбросанных по ней. Сами узлы, а точнее потенциальные позиции, бесконечно малы. Это, конечно, можно было бы оптимизировать с помощью какого-то дерева квадрантов, но у меня есть ощущение, что простые векторы движения, которые каким-то образом повернуты и интерполированы, также могут решить эту проблему.