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

📄 test2.cpp

📁 卫星计算码
💻 CPP
字号:
/*
 *  test2.cpp      5 July 2002
 *
 *  A skeleton main() function to demonstrate the use of
 *  the various NORAD ephemerides.  It reads in the file
 *  'test.tle' and computes ephemerides at assorted times for
 *  all elements in the file.  The times used,  and the choice
 *  of SxP4 vs. SxP8,  can be switched with various keywords in
 *  the 'test.tle' file.
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "norad.h"

/* Main program */
int main( int argc, char **argv)
{
   double vel[3], pos[3]; /* Satellite position and velocity vectors */
   FILE *ifile = fopen( (argc == 1) ? "test.tle" : argv[1], "rb");
   tle_t tle; /* Pointer to two-line elements set for satellite */
   char line1[100], line2[100];
   int n_times = 5;
   double times[100];
   int ephem = 1;       /* default to SGP4 */
   int i;               /* Index for loops etc */

   if( !ifile)
      {
      printf( "Couldn't open input TLE file\n");
      exit( -1);
      }
   for( i = 0; i < n_times; i++)
      times[i] = (double)(i * 30);
   fgets( line1, sizeof( line1), ifile);
   while( fgets( line2, sizeof( line2), ifile))
      {
      if( !memcmp( line2, "Ephem ", 6))
         ephem = (line2[6] - '0');
      else if( !memcmp( line2, "Times: ", 7))
         {
         int loc = 7, bytes_read;

         n_times = 0;
         while( sscanf( line2 + loc, "%lf%n", times + n_times, &bytes_read) == 1)
            {
            loc += bytes_read;
            n_times++;
            }
         }
      else if( !parse_elements( line1, line2, &tle))    /* hey! we got a TLE! */
         {
         int is_deep = select_ephemeris( &tle);
         char *ephem_names[5] = { "SGP ", "SGP4", "SGP8", "SDP4", "SDP8" };
         double sat_params[N_SAT_PARAMS];

         if( is_deep && (ephem == 1 || ephem == 2))
            ephem += 2;    /* switch to an SDx */
         if( !is_deep && (ephem == 3 || ephem == 4))
            ephem -= 2;    /* switch to an SGx */
         printf( "%s%s", line1, line2);
         if( is_deep)
            printf("Deep-Space type Ephemeris (%s) selected:",
                                       ephem_names[ephem]);
         else
            printf("Near-Earth type Ephemeris (%s) selected:",
                                       ephem_names[ephem]);

         /* Print some titles for the results */
         printf("\nEphem:%s   Tsince         "
             "X/Xdot           Y/Ydot           Z/Zdot\n", ephem_names[ephem]);

         /* Calling of NORAD routines */
         /* Each NORAD routine (SGP, SGP4, SGP8, SDP4, SDP8)   */
         /* will be called in turn with the appropriate TLE set */
         switch( ephem)
            {
            case 0:
               SGP_init( sat_params, &tle);
               break;
            case 1:
               SGP4_init( sat_params, &tle);
               break;
            case 2:
               SGP8_init( sat_params, &tle);
               break;
            case 3:
               SDP4_init( sat_params, &tle);
               break;
            case 4:
               SDP8_init( sat_params, &tle);
               break;
            }

         for( i = 0; i < n_times; i++)
            {
            switch( ephem)
               {
               case 0:
                  SGP(times[i], &tle, sat_params, pos, vel);
                  break;
               case 1:
                  SGP4(times[i], &tle, sat_params, pos, vel);
                  break;
               case 2:
                  SGP8(times[i], &tle, sat_params, pos, vel);
                  break;
               case 3:
                  SDP4(times[i], &tle, sat_params, pos, vel);
                  break;
               case 4:
                  SDP8(times[i], &tle, sat_params, pos, vel);
                  break;
               }

            /* Calculate and print results */
            vel[0] /= 60.;    /* cvt km/minute to km/second */
            vel[1] /= 60.;
            vel[2] /= 60.;

            printf("       %12.4f   %16.8f %16.8f %16.8f \n",
                               times[i],pos[0],pos[1],pos[2]);
            printf("                      %16.8f %16.8f %16.8f \n",
                                      vel[0],vel[1],vel[2]);

            } /* End of for( i = 0; i < n_times; i++)  */
         printf( "\n");
         }
      strcpy( line1, line2);
      }

  return(0);
} /* End of main() */

/*------------------------------------------------------------------*/

⌨️ 快捷键说明

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