прогнозирование столкновений с использованием суммы Минковского

Я хочу использовать сумму Минковского, чтобы предсказать точную точку столкновения двух выпуклых форм. Насколько я понимаю, точка, где вектор скорости пересекается с суммой Минковского, - это величина, на которую я должен переместить мой объект вдоль вектора, чтобы они просто касались (я уже знаю, что они столкнутся). Вот пример того, что я имею в виду (для простоты я просто использовал прямоугольники):

введите описание изображения здесь

Я имею в виду, что я мог бы просто вычислить пересечение с каждой линией выпуклой оболочки и просто использовать ближайшую, но это кажется ужасно неэффективным. Моя идея заключалась в том, чтобы вычислить симплекс, ближайший к вектору, но я понятия не имел, как это лучше всего сделать. Я нашел алгоритм, который вычисляет наименьшее расстояние между объектами или, точнее, наименьшее расстояние от суммы Минковского до начала координат (http://www.codezealot.org/archives/153). Одна часть алгоритма пытается найти симплекс, ближайший к источнику, что я и хочу сделать. Я пытался изменить его под свои нужды, но безуспешно. Для меня это звучит так, как будто должно быть очень простое решение, но я не так хорошо разбираюсь в векторной математике.

Я надеюсь, что смогу прояснить свою проблему, так как мой английский не так хорош: D


person user1566228    schedule 12.07.2013    source источник
comment
Ах, я давно не пытался решить эту проблему. Проблема с поиском ближайшего симплекса заключается в том, что он не учитывает вектор движения. Решение, которое я пытался использовать, состоит в том, чтобы вычислить пересечение между лучом (описывающим движение) и суммой Минковского (которая, поскольку это выпуклая оболочка, может быть представлена ​​пересечением полупространств - тогда проблема в вычисляя эти полупространства).   -  person Drew McGowen    schedule 13.07.2013
comment
Хммм, похоже, мне нужно еще кое-что прочитать: D   -  person user1566228    schedule 13.07.2013


Ответы (1)


Вы можете преобразовать проблему следующим образом:

1) поверните плоскость так, чтобы вектор скорости стал горизонтальным

2) рассмотреть части контуров многоугольника, обращенные друг к другу (это две выпуклые полилинии); теперь вам нужно найти кратчайшее расстояние по горизонтали между этими двумя полилиниями

3) через каждую вершину одной из полилиний проведите горизонтальную линию; это разделит плоскость на набор горизонтальных срезов

4) преобразовать каждый срез, используя преобразование сдвига, которое перемещает две определяющие его вершины на ось Y горизонтальными перемещениями; это преобразование сохраняет горизонтальные расстояния

5) в то время как первая полилиния преобразуется в прямую (ось Y), другая полилиния преобразуется в другую полилинию; найдите вершину (ы), ближайшую к оси Y. Это дает вам длину вектора столкновения.

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

person Yves Daoust    schedule 16.07.2013