Результаты для Observer (), по-видимому, не учитывают эффекты повышения в PyEphem - PullRequest
9 голосов
/ 05 октября 2011

Я запросил результаты, предоставленные модулем PyEphem, относящиеся к запросам Observer () и эффектам повышения прав.Из нескольких источников (например, http://curious.astro.cornell.edu/question.php?number=388)) я понимаю, что высота наблюдателя оказывает заметное влияние на время заката. Однако в следующем коде я не вижу разницы:

import ephem

emphemObj = ephem.Observer()
emphemObj.date = '2011/08/09'
emphemObj.lat = '53.4167'
emphemObj.long = '-3'
emphemObj.elevation = 0

ephemResult = ephem.Sun()
ephemResult.compute(emphemObj)
print "Sunset time @ 0m: " + str(emphemObj.previous_rising(ephemResult))

emphemObj.elevation = 10000
ephemResult.compute(emphemObj)
print "Sunset time @ 10000m: " + str(emphemObj.previous_rising(ephemResult))

Я получаю вывод:

Sunset time @ 0m: 2011/8/8 04:38:34
Sunset time @ 10000m: 2011/8/8 04:38:34

Я вполне уверен, что делаю что-то не так, а не как баг, но, попробовав несколько разных способов, боюсь, я продолжаю накручиватьс теми же результатами. Кто-нибудь знает, что я делаю здесь неправильно?

Я уже опубликовал это на https://launchpad.net/pyephem, но я не получил ответа. Я надеюсь, что япринципиально неправильно понял назначение функции возвышения ...

1 Ответ

6 голосов
/ 27 октября 2011

elevation наблюдателя означает высоту над уровнем моря их местоположения - например, высоту Флагстаффа, штат Аризона. Но предполагается, что не только наблюдатель и его телескоп или бинокль находятся на этом расстоянии над уровнем моря; предполагается, что земля - ​​и, следовательно, горизонт - также и на этой высоте. Таким образом, увеличение elevation не дает вам никакого преимущества по отношению к горизонту, потому что горизонт перемещается вместе с вами, когда вы переезжаете в город на большой высоте.

Через несколько минут с карандашом и желтым блокнотом бумага выглядит как угол вниз до горизонта hza связан с радиусом Земли r и вашей высотой над землей h следующим образом:

hza = - acos(r / (h + r))

Итак, следуя приведенному выше примеру:

import math
height = 10000
hza = - math.acos(ephem.earth_radius / (height + ephem.earth_radius))
emphemObj.horizon = hza
print "Sunrise time @ 10000m: " + str(emphemObj.previous_rising(ephemResult))

Я получаю вывод:

Sunrise time @ 10000m: 2011/8/8 04:08:18

(Обратите внимание, что "восход" идет с previous_rising(), а "закат" идет с next_setting()!)

...