Задать вопрос
@atapi086

Как оптимизировать алгоритм самонаведения ракеты?

Вводная:
Нужно реализовать алгоритм самонаведения для ракеты в трёхмерном игровом пространстве.
Дано в каждый момент времени:
  • скорости цели TGT_VEL
  • местоположение цели TGT_POS
  • местоположение ракеты MSL_POS

Идея алгоритма: берётся вектор направления на цель (TGT_DIR = TGT_POS - MSL_POS), нормализуется, а затем перебором ищется скорость ракеты MSL_VEL такая, чтобы выполнялось TGT_DIR == (MSL_VEL - TGT_VEL).normalized().
Иными словами, вектор скорости сближения всегда указывает на цель (вроде бы такой алгоритм называется алгоритмом пропорционального сближения)

Вопрос: каким образом оптимально находить вектор скорости MSL_VEL? Я очень сильно ограничен в количестве операций на каждый игровой тик, так что идеальное решение было бы за O(1) или с максимальным количеством итераций во всех циклах около 50.
Если есть идеи, как реализовать подобный алгоритм по-другому я буду рад узнать.
  • Вопрос задан
  • 5867 просмотров
Подписаться 2 Средний 1 комментарий
Ответ пользователя Vlad_hex К ответам на вопрос (6)
@Vlad_hex
1) Бортовой компьютер ракеты рассчитывает вектор упреждения, она почти никогда не идет на цель точно, а в некую точку встречи.
2) У ракеты есть энергия или дельта V, ракетный двигатель разгоняет ракету и дальше отключается. Ракета расходует запасенную энергию на какие то маневры и корректировки курса, на этом факте основаны большинство противоракетных маневров.
3) Ракета поражает не точно цель, а некую область возле нее облаком осколков при срабатывании взрывателя.
Все выше написанное относится к ракетам из серьезных авиасимуляторов таких как DCS.
Если вы делаете аркадный симулятор, то ваши ракеты скорее всего будут вести себя как акустические торпеды. То есть двигатель постоянно работает, постоянно идет корректировка курса.
Пример из игр ColdWater, если неуправляемые Silent Hunter.
каким образом оптимально находить вектор скорости MSL_VEL

Я бы взял алгоритм для неуправляемой торпеды из Silent Hunter.
0) Известна скорость торпеды и пеленг цели
1) Вычисляется расстояние до цели
2) Вычисляется угол под которым мы видим цель
3) Вычисляется скорость цели (в игре это делается по секундомеру, у вас можно допустить игровую условность в виде радара доплера)
4) На основе полученных данных автоматически вычисляется точка рандеву и угол под которым должна быть запущена ракета/торпеда
5) Выполняется пуск и смотрим результат на сколько точно мы (или бортовой компьютер) выполнил расчеты.
Ответ написан