Применение параметров Родрига-Гамильтона в задачах динамики полета ЛА.
Реализация в коде.
Время пошло. В интернете можно найти немало описаний того, что такое параметры Родриго-Гамильтона, откуда они взялись и для чего нужны. Вместе с этим вам предложат узнать, что такое кватернионы, гиперкомплексные числа и как их можно вывести. Здесь описано, как применить их на практике в задачах динамики полета. Ниже представлен фрагмент кода на языке Java:
//вычисление параметров Родриго-Гамильтона по углам Эйлера:
double ρrg = Math.cos(psi / 2) * Math.cos(fi / 2) * Math.cos(gam / 2) + Math.sin(psi / 2) * Math.sin(fi / 2) * Math.sin(gam / 2);//- клишин
double λrg = Math.cos(psi / 2) * Math.cos(fi / 2) * Math.sin(gam / 2) - Math.sin(psi / 2) * Math.sin(fi / 2) * Math.cos(gam / 2);//+
double μrg = Math.sin(psi / 2) * Math.cos(fi / 2) * Math.cos(gam / 2) + Math.cos(psi / 2) * Math.sin(fi / 2) * Math.sin(gam / 2);
double Vrg = Math.cos(psi / 2) * Math.sin(fi / 2) * Math.cos(gam / 2) - Math.sin(psi / 2) * Math.cos(fi / 2) * Math.sin(gam / 2);
//Нормировка. Модуль вектора в 4-х мерном пространстве для нормировки:
double norm = Math.sqrt(ρrg*ρrg+λrg*λrg+μrg*μrg+Vrg*Vrg);
//нормировка параметров:
double[] rg = {ρrg/norm, λrg/norm, μrg/norm, Vrg/norm);
ρrg = rg[0];
λrg = rg[1];
μrg = rg[2];
Vrg = rg[3];
//вычисление производных параметров РГ
double ρrgt = -dt*(Rocket.w[0]*λrg+Rocket.w[1]*μrg+Rocket.w[2]*Vrg)/2;
double λrgt = dt*(Rocket.w[0]*ρrg -Rocket.w[1]*Vrg +Rocket.w[2]*μrg)/2;
double μrgt = dt*(Rocket.w[0]*Vrg -Rocket.w[1]*ρrg -Rocket.w[2]*λrg)/2;
double Vrgt = dt*(-Rocket.w[0]*μrg +Rocket.w[1]*λrg+Rocket.w[2]*ρrg)/2;
//интегрирование (метод Эйлера):
ρrg = ρrg+ρrgt;
λrg = λrg+λrgt;
μrg = μrg+μrgt;
Vrg = Vrg+Vrgt;
//углы Эйлера на новом шаге
fi = Math.asin(2 * (ρrg * Vrg + λrg * μrg)); //угол тангажа
gam = Math.atan(2 * (ρrg * λrg - Vrg * μrg) / (Math.pow(ρrg, 2) + Math.pow(μrg, 2) - Math.pow(Vrg, 2) - Math.pow(λrg, 2))); //угол крена
psi = Math.atan(2 * (ρrg * μrg - Vrg * λrg) / (Math.pow(ρrg, 2) + Math.pow(λrg, 2) - Math.pow(Vrg, 2) - Math.pow(μrg, 2))); //угол рыскания
Автор постарался дать исчерпывающее количество коментариев.
Литература: И.С.Голубев, В.Г.Светлов «ПРОЕКТИРОВАНИЕ ЗЕНИТНЫХ УПРАВЛЯЕМЫХ РАКЕТ». Москва, 2001.
Автор: mmarashan