Несколько пулевых точек из предыдущего ответа :
xxx@gmail.com
. Пользователь reply-to
, если вам нужны ответы, чтобы получить другой адрес. То, что вы предлагаете, называется "Командным наведением", но есть более простой и лучший способ.
Обычно настоящие ракеты делают это (не все одинаковы) используют система называется пропорциональная навигация. Это означает, что ракета "поворачивается" в том же направлении, что и линия прямой видимости (LOS) между ракетой и целью, со скоростью поворота, "пропорциональной" скорости LOS ... Это будет делать то, что вы спрашивая, поскольку, когда скорость LOS равна нулю, вы находитесь на курсе столкновения.
Вы можете рассчитать скорость LOS, просто сравнивая наклон линии между ошибкой и целью от одной секунды к другой. Если наклон не меняется, вы идете на встречный курс. если он меняется, рассчитайте изменение и поверните ракету на пропорциональную угловую скорость ... вы можете использовать любые метрики, которые представляют ракету и позицию цели.
Например, если вы используете константу пропорциональности, равную 2, и точка прямой видимости движется вправо со скоростью 2 град / сек, поверните ракету вправо со скоростью 4 град / сек. LOS влево со скоростью 6 град / сек, ракета влево со скоростью 12 град / сек ...
В 3-й задаче идентично, за исключением «Изменение скорости LOS» (и результирующей скорости поворота ракеты). вектор, то есть он имеет не только величину, но и направление (поворачиваю ли я ракету влево, вправо, вверх или вниз или на 30 градусов выше горизонтали вправо и т. д.? ... Представьте себе, как пилот ракеты, где вы бы «установили крылья», чтобы применить подъемную силу ...
Ракеты с радиолокационным наведением, которые «знают» скорость закрытия. отрегулируйте константу пропорциональности на основе закрытия (чем выше закрытие, тем быстрее ракета пытается повернуться ), Другие ракеты (например, Sidewinders), которые не знают закрытия, используют постоянное заранее заданное значение пропорциональности). FWIW, сайдвиндеры AIM-9 времен Вьетнама использовали константу пропорциональности 4.
Взгляните на OpenSteer . В нем есть код для решения подобных проблем. Посмотрите на 'steerForSeek' или 'steerForPursuit'.
Я уже использовал эту статью CodeProject раньше - в ней есть несколько действительно хороших анимаций, объясняющих математику.
"Математика наведения и моделирования ракеты: От исчисления к формуле четвертой степени »: http://www.codeproject.com/KB/recipes/Missile_Guidance_System.aspx
(также, скрытая в комментариях внизу этой статьи ссылка на некоторый код C ++, который выполняет то же самое задача из Unreal wiki)
Учитывали ли вы отрицательные отзывы о недавнем изменении пеленга по мере изменения времени?
Детали оставлены в качестве упражнения.
Предложения совершенно серьезные: если цель не маневрирует это должно обеспечить близкий к оптимальному перехват. И он должен сходиться, даже если цель активно уворачивается.
Нужны подробности?
Решение в двухмерном пространстве для простоты обозначений. Примем \ vec {m}
в качестве местоположения ракеты, а вектор \ vec {t}
- в качестве местоположения цели.
Текущий курс по направлению движения за последнюю единицу времени: \ vec {h} = \ bar {\ vec {m} _i - \ vec {m} _i-1}}
. Пусть r будет нормализованным вектором между ракетой и целью: \ vec {r} = \ bar {\ vec {t} - \ vec {m}}
. Пеленг: b = \ vec {r} \ dot \ vec {h}
Вычислить азимут в каждый момент времени и его изменение, а также изменить курс, чтобы минимизировать это количество.
Математика: harrier в 3d из-за необходимости находить плоскость действия на каждом шаге, но процесс тот же.
Вы захотите интерполировать траекторию как цели, так и ракеты как функцию времени. Затем найдите моменты времени, когда координаты объектов находятся в пределах некоторой допустимой ошибки.