#include "stdafx.h"#include <iostream>
#include <fstream>
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{
double a[7][4];
ifstream in;
in.open("D:\gnss.txt");
while (!in.eof())
{for(int i=0;i<7;i++)
for(int j=0;j<4;j++)
{in>>a[i][j];
cout<<a[i][j]<<endl;}
}
in.close();
double A;
A=pow(a[1][3],2);//1計算軌道長半軸
cout<<"軌道長半徑:"<<A<<endl;
double n0;
const double μ=3.986004418e14;//地球引力場常數
n0=sqrt(μ/pow(A,3));//2計算平均運動角速度
cout<<"平均運動角速度:"<<n0<<endl;
double t,tm,tk;
cin>>"信號發射時的時間:">>t;
tm=a[2][0];
tk=t-tm;
if(tk>302400)
cout<<"相對于星歷參考歷元的時間:"<<tk-604800<<endl;
else if(tk<-302400)
cout<<"相對于星歷參考歷元的時間:"<<tk+608400<<endl;
else cout<<"相對于星歷參考歷元的時間:"<<tk<<endl;//3相對于星歷參考歷元的時間
double n,Δn;
Δn=a[0][2];
n=n0+Δn;
cout<<"n="<<n<<endl;//4對平均運動角速度進行改正
double M0,Mk;
M0=a[0][3];
Mk=M0+n*tk;
cout<<"平近點角:"<<Mk<<endl;//5計算平近點角
double e,Ek,Ek1;
e=a[1][1];
Ek=1;
do
{
Ek1=Ek;
Ek=Mk+e*sin(Ek1);
}while(fabs(Ek-Ek1)>1e-15);
cout<<"偏近點角:"<<Mk<<endl;//6計算偏近點角
double vk,p,q,r;
p=sqrt(1-pow(e,2))*sin(Ek);
q=1-e*cos(Ek);
r=cos(Ek)-e;
vk=atan(p/q)/(r/q);
cout<<"真近點角:"<<vk<<endl;//7計算真近點角
double Φk,w;
w=a[3][2];
Φk=vk+w;
cout<<"升交角距"<<Φk<<endl;//8計算升交角距
double ζuk,ζrk,ζik;
double cus,cuc,crs,crc,cis,cic;
cus=a[1][2],cuc=a[1][0];
crs=a[0][1],crc=a[3][1];
cis=a[2][3],cic=a[2][1];
ζuk=cus*sin(2*Φk)+cuc*cos(2*Φk);
ζrk=crs*sin(2*Φk)+crc*cos(2*Φk);
ζik=cis*sin(2*Φk)+cic*cos(2*Φk);
cout<<"升交角距改正數:"<<ζuk<<endl;//9(1)計算升交角距改正數
cout<<"向徑改正數:"<<ζrk<<endl;//9(2)計算向徑改正數
cout<<"軌道傾角改正數:"<<ζik<<endl;//9(3)計算軌道傾角改正數
double uk;
uk=Φk+ζuk;
cout<<"經過改正的升交角距:"<<uk<<endl;//10計算經過改正的升交角距
double rk;
rk=A*(1-e*cos(Ek))+ζrk;
cout<<"經過改正的向徑:"<<rk<<endl;//11計算經過改正的向徑
double ik,i0,IDOT;
i0=a[3][0];
IDOT=a[4][0];
ik=i0+ζik+IDOT*tk;
cout<<"經過改正的軌道傾角:"<<ik<<endl;//12計算經過改正的軌道傾角
double xk1,yk1;
xk1=rk*cos(uk);
yk1=rk*sin(uk);
cout<<"衛星在軌道平面上的位置:"<<xk1<<" "<<yk1<<endl;//13計算衛星在軌道平面上的位置
double Ωk,Ω0,Ωt,toe;
toe=a[2][0];
const double Ωe=7.292115e-5;//地球自轉速度
Ω0=a[2][2];
Ωt=a[3][3];
Ωk=Ω0+(Ωt-Ωe)*tk+Ωe*toe;
cout<<"改正后的升交點經度:"<<Ωk<<endl;//14計算改正后的升交點經度
double xk,yk,zk;
xk=xk1*cos(Ωk)-yk1*cos(ik)*sin(Ωk);
yk=xk1*sin(Ωk)-yk1*cos(ik)*cos(Ωk);
zk=yk1*sin(ik);
cout<<"在地固坐標下的位置:"<<"xk="<<xk<<" "<<"yk="<<yk<<" "<<"zk="<<zk<<endl;//15計算在地固坐標下的位置
return 0;
}
uj5u.com熱心網友回復:
希臘字母變數名是不支持,你換成英文吧uj5u.com熱心網友回復:
double n,Δn;Δn=a[0][2];
n=n0+Δn;
Δn換成全(字母+數字)吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/113042.html
標籤:基礎類
上一篇:c++ 如何釋放堆中的空間
下一篇:mfc,GDI+繪圖
