#include "sgp4io.h"
void twoline2rv(char longstr1[130], char longstr2[130], char typerun,
char typeinput, char opsmode, gravconsttype whichconst,
double &startmfe, double &stopmfe, double &deltamin,
elsetrec &satrec) {
const double deg2rad = pi / 180.0; const double xpdotp = 1440.0 / (2.0 * pi);
double sec, mu, radiusearthkm, tumin, xke, j2, j3, j4, j3oj2;
double startsec, stopsec, startdayofyr, stopdayofyr, jdstart, jdstop;
int startyear, stopyear, startmon, stopmon, startday, stopday, starthr,
stophr, startmin, stopmin;
int cardnumb, numb, j;
long revnum = 0, elnum = 0;
char classification, intldesg[11];
int year = 0;
int mon, day, hr, minute, nexp, ibexp;
getgravconst(whichconst, tumin, mu, radiusearthkm, xke, j2, j3, j4, j3oj2);
satrec.error = 0;
for (j = 10; j <= 15; j++)
if (longstr1[j] == ' ')
longstr1[j] = '_';
if (longstr1[44] != ' ')
longstr1[43] = longstr1[44];
longstr1[44] = '.';
if (longstr1[7] == ' ')
longstr1[7] = 'U';
if (longstr1[9] == ' ')
longstr1[9] = '.';
for (j = 45; j <= 49; j++)
if (longstr1[j] == ' ')
longstr1[j] = '0';
if (longstr1[51] == ' ')
longstr1[51] = '0';
if (longstr1[53] != ' ')
longstr1[52] = longstr1[53];
longstr1[53] = '.';
longstr2[25] = '.';
for (j = 26; j <= 32; j++)
if (longstr2[j] == ' ')
longstr2[j] = '0';
if (longstr1[62] == ' ')
longstr1[62] = '0';
if (longstr1[68] == ' ')
longstr1[68] = '0';
sscanf(longstr1,
"%2d %5ld %1c %10s %2d %12lf %11lf %7lf %2d %7lf %2d %2d %6ld ",
&cardnumb, &satrec.satnum, &classification, intldesg, &satrec.epochyr,
&satrec.epochdays, &satrec.ndot, &satrec.nddot, &nexp, &satrec.bstar,
&ibexp, &numb, &elnum);
if (typerun == 'v') {
if (longstr2[52] == ' ')
sscanf(longstr2,
"%2d %5ld %9lf %9lf %8lf %9lf %9lf %10lf %6ld %lf %lf %lf \n",
&cardnumb, &satrec.satnum, &satrec.inclo, &satrec.nodeo,
&satrec.ecco, &satrec.argpo, &satrec.mo, &satrec.no, &revnum,
&startmfe, &stopmfe, &deltamin);
else
sscanf(longstr2,
"%2d %5ld %9lf %9lf %8lf %9lf %9lf %11lf %6ld %lf %lf %lf \n",
&cardnumb, &satrec.satnum, &satrec.inclo, &satrec.nodeo,
&satrec.ecco, &satrec.argpo, &satrec.mo, &satrec.no, &revnum,
&startmfe, &stopmfe, &deltamin);
} else {
if (longstr2[52] == ' ')
sscanf(longstr2, "%2d %5ld %9lf %9lf %8lf %9lf %9lf %10lf %6ld \n",
&cardnumb, &satrec.satnum, &satrec.inclo, &satrec.nodeo,
&satrec.ecco, &satrec.argpo, &satrec.mo, &satrec.no, &revnum);
else
sscanf(longstr2, "%2d %5ld %9lf %9lf %8lf %9lf %9lf %11lf %6ld \n",
&cardnumb, &satrec.satnum, &satrec.inclo, &satrec.nodeo,
&satrec.ecco, &satrec.argpo, &satrec.mo, &satrec.no, &revnum);
}
satrec.no = satrec.no / xpdotp; satrec.nddot = satrec.nddot * pow(10.0, nexp);
satrec.bstar = satrec.bstar * pow(10.0, ibexp);
satrec.a = pow(satrec.no * tumin, (-2.0 / 3.0));
satrec.ndot = satrec.ndot / (xpdotp * 1440.0); satrec.nddot = satrec.nddot / (xpdotp * 1440.0 * 1440);
satrec.inclo = satrec.inclo * deg2rad;
satrec.nodeo = satrec.nodeo * deg2rad;
satrec.argpo = satrec.argpo * deg2rad;
satrec.mo = satrec.mo * deg2rad;
satrec.alta = satrec.a * (1.0 + satrec.ecco) - 1.0;
satrec.altp = satrec.a * (1.0 - satrec.ecco) - 1.0;
if (satrec.epochyr < 57)
year = satrec.epochyr + 2000;
else
year = satrec.epochyr + 1900;
days2mdhms(year, satrec.epochdays, mon, day, hr, minute, sec);
jday(year, mon, day, hr, minute, sec, satrec.jdsatepoch);
if ((typerun != 'v') && (typerun != 'c')) {
if (typeinput == 'e') {
printf("input start prop year mon day hr min sec \n");
scanf("%i %i %i %i %i %lf", &startyear, &startmon, &startday, &starthr,
&startmin, &startsec);
fflush(stdin);
jday(startyear, startmon, startday, starthr, startmin, startsec, jdstart);
printf("input stop prop year mon day hr min sec \n");
scanf("%i %i %i %i %i %lf", &stopyear, &stopmon, &stopday, &stophr,
&stopmin, &stopsec);
fflush(stdin);
jday(stopyear, stopmon, stopday, stophr, stopmin, stopsec, jdstop);
startmfe = (jdstart - satrec.jdsatepoch) * 1440.0;
stopmfe = (jdstop - satrec.jdsatepoch) * 1440.0;
printf("input time step in minutes \n");
scanf("%lf", &deltamin);
}
if (typeinput == 'd') {
printf("input start year dayofyr \n");
scanf("%i %lf", &startyear, &startdayofyr);
printf("input stop year dayofyr \n");
scanf("%i %lf", &stopyear, &stopdayofyr);
days2mdhms(startyear, startdayofyr, mon, day, hr, minute, sec);
jday(startyear, mon, day, hr, minute, sec, jdstart);
days2mdhms(stopyear, stopdayofyr, mon, day, hr, minute, sec);
jday(stopyear, mon, day, hr, minute, sec, jdstop);
startmfe = (jdstart - satrec.jdsatepoch) * 1440.0;
stopmfe = (jdstop - satrec.jdsatepoch) * 1440.0;
printf("input time step in minutes \n");
scanf("%lf", &deltamin);
}
if (typeinput == 'm') {
printf("input start min from epoch \n");
scanf("%lf", &startmfe);
printf("input stop min from epoch \n");
scanf("%lf", &stopmfe);
printf("input time step in minutes \n");
scanf("%lf", &deltamin);
}
}
if (typerun == 'c') {
startmfe = -1440.0;
stopmfe = 1440.0;
deltamin = 10.0;
}
sgp4init(whichconst, opsmode, satrec.satnum, satrec.jdsatepoch - 2433281.5,
satrec.bstar, satrec.ecco, satrec.argpo, satrec.inclo, satrec.mo,
satrec.no, satrec.nodeo, satrec);
}