Определить траекторию для последователей объекта - кривая преследования

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

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

Является ли это возможным? Спасибо за любую помощь!

2 ответа

Решение

Вот статья Классическая проблема преследования, решаемая с точки зрения физики Карлом Э. Манганом, которая решает конкретную версию, в которой преследователь изначально перпендикулярен траектории преследуемого объекта. Я считаю, что это несущественный элемент решения, поскольку эта перпендикулярность исчезает вдоль остальной части траектории.

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

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


Давайте сформулируем немного другое, чуть более общее начальное состояние, чем у Мунгана. Предположим, что преследуемый объект ("корабль") изначально находится в начале координат и движется вверх по положительной оси y (x=0) с постоянной скоростью V. Объект преследования ("торпеда") изначально расположен в точке (x0,y0) и хотя мгновенно переориентируется непосредственно на "корабль", он также движется с некоторой постоянной скоростью v.

Особый случай, когда x0 равен нулю, приводит к линейной кривой преследования, то есть лобовое столкновение или конечная погоня соответственно, когда y0 является положительным или отрицательным. В противном случае при отражении по оси y можно без ограничения общности считать, что x0 > 0. Таким образом, рациональные степени x-координат будут четко определены.

Предположим для нашей непосредственной цели, что скорости V,v неравны, так что отношение r = V/v не равно 1. Ниже приведено решение (1) в замкнутой форме для кривой "торпедо", аналогичное уравнению Мунгана (10):

                     (1+r)          (1-r)
              [ (x/H)          (x/H)      ]
(y/H) = (1/2) [ -----      -   -----      ]  +  C    (1)
              [ (1+r)          (1-r)      ]

в которой постоянные H,C могут быть определены начальными условиями.

Применяя условие, что первоначально торпеда движется в направлении местоположения корабля в начале координат, мы берем производную по x в (1) и отменяем множитель 1/H с обеих сторон:

                     r        -r
dy/dx = (1/2) [ (x/H)  - (x/H)   ]                   (2)

Теперь сравним наклон кривой dy/dx в начальной точке (x0,y0) с наклоном ее линии, проходящей через начало координат:

      r         -r
(x0/H)  - (x0/H)   = 2y0/x0 = K                      (3)

Это составляет квадратное уравнение для положительного B = (x0/H)^r:

B^2 - K*B - 1 = 0                                    (4)

а именно B = [K + sqrt(K^2 + 4)]/2 (но используйте альтернативную форму, если K < 0, чтобы избежать ошибки отмены), что позволяет определить H из наших знаний о x0 и r:

H = x0/(B^(1/r))                                     (5)

Знание H упрощает определение аддитивной постоянной C в (1), подставляя туда начальную точку (x0,y0).


Сложнее будет определить, какой точке траектории "торпеда" соответствует данное время t > 0. Обратное решение этой задачи решается довольно просто. Для заданной точки на траектории найдите касательную линию в этой точке, используя производную формулу (2), и выведите время t из y-точки пересечения b этой линии (то есть из текущей позиции "корабля"):

t = b/V                                              (6)

Поэтому определение (x(t),y(t)), где находится "торпеда" в данный момент времени t> 0, по существу является упражнением по поиску корней. Один легко заключает в скобки желаемое значение x (t) между двумя x-координатами x1 и x2, которые соответствуют моментам времени t1 и t2, так что t1

Я могу создать для вас проблему, но не решить ее.

Черная кривая движется с постоянной скоростью v0 и по прямой.

Синяя кривая движется с постоянной скоростью v1 в направлении черного.

Для простоты выберите координаты так, чтобы в момент времени t = 0 черная кривая начиналась с (x=0, y=0) и двигалась в направлении x.

Таким образом, в момент времени t >= 0 положение черной кривой равно (v0 t, 0).

Постановка задачи

Цель состоит в том, чтобы найти x, y синей кривой для моментов времени t >= 0 с учетом начальной позиции (x(t=0), y(t=0)). Дифференциальные уравнения движения

dx / dt = v1 (v0 t - x) / a (t)

dy / dt = v1 (- y) / a (t)

где a(t) = sqrt((v0 t - x)^2 + (y^2)) - расстояние между синим и черным в момент времени t.

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

D[y[t],t] = -y[t] / sqrt[(t-x[t])^2 + y[t]^2], D[x[t],t] = (t-x[t]) / sqrt[(t-x[t])^2 + y[t]^2]

Вы можете попробовать спросить на math.stackexchange. Удачи!

Другие вопросы по тегам