Применение параметров Родрига-Гамильтона в задачах динамики полета ЛА

от автора

Применение параметров Родрига-Гамильтона в задачах динамики полета ЛА.
Реализация в коде.

Время пошло. В интернете можно найти немало описаний того, что такое параметры Родриго-Гамильтона, откуда они взялись и для чего нужны. Вместе с этим вам предложат узнать, что такое кватернионы, гиперкомплексные числа и как их можно вывести. Здесь описано, как применить их на практике в задачах динамики полета. Ниже представлен фрагмент кода на языке 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.

ссылка на оригинал статьи https://habrahabr.ru/post/282409/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *