在我的C应用程序中,我想计算给定日期、纬度和经度的日出/日落时间。我一直在网上搜索,但找不到有效的样品
我尝试实现此示例:
http://souptonuts.sourceforge.net/code/sunrise.c.html
但是这个样本没有正确工作
是否有一个简单的C源代码或方法可以在我的应用程序中轻松实现
编辑:
我在这个链接上实现了代码,但是它给了我错误的日落/日出值。我也在这里尝试了Saul的链接,但它也给了我错误的结果
我有41N,28E的位置。当我尝试代码时,两个示例都表示日出值大约为10:13,日落值为23:24。但正确的值是06:06、20:13。
我不能理解这个问题
根据日期、纬度和经度计算日出/日落时间的十个简单步骤
-
首先计算一年中的哪一天
N1=楼层(275*月/9)
N2=楼层((月+9)/12)
N3=(1+楼层((第4年*楼层(第4年)+2)/3))
N=N1-(N2*N3)+第30天 -
将经度转换为小时值并计算近似时间
lngHour=经度/15
如果需要上升时间:
t=N+((6-lngHour)/24)
如果需要设置时间:
t=N+((18-lngHour)/24) -
计算太阳的平均异常
M=(0.9856*t)-3.289
-
计算太阳的真实经度
L=M+(1.916*sin(M))+(0.020*sin(2*M))+282.634
注:L可能需要通过加/减360调整到范围[0360]
5a.计算太阳的赤经
RA=atan(0.91764*tan(L))
注:RA可能需要通过加/减360调整到范围[0360]
5b.赤经值需要与L位于同一象限
L象限=(楼层(L/90))*90
RAquadrant=(楼层(RA/90))*90
RA=RA+(1象限-RA象限)
5c.赤经值需要转换成小时
RA=RA/15
-
计算太阳的赤纬
sinDec=0.39782*sin(L)
cosDec=cos(asin(sinDec))
7a.计算太阳的本地时角
cosH=(余弦(天顶)-(sinDec*sin(纬度))/(余弦*余弦(纬度))
如果(cosH>;1)
太阳永远不会在这个位置升起(在指定的日期)
如果(cosH<;-1)
太阳永远不会落在此位置(在指定日期)
7b.完成H的计算并转换为小时
如果需要上升时间:
H=360-acos(cosH)
如果需要设置时间:
H=acos(cosH)
H=H/15
-
计算上升/设定的本地平均时间
T=H+RA-(0.06571*T)-6.622
-
调整回UTC
UT=T-lngHour
注:UT可能需要通过加/减24调整到范围[0,24] -
将UT值转换为纬度/经度的本地时区
localT=UT+localOffset