Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include<cstdlib>
- #include<string>
- #include <sstream>
- #include <cmath>
- #include<math.h>
- #include <conio.h>
- #include <iomanip>
- using namespace std;
- int main()
- {
- string pole;
- double godz;
- double a0; //[sek]
- double a1;//[sek/sek]
- double a2; //[sek/sek^2]
- double IODE;//Nr danych
- double Crs;//[m]
- double deltan;//[rad/sek]
- double M0;//[rad]
- double Cuc;//[rad]
- double e;//ekscentrycznosc
- double Cus;
- double A1_2;
- double toe;//[sek] w czasie GPS
- double Cic;//[rad]
- double Domega0;//[rad]
- double Cis;//[rad]
- double i0;//[rad]
- double Crc;//[m]
- double omega;//[rad]
- double Domegadot;//[rad/sek]
- double Idot;//[rad/sek]
- double Kodl2;
- double tygGPS;//[mod 1024]
- double flagal2;//(P)
- double omegae=7.2921151467E-05;//STA£E PODANE NA 8 STRONIE!!!
- double GM=3.986005E+14;//STA£E PODANE NA 8 STRONIE!!!
- fstream plik;
- plik.open("mojasatelitka.txt",ios::in);
- if(plik.good()==false) cout<<"Nie mozna otworzyc pliku!";
- string tablica[32];
- int i=0;
- while (getline(plik, pole,' '))
- {
- tablica[i]=pole;
- i++;
- }
- for (int j=0;j<32;j++)
- {
- cout << j <<": "<< tablica[j]<<endl;
- }
- for (int j=0;j<32;j++)
- {
- istringstream os(tablica[j]);
- switch(j)
- {
- case 0:
- os >> godz;
- break;
- case 1:
- os >> a0;
- break;
- case 2:
- os >> a1;
- break;
- case 3:
- os >> a2;
- break;
- case 4:
- os >> IODE;
- break;
- case 5:
- os >> Crs;
- break;
- case 6:
- os >> deltan;
- break;
- case 7:
- os >> M0;
- break;
- case 8:
- os >> Cuc;
- break;
- case 9:
- os >> e;
- break;
- case 10:
- os >> Cus;
- break;
- case 11:
- os >> A1_2;
- break;
- case 12:
- os >> toe;
- break;
- case 13:
- os >> Cic;
- break;
- case 14:
- os >> Domega0;
- break;
- case 15:
- os >> Cis;
- break;
- case 16:
- os >> i0;
- break;
- case 17:
- os >> Crc;
- break;
- case 18:
- os >> omega;
- break;
- case 19:
- os >> Domegadot;
- break;
- case 20:
- os >> Idot;
- break;
- case 21:
- os >> Kodl2;
- break;
- case 22:
- os >> tygGPS;
- break;
- case 23:
- os >> flagal2;
- break;
- }
- }
- //WYZNACZANIE POZYCJI SATELITY
- double deltatsv; // przy liczeniu poprawki zegara
- double tsv;//przy liczeniu czasu pozycji SV
- double t; //czas pozycji SV
- double toc;//czas naglowka efemerydy
- double tk;//czas od epoki referencyjnej
- tsv=518400+(godz+1)*60*60;
- toc=518400+godz*60*60;
- deltatsv=a0+a1*(tsv-toc)+a2*(tsv-toc)*(tsv-toc);
- t=tsv-deltatsv;
- tk=t-toe;
- //WZORY WYZNACZANIA POZYCJI SATELITY
- double A=A1_2*A1_2;
- double n0=sqrt(GM/(A*A*A));
- double n=n0+deltan;//ruch sredni
- double Mk=M0+n*tk;
- //ITERUJEMY ze strony 14. Równanie Keplera wyznaczajace anomalie mimosrodowa!
- double E=Mk;
- std::cout << std::setprecision(20) << E<<endl;
- double Ek[5];//tablica // np.cout<<Ek[4]
- for (int k=0;k<=4;k++)
- {
- E=Mk+M_E*sin(E);
- Ek[k]=E;//tworze tablice
- cout<<k<<" Iteracja "<<E<<endl;
- }
- //WYZNACZENIE ANOMALII PRAWDZIWEJ STRONA 17
- double cosvk=(cos(E)-e)/(1-e*cos(E));
- double sinvk=(pow(1-e*e,0.5)*sin(E))/(1-e*cos(E));
- std::cout << std::setprecision(20) << cosvk<<endl;
- std::cout << std::setprecision(20) << sinvk <<endl;
- double acosvk=acos(cosvk);
- double asinvk=asin(sinvk);
- cout<<"ARKUSIK COSINUSIK:"<<acosvk<<endl;
- cout<<"ARKUSIK SINUSIK:"<<asinvk<<endl;
- //OSTATNIA STRONA OBLICZENIA (19 STRONA)
- double vk=atan(sinvk/cosvk);
- //LICZYMY ODPOWIEDNIE CWIARTKI Z PETLA IF
- if((asinvk<=M_PI/2) && (asinvk>=0))
- {
- vk=atan(sinvk/cosvk);
- }
- else if ((asinvk<=M_PI) && (asinvk>=M_PI/2))
- {
- vk=M_PI-atan(sinvk/cosvk);
- }
- else if ((asinvk>=M_PI) && (asinvk<=(3/2)*M_PI))
- {
- vk=M_PI+atan(sinvk/cosvk);
- }
- else
- {
- vk=2*M_PI-atan(sinvk/cosvk);
- }
- double Fk=vk+omega;
- double duk=Cuc*cos(2*Fk)+Cus*sin(2*Fk);
- double drk=Crc*cos(2*Fk)+Crs*sin(2*Fk);
- double dik=Cic*cos(2*Fk)+Cis*sin(2*Fk);
- double uk=Fk+duk;
- double rk=A*(1-e*cos(E))+drk;
- double ik=i0+Idot*tk+dik;
- //Wspolrzedne w plaszczyznie orbity:
- double XPk=rk*cos(uk);
- double YPk=rk*sin(uk);
- double Domegak=Domega0+(Domegadot-omegae)*tk-omegae*toe;
- //Wspolrzedne przetransformowane do ukladu Kartezjanskiego. KONIEC!!!
- double Xk=XPk*cos(Domegak)-YPk*sin(Domegak)*cos(ik);
- double Yk=XPk*sin(Domegak)+YPk*cos(Domegak)*cos(ik);
- double Zk=YPk*sin(ik);
- using namespace std; cout<<endl;
- using namespace std; cout<<endl;
- cout<<"WYNIKI";
- using namespace std; cout<<endl;
- cout<<"Poprawka zegara SV:"<<deltatsv<<endl;
- cout<<"Czas obserwacji:"<<tsv<<endl;
- cout<<"czas pozycji SV:"<<t<<endl;
- cout<<"Czas z naglowka efemerydy:"<<toc<<endl;
- cout<<"Czas od epoki referencyjnej:"<<tk<<endl;
- cout<<"Wartosc A:"<<A<<endl;
- cout<<"Predkosc katowa satelity:"<<n0<<endl;
- cout<<"Ruch sredni:"<<n<<endl;
- cout<<"Anomalia srednia:"<<Mk<<endl;
- cout<<"Rownanie Keplera wyznaczajace anomalie mimosrodowa, 5 iteracji:"<<endl;
- E=Mk;
- for (int k=0;k<=4;k++)
- {
- E=Mk+M_E*sin(E);
- Ek[k]=E;//tworze tablice
- cout<<k<<" Iteracja "<<E<<endl;
- }
- cout<<"Fk:"<<Fk<<endl;
- cout<<"duk:"<<duk<<endl;
- cout<<"drk:"<<drk<<endl;
- cout<<"dik:"<<dik<<endl;
- cout<<"uk:"<<uk<<endl;
- cout<<"rk:"<<rk<<endl;
- cout<<"ik:"<<ik<<endl;
- cout<<"XPk:"<<XPk<<endl;
- cout<<"YPk:"<<YPk<<endl;
- cout<<"Duze omega k:"<<Domegak<<endl;
- using namespace std; cout<<endl;
- using namespace std; cout<<endl;
- cout<<"WSPOLRZEDNE PRZETRANSFORMOWANE DO UKLADU KARTEZJANSKIEGO:"<<endl;
- cout<<"Xk:"<<Xk<<endl;
- cout<<"Yk:"<<Yk<<endl;
- cout<<"Zk:"<<Zk<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement