Самая лучшая халява - это:
Результат
Архив

МЕТА - Украина. Рейтинг сайтов
Союз образовательных сайтов
Главная / Предметы / Астрономия / Исследование движения центра масс межпланетных космических аппаратов


Исследование движения центра масс межпланетных космических аппаратов - Астрономия - Скачать бесплатно


 Г.Г.Бебенин   «Управление    космическими    летательными
аппаратами». М., Машиностроение, 1974.
  В.В.Солодовников,  В.Н.Плотников,  К.В.Яковлев   «Теория   автоматического
управления технических систем». М., изд.МГТУ им.Баумана, 1993.
 Б.Страуструп «Язык программирования С++». М., «Радио и связь», 1991.
 А.В.Бошкин, П.Н.Дубнер «Работа с С++». М., «Юкис», 1991.
 В.В.Арсеньев, Б.Ю.Сажин «Методические указания к выполнению организационно-
экономической части дипломных проектов по созданию  программной  продукции»,
М., изд. МГТУ им.Баумана, 1994.
 ГОСТ 2.103-68 НИР. М.: Изд-во стандартов, 1968.
   В.К.Зелинский   «НОТ   в   проектно-конструкторской   организации».   М.:
«Экономика», 1969.
 «Управление трудовым коллективом» / Г.П.Зайцев, Э.В.Минько,  Н.В.Артамонова
и др. Свердловск, Изд-во УГУ, 1989.
 «Типовые нормы времени на программирование  задач  для  ЭВМ»,  утвержденные
постановлением  Государственного  комитета  СССР  по  труду   и   социальным
вопросам и Секретариата ВЦСПС от 27 июля 1987 г. №454/22-70
 Ю.Г.Сибиров «Охрана труда в ВЦ». М., «Машиностроение», 1985.
 Сибиров Ю.Г., «Основы инженерной психологии» /  под  ред.  Б.Ф.Ломова.  М.,
«Машиностроение», 1986.
  СНиП  2.09.04-87  «Административные   и   бытовые   здания   и   помещения
производственных предприятий».
 «Зрение» / под ред. Н.И.Кудряшовой, М., «Машиностроение», 1995.
 «Временные рекомендации труда операторов за дисплеями». ГОСТ 12.1.006-84.
 СНиП2963-84 «Нормирование электромагнитных полей».
 «Современные  нормы  электростатического  и  электромагнитного  излучения»,
«Computer World» №7, 1995.3
6. ПРИЛОЖЕНИЕ. ТЕКСТЫ ПРОГРАММ ДЛЯ BORLAND C++ И MATHLAB 4.0 FOR WINDOWS

  6.1. ОСНОВНОЙ ПРОГРАММНЫЙ МОДУЛЬ MAIN.CPP

#include 
#include 
#include 
#include 
#include "rk5.h"
#include "sfun.h"
#include "init.h"
#include 

typedef long double real;

const float g_r = M_PI/180.;
const float r_g = 180./M_PI;

real t_beg;
real t_end;
real dt;
real toler;
int Np;
int Curp;
real dTp;
real mu_z;
real mu_s;
real mu_l;
real m;
real m_t;
real W;
real w_s;
real w_z;
real w_l;
real ww_l;
real xs,ys,zs;
real xl,yl,zl;
real Fz,Fs,Fl,Fa,U20;
real J1,J2,J3;
int nomin;
real par[8];
real parn[8];
real a_p,e_p,p_p,Om_p,i_p,om_p,Rp_p,Ra_p;
real y_main[6];
real prmt[5];
int Fl_u;
real u_last;
int Fl_ka;
int Fl_kp;
int Fl_ki;
int Fl_i;
int Fl_p;
int Fl_a;
int Fl_lu;
int Fl_pkT;
real dl;
real T_vd;
real dRa;
real dRp;
int Sig;
int Sig_a;
real Tkor;
real Tkore;
real Vkor[3];
real akor[3];
int Fl_l0;
int Fl_l1;
int Fl_pki;
real dV_ps;
real dV_as;
real dV_is;
real dV_ss;

ofstream m_y ("m_y.dat");
ofstream m_f ("m_f.dat");
ofstream m_s ("m_s.dat");
ofstream m_l ("m_l.dat");
ofstream m_par ("m_par.dat");
ofstream u_f ("u_f.dat");
ofstream u_par ("u_par.dat");
ofstream k_par ("k_par.dat");

void out_p(real,real *,real*,int,int,real*);

void main()
{
clrscr();
init_m();
real dery[]={ .167, .167, .167, .167, .166, .166};
int ihlf;
int ndim = 6;

Drkgs(prmt,y_main,dery,ndim,ihlf,fct,out_p);
clrscr();
if (ihlf<11)
  {
  cout << 'n' << "Успешное завершение моделирования" << 'n';
  cout << " t0 = " << t_beg << " tk = " << t_end << " dt = " << dt;
  cout << 'n' << "Число делений шага=" << ihlf;
  }
else
  {
  cout << 'n' << "Ненормальное завершение моделирования" << 'n';
  cout << " t0 = " << t_beg << " tk = " << t_end << " dt = " << dt;
  cout << 'n' << "Число делений шага=" << ihlf;
  }
getch();

m_y.close();
m_f.close();
m_s.close();
m_l.close();
m_par.close();
u_f.close();
u_par.close();
k_par.close();
}

void out_p(real x,real *y,real*,int,int,real*)
{
if (x >= (dTp*Curp))
  {
  Curp++;
  gotoxy(1,20);
  cout << "Процесс выполнения:" << float(Curp)*100./Np << " % " << 'n';

  cout.precision(7);

  m_y << x << 't' << y[0] << 't' << y[1] << 't' << y[2] << 't'
      << y[3] << 't' << y[4] << 't' << y[5] << 'n';
  m_f << x << 't' << Fz << 't' << Fs << 't' << Fl << 't' << Fa
      << 't' << U20 << 'n';
  m_s << x << 't' << xs << 't' << ys << 't' << zs << 'n';
  m_l << x << 't' << xl << 't' << yl << 't' << zl << 'n';
  m_par << x << 't' << par[0] << 't' << par[1] << 't' << par[2]
      << 't' << par[3] << 't' << par[4] << 't' << par[5]
      << 't' << par[6] << 't' << par[7] << 'n';
  }
if (Fl_u && (par[7] > parn[7]))
  {
  Fl_u = 0;
  dl = -(w_z-w_s)*(par[6]-parn[6]);

  u_par << x << 't' << par[0] << 't' << par[1] << 't' << par[2]
      << 't' << par[3] << 't' << par[4] << 't' << par[5]
      << 't' << par[6] << 't' << par[7] << 'n';
  u_f << x << 't' << Fz << 't' << Fs << 't' << Fl
      << 't' << Fa << 't' << U20 << 'n';
  }
if ((x > 79000) && (x < 81000))
  {
  k_par << x << 't' << par[5] << 't' << par[7] << 'n';
  }
}

  6.2. ПОДПРОГРАММА РАСЧЕТА ВОЗМУЩАЮЩИХ УСКОРЕНИЙ, ПАРАМЕТРОВ ОРБИТЫ И
КОРРЕКЦИИ SFUN.CPP

#include "sfun.h"

const real p = 4.64e-6;
const real sm_s = 8.;
const real A = 1.496e11;
const real Cx = 2.;
const real sm_a = 2.5;
const real ro = 5.098e-13;

void korr (real& t, real *f, real *dery);

