определить траекторию для последователей объекта - кривая преследования - PullRequest
3 голосов
/ 17 августа 2011

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

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

Возможно ли это?Спасибо за любую помощь !!

enter image description here

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

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

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

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


Давайте сформулируем немного другое, чуть более общее начальное состояние, чем у Мунгана. Предположим, что преследуемый объект («корабль») изначально находится в начале координат и движется вверх по положительной оси 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: </p>

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

1 голос
/ 18 августа 2011

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

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

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

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

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

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

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

дх / дт = v1 (v0 т - х) / а (т)

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

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

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

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 . Удачи!

...