Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include<cstdlib>
  4. #include<string>
  5. #include <sstream>
  6. #include <cmath>
  7. #include<math.h>
  8. #include <conio.h>
  9. #include <iomanip>
  10. using namespace std;
  11.  
  12. int main()
  13. {
  14.     string pole;
  15.     double godz;
  16.     double a0; //[sek]
  17.     double a1;//[sek/sek]
  18.     double a2; //[sek/sek^2]
  19.     double IODE;//Nr danych
  20.     double Crs;//[m]
  21.     double deltan;//[rad/sek]
  22.     double M0;//[rad]
  23.     double Cuc;//[rad]
  24.     double e;//ekscentrycznosc
  25.     double Cus;
  26.     double A1_2;
  27.     double toe;//[sek] w czasie GPS
  28.     double Cic;//[rad]
  29.     double Domega0;//[rad]
  30.     double Cis;//[rad]
  31.     double i0;//[rad]
  32.     double Crc;//[m]
  33.     double omega;//[rad]
  34.     double Domegadot;//[rad/sek]
  35.     double Idot;//[rad/sek]
  36.     double Kodl2;
  37.     double tygGPS;//[mod 1024]
  38.     double flagal2;//(P)
  39.  
  40.  
  41.     double omegae=7.2921151467E-05;//STA£E PODANE NA 8 STRONIE!!!
  42.     double GM=3.986005E+14;//STA£E PODANE NA 8 STRONIE!!!
  43.    fstream plik;
  44.  
  45.    plik.open("mojasatelitka.txt",ios::in);
  46.  
  47.    if(plik.good()==false) cout<<"Nie mozna otworzyc pliku!";
  48.  
  49.    string tablica[32];
  50.  
  51.    int i=0;
  52.  
  53.    while (getline(plik, pole,' '))
  54.  {
  55.      tablica[i]=pole;
  56.      i++;
  57.  }
  58.    for (int j=0;j<32;j++)
  59.  {
  60.  
  61.     cout << j <<": "<< tablica[j]<<endl;
  62.  
  63.  }
  64.  
  65.    for (int j=0;j<32;j++)
  66.  {
  67.     istringstream os(tablica[j]);
  68.  
  69.     switch(j)
  70.   {
  71.    case 0:
  72.     os >> godz;
  73.     break;
  74.    case 1:
  75.     os >> a0;
  76.     break;
  77.     case 2:
  78.     os >> a1;
  79.     break;
  80.    case 3:
  81.     os >> a2;
  82.     break;
  83.     case 4:
  84.     os >> IODE;
  85.     break;
  86.    case 5:
  87.     os >> Crs;
  88.     break;
  89.     case 6:
  90.     os >> deltan;
  91.     break;
  92.    case 7:
  93.     os >> M0;
  94.     break;
  95.     case 8:
  96.     os >> Cuc;
  97.     break;
  98.    case 9:
  99.     os >> e;
  100.     break;
  101.     case 10:
  102.     os >> Cus;
  103.     break;
  104.    case 11:
  105.     os >> A1_2;
  106.     break;
  107.     case 12:
  108.     os >> toe;
  109.     break;
  110.    case 13:
  111.     os >> Cic;
  112.     break;
  113.     case 14:
  114.     os >> Domega0;
  115.     break;
  116.    case 15:
  117.     os >> Cis;
  118.     break;
  119.     case 16:
  120.     os >> i0;
  121.     break;
  122.    case 17:
  123.     os >> Crc;
  124.     break;
  125.     case 18:
  126.     os >> omega;
  127.     break;
  128.    case 19:
  129.     os >> Domegadot;
  130.     break;
  131.     case 20:
  132.     os >> Idot;
  133.     break;
  134.    case 21:
  135.     os >> Kodl2;
  136.     break;
  137.     case 22:
  138.     os >> tygGPS;
  139.     break;
  140.    case 23:
  141.     os >> flagal2;
  142.     break;
  143.   }
  144.  
  145.  }
  146.  
  147.    //WYZNACZANIE POZYCJI SATELITY
  148.  
  149.    double deltatsv; // przy liczeniu poprawki zegara
  150.    double tsv;//przy liczeniu czasu pozycji SV
  151.    double t; //czas pozycji SV
  152.    double toc;//czas naglowka efemerydy
  153.    double tk;//czas od epoki referencyjnej
  154.    tsv=518400+(godz+1)*60*60;
  155.    toc=518400+godz*60*60;
  156.    deltatsv=a0+a1*(tsv-toc)+a2*(tsv-toc)*(tsv-toc);
  157.    t=tsv-deltatsv;
  158.    tk=t-toe;
  159.  
  160.  
  161.    //WZORY WYZNACZANIA POZYCJI SATELITY
  162.  
  163.    double A=A1_2*A1_2;
  164.    double n0=sqrt(GM/(A*A*A));
  165.    double n=n0+deltan;//ruch sredni
  166.    double Mk=M0+n*tk;
  167.  
  168.  
  169.    //ITERUJEMY ze strony 14. Równanie Keplera wyznaczajace anomalie mimosrodowa!
  170.  
  171.    double E=Mk;
  172. std::cout << std::setprecision(20) << E<<endl;
  173.    double Ek[5];//tablica // np.cout<<Ek[4]
  174.  
  175.     for (int k=0;k<=4;k++)
  176.  
  177.   {
  178.     E=Mk+M_E*sin(E);
  179.     Ek[k]=E;//tworze tablice
  180.  
  181.     cout<<k<<" Iteracja "<<E<<endl;
  182.  
  183.   }
  184.  
  185.   //WYZNACZENIE ANOMALII PRAWDZIWEJ STRONA 17
  186.    double cosvk=(cos(E)-e)/(1-e*cos(E));
  187.    double sinvk=(pow(1-e*e,0.5)*sin(E))/(1-e*cos(E));
  188.    std::cout << std::setprecision(20) << cosvk<<endl;
  189.    std::cout << std::setprecision(20) << sinvk <<endl;
  190.    double acosvk=acos(cosvk);
  191.    double asinvk=asin(sinvk);
  192.    cout<<"ARKUSIK COSINUSIK:"<<acosvk<<endl;
  193.    cout<<"ARKUSIK SINUSIK:"<<asinvk<<endl;
  194.  
  195.   //OSTATNIA STRONA OBLICZENIA (19 STRONA)
  196.  
  197.    double vk=atan(sinvk/cosvk);
  198.  
  199.    //LICZYMY ODPOWIEDNIE CWIARTKI Z PETLA IF
  200.  
  201.    if((asinvk<=M_PI/2) && (asinvk>=0))
  202.    {
  203.        vk=atan(sinvk/cosvk);
  204.    }
  205.    else if ((asinvk<=M_PI) && (asinvk>=M_PI/2))
  206.    {
  207.        vk=M_PI-atan(sinvk/cosvk);
  208.    }
  209.    else if ((asinvk>=M_PI) && (asinvk<=(3/2)*M_PI))
  210.    {
  211.        vk=M_PI+atan(sinvk/cosvk);
  212.    }
  213.    else
  214.    {
  215.        vk=2*M_PI-atan(sinvk/cosvk);
  216.    }
  217.    double Fk=vk+omega;
  218.  
  219.    double duk=Cuc*cos(2*Fk)+Cus*sin(2*Fk);
  220.    double drk=Crc*cos(2*Fk)+Crs*sin(2*Fk);
  221.    double dik=Cic*cos(2*Fk)+Cis*sin(2*Fk);
  222.  
  223.    double uk=Fk+duk;
  224.    double rk=A*(1-e*cos(E))+drk;
  225.    double ik=i0+Idot*tk+dik;
  226.  
  227.    //Wspolrzedne w plaszczyznie orbity:
  228.  
  229.    double XPk=rk*cos(uk);
  230.    double YPk=rk*sin(uk);
  231.  
  232.    double Domegak=Domega0+(Domegadot-omegae)*tk-omegae*toe;
  233.  
  234.    //Wspolrzedne przetransformowane do ukladu Kartezjanskiego. KONIEC!!!
  235.  
  236.    double Xk=XPk*cos(Domegak)-YPk*sin(Domegak)*cos(ik);
  237.    double Yk=XPk*sin(Domegak)+YPk*cos(Domegak)*cos(ik);
  238.    double Zk=YPk*sin(ik);
  239.     using namespace std; cout<<endl;
  240.     using namespace std; cout<<endl;
  241.  
  242.     cout<<"WYNIKI";
  243.     using namespace std; cout<<endl;
  244.     cout<<"Poprawka zegara SV:"<<deltatsv<<endl;
  245.     cout<<"Czas obserwacji:"<<tsv<<endl;
  246.     cout<<"czas pozycji SV:"<<t<<endl;
  247.     cout<<"Czas z naglowka efemerydy:"<<toc<<endl;
  248.     cout<<"Czas od epoki referencyjnej:"<<tk<<endl;
  249.     cout<<"Wartosc A:"<<A<<endl;
  250.     cout<<"Predkosc katowa satelity:"<<n0<<endl;
  251.     cout<<"Ruch sredni:"<<n<<endl;
  252.     cout<<"Anomalia srednia:"<<Mk<<endl;
  253.     cout<<"Rownanie Keplera wyznaczajace anomalie mimosrodowa, 5 iteracji:"<<endl;
  254.     E=Mk;
  255.  
  256.     for (int k=0;k<=4;k++)
  257.  
  258.   {
  259.     E=Mk+M_E*sin(E);
  260.     Ek[k]=E;//tworze tablice
  261.  
  262.     cout<<k<<" Iteracja "<<E<<endl;
  263.  
  264.   }
  265.     cout<<"Fk:"<<Fk<<endl;
  266.     cout<<"duk:"<<duk<<endl;
  267.     cout<<"drk:"<<drk<<endl;
  268.     cout<<"dik:"<<dik<<endl;
  269.     cout<<"uk:"<<uk<<endl;
  270.     cout<<"rk:"<<rk<<endl;
  271.     cout<<"ik:"<<ik<<endl;
  272.     cout<<"XPk:"<<XPk<<endl;
  273.     cout<<"YPk:"<<YPk<<endl;
  274.     cout<<"Duze omega k:"<<Domegak<<endl;
  275.     using namespace std; cout<<endl;
  276.     using namespace std; cout<<endl;
  277.     cout<<"WSPOLRZEDNE PRZETRANSFORMOWANE DO UKLADU KARTEZJANSKIEGO:"<<endl;
  278.     cout<<"Xk:"<<Xk<<endl;
  279.     cout<<"Yk:"<<Yk<<endl;
  280.     cout<<"Zk:"<<Zk<<endl;
  281.  
  282.  
  283.     return 0;
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement