Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
 Аватар для tonline_kms65
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 232

Зависимость угла поворота объекта от его скорости

09.04.2020, 07:27. Показов 9809. Ответов 195
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Все здравствуйте.
Мне нужна помощь в таком вопросе. У меня есть самонаводящаяся ракета, она летит -ищет противника, когда находит - меняет направление в строну найденного противника.
Вот и вопрос - меняет направление она резко, а я хочу понять принцип, как можно менять направление полета плавно.
Сам полет происходит по схеме:
в таймере толкаю ракету в первоначальном направлении вектора(прицел), с тиком 0.1 сек.
в полете (в цикле) идет поиск ближайших противников(находящихся в пределах прямой видимости).
при обнаружении противника задаю новый вектор до найденной цели, и соответственно ракета движется уже по этому вектору.
Я понимаю так, каждый тик таймера ракета перемещается на то расстояние, что составляет длинна этого вектора. Вектор нормализую, что бы иметь возможность управлять событиями(типа столкновений и т.д.)и нормализованному задаю скорость. Полет происходит с этой скоростью.
Может быть при обнаружении противника нужно, для снижения скорости, получить разность векторов направлений(старого и нового), этакую дельту, и в зависимости от этого менять скорость, можно эти данные, примерно, получить экспериментальным путем, забить их в массив и потом оттуда получать - это самый быстродействующий способ будет по моему.
Мне бы сам принцип понять.

Много перегуглил - так ничего и не понял, только запутался еще больше.
Может быть есть такие, кто все это прошел, и сможет "на пальцах" объяснить принцип работы кода.
Просьба у меня такая, не нужны формулы(их еще нужно в код перевести, а что бы перевести, нужно их понять)я их уже насмотрелся, нужен сам принцип.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2020, 07:27
Ответы с готовыми решениями:

Найти зависимость угловой скорости от угла поворота
Диск начинает вращаться вокруг закрепленной оси с угловым ускорением, изменяющимся по закону ε=ε0cosϕ, где ε0 -...

Найти зависимость от времени угла α между векторами скорости и ускорения , его величину в момент времени t
Найти зависимость от времени угла α между векторами скорости и ускорения , его величину в момент времени t 1 , если известен закон...

Взаимозависимость угла поворота и угловой скорости
Здравствуйте, помогите пожалуйста разобраться. Взаимозависимости уголь \varphi поворота с угловой скорости \omega можно написать так: ...

195
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.04.2020, 12:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
экспериментально подбираемый коэффициент
Подозреваю этот коэффициент просто добавить множитель K вот тут:
w=arcsin(((K*vA)/vB)*sin(q))
Тогда при
K=1 будет “параллельное сближение”
K=0.1 будет примерно “прямое наведение”
K=0.3 будет примерно “кривая погони” или
K=0.3 до 1 будет “наведение с упреждением”
Найти место встречи двух точек


Fulcrum_013, там полный бардак.
Так?
Линия визирования,Line-of-Sight, LOS, straight line between the missile and the target
Vt //вектор скорости target
Vm //вектор скорости missle
Vr=Vt-Vm // скорость цели относительно ракеты

Rt //вектор target
Rm //вектор missle
R=Rt-Rm // дальность от ракеты до цели

rotVec //rotation vector, вектор вращения линии визирования
rotVec =cross(R,Vr)/dot(R,R)

N //proportionality constant generally having an integer value 3-5
a=N*cross(Vr, rotVec)

Lambda, L это угол поворота?
L=a/(N*V)
Где формула для V? гугл перевел “скорость закрытия” что это хз. Нет формулы для него.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2020, 14:17
Цитата Сообщение от Excalibur921 Посмотреть сообщение
K=1 будет “параллельное сближение”
K=0.1 будет примерно “прямое наведение”
K=0.3 будет примерно “кривая погони” или
K=0.3 до 1 будет “наведение с упреждением”
Прямое наведение будет если подать на вход регулятора сам угол визирования.
Если подать производную угла визирования по времени то будет параллельное сближение.
Коэффциент по факту задает только шаг поиска. При слишком большом коэффициенте будет большая ошибка в результате - т.е. будет слишком большая амплитуда дрожания курса относительно заданного. При слишком малом слишком медленный поиск.

Добавлено через 2 минуты
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Подозреваю этот коэффициент просто добавить множитель
нужно умножить на коэффициент разность углов визирования вычисленных в двух последовательных фреймах.
Угол визирования - это угол между вектором курса (скорости) ракеты и линией визирования цели.
Т.е. суть - если мы идем в точку упреждения то все треугольники подобны. У подобных треугольников углы равны. Соответственно проверяем равность углов в двух последовательных треугольниках. Если углы не равны поворачиваем пока не получим равный угол в последовательных фреймах.