void fct(real& t, real *f, real *dery)
{
real x = f[0];
real y = f[1];
real z = f[2];
real Vx = f[3];
real Vy = f[4];
real Vz = f[5];

real Tet_s = (28.1+60*g_r)+w_s*t;
real e_0 = 23.45*g_r;

xs = A*cos(Tet_s);
ys = A*sin(Tet_s)*cos(e_0);
zs = A*sin(Tet_s)*sin(e_0);

real Tet_l = 0+w_l*t;
real Om_l = 0-ww_l*t;
real i_l = acos(cos(e_0)*cos(5.15*g_r)-sin(e_0)*sin(5.15*g_r)*cos(Om_l));
real rsr_l = 3.8448e8;

xl = rsr_l*(cos(Tet_l)*cos(Om_l)-cos(i_l)*sin(Tet_l)*sin(Om_l));
yl = rsr_l*(cos(Tet_l)*sin(Om_l)+cos(i_l)*sin(Tet_l)*cos(Om_l));
zl = rsr_l*sin(i_l)*sin(Tet_l);

real R_ka = sqrt(x*x+y*y+z*z);

real Fz_x = -mu_z*x/pow(R_ka,3.);
real Fz_y = -mu_z*y/pow(R_ka,3.);
real Fz_z = -mu_z*z/pow(R_ka,3.);

real mu_sd = p*sm_s*A*A/m;

real R_s = sqrt((x-xs)*(x-xs)+(y-ys)*(y-ys)+(z-zs)*(z-zs));

real Fs_x = -(mu_s-mu_sd)*x/pow(R_s,3.);
real Fs_y = -(mu_s-mu_sd)*y/pow(R_s,3.);
real Fs_z = -(mu_s-mu_sd)*z/pow(R_s,3.);

real R_l = sqrt((x-xl)*(x-xl)+(y-yl)*(y-yl)+(z-zl)*(z-zl));

real Fl_x = -mu_l*x/pow(R_l,3.);
real Fl_y = -mu_l*y/pow(R_l,3.);
real Fl_z = -mu_l*z/pow(R_l,3.);

real V_ka = sqrt(Vx*Vx+Vy*Vy+Vz*Vz);

real Fa_x = (-Cx*sm_a/(2*m))*ro*V_ka*Vx;
real Fa_y = (-Cx*sm_a/(2*m))*ro*V_ka*Vy;
real Fa_z = (-Cx*sm_a/(2*m))*ro*V_ka*Vz;

const real c20 = -1.09808e-3;
const real c22 = 5.74e-6;
const real d22 = -1.58e-6;
const real r_e = 6378137.;

real cr = mu_z*r_e*r_e/pow(R_ka,5);
real lr = 2*atan(y/x);
real mr = 3*(c22*cos(lr)+d22*sin(lr));

real U20_x = cr*x*(c20*(1.5-7.5*z*z/pow(R_ka,2))+mr*(5*z*z/pow(R_ka,2)-3));
real U20_y = cr*y*(c20*(1.5-7.5*z*z/pow(R_ka,2))+mr*(5*z*z/pow(R_ka,2)-3));
real U20_z = cr*z*(c20*(4.5-7.5*z*z/pow(R_ka,2))+5*mr*(z*z/pow(R_ka,2)-1));

dery[0] = Vx;
dery[1] = Vy;
dery[2] = Vz;
dery[3] = (Fz_x+U20_x+Fs_x+Fl_x+Fa_x+akor[0]);
dery[4] = (Fz_y+U20_y+Fs_y+Fl_y+Fa_y+akor[1]);
dery[5] = (Fz_z+U20_z+Fs_z+Fl_z+Fa_z+akor[2]);

Fz = sqrt(Fz_x*Fz_x+Fz_y*Fz_y+Fz_z*Fz_z);
Fs = sqrt(Fs_x*Fs_x+Fs_y*Fs_y+Fs_z*Fs_z);
Fl = sqrt(Fl_x*Fl_x+Fl_y*Fl_y+Fl_z*Fl_z);
Fa = sqrt(Fa_x*Fa_x+Fa_y*Fa_y+Fa_z*Fa_z);
U20 = sqrt(U20_x*U20_x+U20_y*U20_y+U20_z*U20_z);

parn[3] = parn[3]+w_s*t;

par_or(f,par);

korr(t,f,dery);

if ((u_last-par[7]) > 300*g_r)
  Fl_u = 1;

u_last = par[7];
}

