Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time 如何计算日出/日落时间?_Time_Astronomy - Fatal编程技术网

Time 如何计算日出/日落时间?

Time 如何计算日出/日落时间?,time,astronomy,Time,Astronomy,我喜欢记录日出和日落的时间。在过去的几年里,我一直在用一个为我最喜欢的编程语言编写的流行库编写一个小程序。在过去的两个月里,我比平时更经常地记录这些时间,我碰巧注意到在春分那天,日出时间比前一天增加了八分钟!我知道这是不可能的,与之相比,我发现我的上升和下降时间已经推迟了好几天,事实上在一年的大部分时间里似乎都推迟了大约一分钟 在这一点上,我只想自己实现这些计算。有什么算法或公式可以进行这种计算?我确实在“技术定义和计算细节”标题下看到了一些有趣的内容,但我相信您已经读过了 对于所谓的“问题”和

我喜欢记录日出和日落的时间。在过去的几年里,我一直在用一个为我最喜欢的编程语言编写的流行库编写一个小程序。在过去的两个月里,我比平时更经常地记录这些时间,我碰巧注意到在春分那天,日出时间比前一天增加了八分钟!我知道这是不可能的,与之相比,我发现我的上升和下降时间已经推迟了好几天,事实上在一年的大部分时间里似乎都推迟了大约一分钟


在这一点上,我只想自己实现这些计算。有什么算法或公式可以进行这种计算?

我确实在“技术定义和计算细节”标题下看到了一些有趣的内容,但我相信您已经读过了

对于所谓的“问题”和上述问题的答案实际上可能就是您所需要的全部


作为旁注(它不会直接回答您的问题),您是否有理由不能提取NOAA数据并将其用作查找表而不是计算它?这些天的存储比较便宜。

< P>你可以考虑阅读维基百科的文章。第一段给出了方程式:

# center disk and refraction factor have been considered.
cos_omega = sin(-0.83 * to_r) - tan(latitude * to_r) * tan(declination * to_r)
semi_diurnal_arc = acos(cos_omega)

其中:

  • ωo是日出(取负值)或日落(取正值)时的度数(°)
  • φ是观察者在地球上的纬度,单位为度
  • δ是太阳的度数

具体来说,我提到的Solpos程序支持日出/日落。

看看这本书:
彼得·达菲特·史密斯的《带计算器的实用天文学》(平装本)。
它很老了,但仍在印刷中。。。
对于5min范围内的准确度,你必须考虑。 你想知道太阳底部到达地平线的时间,还是太阳顶部经过地平线以下的时间

太阳穿过地平线需要2分钟。

在1分钟以下,您还需要考虑大气折射。

日出/日落的定义可能会有所不同。例如,在“上升和设置”中,定义为身体上肢接触地平线的时刻(即身体的alt plus半径等于零)

#/usr/bin/env python
导入日期时间
导入ephem#要安装,请运行'pip install pyephem'`
o=以弗所观察员()
o、 lat,o.long,o.date='34:3','-118:15',datetime.datetime.utcnow()
太阳=以弗所太阳(o)
打印“洛杉矶”
打印“日出:”,下一个日出(太阳),“UTC”
打印“日落:”,下一次日落(太阳),“UTC”
输出
加利福尼亚州洛杉矶
日出:2010/3/30 13:42:43 UTC
日落:2010/3/30 02:11:50 UTC

如果它是开源库,那么您可以修复它,而不是创建一个带有新bug的新库。

我在Ruby中为时间方程式写了这篇文章

include Math

# degrees to radians = PI/180
to_r = PI/180.0

#radians to degrees = 180/PI
to_d = 180.0/PI

puts "Day, Declination, EofT"

# test a celestial year worth of values.
for jday in 1..366

  et = -7.633 * sin(jday * (2 * PI)/365.24) + 9.65 * sin((jday - 78) * 180/92 * to_r)
  a_sin = sin(23.433 * to_r) * sin((2 * PI/366) * (jday - 81))
  declination = asin(a_sin) * to_d
  puts "#{jday}, #{declination}, #{et}"

end
那么对于上述等式:

# center disk and refraction factor have been considered.
cos_omega = sin(-0.83 * to_r) - tan(latitude * to_r) * tan(declination * to_r)
semi_diurnal_arc = acos(cos_omega)
有一个完整的网站致力于此

  • 这些计算的关键是良好的库,如上面针对python的库
  • 还有日期和时间类的用法。我会在rubyforge上寻找类似以弗所的东西
如果你想与美国国家海洋和大气管理局相匹配,你必须参考Jean Meeus的天文算法(主要是第15章)。而且很复杂!马丁·贝克特是对的,你必须定义日落。通常这是太阳上肢的明显上升或下降,这使得你的“标准”高度为-5/6度(不是零度)。你不能用NOAA的精确度直接计算日出或日落。你必须为当天的视赤经和赤纬建立一套控制方程,然后对视赤经和赤纬随时间进行插值,以找到标准高度下的准确上升和下降时间


希望这有帮助。当我遇到同样的事情时,我花了大约一个月的时间来消化AA并重新编写我们所有的solar代码,但仍然花了一年多的时间来整理一些我的代码被破坏的角落案例。因此,这需要一些时间才能弄清楚。我不知道该算法的任何公共代码示例,目前也没有任何可供分享的示例,但如果可以的话,我很乐意帮助您解决一些难题。

我喜欢查找表方法,但我想知道如何在代码中实现它,此时我想知道我使用的数据背后是什么算法,因为我所使用的结果是非常不可靠的。此外,我还在尝试用一个算法来替换分点/至点的查找表。:)我认为如果纬度和经度是任意的,查找表就不起作用。关于分点,或许可以看看:使用NOAA自己的算法()怎么样。此处发布的@Pat NOAA算法中描述的细节计算了给定时间的太阳位置。这个问题是关于计算日出和日落的时间,这是解决一个给定位置的时间。这些问题是相关的,但不是同一件事@mattexx我不确定javascript中的所有内容,但我知道它为他们的sunrise/set计算器()提供了动力,它根据位置告诉sunrise/set的时间。据我所知,这正是OP想要做的。@Pat是的,他们的工具确实计算日出和日落,但据我所知,NOAA并没有公布这部分代码。如果是的话,我很想看看!顺便说一句,我有一个计算日出和日落的本地rubygem。我正在努力发布它(尝试摸索rubyforge发布流程)。如果你真的对一些代码感兴趣,我可以把它发送过来,或者在我拿到发布的链接后把它指向那里。@matexx代码在那里,在上。这只是javascript,所以
查看源代码
将向您展示所有内容。如果OP关注1分钟的差异,那么您必须做得比球形地球近似好得多。坦白说,Jason,我不是