在PyEphem中,我可以計算日出時間。沒問題。我想要的是:什麼時候太陽的底部似乎與地平線分離?一種明顯但不正確的方法是當太陽的中心在1/2 *(太陽大小以度爲單位)時。由於大氣的影響,這是離開了。計算日出/開始日落的結束
同樣的問題的日落。太陽底部什麼時候觸及地平線?
這是否存在標準更正?與將地平線設置爲日出/集合的-34弧分相同?
在PyEphem中,我可以計算日出時間。沒問題。我想要的是:什麼時候太陽的底部似乎與地平線分離?一種明顯但不正確的方法是當太陽的中心在1/2 *(太陽大小以度爲單位)時。由於大氣的影響,這是離開了。計算日出/開始日落的結束
同樣的問題的日落。太陽底部什麼時候觸及地平線?
這是否存在標準更正?與將地平線設置爲日出/集合的-34弧分相同?
我有一個似乎工作的近似解決方案。 如果有人知道更優雅的解決方案。請說出來。
在日出:太陽的中心在大約。 -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.
日落相同的方式工作的能力。
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'