Добавлено через 5 минут
Цитата Сообщение от Excalibur921 Посмотреть сообщение
будет примерно “кривая погони”
кривая погони -это траектория которую описывает ракета при прямом наведении по движущейся цели.
0
фрилансер
 Аватар для Алексей1153
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,371
11.04.2020, 14:21
мне кажется, для игры можно сильно упростить теорию: берём, так сказать, "апекс" ракеты на плоскости, перпендикулярной вектору движения ракеты. Камера находится на конце ракеты, между камерой и плоскостью некое расстояние (расстояние будет влиять на дискретность управления) На эту плоскость проецируется положение, вектор скорости и ускорения цели. Далее задача сводится к тому, чтобы совместить на этой плоскости (отвязались от 3D) апекс с точкой цели.

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

берём нужное направление, преобразуем в угол, поворачиваем вектор движения. Обратная связь замыкается
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.04.2020, 14:24
Правильно? Где брать V?
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Vt //вектор скорости target
Vm //вектор скорости missle
Vr=Vt-Vm // скорость цели относительно ракеты
Rt //вектор target
Rm //вектор missle
R=Rt-Rm // дальность от ракеты до цели
rotVec //rotation vector, вектор вращения линии визирования
rotVec =cross(R,Vr)/dot(R,R)
N //proportionality constant generally having an integer value 3-5
a=N*cross(Vr, rotVec)
Lambda, L это угол поворота?
L=a/(N*V)
Где формула для V? гугл перевел “скорость закрытия” что это хз. Нет формулы для него.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2020, 14:31
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Правильно? Где брать V?
то что то вы не то роете. Никакие данные о самой цели не нужны от слова совсем. Нужен вектор скорости ракеты - это исходные данные и вектор на цель - т.е. нормализованная разница радиус-векторов цели и ракеты. Все. В реальных ракетах угол замеряется напрямую а не вычисляется из координат. Ничего кроме угла визирования бортовое оборудование замерять не может.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.04.2020, 14:39
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
то что то вы не то роете.
?
Напишите тогда правильные все формулы. Там 3 варианта поиска “a” по ссылке хз зачем. У меня не очень английский.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2020, 14:53
SightAngle = atan2(v1 % s, v * s )

где v - нормализованный вектор скорости ракеты, s - нормализованный вектор визировани цели из точки в которой находится ракета. % -векторное произведение, * - скалярное.

вычислили и запомнили к примеру как PrewSightAngle
следующий фрейм
SightAngle = atan2(v % s, v * s )
RotationAngle = c * (SightAngle - PrewSightAngle)
PrewSightAngle = SightAngle

и повторяем до победного конца в каждом фрейме. v и s естественно берем в текущем фрейме.
т.е. s = Norm(TargetPos-MissilePos) в текущем фрейме v - ну то что получили в результате поворота в предыдущем.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.04.2020, 15:47
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
v1 % s
Как это? Вернет вектор.

А где все обозначения и формулы из ссылки? Там бред?
https://en.wikipedia.org/wiki/... navigation
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2020, 15:56
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Как это? Вернет вектор.
в 2d это скаляр. ну косое произведение - 3ий ненулевой компонент результирующего вектора. в 3D модуль вектора. но опять же 3D задачу лучше разложить на две 2D задачи.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
А где все обозначения и формулы из ссылки? Там бред?
Там формула для ракет с активной ГСН. Т.е. введена зависимость коэффициента регуляции от дистанции до цели и скорости цели. Т.е. в общем то "противораскачиватель" для дальних дистанций.
Для пассивной или полуактивной ГСН эти данные неизвестны так что пользуется обычная регуляция с постоянным коэффициентом.
При этом они там вычисляют дополнительное ускорение которое надо придать ракете а не угол поворота.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.04.2020, 16:12
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
при стрельбе по неподвижной цели вектора курса и визировани становятся колинеарными
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
в 3D модуль вектора. но опять же 3D задачу лучше разложить на две 2D задачи.
Мне интуитивно понятней всегда в 3д. Проще добавить перед всем расчетом угла поворота проверку на колинеарность вектора курса и визирования. Значит там длинна вектора.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
в общем то "противораскачиватель" для дальних дистанций.
Это ведь по идее лучше чем без "противораскачивателя"?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Там формула для ракет с активной ГСН.
Не забывайте что это все для игры.
Там можно получить все. Главное чтобы работало. Почему не взять сложные формулы по ссылке?