void korr(real& t, real *f, real *)
{
if (t > (Tkor+172800.))
  {
  if ((fabs(dl) > 0.1*g_r) && (!Fl_ka) && (!Fl_kp) && (!Fl_ki))
    {
    Fl_kp = 1;
    Fl_ka = 0;
    Fl_ki = 0;
    cout << "Результат измерений накоплен" << 'n';
    cout << "Необходима коррекция периода. dl=" << dl*r_g << "град." <<
'n';
    cout << "Период ном.=" << parn [6] << "Период тек.=" << par[6] << 'n';
    cout << "Параметры орбиты" << 'n';
    cout << " Rp = " << par[2]*(1-par[1]) << 'n';
    cout << " Ra = " << par[2]*(1+par[1]) << 'n';
    cout << " p = " << par[0] << 'n';
    cout  << " a = " << par[2] << " e = " << par[1] << "n T = "
       << par[6] << " w = " << par[5]*r_g << " u = " << par[7]*r_g
       << 'n';
    clrscr();
    }
  }

Fl_a = 0;
Fl_p = 0;
Fl_lu = 0;

real da;
if (par[5] > par[7])
  da = fabs(par[5]-par[7]-M_PI);
else
  da = fabs(par[5]-par[7]+M_PI);

if (da < .1*g_r)
  {
  Fl_a = 1;
  }

if (fabs(par[5] - par[7]) < .1*g_r)
  {
  Fl_p = 1;
  }

if (par[7] < .1*g_r )
  {
  Fl_lu = 1;
  }

real Vk;

if (T_vd)

if (t >= (T_vd +20))
  {
  T_vd = 0;
  akor[0] = 0;
  akor[1] = 0;
  akor[2] = 0;
  cout << "Выкл.дв. n t = " << t;
  }
if (((Fl_kp && Fl_a) || (Fl_ka && Fl_p) || (Fl_ki && Fl_lu)) && (!T_vd))
  {
  cout << " n Коррекция n";
  cout << "n Начало t=" << t << "сек n";
  int sim;

  if ((t-Tkor) < 2500)
    {
    cout << "Не корректировать!";
    return;
    }
  Tkor = t;

  real R_t = sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);
  real V_t = sqrt(f[3]*f[3]+f[4]*f[4]+f[5]*f[5]);
  real R_n = parn[0];

  if (Fl_a)
    {
    dRa = R_t-R_n;
    dRp = par[2]*(1-par[1])-R_n;
    cout << "Апоцентр dRp:" << dRp << "м n";
    cout << "dRa:" << dRa << "м n";
    cout << "w=" << par[5]*r_g << "u=" << par[7]*r_g << 'n';
    real l,ln;
    l = -(w_z-w_s)*par[6];
    ln = -(w_z-w_s)*parn[6];
    dl = -(w_z-w_s)*(par[6]-parn[6]);
    cout << "T=" << par[6] << "Тном=" << parn[6] << " T-Tном="
       << par[6]-parn[6] << 'n' << "l=" << l*r_g << "lном="
       << ln*r_g << "l-lном=" << (l-ln)*r_g << "dl=" << dl
       << 'n';

    if (dRp > 0)
      Sig_a = -1;
    else
      Sig_a = 1;

    cout << "Знак ускорения:" << Sig_a << 'n';
    clrscr();

    real Rp = par[2]*(1-par[1]);
    real Ra_p = par[2]*(1+par[1]);
    real Rp_p2 = Rp;
    real Ra_p2 = R_t;
    cout << "Rp=" << Rp_p2 << "Ra=" << Ra_p2 << 'n';
    cout << "Ra_p=" << Ra_p << "n Rt=" << R_t << 'n';

    if (fabs(Rp - R_n) < 500)
      {
      Fl_kp = 0;
      Fl_ka = 1;
      cout << "Закончить коррекцию в апоцентре n" << "dRp=" << Rp-R_n
         << "dRa=" << dRa << "t=" << t << 'n';
      cout << "Параметры орбиты: n" << "Rp=" << par[2]*(1-par[1])
         << "Ra=" << par[2]*(1+par[1]) << "n p=" << par[0]
         << "a=" << par[2] << "e=" << par[1] << "n T="
         << par[6] << "w=" << par[5]*r_g << "u=" << par[7]*r_g
         << 'n';
      cout << "Суммарный импульс для коррекции перицентра=" << dV_ps <<
'n';
      clrscr();
      }
    else
      {
      if (R_t > R_n)
      {
      Rp_p = R_n;
      Ra_p = R_t;
      a_p = (Ra_p+Rp_p)/2.;
      e_p = 1-Rp_p/a_p;
      p_p = a_p*(1-e_p*e_p);

      Vk = sqrt(mu_z/p_p)*(1-e_p);
      }
      else
      {
      Rp_p = R_t;
      Ra_p = R_n;
      a_p = (Ra_p+Rp_p)/2.;
      e_p = 1-Rp_p/a_p;
      p_p = a_p*(1-e_p*e_p);

      Vk = sqrt(mu_z/p_p)*(1+e_p);
      }
      real dV = Vk-V_t;
      real dVmax = 20*25./m;

      cout << "n dVтреб=" << dV << "dVmax за 20 сек=" << dVmax;

      if (fabs(dV) > dVmax)
      {
      akor[0] = Sig_a*(25./m)*f[3]/V_t;
      akor[1] = Sig_a*(25./m)*f[4]/V_t;
      akor[2] = Sig_a*(25./m)*f[5]/V_t;
      cout << "n dV=" << dV << "dVmax=" << dVmax;
      cout << "n Корректирующее ускорение:" << akor[0] << 't' << akor[1]
           << 't' << akor[2] << 't' <<
           sqrt(akor[0]*akor[0]+akor[1]*akor[1]+akor[2]*akor[2]) << 'n';

      dV_ps = dV_ps+dVmax;
      cout << "Суммарный импульс=" << dV_ps << 'n';
      }
      else
      {
      akor[0] = Sig_a*(fabs(dV)/dVmax)*(25./m)*f[3]/V_t;
      akor[1] = Sig_a*(fabs(dV)/dVmax)*(25./m)*f[4]/V_t;
      akor[2] = Sig_a*(fabs(dV)/dVmax)*(25./m)*f[5]/V_t;
      cout << "n dV=" << dV << "dVmax=" << dVmax;
      cout << "n Корректирующее ускорение:" << akor[0] << 't' << akor[1]
           << 't' << akor[2] << 't' <<
           sqrt(akor[0]*akor[0]+akor[1]*akor[1]+akor[2]*akor[2]) << 'n';

      dV_ps = dV_ps+fabs(dV);
      cout << "Суммарный импульс=" << dV_ps << 'n';
      }

      if (dVmax > fabs(dV))
      {
      dVmax = fabs(dV);
      real Vk_r = Sig_a*dVmax+V_t;
      real Ra_r = R_t;
      real e_r = -(Vk_r*Vk_r*Ra_r/mu_z)+1;
      real a_r = Ra_r/(1+e_r);
      real p_r = a_r*(1-e_r*e_r);
      real Rp_r = a_r*(1-e_r);
      cout << "Параметры орбиты: n" << " Rp_r = " << Rp_r
           << " Ra_r = " << Ra_r << "n p_r = " << p_r << " a_r = "
           << a_r << " e_r = " << e_r << 'n';
      }
      else
      {
      real Vk_r = Sig_a*dVmax+V_t;
      real Ra_r = R_t;
      real e_r = -(Vk_r*Vk_r*Ra_r/mu_z)+1;
      real a_r = Ra_r/(1+e_r);
      real p_r = a_r*(1-e_r*e_r);
      real Rp_r = a_r*(1-e_r);
      cout << "Параметры орбиты: n" << " Rp_r = " << Rp_r
           << " Ra_r = " << Ra_r << "n p_r = " << p_r << " a_r = "
           << a_r << " e_r = " << e_r << 'n';
      }
      T_vd = t;
      cout << "Вкл.дв. t=" << T_vd << 'n';
      }
    }

  if (Fl_p)
    {
    dRp = R_t-R_n;
    dRa = par[2]*(1+par[1])-R_n;
    cout << " Перицентра - dRp:" << dRp << "м n";
    cout << "dRa:" << dRa << "м. n";
    cout << "w=" << par[5]*r_g << "u=" << par[7]*r_g << 'n';
    real l,ln;
    l = -(w_z-w_s)*par[6];
    ln = -(w_z-w_s)*parn[6];
    dl = -(w_z-w_s)*(par[6]-parn[6]);
    cout << "T=" << par[6] << "Tном=" << parn[6] << "T-Tном="
       << par[6]-parn[6] << 'n' << "l=" << l*r_g << "lном="
       << ln*r_g << "l-lном=" << (l-ln)*r_g << "dl=" << dl << 'n';

    if (dRa > 0)
      Sig_a = -1;
    else
      Sig_a = 1;

    cout << "Знак ускорения:" << Sig_a << 'n';
    clrscr();

    real Ra = par[2]*(1+par[1]);
    real Rp_p1 = R_t;
    real Ra_p1 = Ra;
    cout << "Rp=" << Rp_p1 << "Ra=" << Ra_p1 << 'n';

    if ((fabs(Ra-R_n) < 500) || (fabs(dl*r_g) < .0001))
      {
      cout << "Закончить коррекцию в перицентре n" << "dRa="
         << Ra-R_n << "dRp=" << dRp << "t=" << t << 'n';
      cout << "Параметры орбиты: n " << "Rp="
         << par[2]*(1-par[1]) << "Ra=" << par[2]*(1+par[1])
         << " n p=" << par[0] << "a=" << par[2] << "e="
         << par[1] << " n T=" << par[6] << "w=" << par[5]*r_g
         << "u=" << par[7]*r_g << 'n';

      cout << "Суммарный импульс для коррекции перицентра=" << dV_as <<
'n';

      clrscr();

      Fl_ka = 0;
      Fl_ki = 1;
      }
    else
      {
      if (R_t > R_n)
      {
      Rp_p = R_n;
      Ra_p = R_t;
      a_p = (Ra_p+Rp_p)/2.;
      e_p = 1-Rp_p/a_p;
      p_p = a_p*(1-e_p*e_p);

      Vk = sqrt(mu_z/p_p)*(1-e_p);
      }
      else
      {
      Rp_p = R_t;
      Ra_p = R_n;
      a_p = (Ra_p+Rp_p)/2.;
      e_p = 1-Rp_p/a_p;
      p_p = a_p*(1-e_p*e_p);

      Vk = sqrt(mu_z/p_p)*(1+e_p);
      }
      real dV = Vk-V_t;
      real dVmax = 20*25./m;

      cout << "n dVнадо=" << dV << " dVmax за 20 сек=" << dVmax;

      if (fabs(dV) > dVmax)
      {
      akor[0] = Sig_a*(25./m)*f[3]/V_t;
      akor[1] = Sig_a*(25./m)*f[4]/V_t;
      akor[2] = Sig_a*(25./m)*f[5]/V_t;
      cout << "n dV=" << dV << "dVmax=" << dVmax;
      cout << "n Корректирующее ускорение:" << akor[0] << 't' << akor[1]
           << 't' << akor[2] << 't' <<
           sqrt(akor[0]*akor[0]+akor[1]*akor[1]+akor[2]*akor[2]) << 'n';

      dV_as = dV_as+dVmax;
      cout << "Суммарный импульс=" << dV_as << 'n';
      }
      else
      {
      akor[0] = Sig_a*(fabs(dV)/dVmax)*(25./m)*f[3]/V_t;
      akor[1] = Sig_a*(fabs(dV)/dVmax)*(25./m)*f[4]/V_t;
      akor[2] = Sig_a*(fabs(dV)/dVmax)*(25./m)*f[5]/V_t;
      cout << "n dV=" << dV << " dVmax=" << dVmax;
      cout << "n Корректирующее ускорение:" << akor[0] << 't' << akor[1]
           << 't' << akor[2] << 't' <<
           sqrt(akor[0]*akor[0]+akor[1]*akor[1]+akor[2]*akor[2]) << 'n';

      dV_as = dV_as+fabs(dV);
      cout << "Суммарный импульс=" << dV_as << 'n';
      }

      if (dVmax > fabs(dV))
      {
      dVmax = fabs(dV);
      real Vk_r = Sig_a*dVmax+V_t;
      real Ra_r = R_t;
      real e_r = -(Vk_r*Vk_r*Ra_r/mu_z)+1;
      real a_r = Ra_r/(1+e_r);
      real p_r = a_r*(1-e_r*e_r);
      real Rp_r = a_r*(1-e_r);
      cout << "Параметры орбиты: n" << "Rp_r=" << Rp_r
           << "Ra_r=" << Ra_r << "n p_r=" << p_r << "a_r="
           << a_r << "e_r=" << e_r << 'n';
      }
      else
      {
      real Vk_r = Sig_a*dVmax+V_t;
      real Ra_r = R_t;
      real e_r = -(Vk_r*Vk_r*Ra_r/mu_z)+1;
      real a_r = Ra_r/(1+e_r);
      real p_r = a_r*(1-e_r*e_r);
      real Rp_r = a_r*(1-e_r);
      cout << "Параметры орбиты: n" << "Rp_r=" << Rp_r
           << "Ra_r=" << Ra_r << "n p_r=" << p_r << "a_r="
           << a_r << "e_r=" << e_r << 'n';
      }
      T_vd = t;
      cout << "Вкл.дв. t=" << T_vd << 'n';
      }
    }

  if (Fl_lu)
    {
    real di = par[4]-parn[4];
    cout << "Линия узлов - di: " << di*r_g << "град n";
    cout << "w=" << par[5]*r_g << "u=" << par[7]*r_g << 'n';
    real l,ln;
    l = -(w_z-w_s)*par[6];
    ln = -(w_z-w_s)*parn[6];
    dl = -(w_z-w_s)*(par[6]-parn[6]);
    cout << "T=" << par[6] << "Tном=" << parn[6] << "T-Tном="
       << par[6]-parn[6] << 'n' << "l=" << l*r_g << "lном="
       << ln*r_g << "l-lном=" << (l-ln)*r_g << "dl=" << dl
       << "n i=" << par[4]*r_g << "iном=" << parn[4]*r_g << 'n';
    cout << "Параметры орбиты: n " << "Rp="
       << par[2]*(1-par[1]) << "Ra=" << par[2]*(1+par[1])
       << " n p=" << par[0] << "a=" << par[2] << "e="
       << par[1] << " n T=" << par[6] << "w=" << par[5]*r_g
       << "u=" << par[7]*r_g << " n i=" << par[4]*r_g << 'n';
    clrscr();

    real Vk_x,Vk_y,Vk_z;
    if (fabs(di) < .0001*g_r)
      {
      Fl_ki = 0;
      cout << "Закончить коррекцию наклонения n "
         << "di=" << (par[4]-parn[4])*r_g << "t=" << t << 'n';
      cout << "Параметры орбиты: n " << "Rp="
         << par[2]*(1-par[1]) << "Ra=" << par[2]*(1+par[1])
         << " n p=" << par[0] << "a=" << par[2] << "e="
         << par[1] << " n T=" << par[6] << "w=" << par[5]*r_g
         << "u=" << par[7]*r_g << " n i=" << par[4]*r_g << 'n';
      cout << "Суммарный импульс=" << dV_is
         << 'n';

      clrscr();
      }
    else
      {
      real teta;
      if (par[7] > par[5])
      teta = 2*M_PI+par[7]-par[5];
      else
      teta = par[7]-par[5];

      real Vr_i = sqrt(mu_z/par[0])*par[1]*sin(teta);
      real Vn_i = sqrt(mu_z/par[0])*(1+par[1]*cos(teta));
      V_t = sqrt(f[3]*f[3]+f[4]*f[4]+f[5]*f[5]);

      Vk_x = -Vn_i*cos(parn[4])*sin(par[3])+Vr_i*cos(par[3]);
      Vk_y = Vn_i*cos(parn[4])*cos(par[3])+Vr_i*sin(par[3]);
      Vk_z = Vn_i*sin(parn[4]);
      Vk = sqrt(Vk_x*Vk_x+Vk_y*Vk_y+Vk_z*Vk_z);

      real dV_x = Vk_x-f[3];
      real dV_y = Vk_y-f[4];
      real dV_z = Vk_z-f[5];
      real dV = sqrt(dV_x*dV_x+dV_y*dV_y+dV_z*dV_z);

      real dVmax = 20*25./m;
      cout << "Vнач=" << V_t << "Vк=" << Vk << "teta=" << teta*r_g
         << 'n';
      cout << "dV=" << dV << "dVmax за 20 сек=" << dVmax;

      if (dV > dVmax)
      {
      akor[0] = (25./m)*dV_x/dV;
      akor[1] = (25./m)*dV_y/dV;
      akor[2] = (25./m)*dV_z/dV;
      cout << "n Корректирующее ускорение:" << akor[0] << 't' << akor[1]
<<
            't' << akor[2] << 't' <<
            sqrt(akor[0]*akor[0]+akor[1]*akor[1]+akor[2]*akor[2]) << 'n';

      dV_is = dV_is+dVmax;
      cout << "Суммарный импульс=" << dV_is << 'n';
      }
      else
      {
      akor[0] = (fabs(dV)/dVmax)*(25./m)*dV_x/dV;
      akor[1] = (fabs(dV)/dVmax)*(25./m)*dV_y/dV;
      akor[2] = (fabs(dV)/dVmax)*(25./m)*dV_z/dV;
      cout << "n Корректирующее ускорение:" << akor[0] << 't' << akor[1]
           << 't' << akor[2] << 't'<<
           sqrt(akor[0]*akor[0]+akor[1]*akor[1]+akor[2]*akor[2]) << 'n';

      dV_is = dV_is+fabs(dV);
      cout << "Суммарный импульс=" << dV_is << 'n';
      }

      T_vd = t;
      cout << "Вкл.дв. t=" << T_vd << 'n';
      }
    }

  if ((!Fl_ka) && (!Fl_kp) && (!Fl_ki))
    {
    cout << "Коррекция окончена!" << 'n';

    real m_t;
    dV_ss = dV_ps+dV_as+dV_is;
    m_t = m*(1-exp(-dV_ss/W));
    cout << "Потребный импульс: n - перицентра dV_ps="
       << dV_ps << "n апоцентра dV_as=" << dV_as
       << "n Суммарный импульс=" << dV_ss << "Масса топлива=" << m_t
       << 'n';

    dV_ps = 0;
    dV_as = 0;
    dV_is = 0;
    dV_ss = 0;
    m_t = 0;
    }
  }
}

