Планирование движения без графика по бесконечной плоскости

Объект находится в точке A и хочет переместиться в точку B. Я хочу рассчитать там вектор движения, который не перемещается в пределах расстояния D от точек, которых следует избегать в массиве C.

Таким образом, если вектор движения (B-A), нормализованный и умноженный на скорость объекта, приведет его в пределах D от любой точки в C, вектор будет повернут так, что это не так.

Это в двух измерениях. Кроме того, если у этой операции есть имя, пожалуйста, оставьте комментарий или отредактируйте этот вопрос самостоятельно, поскольку я понятия не имел, как это назвать.

Кроме того, моим первым побуждением было разделить активную область на узлы и запустить A*, но я хочу попробовать математический подход к этому, несколько экспериментов с флокированием создают впечатление, что это можно сделать.

Обновление (из комментариев): это изображение очень близко к решению, которое я хочу:

Path

Предполагая, что мы начинаем с точки слева, мы начинаем поворачивать направо к цели (другой точке), мы обнаруживаем стену справа, поэтому прекращаем поворачиваться и двигаемся вперед. Стены больше нет, поэтому мы можем снова начать поворачивать к цели и так далее. Я знаю, что это может привести к тому, что объект вообще не попадет туда, но я хочу определить поведение, а не обязательно решение, если вы понимаете, о чем я.

Update2: преобразование активной области в набор узлов может оказаться неэффективным. A* и другие эвристические алгоритмы обхода графа отлично подходят для задач низкой размерности. Но область, по которой я хочу двигаться, бесконечна по размеру и имеет лишь несколько препятствий, разбросанных по ней. Сами узлы, а точнее потенциальные позиции, бесконечно малы. Это, конечно, можно было бы оптимизировать с помощью какого-то дерева квадрантов, но у меня есть ощущение, что простые векторы движения, которые каким-то образом повернуты и интерполированы, также могут решить эту проблему.


person Mizipzor    schedule 07.07.2009    source источник
comment
вы ищете минимальный путь, который удовлетворяет этому критерию или любому решению?   -  person chillysapien    schedule 07.07.2009
comment
Любое решение. Вернее, я вообще не ищу пути. Объект не должен планировать свой путь, а должен смотреть только на один шаг вперед. Это не робот, планирующий свой путь, здесь он больше похож на стайные или клеточные автоматы. По крайней мере, это тот эффект, которого я добиваюсь.   -  person Mizipzor    schedule 07.07.2009


Ответы (4)


Также на странице, на которую вы ссылались в своем ответе, есть довольно хорошее обсуждение управления поведением в генеральный.

В частности, посмотрите на его страницы для сдерживания и следование по пути для хороших примеров.

Управление поведением автономных персонажей

person Andy Mikula    schedule 08.07.2009

Я слышал, что это называется планирование движения и поиск пути (как упоминалось выше)

Существует множество алгоритмов, но из вашего описания следует график видимости может быть хорошим началом. У вас есть график с точками A, B и многоугольниками вокруг каждой точки в C (вы также можете сделать это с кругами, вычислив касательные линии из каждой точки, я думаю). Вы вычисляете ребра как потенциальные пути между точками. Вот слайд-шоу, которое объясняет это лучше.

Затем поверх графа видимости примените алгоритм поиска, такой как A* (эвристический поиск), чтобы найти наиболее оптимальный путь через граф.

Тем не менее, вы должны подумать о том, что вы ищете. Вышеупомянутый подход найдет кратчайший путь, придерживаясь очень близко ко всем углам, но другие алгоритмы могут лучше соответствовать вашему представлению об оптимальности.

person Todd Gardner    schedule 07.07.2009
comment
Изображение Пример допустимого пути в опубликованной вами вики-статье о планировании движения очень близко к решению, которое я хочу. Предполагая, что мы начинаем с точки слева, мы начинаем поворачивать направо к цели (другой точке), мы обнаруживаем стену справа, поэтому прекращаем поворачиваться и двигаемся вперед. Стены больше нет, поэтому мы снова начинаем поворачивать к цели и так далее. Я знаю, что это может привести к тому, что объект вообще не попадет туда, но я хочу определить поведение, а не решение, если вы понимаете, о чем я. - person Mizipzor; 07.07.2009

Вы можете использовать потенциальные поля. Это предлагает способ избежать «обхвата краев» препятствий.

Но учтите, что, как и в случае с алгоритмом A*, для этого требуется квантовать пространство состояний, и, следовательно, в зависимости от требуемой точности, может потребоваться достаточно много вычислительных ресурсов.

person j_random_hacker    schedule 07.07.2009
comment
Дорогие вычисления — это та самая причина, по которой я хочу избежать A*. Также обратите внимание, что мой мир быстро меняется, что делает его квантование практически невозможным. Это было хорошее чтение, хотя, к сожалению, я думаю, что его трудно применить к моей проблеме. - person Mizipzor; 07.07.2009

На этой странице я нашел довольно подробное описание процедуры объединения.

Используйте правило разделения для всех препятствий и выравнивание только в направлении цели (поскольку у нас нет товарищей по стае) и (по той же причине) игнорирование правила сплоченности.

Интересно, даст ли это желаемый эффект.

person Mizipzor    schedule 07.07.2009