Как я могу вычислить кратчайший путь в евклидовых средах с невыпуклыми многоугольниками?

10

Может ли кто-нибудь предложить статьи или алгоритмы вычисления кратчайших путей в евклидовых пространствах с невыпуклым многоугольником в качестве препятствий?

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

Ответы:

3

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


источник
3

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

На самом деле ваша проблема - это две проблемы вместе взятые.

  1. Нахождение кратчайших путей
  2. Нахождение столкновений

И вторая проблема встроена в первую. Я могу рекомендовать сначала понять слепой поиск. Вот очень простая презентация: слепой поиск

Если вы читаете документ для построения пространства состояний, вам нужно будет сгенерировать точки состояний, и они должны быть законными, то есть эти состояния могут находиться на вашем кратчайшем пути, чтобы они не сталкивались с какими-либо объектами в вашем пространстве. Отныне вы можете продолжать использовать алгоритмы евклидовых столкновений. После построения пространства состояний и дерева поиска, ограниченного коллизиями, вы можете выбрать любой из алгоритмов кратчайшего пути или один из ваших собственных или модифицированных гибридных.

Горький
источник