|
97 / 5 / 0
Регистрация: 10.10.2016
Сообщений: 7
|
|
Алгоритм наведения ракеты на цель методом пропорциональное наведение10.10.2016, 03:33. Показов 10450. Ответов 7
Разрабатываю новый класс оружие для одной игры(С.Т.А.Л.К.Е.Р), ПЗРК.
Сам алгоритм ПЗРК я почти сделал, так же реализовал и наведение ракеты на цель, правда совсем инвалидным и халтурным способом, поэтому надо новый алгоритм для ракеты. Требуется создать алгоритм наведения ракеты на цель: методом пропорционального наведение, это когда ракета летит не на цель, а вне которую упреждающую точку. Сам этот способ описан в интернетах хорошо, например здесь. http://studopedia.su/9_79470_m... eniya.html Но мне не ясно как конкретно вычислить вектор на упреждающую точку в 3-х мерном мире. Некоторые вводные: ракета видит цель, но не знает скорость цели, так же не учитывает свою скорость, вектор на упреждающую точку вычисляется из разницы вектора ГСН текущего и прошлого апдейта, вектор ГСН постоянно направлен на цель, ракета разворачивается с определённой перегрузкой и эта перегрузка не может превысить некоторое значение. В начале ракета стартует строго на цель. В общем, ракета летя к цели, стремится уменьшить разницу между этим вектором(который постоянно направлен на цель) на текущем и прошлом апдейте до нуля. Реализовывать буду на Lua и потом на C++.
1
|
|
| 10.10.2016, 03:33 | |
|
Ответы с готовыми решениями:
7
Выполните компьютерное моделирование наведения ракеты в точку на экране Поворот родителя для наведения потомка на цель
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 10.10.2016, 13:26 | |
|
Вам в раздел геометрии наверно…
Вот как я понял и приблизительно представляю логику алгоритма. Но я не математик. Скорей всего есть проще метод а в книге непонятная мне лирика… A ракета, B цель. Замеряем координаты B через 0.1 сек получим B1. Замеряем угол между векторами AB и AB1 получим угловую скорость цели B угол Alfa0. Теперь нужно отложить этот угол в 3д. Тут мне видится только матрица поворота вокруг произвольной оси в 3д есть на википедии, она принимает 3 единичных вектора все нормализованы: 1) ось поворота C0, получаем векторным произведением AB на AB1 2) начало поворота C1, нормализованный AB 3) угол поворота Alfa0*k, и принятое направление поворота. Теперь подставляем в матрицу все известные и получаем единичный вектор направления полета ракеты на упреждающий курс. Зная f0(t) скорость ракеты и цели f1(t) можно построить в 3д траектории полета цели и ракеты от параметров k. Для моделирования перехвата, менять траектории цели для имитации укланения… Как учитывать макс крутость траектории от допустимой перегрузки неведомо… может просто большие k брать. Почему наплевали на скорость ракеты и берут ее неподвижной тоже неведомо, видимо не актуально а расчет бы усложнило. Добавлено через 16 минут Кстати вроде перегрузка ракеты это макс разность углов между двумя положениями за единицу времени. Значит у вас будет по сути две траектории ракеты, одна расчетная, а другая реальная зависит от маневренности ракеты. Может ввести маневренность AlfaMax это макс угол на который может повернуть ракета за единицу времени. Значит поворот в матрице будет на угол: Если Alfa0*k > AlfaMax то AlfaMax иначе Alfa0*k
0
|
|
|
97 / 5 / 0
Регистрация: 10.10.2016
Сообщений: 7
|
|
| 10.10.2016, 15:57 [ТС] | |
|
Пожалуй несколько ошибся с названием топика, надо было назвать - "Эмуляция ИК ГСН ракеты ПЗРК".
ГСН вырабатывает два параметра: это угол фазы и амплитуда. Угол фазы характеризует угол плоскости на упреждающую точку, а амплитуда характеризует угол ошибки наведения, если фаза равна нулю, то ракета легла на траекторию упреждающей точки. Кстати: ЭВМ автопилота ракеты ПЗРК от Стрелы-2 до Вербы аналоговый, у американского Стингера РПМ автопилот цифровой, его эмулировать будет сложней. dir_rocket - вектор ракеты dir_target - текущий вектор направленный на цель dir_koordinator - вектор ГСН равен dir_target на прошлом апдейте delta - разница времени с прошлым апдейтом, сек. Угол фазы и амплитуда вычисляется из разницы вектора dir_target и dir_koordinator, далее угол фазы мы используем что бы рассчитать угол поворота ракеты в сторону упреждающей точки, а фаза используется насколько резко будем поворачивать, если фаза близка к нулю то летим прямо. Проблема в том что у меня плохо с матаном, и я не могу рассчитать угол разворота ракеты в зависимости от этих параметров.
1
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 11.10.2016, 10:41 | ||
|
Можете показать расчет фазы и амплитуды без производных чисто формулы по которым расчет?
Значит у вас есть угол между (dir_rocket) и (курс на перехват)? И еще резкость поворота? Непонятно зачем нужна величина резкости поворота если есть угол? То как резко повернуть зависит просто от величины угла между dir_rocket и (курс на перехват). Ракета мгновенно повернуть не может, поскольку например курс корректируется каждые 0.1 сек значит нужно поворачивать dir_rocket на максимально близкий к Alfa0 за например 5 FPS. Как найти величину угла поворота для каждого кадра? Если Alfa0 это угол между (dir_rocket) и (курс на перехват): AlfaMax это макс угол поворота ракеты за 0.1 сек. Линейная зависимость: Alfa1=Если (Alfa0> AlfaMax) то (AlfaMax/(кол-во FPS между замерами. курса) )иначе (Alfa0/(кол-во FPS между замерами курса)) Дальше матрицей поворота вокруг произвольной оси повернуть dir_rocket на Alfa1 вокруг оси (векторное произведение dir_rocket и (курс на перехват)) это даст новый вектор dir_rocket который искали. Тогда в итоге будет если ракета далеко от курса Alfa0>AlfaMax то поворачивает на курс с макс скоростью разворота равной AlfaMax/(кол-во FPS между замерами. курса). Если угол Alfa0 (угол между dir_rocket и dir_koordinator) то ракета близка к курсу то поворачивать будет тем плавней чем меньше Alfa0. Зачем в расчете другое непонятно… Добавлено через 1 час 46 минут 1) угол вектора от центра камеры до цели – даст направление поворота ракеты 2) Величина этого вектора даст крутость поворота ракеты Но как тогда находят упреждение непонятно, может это в дебрях книг есть. Вообще описание математики в книге что я читаю довольно сумбурное, и зачем то в плоскости… видимо не предназначено для построения ГСН даже для игры и многие детали упускают. В моем понимании суть получения упреждающей точки это минимум 2 вещи как не крути: 1)Знание скорости цели 2)знание направления полета цели. Может по двум замерам находят эти величины с очень малым интервалом времени с РЛС? А метод называют “наведения с последовательным непрерывным упреждением”. Книга “Самонаведение ракет Куркоткин” Стр 29 Я так понял вы пару книг глянули, есть какая то на простом языке пояснения с именно вашим методом? И сразу простой вопрос: почему не взять самый простой метод наведения “метод прямого наведения” Стр 20. и просто добавить скорости ракете до (скорость самой быстрой цели)*5 например. Добавлено через 13 часов 7 минут Похоже намудрили с алгоритмами наведения и терминами. Упреждения здесь нет. Ракета будет бить в хвост цели. А это метод называется “прямого наведения” из “Куркоткин самонаведение ракет “ Стр 20. Матана тут нет, у вас чисто геометрическая задача. Запилите рисунок с обозначениями и на геометрии может подскажут как сделать просто. Тут можно мозг сломать при попытке представить все это =).
0
|
||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 11.10.2016, 20:02 | |
|
Сделал модель простенькую в GeoGebra алгоритма “метод прямого наведения” в 2D как я его вижу и работает.
Цель движется слева направо зеленые точки равные интервалы времени траектории цели. Желтые управляю траекторией полета цели. Черные точки траектория ракеты. Стрелка это вектор запуска ракеты. Красный отрезок это минимум расстояния между целью и ракетой. Вы попробовали алгоритм в 2д? Может 3д будет если например соединить решение из разных плоскостей. Ни схемы не сделали… бросили? =).
0
|
|
|
97 / 5 / 0
Регистрация: 10.10.2016
Сообщений: 7
|
|||||||||||
| 11.10.2016, 20:29 [ТС] | |||||||||||
|
Так значит, проработал алгоритм как следует, и понял, как надо реализовывать. Вот рисунок
http://savepic.ru/11787085.jpg Сначала нам надо вычислить фазу и амплитуду, фаза это плоскость ошибки т.е. плоскость на которой лежит УТВ(упреждённая точка встречи), а амплитуда это величина ошибки. Вот код, который вычисляет эти параметры.
Я также ранее сделал другой алгоритм который вычисляет УТВ по параметрам скорости, позиции цели и ракеты, в общем работает, но халтура, ОГС понятие не имеет, какая там скорость у цели и даже у самой ракеты. Так же сделал расчёт фазы и амплитуды для реальной УТВ, self.dir_future – это вектор на УТВ.
(float). Далее алгоритм вырисовывается самим собой, нам надо развернуть вектор на угол фазы вот так как на рисунке. http://savepic.ru/11751232.gif Ракета разворачивается в сторону вектора vec3, при большой амплитуде на максимальной перегрузке, а при малой, старается сразу попасть в УТВ. Может быть, надо проработать формулы для расчёта угла фазы, что бы увеличить точность. Вот ещё лог, понятно что погрешность существенная, rocket - точные параметры фазы. Кликните здесь для просмотра всего текста
delta_ogs = 0.2039999961853 sec
dir_rocket = x(-0.80911296606064), y(-0.10871564596891), z(0.57750952243805) dir_target = x(-0.80736768245697), y(-0.11201272904873), z(0.57931905984879) dir_koordinator = x(-0.8076034784317), y(-0.11153579503298), z(0.57908225059509) koordinator: faza = 145.50108337402, amplitude = 0.039564684033394 grad rocket: faza = 143.14672851563, amplitude = 0.23738826811314 grad, amplitude = 0.23738826811314 delta_ogs = 0.21400000154972 sec dir_rocket = x(-0.80736768245697), y(-0.11201272159815), z(0.57931905984879) dir_target = x(-0.80710691213608), y(-0.11263407766819), z(0.5795618891716) dir_koordinator = x(-0.80736768245697), y(-0.11201272904873), z(0.57931905984879) koordinator: faza = 150.8127746582, amplitude = 0.044234659522772 grad rocket: faza = 150.64170837402, amplitude = 2.488213300705 grad, amplitude = 2.488213300705 delta_ogs = 0.20900000631809 sec dir_rocket = x(-0.80195552110672), y(-0.1246342882514), z(0.58423763513565) dir_target = x(-0.80685085058212), y(-0.11248391866684), z(0.5799475312233) dir_koordinator = x(-0.80710691213608), y(-0.11263407766819), z(0.5795618891716) koordinator: faza = 71.909271240234, amplitude = 0.027976455166936 grad rocket: faza = 64.540451049805, amplitude = 1.375439286232 grad, amplitude = 1.375439286232 delta_ogs = 0.21999999880791 sec dir_rocket = x(-0.79449361562729), y(-0.11818257719278), z(0.59566158056259) dir_target = x(-0.80689191818237), y(-0.11280323565006), z(0.57982838153839) dir_koordinator = x(-0.80685085058212), y(-0.11248391866684), z(0.5799475312233) koordinator: faza = 159.41137695313, amplitude = 0 grad rocket: faza = 154.36251831055, amplitude = 1.1176762580872 grad, amplitude = 1.1176762580872 delta_ogs = 0.21299999952316 sec dir_rocket = x(-0.79686915874481), y(-0.13077607750893), z(0.58982819318771) dir_target = x(-0.80719274282455), y(-0.1134884878993), z(0.5792755484581) dir_koordinator = x(-0.80689191818237), y(-0.11280323565006), z(0.57982838153839) koordinator: faza = 137.84274291992, amplitude = 0.055952914059162 grad rocket: faza = 138.6039276123, amplitude = 2.5566539764404 grad, amplitude = 2.5566539764404 delta_ogs = 0.21099999547005 sec dir_rocket = x(-0.80132132768631), y(-0.14148481190205), z(0.58126264810562) dir_target = x(-0.80740684270859), y(-0.11322021484375), z(0.57902979850769) dir_koordinator = x(-0.80719274282455), y(-0.1134884878993), z(0.5792755484581) koordinator: faza = 50.236511230469, amplitude = 0.027976455166936 grad rocket: faza = 39.043853759766, amplitude = 1.1713621616364 grad, amplitude = 1.1713621616364 Добавлено через 5 минут ЗЫ Язык программирования Lua движка XRay Engine, тут нету поддержки синтаксиса lua. Функция CreateSlerp сферическая интерполяция 3-х мерного вектора.
1
|
|||||||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||||||
| 12.10.2016, 00:42 | ||||||
|
Гляньте в книге “Куркоткин Самонаведение ракет “ Стр27 “Метод наведения с последовательным упреждением “ Одна строчка формула, и голая идея алгоритма, тонкости на совести программиста +продумать немного тригонометрии которую упустили для упрощения изсложения. Мне кажется самый мощный метод наведения. В остальных книгах заумный ненужный для игры матан. Почему не сделать проще? Вход расчета: 1)координаты осей ракеты Zr,Zx,Zy 2)координаты ракеты 3) a0 вектор на цель 4) vR=2 //Скорость ракеты 5) AlfaMax= 0.5 //маневренность ракеты Найти Alfa0 как угол между векторами Zr и a0 это даст сразу аналог того для чего вам была нужна амплитуда и фаза. a0 = dot вектора Zr и a0, это даст вектор a2 ось поворота для матрицы. Промотайте пургу на вики до слов “Матрица поворота вокруг произвольной оси” https://ru.wikipedia.org/wiki/Матрица_поворота Как по другому я так и не понял =). Повернуть Za по часовой повернуть матрицей где ось поворота вектор a2, поворачиваемый вектор Zr, и умножить результат на vR это и будет вектор a1 (это новые координаты ракеты, он же новый new_Zr ось ракеты). new_Yr =dot new_Zr ,new_a0, new_Xr = dot new_Zr, new_Yr Все, есть новые координаты ракеты, 3 координаты угла ее осей, и новый вектор на цель new_a0. Примерно такой же алгоритм я протестировал для 2D и он работал как видим.
1
|
||||||
|
97 / 5 / 0
Регистрация: 10.10.2016
Сообщений: 7
|
|||||||||||
| 29.09.2019, 17:22 [ТС] | |||||||||||
|
В общем, сам разобрался!
Всё оказалось невероятно просто. Просто надо было вектор, преобразовать в углы азимута и склонения, в движке XRay есть в пространстве имён vector нужные методы. В других движках, такие методы тоже должны быть.
Ещё один вариант.
Как то так, как видим, задача очень простая, сам не пойму почему сразу до этого не допёр. Добавлено через 10 минут ЗЫ self.cam_dir, self.last_cam_dir -- это векторы следящего координатора цели, т.е. векторы направленные на цель, в текущий момент и на прошлом апдейте. delta_sec -- соответственно время апдейта, сек. Остальное вроде всё понятно.
1
|
|||||||||||
| 29.09.2019, 17:22 | |
|
Помогаю со студенческими работами здесь
8
Алгоритм движения ракеты при выходе за пределы Земли Разработать алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|