1、其中如果M2,则y=Y-1,m=M+12如果M2,则y=Y,m=MJD为儒略日,Y为年,M为月,D为日,UT为世界时。2.1.2由儒略日转换到通用时(JulianDayToCommonTime( pjd, pct)2.2通用时与GPS时间间的相互转换2.2.1由通用时转换到GPS时间(CommonTimeToGPSTime( pct, pgt)主要分两步进行:第一步:计算GPS周第二步:计算一周内的秒数2.2.2由GPS时间转换到通用时(GPSTimeToCommonTime( pgt, pct)由GPS时间转换到儒略日由儒略日转换到通用时2.3儒略日与年积日之间的相互转换2.3.1由儒略日转
2、换到年积日(JulianDayToDOY (pjd, pdoy)主要分三步进行:计算出通用时计算出当年1月1日的儒略日第三步:两个儒略日求差加1,得出年积日2.3.2年积日转换到儒略日(DOYToJulianDay ( pdoy, pjd)主要分一下两步进行:计算出当年1月1日的儒略日JD1年积日加JD1减1得儒略日2.4GPS时与年积日间的相互转换参照儒略日与年积日之间转换方法进行就可以得到结果。GPS时转换到年积日(GPSTimeToDOY ( pgt, pdoy)年积日转换到GPS时(DOYToGPSTime (pdoy, pgt)3.算例及结果通过在VC+6.0环境下编写了各个坐标系统
3、的相互转换,并得到了转换的结果,在试验中使用的已知数据是即使数据,取的时间是当时时间2011年1月7日19时38分45.26秒,用这个已知数据代入函数中,分别求得各个时间系统的GPS时、儒略时、年积日时,并通过各个时间系统的各自相互转换,最后输出的结果如下图所示通过上图我们可以看出,得到的结果还是非常满意的,程序基本完成了各个时间系统的相互转换,从各个时间相互转换后得到的时间结果,并还原成转换前的数据,得到的结果都是完全符合,由此可见我们的计算结果是正确的,4.心得体会这次编程试验,虽说这次试验比较简单,但还是花了较长的时间,修修改改的,以前看到过类似程序,觉得自己应该没啥问题,应该很简单,自
4、己能轻易拿下,可真做起来并不是这么一回事,总是出现一些小bug,不知道问题出在那里,明明感觉公式输入对的,语法也没啥问题,偏偏结果不对,与期望的值差别很大,最后经过调试总算解决了这些问题,比如有次明明记得公式输入是正确的,最后发现还是不小心输错了,结果导致错误。经过这次编程,这次试验,使自己的编程水平有了较大的提高,以前很多的时候都是只看程序,感觉很简单,并不自己动手,其实其中很多问题,只有自己亲自经历才知道一些简单的东西也会出问题,卡住思维,最后经过努力解决了问题,心里还是蛮开心的,有一定的成就感。经过这次试验,学到了很多东西,有比较深的感触,对VC+不像以前那么排斥了,不像以前总感觉有点儿
5、惧怕它,现在总算不抵触他了,希望在以后的学习中能够喜欢上它。5.附录(程序中的源代码)#includeusing namespace std;typedef struct tagCOMMONTIME int year; int month; int day; int hour; int minute; double second;COMMONTIME;/通用时typedef COMMONTIME *PCOMMONTIME;typedef struct tagTOD long sn; /秒数的整数部分 double tos;/秒数的小数部分TOD;typedef TOD *PTOD;typede
6、f struct long day; /整数天数 TOD tod; /一天内的秒数JULIANDAY;/儒略日typedef JULIANDAY *PJULIANDAY;typedef struct tagMJULIANDAYMJULIANDAY;/新儒略日typedef MJULIANDAY *PMJIANDAY;typedef struct tagTOW/秒整数部分/秒小数部分TOW;typedef TOW *PTOW;typedef struct tagGPSTIME int wn; /周数 TOW tow;/一周内的秒数GPSTIME;/GPS时typedef GPSTIME *PGP
7、STIME;typedef struct tagDOY unsigned short year; unsigned short day;DOY;/年积日typedef DOY *PDOY;double FRAC(double morigin) return morigin-long(morigin);/ 取小数部分void CommonTimeToJulianDay(PCOMMONTIME pct,PJULIANDAY pjd) /通用时到儒略日的转换 if(pct-year80) pct-year+=2000; else pct-year+=1900; double ut=pct-hour
8、+ pct-minute/60.0 + pct-second/3600.0;monthday=int(365.25*pct-year)+int(30.6001*(pct-month+1)+pct-day+int(ut/24+1720981.5);tod.sn= (pct-hour+12)%24)*3600+pct-minute*60+(int)pct-second;/秒的整数部分tod.tos=pct-second-(int)pct-/秒的小数部分 void JulianDayToCommonTime(PJULIANDAY pjd,PCOMMONTIME pct)/儒略日到通用时的转换 dou
9、ble x=pjd-day+(pjd-tod.sn+pjd-tod.tos)/(60.0*60.0*24); int a=int(x+0.5); int b=a+1537; int c=int(b-122.1)/365.25); int d=int(365.25*c); int e=int(b-d)/30.6001); pct-day=b-d-int(30.6001*e);month=e-1-12*int(e/14);year=c-4715-int(7+pct-month)/10);hour=(pjd-tod.sn/3600+12)%24;minute=(pjd-tod.sn%3600)/60
10、;second=pjd-tod.sn%60+pjd-tod.tos; int N=a%7;void JulianDayToGPSTime(PJULIANDAY pjd,PGPSTIME pgt)/儒略日到GPS时的转换 pgt-wn=int(x-2444244.5)/7);tow.sn=int(pjd-day-2444244)%7+(pjd-tod.sn/(60.0*60.0*24)-0.5)*86400);tow.tos=pjd-void GPSTimeToJulianDay(PGPSTIME pgt,PJULIANDAY pjd)/GPS时到儒略日的转换day=int(pgt-wn*7+d
11、ouble(pgt-tow.sn)/86400.0+2444244.5);tod.sn=(pgt-tow.sn+43200)%86400;tod.tos=pgt-tow.tos;void CommonTimeToGPSTime(PCOMMONTIME pct,PGPSTIME pgt)/通用时到GPS时的转换 PJULIANDAY pjd=new JULIANDAY; CommonTimeToJulianDay(pct,pjd); JulianDayToGPSTime(pjd,pgt);void GPSTimeToCommonTime(PGPSTIME pgt,PCOMMONTIME pct)
12、/GPS时到通用时的转换 GPSTimeToJulianDay(pgt,pjd); JulianDayToCommonTime(pjd,pct);void CommonTimeToDOY (PCOMMONTIME pct, PDOY pdoy) PCOMMONTIME pcto=new COMMONTIME; pcto-year=pct-year;month=1;day=1;hour=0;minute=0;second=0; PJULIANDAY pjdo=new JULIANDAY; double JD,JDO; CommonTimeToJulianDay(pcto,pjdo); JDO=p
13、jdo-day+(pjdo-tod.sn+pjdo-tod.tos)/86400; JD=pjd- pdoy-day=short(JD-JDO+1);tod.sn=long(pct-hour*3600 +pct-minute*60+pct-second);second-int(pct- /*pct-second-pdoy-tod.sn;*/void DOYToCommonTime (PDOY pdoy, PCOMMONTIME pct)year=pdoy- JD=JDO+pdoy-day+(pdoy-tod.sn+pdoy-tod.tos)/86400-1; long a,b,c,d,e; a
14、=(long)(JD+0.5); b=a+1537; c=(long)(b-122.1)/365.25); d=(long)(365.25*c); e=(long)(b-d)/30.6001);day=short(b-d-(long)(30.6001*e)+FRAC(JD+0.5);month=short(e-1-12*(long)(e/14);year=short(c-4715-(long)(7+pct-month)/10);hour=short(pdoy-tod.tos)/3600);minute=short(pdoy-tod.tos -pct-hour*3600)/60);second=
15、pdoy-hour*3600-pct-minute*60;void GPSTimeToDOY (PGPSTIME pgt, PDOY pdoy) GPSTimeToJulianDay (pgt, pjd); PCOMMONTIME pct=new COMMONTIME; JulianDayToCommonTime (pjd,pct); CommonTimeToDOY (pct,pdoy);void DOYToGPSTime (PDOY pdoy, PGPSTIME pgt) DOYToCommonTime (pdoy,pct); CommonTimeToGPSTime (pct, pgt);v
16、oid JulianDayToDOY (PJULIANDAY pjd, PDOY pdoy) JulianDayToCommonTime (pjd, pct);void DOYToJulianDay (PDOY pdoy, PJULIANDAY pjd)void main() PJULIANDAY pjd=new JULIANDAY; PDOY pdoy=new DOY; PGPSTIME pgt= new GPSTIME;year=2011;day=6;hour=19;minute=38;second=45.26; cout转换之前的通用时(当地时间):; cout dayhour:minu
17、tesecond儒略日的转换通用时-儒略日的转换:pjd-tod.sntod.tos通用时的转换儒略日-通用时的转换: JulianDayToGPSTime( pjd, pgt);GPS时的转换GPS时的转换:pgt-wntow.sntow.tosGPS时- CommonTimeToGPSTime( pct, pgt); GPSTimeToCommonTime( pgt, pct); CommonTimeToDOY ( pct, pdoy);年积日年积日:pdoy- DOYToCommonTime (pdoy, pct);/年积日-通用时年积日-通用时: GPSTimeToDOY ( pgt, pdoy); DOYToGPSTime (pdoy, pgt);GPS时GPS时: JulianDayToDOY (pjd, pdoy); DOYToJulianDay ( pdoy, pjd);儒略日儒略日:经过各种转换后还原得到的通用时:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2