⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 orbit.c

📁 针对GPS系统的全面的源程序 希望能够对学习GPS技术的朋友有所帮助
💻 C
字号:
orbit.c

int refsat(itborb,borb,ista,x0,rtb,rte)
/* 函数refsat 应用轨道数据 itborb, borb 和测站坐标为rtb-rte观测时间段确定参考卫星*/
long itborb[8],ista;
double borb[Isat*I96*8],rtb,rte,x0[3*Ista];
{    int i,i1,i2,j,j1,j2,k,k1,k2;
     long deltat=900,ite,itb,sat_num,it,It0,idz[I96*Isat];
     double xj,yj,zj,xi,yi,zi,z,sum,zmark,zij[Isat*Ista*I96],zmean[I96*Isat];
/* 输出轨道数据 */
     sat_num = itborb[0];
     It0 = itborb[4]*3600+itborb[5]*60+itborb[6];
     itb = (long)((rtb-It0)/deltat);
     if(rtb-(itb*deltat+It0)>=600.) itb += 1;
     ite = (long)((rte-It0)/deltat);
     if(rte-(ite*deltat+It0)>=300.) ite += 1;
     if(ite>=I96) ite=I96;
/* 输出每个测站的坐标,计算每个历元卫星到测站的天顶距,存储并输出 */
     for (i=itb;i<=ite;i++) 
      { it = It0 + i*deltat;
        for (i1=0;i1<sat_num;i1++) 
         { xj = borb[1+i1*8+i*8*Isat]; 
           yj = borb[2+i1*8+i*8*Isat]; 
           zj = borb[3+i1*8+i*8*Isat];
           for (i2=0;i2<ista;i2++) 
            { xi = x0[0+i2*3]; yi = x0[1+i2*3]; zi = x0[2+i2*3]; 
              z = zenith1(xj,yj,zj,xi,yi,zi);
              zij[i2+i1*Ista+i*Ista*Isat] = z*90/asin(1.0);}}}
/* 计算全部卫星的天顶距,设置 向量jn[]-1为有效,天顶距设为90-15=75度 */
     zmark = 75.0; 
     for (i=0;i<Isat;i++) {zmean[i] = 0.0; idz[i]=0;}
 for (i=itb;i<=ite;i++) 
 { for (i1=0;i1<sat_num;i1++) 
   { for (i2=0;i2<ista;i2++) 
      {   sum = zij[i2+i1*Ista+i*Isat*Ista];
              zmean[i1] += sum/(ista*(ite-itb+1)); 
              if(sum<=zmark) idz[i1] += 1;}}}
/* 输出平均天顶距和有效向量,决定参考卫星 */
     for(i=0,i2=0;i2<sat_num;i2++) if(i<idz[i2]) i=idz[i2];
     sum=90.;
     for(i1=0;i1<sat_num;i1++) 
     { if(i==idz[i1])
       {if(zmean[i1]<sum) {sum=zmean[i1]; j=i1;}}}
     i = (long)borb[j*8];
     return(i); }
int getorb(itborb,borb,isat_id,rt,I_la,orb)
/* 函数getorb 应用输入 isat_id 和时间 rt计算有关的卫星轨道 orb[] */
long itborb[8],isat_id,I_la;
double borb[Isat*I96*8],rt,orb[8];
{    int k,j,i,i1,i2,i3=1;
     long deltat=900,itb;
     double dat[I_LA];
     i=isat_id;				 /* 由 sat_id 求k */
     for(k=-1,j=0;j<itborb[0];j++) 
     {  if(i==(int)borb[0+j*8+0*8*Isat]) 
       { k=j; goto finditb;}}
     finditb:; 				/* 由rt 求 itb  */
     if(k!=-1) 
     {  j = (itborb[4]*3600 + itborb[5]*60)/900;
        i2 = ((int)rt)/900 - I_la/2 -j;
        if(i2>itborb[7]-1-I_la) i2=itborb[7]-1-I_la;
        if(i2<0) i2 = 0;
        itb = itborb[4]*3600 + i2*deltat;
        for(j=1;j<=7;j++) 
         { for(i1=i2;i1<=i2+I_la;i1++) dat[i1-i2]=borb[j+k*8+i1*8*Isat];
           orb[j-1]=lagrange(dat,I_la,deltat,rt,itb);}}
      else 
      { i3 = 0;}  
     return(i3);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -