资源简介
可以自行输入经纬度和时间,计算出日出日落时间,亲测误差很小,也就正负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;
//设Y为给定年份,M为月份,D为该月日期(可以带小数)。
//若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 儒略世纪数
*
* @return 太阳黄经
*****************************/
static double sunHJ(double t)
{
double j;
t = t + (32.0 * (t + 1.8) * (t + 1.8) - 20) / 86400.0 / 36525.0;
// 儒略世纪年数力学时
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 地理经度
*
* @param la 地理纬度
*
* @param tz 时区
*
* @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;
// 太阳黄经以及它的正余弦值
t = date / 36525;
j = sunHJ(t);
// 太阳黄经以及它的正余弦值
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);// ‘太阳赤经
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
评论
共有 条评论