📄 timeconversion.cpp
字号:
#define TIMECONVERSION_DLL _declspec(dllexport)
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "TimeConversion.h"
#define LEN sizeof(TLEkeys)
#define PI 3.1415926
#define GM 398603
double CommonTimetoJulianDay(/*double m_julianday2,*/COMMONTIME *pct)
{
int m,y;
double h;
double m_julianday2;
if(pct->month<=2)//判断通用时的月数
{
y=pct->year-1;
m=pct->month+12;
}
else
{
y=pct->year;
m=pct->month;
}
h=pct->hour+pct->minute/60.0+pct->second/3600.0;//求小时
return m_julianday2=(long)(365.25*y)+(long)(30.6001*(m+1))+pct->day+h/24.0+1720981.5;//返回通用时的儒略时
}
double DoytoJulianDay(DOY doy)
{
COMMONTIME m_commonp={doy.m_year,1,1,0,0,0};//初始化,年积日当年的1月1日
COMMONTIME *m_common=&m_commonp;
double JD_0;//1月1日的儒略时
double JD; //年积日的儒略时
/*m_common->year=doy->m_year;
m_common->month=1;
m_common->day=1;
m_common->hour=0;
m_common->minute=0;
m_common->second=0;
*/
JD_0=CommonTimetoJulianDay(m_common);
return JD=JD_0+1+doy.m_doy;
}
double EofMe(double Mean,double e)
{
double tol=1E-11;
double En=Mean;
double En1=En-(En-e*sin(En)-Mean)/(1-e*cos(En));
while(fabs(En1-En)>tol)
{
En=En1;
En1=En-(En-e*sin(En)-Mean)/(1-e*cos(En));
}
return En1;
}
TLEkeys *creat(FILE *fp)
{
DOY ddoy;
int p_line;
double p_one,p_two,p_BSTAR,p_sort;
long p_check;
double p_i,p_A,p_e,p_a,p_m,p_n;
double p_motion,p_E0;
char r[10];
double count=0;
TLEkeys *head=NULL,*neww,*tail;
neww=tail=(TLEkeys *)malloc(LEN);
{
fgets(neww->name,25,fp);
fscanf(fp,"%d%6ld%*c%5ld%*3c%2d%lf%lf%lf%*d%*c%5ld%*c%*d%d%5ld",&p_line,&neww->satelliteID,&neww->launchYEAR,
&ddoy.m_year,&ddoy.m_doy,&p_one,&p_two,&p_BSTAR,&p_sort,&p_check);
fscanf(fp,"%*d%*6ld%lf%lf%lf%lf%lf%lf%",&p_i,&p_A,&p_e,&p_a,&p_m,&p_n);
fgets(r,25,fp);
neww->orbitKEYs.Inclination=p_i*PI/180;
neww->orbitKEYs.Ascension=p_A*PI/180;
neww->orbitKEYs.Eccentricity=p_e/1E7;
neww->orbitKEYs.Argu_peri=p_a*PI/180;
neww->orbitKEYs.Mean_anom=p_m*PI/180;
neww->orbit_n=p_n;
p_motion=p_n*2*PI/(24*3600);//平均角速度
neww->orbit_Cycle=2*PI/p_motion;
neww->orbitKEYs.a=pow(GM/(p_motion*p_motion),1/3);
p_E0=EofMe(neww->orbitKEYs.Mean_anom,neww->orbitKEYs.Eccentricity);//计算偏近点角
//cosnu=(neww->orbitKEYs.Eccentricity-cos(p_E0))/(neww->orbitKEYs.Eccentricity*cos(p_E0)-1);
//sinnu=(sin(p_E0)*sqrt(1-neww->orbitKEYs.Eccentricity*neww->orbitKEYs.Eccentricity))/(1-neww->orbitKEYs.Eccentricity*cos(p_E0));
neww->true_anomaly=(sin(p_E0)*sqrt(1-neww->orbitKEYs.Eccentricity*neww->orbitKEYs.Eccentricity))/(cos(p_E0)-neww->orbitKEYs.Eccentricity);
ddoy.m_year+=2000;
neww->m_JulianDay=DoytoJulianDay(ddoy);
}
while(!feof(fp))
{
count++;
if(count==1)
head=neww;
else
tail->next=neww;
tail=neww;
neww=(TLEkeys *)malloc(LEN);
{
fgets(neww->name,25,fp);
fscanf(fp,"%d%6ld%*c%5ld%*3c%2d%lf%lf%lf%*d%*c%5ld%*c%*d%d%5ld",&p_line,&neww->satelliteID,&neww->launchYEAR,
&ddoy.m_year,&ddoy.m_doy,&p_one,&p_two,&p_BSTAR,&p_sort,&p_check);
fscanf(fp,"%*d%*6ld%lf%lf%lf%lf%lf%lf%",&p_i,&p_A,&p_e,&p_a,&p_m,&p_n);
fgets(r,25,fp);
neww->orbitKEYs.Inclination=p_i*PI/180;
neww->orbitKEYs.Ascension=p_A*PI/180;
neww->orbitKEYs.Eccentricity=p_e/1E7;
neww->orbitKEYs.Argu_peri=p_a*PI/180;
neww->orbitKEYs.Mean_anom=p_m*PI/180;
neww->orbit_n=p_n;
p_motion=p_n*2*PI/(24*3600);//平均角速度
neww->orbit_Cycle=2*PI/p_motion;
neww->orbitKEYs.a=pow(GM/(p_motion*p_motion),1/3);
p_E0=EofMe(neww->orbitKEYs.Mean_anom,neww->orbitKEYs.Eccentricity);//计算偏近点角
//cosnu=(neww->orbitKEYs.Eccentricity-cos(p_E0))/(neww->orbitKEYs.Eccentricity*cos(p_E0)-1);
//sinnu=(sin(p_E0)*sqrt(1-neww->orbitKEYs.Eccentricity*neww->orbitKEYs.Eccentricity))/(1-neww->orbitKEYs.Eccentricity*cos(p_E0));
neww->true_anomaly=(sin(p_E0)*sqrt(1-neww->orbitKEYs.Eccentricity*neww->orbitKEYs.Eccentricity))/(cos(p_E0)-neww->orbitKEYs.Eccentricity);
ddoy.m_year+=2000;
neww->m_JulianDay=DoytoJulianDay(ddoy);
}
}
tail->next=NULL;
return head;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -