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

📄 timetran.cpp

📁 卫星单点定位程序
💻 CPP
字号:
#include "TimeTran.h"
//#include <math.h>

//1. 由通用时到儒略日
void CommonTimeToJulianDay (PCOMMONTIME pct,	//指向通用时的指针;
							PJULIANDAY pjd)		//指向儒略日的指针
{
	int year,month;
	if	(pct->month<=2)	{
		year	= pct->year-1;
		month	= pct->month+12;
	}
	else	{
		year	= pct->year;
		month	= pct->month;
	}
	pjd->day	= long (long (365.25*year) + long (30.6001 * (month+1))
		+ pct->day + pct->hour / 12 * 0.5 + 1720981.5);
	pjd->tod.sn	= long ((pct->hour+12) % 24 * 3600 + pct->minute * 60
		+ pct->second);
	pjd->tod.tos= pct->second - long (pct->second);
}

//2. 儒略日到通用时
void JulianDayToCommonTime (PJULIANDAY pjd,		//指向儒略日的指针;
							PCOMMONTIME pct)	//指向通用时的指针。
{
	long a,b,c,d,e;
	a	= long (pjd->day + (pjd->tod.sn + pjd->tod.tos) / (3600*24) + 0.5);
	b	= a + 1537;
	c	= long ((b-122.1) / 365.25);
	d	= long (365.25 * c);
	e	= long ((b-d) / 30.6001);

	pct->second	= pjd->tod.sn % 60 + pjd->tod.tos;
	pct->minute	= pjd->tod.sn % 3600/ 60;
	pct->hour	= (pjd->tod.sn + 12 * 3600) / 3600 % 24;
	pct->day	= (unsigned char) (b - d - long (30.6001 * e));
	pct->month	= (unsigned char) (e - 1 - 12 * (e/14));
	pct->year	= c - 4715 - (7 + pct->month) / 10;
}

//3. GPS时到儒略日
void GPSTimeToJulianDay (PGPSTIME pgt,			//指向GPS时的指针;
						 PJULIANDAY pjd)		//指向儒略日的指针。
{
	pjd->day	= long (pgt->wn*7 + pgt->tow.sn / (24*3600.0) + 2444244.5);
	pjd->tod.sn	= long (pgt->tow.sn + 12*3600) % 86400;
	pjd->tod.tos= pgt->tow.tos;
}

//4. 儒略日到GPS时
void JulianDayToGPSTime (PJULIANDAY pjd,		//指向儒略日的指针;
						 PGPSTIME pgt)			//指向GPS时的指针。
{
	pgt->wn		= int (pjd->day + pjd->tod.sn / (24*3600.0) - 2444244.5) / 7;
	pgt->tow.sn	= (pjd->day - 2444244 - 7 * pgt->wn) * 86400
				- 43200 + pjd->tod.sn;
	pgt->tow.tos= pjd->tod.tos;
}

//5. 通用时到GPS时
void CommonTimeToGPSTime (PCOMMONTIME pct,		//指向通用时的指针
						  PGPSTIME pgt)			//指向GPS时的指针。
{
	JULIANDAY	jd;
	CommonTimeToJulianDay (pct, &jd);
	JulianDayToGPSTime (&jd, pgt);
}

//6. GPS时到通用时
void GPSTimeToCommonTime (PGPSTIME pgt,			//指向GPS时的指针;
						  PCOMMONTIME pct)		//指向通用时的指针。
{
	JULIANDAY	jd;
	GPSTimeToJulianDay (pgt, &jd);
	JulianDayToCommonTime (&jd, pct);
}

//对时间进行调整
void SetTimeDelta (PJULIANDAY pjdNew,			//指向计算所得的儒略日的指针
				   PJULIANDAY pjdOld,			//指向原始的儒略日的指针
				   double dDelta)				//时间差(second)(-1<dDelta<1)
{
	if (fabs(dDelta) < 10e-8)	{
		memcpy(pjdNew, pjdOld, sizeof (JULIANDAY));
		return ;
	}
	else {
		pjdNew->tod.tos = pjdOld->tod.tos + dDelta;
		pjdNew->tod.sn = pjdOld->tod.sn + (long)floor(pjdNew->tod.tos);
		pjdNew->tod.tos = pjdNew->tod.tos - floor(pjdNew->tod.tos);
		pjdNew->day = pjdOld->day;
		if (pjdNew->tod.sn < 0)	{
			pjdNew->day = pjdOld->day - 1;
			pjdNew->tod.sn = pjdOld->tod.sn + 86400;
		}
		else if (pjdNew->tod.sn >= 86400)	{
			pjdNew->day = pjdOld->day + 1;
			pjdNew->tod.sn = pjdOld->tod.sn - 86400;
		}
	}
}


//计算时间差
double SubtractTime (PJULIANDAY pjdMinuend,			//指向被减数的儒略日的指针
					 PJULIANDAY pjdSubtrahend)		//指向减数的儒略日的指针
{
	return (pjdMinuend->day - pjdSubtrahend->day) * 86400
		+ (pjdMinuend->tod.sn - pjdSubtrahend->tod.sn)
		+ (pjdMinuend->tod.tos - pjdSubtrahend->tod.tos);
}

⌨️ 快捷键说明

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