2016-05-05 39 views
1

在PyEphem中,我可以计算日出时间。没问题。我想要的是:什么时候太阳的底部似乎与地平线分离?一种明显但不正确的方法是当太阳的中心在1/2 *(太阳大小以度为单位)时。由于大气的影响,这是离开了。计算日出/开始日落的结束

同样的问题的日落。太阳底部什么时候触及地平线?

这是否存在标准更正?与将地平线设置为日出/集合的-34弧分相同?

回答

1

我有一个似乎工作的近似解决方案。 如果有人知道更优雅的解决方案。请说出来。

在日出:太阳的中心在大约。 -34' - (太阳直径)/ 2。太阳的顶端似乎在地平线上。 假设在地平线附近的-34'校正是恒定的。 (一个很大的假设)

当太阳已经向上移动了一个太阳直径时,太阳的底部将会在地平线上。

为了这个早上:

time_of_sunrise = obs.previous_rising(ephem.Sun(), ephem.now()) 
    obs.date = time_of_sunrise 
    sun.compute(obs) 
    angle_sun_center_sunrise = sun.alt/degree (about -0.84') 
    sun_dia_at_sunrise = sun.size/3600 

查找日出与二进制搜索结束。伪代码:

adjTm = 6 minutes 
    sunriseEnd = time_of_sunrise + adjTm 
    obs.date = sunriseEnd 
    sun.compute(obs) 

检查,看是否sun.alt是X内(angle_sun_center_sunrise + sun_dia_at_sunrise)

If out of tol.: 
    set adjTm = adjTm/2 
    adjust obs.date by sunriseEnd +/- adjTm 
repeat until within tolerance. 

日落相同的方式工作的能力。

2

The PyEphem page for Rising, Transit, Setting 表明,以匹配USNO的年鉴数据,太阳, 可以关闭折射的上升(通过设置气压为零) 并把地平线弧光低于正常值为34分钟:

>>> import ephem 
>>> atlanta = ephem.Observer() 
>>> atlanta.pressure = 0 
>>> atlanta.horizon = '-0:34' 
>>> atlanta.lat, atlanta.lon = '33.8', '-84.4' 
>>> atlanta.date = '2009/09/06 17:00' # noon EST 
>>> print(atlanta.previous_rising(ephem.Sun())) 

现在,如果你被太阳的整个视直径移动地平线previous_rising会告诉当太阳的顶部肢体达到 这种地平线(假设没有折射),将发生什么时候 太阳的下肢到达 正常地平线(再次假定没有折射)下方34分钟的弧线, (根据USNO的练习)是太阳下肢将处于正常地平线的预测时间当折射 被考虑在内。

需要注意的是,在所解释的标题 技术定义和计算细节this page at the USNO site, 为Sun的USNO升/次告诉当太阳 的中心有50分钟的地平线之下弧,而不管当时太阳的实际表观直径如何。 实际上,他们假设太阳半径为16分钟,折射角为34分钟。 此外,在子标题上升/设置计算的准确性, 注意到“即使在理想条件下(例如,海上晴朗的天空),计算出的上升或设置的时间可能有一分钟或更长时间的误差“ 由于不可预知的大气条件。 如果你的纬度较高,效果会变得更糟。

鉴于此,合理的程序可能是假设太阳直径为32分钟的圆弧;然后预测 日出而不是开始的结束,你将在PyEphem示例代码更改线路

>>> atlanta.horizon = '-0:34' 

>>> atlanta.horizon = '-0:02' 
相关问题