• 大小: 2.5MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-02
  • 语言: 其他
  • 标签: 日出日落  

资源简介

可以自行输入经纬度和时间,计算出日出日落时间,亲测误差很小,也就正负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\link.write.1.tlog
     文件        2230  2017-06-19 09:25  日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\link.read.1.tlog
     文件        1070  2017-06-19 09:25  日出日落(test)\日出日落(test)\Debug\日出日落(test).tlog\link.command.1.tlog
     文件         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

评论

共有 条评论

相关资源