Лучший способ рассчитать кажущееся угловое разделение двух объектов в Skyfield?

ОБНОВЛЕНИЕ: Skyfield только что претерпел значительные изменения, включая расширенную документацию и метод углового разделения — см. принятый ответ.

Я вычисляю видимое угловое расстояние между двумя объектами, используя Skyfield. Я не нашел метода в пакете, поэтому я «изобрел» способ, вычислив скалярное произведение между двумя видимыми векторами положения.

Это лучший способ сделать это в настоящее время? Правильно ли это в рамках Skyfield?

def separation(seconds, lat, lon):

    lat, lon, seconds = float(lat), float(lon), float(seconds) # necessary it seems

    place = earth.topos(lat, lon)

    jd = JulianDate(utc=(2016, 3, 9, 0, 0, seconds))

    mpos = place.at(jd).observe(moon).apparent().position.km
    spos = place.at(jd).observe(sun).apparent().position.km

    mlen = np.sqrt((mpos**2).sum())
    slen = np.sqrt((spos**2).sum())

    sepa = ((3600.*180./np.pi) *
            np.arccos(np.dot(mpos, spos)/(mlen*slen)))

    return sepa


from skyfield.api import load, now, JulianDate
import numpy as np
from scipy.optimize import minimize

data = load('de421.bsp')

sun   = data['sun']
earth = data['earth']
moon  = data['moon']

sep = separation(12000, 32.5, 215.1)

print "sun-moon aparent separation: ", sep, " arcsec"

person uhoh    schedule 20.03.2016    source источник
comment
Вот связанный с Skyfield вопрос.   -  person uhoh    schedule 20.03.2016
comment
Я не знаю Skyfield (но выглядит интересно), но ваш код мне кажется нормальным. В качестве альтернативы используйте правило cos сферической триггерной точки по прямой и склонению двух видимых положений. Между этими двумя методами будет небольшая разница из-за ошибок округления. См. также en.wikipedia.org/wiki/Great-circle_distance.   -  person PM 2Ring    schedule 20.03.2016
comment
Скайфилд рулит! @PM2Ring спасибо за предложение. Я придерживаюсь здесь декартового, потому что это то, что я использую в приложении. Я чувствую себя безопаснее, используя декартовы координаты и избегая антиподов и нулей в знаменателях (если только Луна однажды не упадет на Землю), хотя я не знаю, оправдано ли это.   -  person uhoh    schedule 20.03.2016


Ответы (1)


Skyfield теперь поддерживает метод, возвращающий угловое расстояние между двумя позициями:

http://rhodesmill.org/skyfield/api-position.html#skyfield.positionlib.ICRF.separation_from

person Brandon Rhodes    schedule 31.03.2016