c中的日出日落时间

在我的C应用程序中,我想计算给定日期、纬度和经度的日出/日落时间。我一直在网上搜索,但找不到有效的样品

我尝试实现此示例:
http://souptonuts.sourceforge.net/code/sunrise.c.html

但是这个样本没有正确工作

是否有一个简单的C源代码或方法可以在我的应用程序中轻松实现

编辑:
我在这个链接上实现了代码,但是它给了我错误的日落/日出值。我也在这里尝试了Saul的链接,但它也给了我错误的结果
我有41N,28E的位置。当我尝试代码时,两个示例都表示日出值大约为10:13,日落值为23:24。但正确的值是06:06、20:13。
我不能理解这个问题

根据日期、纬度和经度计算日出/日落时间的十个简单步骤

  1. 首先计算一年中的哪一天

    N1=楼层(275*月/9)
    N2=楼层((月+9)/12)
    N3=(1+楼层((第4年*楼层(第4年)+2)/3))
    N=N1-(N2*N3)+第30天

  2. 将经度转换为小时值并计算近似时间

    lngHour=经度/15

    如果需要上升时间:
    t=N+((6-lngHour)/24)
    如果需要设置时间:
    t=N+((18-lngHour)/24)

  3. 计算太阳的平均异常

    M=(0.9856*t)-3.289

  4. 计算太阳的真实经度

    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
  1. 计算太阳的赤纬

    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

  1. 计算上升/设定的本地平均时间

    T=H+RA-(0.06571*T)-6.622

  2. 调整回UTC

    UT=T-lngHour
    注:UT可能需要通过加/减24调整到范围[0,24]

  3. 将UT值转换为纬度/经度的本地时区

    localT=UT+localOffset

发表评论