Солнечная долгота от pyephem?

Я пытаюсь определить, когда сезоны начинаются и заканчиваются на Марсе. Эта точка находится на 0º, 90º, 180º и 270º южной широты (солнечной долготы).

PyEphem предлагает гелиоцентрическую долготу и широту. Как это может быть соотнесено с солнечной долготой, отображаемой здесь:

http://www.planetary.org/explore/space-topics/mars/mars-calendar.html


person rtphokie    schedule 28.08.2014    source источник


Ответы (1)


Я думаю, что эти две величины представляют собой один и тот же угол, но измеренный из разных исходных точек. Используя это предположение, вы можете использовать PyEphem для предсказания марсианских сезонов с точностью до двух или трех дней — но я действительно ожидал лучшего, и я не уверен, почему соглашение не ближе!

Но это, по крайней мере, поможет вам начать. Пожалуйста, дайте нам знать, если вы обнаружите, почему эти прогнозы немного отличаются от прогнозов сайта, на который вы ссылаетесь! В какой-то момент мы должны сравнить их с результатами NASA Horizons и проекта Skyfield, который я разрабатываю как улучшенный PyEphem.

В любом случае, некоторый код для вычисления Ls и использования его для нахождения марсианских времен года:

# The angle that we call "the longitude of the Sun, as
# seen from Mars" should grow at the same rate as the
# "longitude of Mars as seen from the Sun" (since the
# two are the same line but viewed in opposite
# directions).
#
# The only problem is knowing what point to name "zero",
# so we have to learn what .hlon was when the first
# Martian year started:

from ephem import Mars, Date, degrees, newton
m = Mars()
m.compute('1955/4/11 23:00')
Ls0 = m.hlon

def Ls(date):
    m.compute(date)
    return degrees(m.hlon - Ls0).norm

# There!  Ls() should give Martian solar latitude.
# So the first round of seasons listed at the page
# http://www.planetary.org/explore/space-topics/mars/mars-calendar.html
# should give 90 degrees, 180 degrees, and 270 degrees:

for date in '1955/10/27', '1956/4/27', '1956/9/21':
    print Ls(date)

# The output is close to what we would expect:
#
# 90:11:58.3
# 179:57:32.2
# 270:13:22.6
#
# Great!  So what if we want to know, say, the date
# of the upcoming Spring Equinox or Summer Solstice?
# We need functions that are smooth, well-behaved,
# and cross zero at those two times, so that we can
# unleash Newton's Method upon them:

def spring_equinox(date):
    return Ls(date).znorm

def summer_solstice(date):
    return Ls(date) - degrees('90:00:00')

def find_spring_equinox(start_date):
    start_date = Date(start_date)
    y0 = Ls(start_date)
    y1 = Ls(start_date + 1)
    rate = y1 - y0
    angle_to_go = degrees(0.0 - y0).norm
    closer_date = start_date + angle_to_go / rate
    d = newton(spring_equinox, closer_date, closer_date + 1)
    return Date(d)

def find_summer_solstice(start_date):
    start_date = Date(start_date)
    y0 = Ls(start_date)
    y1 = Ls(start_date + 1)
    rate = y1 - y0
    angle_to_go = degrees(degrees('90:00:00') - y0).norm
    closer_date = start_date + angle_to_go / rate
    d = newton(summer_solstice, closer_date, closer_date + 1)
    return Date(d)

d = find_spring_equinox('2015/1/22')
print d, Ls(d)

d = find_summer_solstice('2015/1/22')
print d, Ls(d)

# Output:
# 2015/6/16 15:03:15 0:00:00.0
# 2015/12/31 21:12:07 90:00:00.0
person Brandon Rhodes    schedule 22.01.2015