資源簡介
可以自行輸入經(jīng)緯度和時間,計算出日出日落時間,親測誤差很小,也就正負2到3分鐘

代碼片段和文件信息
#include?
#include?
#include?
#include?“math.h“
#include?“time.h“
#?define?M_PI???????3.14159265358979323846
static?double?RAD?=?180.0?*?3600?/?M_PI;
static?double?richu;
static?double?midDayTime;
static?double?dawnTime;
static?double?jd;
static?double?wd;
static?float?jd_degrees;
static?float?wd_degrees;
/*************************
*?儒略日的計算
*
*?@param?y?年
*
*?@param?M?月
*
*?@param?d?日
*
*?@param?h?小時
*
*?@param?m?分
*
*?@param?s秒
*
*?@return?int
***************************/
static?double?timeToDouble(int?y?int?M?double?d)
{
//????????double?A=0;
double?B?=?0;
double?jd?=?0;
//設(shè)Y為給定年份,M為月份,D為該月日期(可以帶小數(shù))。
//若M?>?2,Y和M不變,若?M?=1或2,以Y–1代Y,以M+12代M,換句話說,如果日期在1月或2月,則被看作是在前一年的13月或14月。
//對格里高利歷有?:A?=?INT(Y/100)???B?=?2?-?A?+?INT(A/4)
//對儒略歷,取?B?=?0
//JD?=?INT(365.25(Y+4716))+INT(30.6001(M+1))+D+B-1524.5?(7.1)
B?=?-13;
jd?=?floor(365.25?*?(y?+?4716))?+?floor(30.60001?*?(M?+?1))?+?B?+?d?-?1524.5;
return?jd;
}
static?void?doubleToStr(double?time?char?*str)
{
double?t;
int?h?m?s;
t?=?time?+?0.5;
t?=?(t?-?(int)t)?*?24;
h?=?(int)t;
t?=?(t?-?h)?*?60;
m?=?(int)t;
t?=?(t?-?m)?*?60;
s?=?(int)t;
sprintf(str?“%02d:%02d:%02d“?h?m?s);
}
/****************************
*?@param?t?儒略世紀數(shù)
*
*?@return?太陽黃經(jīng)
*****************************/
static?double?sunHJ(double?t)
{
double?j;
t?=?t?+?(32.0?*?(t?+?1.8)?*?(t?+?1.8)?-?20)?/?86400.0?/?36525.0;
//?儒略世紀年數(shù)力學(xué)時
j?=?48950621.66?+?6283319653.318?*?t?+?53?*?t?*?t?-?994?+?334166?*?cos(4.669257?+?628.307585?*?t)?+?3489?*?cos(4.6261?+?1256.61517?*?t)?+?2060.6?*?cos(2.67823?+?628.307585?*?t)?*?t;
return?(j?/?10000000);
}
static?double?mod(double?num1?double?num2)
{
num2?=?fabs(num2);
//?只是取決于Num1的符號
return?num1?>=?0???(num1?-?(floor(num1?/?num2))?*?num2)?:?((floor(fabs(num1)?/?num2))?*?num2?-?fabs(num1));
}
/********************************
*?保證角度∈(-ππ)
*
*?@param?ag
*?@return?ag
***********************************/
static?double?degree(double?ag)
{
ag?=?mod(ag?2?*?M_PI);
if?(ag?<=?-M_PI){
ag?=?ag?+?2?*?M_PI;
}
else?if?(ag>M_PI){
ag?=?ag?-?2?*?M_PI;
}
return?ag;
}
/***********************************
*
*?@param?date??儒略日平午
*
*?@param?lo????地理經(jīng)度
*
*?@param?la????地理緯度
*
*?@param?tz????時區(qū)
*
*?@return?太陽升起時間
*************************************/
double?sunRiseTime(double?date?double?lo?double?la?double?tz)
{
double?t?j?sinJ?cosJ?gst?E?a?D?cosH0?cosH1?H0?H1?H;
date?=?date?-?tz;
//?太陽黃經(jīng)以及它的正余弦值
t?=?date?/?36525;
j?=?sunHJ(t);
//?太陽黃經(jīng)以及它的正余弦值
sinJ?=?sin(j);
cosJ?=?cos(j);
//?其中2*M_PI*(0.7790572732640?+?1.00273781191135448*jd)恒星時(子午圈位置)
gst?=?2?*?M_PI?*?(0.779057273264?+?1.00273781191135?*?date)?+?(0.014506?+?4612.15739966?*?t?+?1.39667721?*?t?*?t)?/?RAD;
E?=?(84381.406?-?46.836769?*?t)?/?RAD;?//?黃赤交角
a?=?atan2(sinJ?*?cos(E)?cosJ);//?‘太陽赤經(jīng)
D?=?asin(sin(E)?*?sinJ);?//?太陽赤緯
cosH0?=?(sin(-50?*?60?/?RAD)?-?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-06-19?09:35??日出日落(test)\
?????文件???????21504??2017-06-19?09:35??日出日落(test)\日出日落(test).v12.suo
?????文件????????1491??2017-06-18?13:25??日出日落(test)\日出日落(test).sln
?????文件?????7798784??2017-06-19?09:35??日出日落(test)\日出日落(test).sdf
?????目錄???????????0??2017-06-19?09:25??日出日落(test)\日出日落(test)\
?????文件?????????954??2017-06-18?13:25??日出日落(test)\日出日落(test)\日出日落(test).vcxproj.filters
?????文件????????4151??2017-06-18?13:25??日出日落(test)\日出日落(test)\日出日落(test).vcxproj
?????文件????????7036??2017-06-19?09:25??日出日落(test)\日出日落(test)\SunRiseSunSet.cpp
?????目錄???????????0??2017-06-19?09:17??日出日落(test)\Debug\
?????文件??????478208??2017-06-19?09:25??日出日落(test)\Debug\日出日落(test).pdb
?????文件??????286604??2017-06-19?09:25??日出日落(test)\Debug\日出日落(test).ilk
?????文件???????37888??2017-06-19?09:25??日出日落(test)\Debug\日出日落(test).exe
?????目錄???????????0??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\
?????文件????????1486??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\日出日落(test).log
?????文件???????86016??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\vc120.pdb
?????文件???????52224??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\vc120.idb
?????文件???????27255??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\SunRiseSunSet.obj
?????目錄???????????0??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\
?????文件?????????168??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\日出日落(test).lastbuildstate
?????文件?????????360??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\li
?????文件????????2230??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\li
?????文件????????1070??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\li
?????文件?????????400??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\CL.write.1.tlog
?????文件????????1208??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\CL.read.1.tlog
?????文件?????????738??2017-06-19?09:25??日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\cl.command.1.tlog
評論
共有 條評論