Вот захочет простой смертный сделать мелкую формулу для ракеты в игре…заходит по ссылке на вики а там мрак =)). Как заставить работать формулы? Что не хватает? Какую формулу расчета “а” лучше брать?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2020, 16:26
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Там можно получить все. Главное чтобы работало. Почему не взять сложные формулы по ссылке?
Та в принципе можно. Только пока нет интеллектуального поведения цели направленного на целенаправленное раскачивание ракеты смыслу от них около нуля.
Ну и вполне логично сначала сделать с постоянным коэфициентом потом усложнять путем добавления вычисления коэффициента.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.04.2020, 17:07
Т.е. там просто заумные формулы части которых просто не работают сами? Но я не видел там никаких параметров управляемых со стороны. Вроде все из текущих координат цели \ ракеты. А как анализируют если цель начинает зигзаги? Может есть что-то без 100 этажного матана сильно упрощенно для игр?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2020, 17:10
Excalibur921, Там просто формулы для другого исполнительного механизма. Тяжелые ракеты управляются газовыми рулями/отклонением вектора тяги поэтому там на выходе вектор ускорения нужен которое приведет к нужному повороту вектора курса а не сам угол поворота.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.04.2020, 17:13
А вообще есть некие общепринятые виды траектории для тестирования насколько хороши алгоритмы наведения? Например траектории цели сделать спираль с переменным радиусом и мелким шумом. Может есть что-то готовое? Или более сложную траекторию цели как функцию от например расстояния до ракеты или формы траектории подлетающей ракеты или угла атаки если анализировать сферу вокруг цели? Что-то не сильно научное не с конструкторских бюро =)).
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2020, 17:28
Excalibur921, Если и есть то очень разные для разных ракет.
К примеру ранние ракеты ближнего боя пускались только в заднюю полусферу и там были одни траектории. При этом время полета такое что цель в общем то особо сманеврировать не успевает - он за это время только часть полной окружности проходит. Потом появились всеракурсные ракеты ближнего боя но основное применение все равно на кругу в заднюю полусферу.
Для дальних ракет там все совсем по другому. У нее обычно много алгоритмов наведения используемых на разных дистанциях. В том числе радиокомандный и инерциальный вернее их комбинация - ракета вообще ничего не знает о цели и идет в последнюю известную позицию, носитель по данным своего радара корректирует точку. В том числе и наведение на источник активной помехи. Т.е. на дальней дистанции ракета просто так или иначе идет в зону цели с погрешностью плюс-минус лапоть (ну километров 10-15)
там уже когда датчик видит цель включается пропорциональная навигация. При этом многие ракеты по пути создают запас высоты над целью. Сверху можно атаковать за счет разницы в потенциальной энергии.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.04.2020, 17:58
Похоже где-то ошибка. Т1 по идее не должен гулять от изменения направления полета R (Rocket).
OldsAng=0
OldsAng = sAng // не скоприровано sAng в OldsAng, начальный фрейм.
вектор T1=поворот вектора T вокруг вектора M на угол -RotAng
Название: ScreenShot00976.jpg
Просмотров: 22

Размер: 9.6 Кб
Название: ScreenShot00977.jpg
Просмотров: 22

Размер: 9.9 Кб

vecSpeedM // вектор скорости missle
normVecSpeedM // нормализованный vecSpeedM

vecTM //вектор vecT минус vecM
normVecTM // нормализованный vecTM

a=cross(normVecSpeedM,normVecTM)
b=dot(normVecSpeedM,normVecTM)
sAng = atan2(a,b)

k=1 // какие пределы? целое?
RotAng = k * (sAng - OldsAng )
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2020, 18:04
Excalibur921, При этом эффективность траектории понятие абсолютно разное для разных типов БЧ. Для осколочной БЧ углы и т.д. без разницы - достаточно войти в зону поражения. Для стержневых в общем то важна возможность доворота на заданный угол на терминальном этапе - это по большому счету летающая 75 и более миллиметров однозарядная пушка. А соответственно должна в точку упреждения навести болванку которая летит с другой скоростью. Причем вот этот момент настолько сложен что как минимум до 2000-х американские ракеты со стержневой БЧ атаковали только строго с 6 или с 12 часов и против них был эффективн манер "3 или 9" - т.е. держать ближайшую ракету на 90 градусов от своего курса