void par_or(real *f, real *par)
{
real x = f[0];
real y = f[1];
real z = f[2];
real Vx = f[3];
real Vy = f[4];
real Vz = f[5];

real c1 = (y*Vz-z*Vy);
real c2 = (z*Vx-x*Vz);
real c3 = (x*Vy-y*Vx);
real C = sqrt(c1*c1+c2*c2+c3*c3);

par[0] = (C/mu_z)*C;

real R_ka = sqrt(x*x+y*y+z*z);
real V_ka = sqrt(Vx*Vx+Vy*Vy+Vz*Vz);

real f1 = (Vy*c3-Vz*c2)-(mu_z*x/R_ka);
real f2 = (Vz*c1-Vx*c3)-(mu_z*y/R_ka);
real f3 = (Vx*c2-Vy*c1)-(mu_z*z/R_ka);
real F = sqrt(f1*f1+f2*f2+f3*f3);

real h = V_ka*V_ka-(2*mu_z/R_ka);

if ((1+h*C*C/(mu_z*mu_z)) < 0)
  {
  cout << " Ошибка! n";
  getch();
  }

par[1] = F/mu_z;

if ((1-par[1]*par[1]) < 0)
  {
  cout << " (1-e*e) < 0 Ошибка! n";
  getch();
  }

par[2] = par[0]/(1-par[1]*par[1]);

par[4] = acos(c3/C);

real s_Om = c1/(C*sin(par[4]));
real c_Om = -c2/(C*sin(par[4]));

if (s_Om >= 0)
  par[3] = acos(c_Om);
else
  par[3] = 2*M_PI-acos(c_Om);

real c_om = (f1*cos(par[3])+f2*sin(par[3]))/F;
real s_om = f3/(F*sin(par[4]));

if (s_om > 0)
  par[5] = acos(c_om);
else
  par[5] = 2*M_PI - acos(c_om);

if (par[2] < 0)
  {
  cout << " Ошибка! n";
  getch();
  }

par[6] = 2*M_PI*sqrt((par[2]/mu_z)*par[2]*par[2]);

real c_u = (x*cos(par[3])+y*sin(par[3]))/R_ka;
real s_u = z/(R_ka*sin(par[4]));

if (s_u > 0)
  par[7] = acos(c_u);
else
  par[7] = 2*M_PI - acos(c_u);
}

