2016-05-05 48 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' 
相關問題