Добавлено через 4 минуты
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Т1 по идее не должен гулять от изменения направления полета R (Rocket).
"Гулять" это в смысле ходить влево-вправо? Это дребезг регуляции. Уменьшайте коэффициент.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.04.2020, 21:31
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
"Гулять" это в смысле ходить влево-вправо?
Не работает правильно. Теперь другой баг.
k=1
OldAng=0
"a" нормализован вектор скорости missle
"c" нормализован вектор "b"
"v" вектор скорости цели
Ang= k * (atan2(Dot(a,c),Cross(a,c)) - OldAng)
Поворот T вокруг M по часовой дает точку A новое направление ракеты.
Название: ScreenShot00995.jpg
Просмотров: 20

Размер: 6.3 Кб
Название: ScreenShot00996.jpg
Просмотров: 20

Размер: 6.2 Кб
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.04.2020, 09:21
Где ошибка?
ССW против часовой, по часовой CW
ang=atan2(Dot(a,b),Cross(a,b))
Название: ScreenShot01002.jpg
Просмотров: 18

Размер: 6.3 Кб
Название: ScreenShot01003.jpg
Просмотров: 18

Размер: 8.3 Кб
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.04.2020, 11:46
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Подозреваю этот коэффициент просто добавить множитель K вот тут:
Так и есть.

Добавил коэф. k в формулу из книги "Самонаведение ракет Куркоткин"
Называется там "метод наведения с постоянным углом упреждения" стр 25

похоже если просто считать упреждение в каждом кадре то метод станет
"метод наведения с непрерывным упреждением".

vM>vT похоже это обязательное условие работы формулы, вполне логичное.
Т.к. если vM<=vT то лучший курс M это параллельный T или включить алгоритм “прямое наведение”
vT // скорость T
vM // скорость M
q // угол между линией визирования и вектором скорости T
k // коэф. задает форму кривой и сам алгоритм наведения
k=0 “прямое наведение”
k от 0 до 1 дальность упреждающей точки встречи.
k=1 номинальное значение.
ang=k*arcsin((vT/vM)*sin(q))
Крутим точку T вокруг M на угол ang это и даст направление ракеты(красная стрелка).



Как усложнение алгоритма наведения можно менять коэф. k если анализировать поведение цели.
Например цель начинает двигаться зигзагами (противоракетные маневры ) или большая шероховатость ее траектории тогда ракету при k=1 должно сильно мотать в стороны. Можно просто уменьшить дальность предсказания меcта удара ракеты уменьшив k. Как еще более сложный вариант станция РЛС должна анализировать траекторию цели и характер ее маневров, на основе этого аппроксимировать точку куда лучше всего лететь ракете наверно это уже слишком для игры.

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Как усложнение2:
Заданы 3 точки задающие кривую(A, два прошлых положения точки A).
Найти тоже самое, точку встречи. Скорости на траектории заданы квадратичной кривой.
Есть еще мысли придумать вот такой алгоритм нелинейной экстраполяции точки встречи ракеты и цели через интерполяцию положения цели по 3 точкам ее траектории в 3д. Интерполяция самой траектории квадратичной кривой и интерполяция закона скорости на этой траектории тоже квадратичной кривой. По идее позволит предсказывать положение цели на кривой.
Название: ScreenShot00975.jpg
Просмотров: 17

Размер: 4.0 Кб
Но наверно никто не скажет формулы да и наверно уже заумно для игры. Даже в книгах по самонаведению ракет не встречал экстраполяции по 3 точкам по кривой .Даже не попадался расчет точки встречи с учетом линейного изменения скорости цели на прямой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2020, 11:46

Зависимость проекции вращательного момоента сил, действующей на тело, от угла поворота
Всем добрый вечер, ну или день! столкнулся с такой задачей, вроде бы как решил но сомневаюсь. На рисунке представлен график зависимости...

Как рассчитать поворот угла, зная координаты трех точек до поворота и после поворота угла
Как рассчитать поворот угла (в градусах), зная только координаты трех точек до поворота и после поворота данного угла? Заранее спасибо.

Найти зависимость скорости от угла
1.100 1) Слова &quot;Здравствуйте&quot;, &quot;Пожалуйста&quot; и &quot;Спасибо&quot; вы уже проходили? Правило 3.1. Уважительно относитесь к другим участникам...

Изменение угла поворота объекта в 2D проекте Unity3D
Есть объект расположенный под углом (0, 0, -20), хочу сделать так, чтобы при нажатии кнопки &quot;Вверх&quot;, объект стал параллелен...

Найти зависимость от времени угла α между векторами скорости и ускорения
Найти зависимость от времени угла α между векторами скорости и ускорения, его величину в момент времени t1, если известен закон изменения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru