Нахождение точки столкновения (движущиеся круги + время) - PullRequest
3 голосов
/ 18 сентября 2011

Для двух кругов, движущихся линейно, достаточно просто рассчитать время столкновения: http://twobitcoder.blogspot.com/2010/04/circle-collision-detection.html

Предполагается, что круги имеют фиксированные начальные точки и фиксированные траектории движения, а также рассчитывается время столкновения.

Возможно ли сделать это наоборот:

Круг 1: Начальная точка X1, скорость Y1 VX1, VY1 (фиксированная начальная точка, фиксированная линейная траектория движения), радиус R1 Круг 2: Начальная точка X2, скаляр скорости Y2 (1 м / с и т. Д.) (Фиксированная начальная точка, фиксированная скорость, неизвестное направление), радиус R2

Можно ли определить положение столкновения двух кругов за минимальное время в пути?

т.е. Круг 1 начинается с 0,0 и движется со скоростью 1,0 (1 единица вправо за раз) Круг 2 начинается с 5,5 и может двигаться 1 единицу времени Какой будет позиция столкновения (или VX2, VY2 окружность 2 должна была бы двигаться внутрь), чтобы 2 окружности сошлись в самое низкое время T. Радиус обоих кругов составляет 1

В этом примере решение будет где-то в районе круга 1, находящегося в точке 3,0 в момент 3. Вопрос кажется довольно сложным, поскольку у вас есть неизвестные переменные: точка столкновения, время столкновения, VX2, VY2. Хотя VX2 и VY2 будут ограничены | VX1 | + | VX2 | = 1.

Причина вопроса в том, чтобы указать кружку 2, куда он должен двигаться, чтобы «поймать» кружок 1.

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

1 Ответ

3 голосов
/ 19 сентября 2011

Для решения этой проблемы есть два ключа:

  • Во-первых, точки, достижимые с x2 во времени t, образуют круг с центром в x2.
  • Во-вторых, первый момент, когда круги могут касаться, должен касаться касательно.

Они в совокупности говорят нам, что все точки x2(0), x2(T), точка контакта и x1(T) являются коллинеарными.

Если мы нарисуем диаграмму, показывающую это, мы получим одно квадратное уравнение в t:

|| x2(0) - x1(0) - v1 t ||^2 = (r1+r2+t)^2

Что можно легко решить за т.

Чтобы получить направление для v2, нам просто нужно использовать единичный вектор в направлении x1(T)-x2(0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...