计算卫星位置的程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算卫星位置

一、C语言程序

#include

#include

#include

#define bGM84 3.986005e14

#define bOMEGAE84 7.2921151467e-5

void main()

{

long double roota=0.515365263176E+04; //轨道长半轴的平方根(根号a)

long double toe=0.720000000000E+04; //观测时刻toe

long double m0=-0.290282040486E+00; //参考时刻toe的平近点角

long double e=0.678421219345E-02; //轨道偏心率e

long double delta_n=0.451411660250E-08;//卫星的摄动改正数△n

long double smallomega=-0.258419417299E+01;//近地点角距ω

long double cus=0.912137329578E-05;//纬度幅角正弦调和项改正的振幅(弧度)long double cuc=0.189989805222E-06;//纬度幅角余弦调和项改正的振幅(弧度)long double crs=0.406250000000E+01;//轨道半径的余弦调和项改正的振幅(m)long double crc=0.201875000000E+03;//轨道半径的正弦调和项改正的振幅(m)long double cis=0.949949026108E-07;//轨道倾角的余弦调和项改正的振幅(弧度)long double cic=0.130385160446E-07;//轨道倾角的正弦调和项改正的振幅(弧度)long double idot=-0.253939149013E-09;//轨道倾角变化率I

long double i0=0.958512160302E+00; //轨道倾角(弧度)

long double bigomega0=-0.137835982556E+01;//升交点赤经

long double earthrate=bOMEGAE84; //地球自转的速率we

long double bigomegadot=-0.856928551657e-08;

long double t=0.720000000000E+04; //加入卫星钟差改正的归化时间

long double A;

long double n0=0,n,tk;

long double mk,ek,tak,ik,omegak,phik,uk,rk;

long double corr_u,corr_r,corr_i;

long double xpk,ypk,xk,yk,zk;

int i;

printf("输入的数据:\n");

printf("√a=%e \n",roota);

printf("toe=%e \n",toe);

printf("e=%e \n",e);

printf("i0=%e \n",i0);

printf("ω=%e \n",smallomega);

printf("△n=%e \n",delta_n);

printf("Ω0=%e \n",bigomega0);

printf("I=%e \n",idot);

printf("Cuc=%e \n",cuc);

printf("Crc=%e \n",crc);

printf("Crs=%e \n",crs);

printf("Cic=%e \n",cic);

printf("Cis=%e \n",cis);

printf("\n\n输出的结果为:\n",e);

A=roota*roota;

n0=sqrt(bGM84/(A*A*A));//平均角速度n0

printf("n0=%.10lf \n",n0);

tk=t-toe;//相对于参考时刻toe的归化时间tk

printf("tk=%.10lf \n",tk);

n=n0+delta_n;//加摄动改正后的卫星平均角速度

printf(" n=%.10lf \n",n);

mk=m0+n*tk;//卫星平近点角

printf("mk=%.10lf \n",mk);

ek=mk;

for(i=0;i<10;i++) ek=mk+e*sin(ek);//利用迭代法求偏近点角ek

printf("ek=%.10lf \n",ek);

tak=atan2(sqrt(1.0-e*e)*sin(ek),cos(ek)-e);//真近点角Vk的计算

printf("Vk=%.10lf \n",tak);

phik=tak+smallomega;//升交距角φk的计算

printf("φk=%.10lf \n",phik);

corr_u=cus*sin(2.0*phik)+cuc*cos(2.0*phik);//升交距角u的摄动改正δu printf("δu=%.10lf \n",corr_u);

corr_r=crs*sin(2.0*phik)+crc*cos(2.0*phik);//卫星矢量r的摄动改正δr printf("δr=%.10lf \n",corr_r);

corr_i=cis*sin(2.0*phik)+cic*cos(2.0*phik);//轨道倾角i的摄动改正δi printf("δi=%.10lf \n",corr_i);

uk=phik+corr_u;//升交距角u

printf("uk=%.10lf \n",uk);

rk=A*(1.0-e*cos(ek))+corr_r;//卫星矢量r

printf("rk=%.10lf \n",rk);

ik=i0+idot*tk+corr_i;//轨道倾角i

printf("ik=%.10lf \n",ik);

xpk=rk*cos(uk);//卫星在轨道平面坐标系的坐标

ypk=rk*sin(uk);

相关文档
最新文档