Методы наведения летательных аппаратов в разработке игр

image

Год назад я закончил Московский Авиационный Институт и получил квалификацию «Инженер». Но поскольку к тому времени я уже год отработал программистом и знал, что в этой области буду работать и в дальнейшем, получение «корочки» не стало для меня чем-то переломным, в отличие от моих многих одногруппников. Знания, полученные на 4-5 курсах, казались мне довольно интересными и расширяющими кругозор, но не слишком полезными для работы программистом. Однако есть несколько тем, которые мне помогли и в работе. Про одну из них я и хочу рассказать, и имя ей — методы наведения летательного аппарата.

Под летательным аппаратом в наших курсах всегда подразумевалась управляемая авиационная ракета, чаще всего типа воздух-воздух. Наведение ракеты на цель — это управление её полётом таким образом, чтобы она оказалась в области встречи с целью. Цель, само собой, этой встречи не желает и может совершать различные маневры.

Так каким же образом методы наведения могут помочь в игростроении? Первое и основное, что может прийти на ум — это управление одним объектом в игре таким образом, чтобы он столкнулся с другим объектом. Например, самонаводящиеся снаряды, выпускаемые врагами в игрока, или же бот, который собирает двигающиеся в пространстве объекты… Ну или как управление ботом-хоккеистом в Russian AI Cup 2014, чтобы он побыстрее захватывал шайбу или бежал бить соперника).

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

Итак, начнём с самого простого метода наведения, который многие наверняка использовали:

Метод прямого наведения


Принцип заключается в том, что на каждом шаге игрового цикла объект должен стремиться («смотреть») прямо на цель:

image

На изображении я постарался показать, что вектор скорости не всегда совпадает с линией визирования, несмотря на то, что объект постоянно «смотрит» на цель.

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

Метод погони


При наведении этим методом на каждом шаге у объекта должны совпадать вектор скорости и направление на цель (линия визирования).

image

Ходит слух, что своё название метод погони получил потому, что на охоте собаки преследуют цель именно таким образом. Метод достаточно прост и даёт чуть лучшие результаты, чем метод прямого наведения.

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

Метод параллельного сближения


При этом методе объект постоянно стремится сохранить угол линии визирования цели (т.е. линии объект-цель).

image

Если цель будет двигаться равномерно прямолинейно, то наш объект будет двигаться по самой эффективной траектории — по прямой, и время полёта до цели будет минимальным. Таким образом, этот метод — самый эффективный из перечисленных. Именно его я чаще всего и применяю, тем более что программная реализация получается гораздо проще, чем реализация в реальной жизни (нет ошибок измерения параметров, нет рассогласования между расчётной и реальной траекториями).

Метод пропорционального сближения


При наведении по этому методу угловая скорость вращения вектора скорости объекта будет пропорциональна угловой скорости вращения линии визирования цели, т.е.:

image

При этом коэффициент K можно подобрать эмпирическим путём (обычно это несколько единиц).

На самом деле, этот метод является общим методом наведения. Ведь если взять коэффициент пропорциональности К за 1, то мы получим метод погони (вектор скорости будет всегда направлен на цель), если же K=∞, то получится метод параллельного сближения.

Собственно, на этом обзор методов наведения заканчивается.

Надеюсь, статья окажется полезной, ну или по крайней мере небезынтересной.
  • +42
  • 43.5k
  • 6
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 6

    +1
    Правильно ли я понимаю, что эффективность этих методов рассматривается в статье при прямолинейном движении? Мне кажется, что от третьего метода легче всего защититься, достаточно развернуться хотя бы на 90 градусов против часовой в примере
      0
      Правильно ли я понимаю, что эффективность этих методов рассматривается в статье при прямолинейном движении?

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

      Это обманчивое впечатление. Обратите внимание — параллельные линии визирования строятся на каждом шаге, они не обязательно должны быть на определенном расстоянии друг от друга. В этом случае они будут практически совпадать, т.е. объект будет лететь прямо за целью.
      0
      И зачем делать игры, в которые нельзя выиграть?
        +10
        в тетрис только Чак Норрис выиграл. Но, тем не менее, игра достаточно востребована
        +3
        Вообще, по данной теме и по схожим написано довольно много в англоязычных интернетах. Тема называется «steering behaviors», также включает в себя преследование и побег, остановка в заданной точке и другие алгоритмы, управляющие движением одного или нескольких тел. Вот тут можно почитать, например. С наглядными иллюстрациями: www.red3d.com/cwr/steer/
          0
          А если ракета выпускается непосредственно в лоб цели? И могут ли ракеты совмещать способы наведения и сближения с целью? И ещё особенно интересно как ракета реагирует на цель которая маневрирует разворачиваясь на 180 градусов, тем самым «убивая» энергию ракеты.

          Only users with full accounts can post comments. Log in, please.