#include "rk5.h"
#include 

void Drkgs(real *prmt,real *y,real *dery,int ndim,int& ihlf,
    void (*fct)(real &,real*,real*),
    void (*out_p)(real,real*,real*,int,int,real*))
{
static real a[] = { 0.5, 0.292893218811345248, 1.70710678118665475,
                0.16666666666666667 };
static real b[] = { 2.0, 1.0, 1.0, 2.0 };
static real c[] = { 0.5, 0.292893218811345248, 1.70710678118665475, 0.5 };
real *aux[8];
int i,j,imod,itest,irec,istep,iend;
real delt,aj,bj,cj,r,r1,r2,x,xend,h;
for (i=0; i<8; i++) aux[i] = new real[ndim];
for (i=0; i<= 0.0)
  {
  ihlf = 13;
  if (r == 0.0) ihlf = 12;
  goto l39;
  }
for(i=0; i= 0.0)
  {
  iend = 1;
  if (r > 0.0) h = xend-x;
  }
out_p(x,y,dery,irec,ndim,prmt);
if (prmt[4] != 0.0) goto l40;
itest = 0;
l9: istep++;
j = 0;
l10: aj = a[j];
bj =b[j];
cj = c[j];
for (i=0; i< 0)
  {
  j++;
  if (j-2 != 0) x = x+0.5*h;
  fct(x,y,dery);
  goto l10;
  }
if (itest <= 0)
  {
  for (i=0; i



Назад


Новые поступления

Украинский Зеленый Портал Рефератик создан с целью поуляризации украинской культуры и облегчения поиска учебных материалов для украинских школьников, а также студентов и аспирантов украинских ВУЗов. Все материалы, опубликованные на сайте взяты из открытых источников. Однако, следует помнить, что тексты, опубликованных работ в первую очередь принадлежат их авторам. Используя материалы, размещенные на сайте, пожалуйста, давайте ссылку на название публикации и ее автора.

281311062 © il.lusion,2007г.
Карта сайта