pyEphem - Расчет положения не земных лун

Я пытаюсь определить расстояние до Земли и правильное восхождение (относительно точки моего наблюдателя на Земле) спутника, не вращающегося вокруг Земли, но pyEphem не возвращает те же свойства, что и другие солнечные тела.

Например, с Ганимедом (самой большой луной Юпитера):

import math, ephem

Observer = ephem.city('London')
Observer.date = '2013-04-23'
Observer.pressure, Observer.elevation = 0, 100

moonGanymede = ephem.Ganymede(Observer)

print math.cos(moonGanymede.ra) # right ascension
print moonGanymede.earth_distance * ephem.meters_per_au # distance

Я получаю эту ошибку:

AttributeError: 'Ganymede' object has no attribute 'earth_distance'

ra атрибут существует, но это относительно моего Observer или на юпитер?

Кажется, относительно Observer , поскольку, если я изменю местоположение, значение тоже изменится.

Я прочитал документацию и знаю, что эти свойства не определены для лун, но я понятия не имею, как рассчитать их относительно Земли, учитывая дополнительные определенные свойства лунных тел:

На планетных лунах также устанавливает:

Положение Луны относительно планеты (измеряется в радиусах планеты)

x — offset +east or –west
y — offset +south or –north
z — offset +front or –behind

Выполнение:

print moonGanymede.x, moonGanymede.y, moonGanymede.z

Выходы:

-14.8928060532 1.52614057064 -0.37974858284

Поскольку средний радиус Юпитера составляет 69173 километра, эти значения переводятся в:

moonGanymede.x = 1030200 kilometers (west)
moonGanymede.y = 105570 kilometers (south)
moonGanymede.z = 26268 kilometers (behind)

Учитывая, что я знаю расстояние и прямое восхождение Юпитера относительно Observer как рассчитать расстояние и прямое восхождение moonGanymede (также относительно Observer )

Я использую pyEphem 3.7.5.1 (с Python 2.7).

3 ответа

Решение

Я все еще пытаюсь выяснить это (если кто-то замечает что-то, пожалуйста, сообщите), но, кажется, если я сделаю это:

sqrt((-14.8928060532)^2 + (1.52614057064)^2 + (-0.37974858284)^2) = 14.9756130481

Я всегда получаю значение, которое всегда находится в пределах минимального / максимального расстояния от центра орбиты (14,95 - 14,99).

Поскольку это указано в радиусах центра орбиты, мне нужно умножить его на 69173 * 1000, чтобы получить единицу СИ:

14.9756130481 * 69173 * 1000 = 1.0359080813762213 * 10^9 meters

Поскольку pyEphem имеет дело с расстояниями с AU:

print (1.0359080813762213 * 10**9) / ephem.meters_per_au # 0.00692461785302

В то же время расстояние Земля-Юпитер было 5.79160547256 AU.

Теперь, чтобы получить расстояние, я должен либо добавить, либо вычесть в зависимости от знака z координата:

5.79160547256 - 0.00692461785302 = 5.78468085470698 AU

Выполнение того же кода на сегодня (сейчас) возвращает 6.03799937821 что, кажется, очень близко к значению 6.031 То, что WolframAlpha возвращается в настоящее время, не соответствует 100%, но, возможно, это может быть объяснено какой-то другой базовой эфемеридной библиотекой или источником данных. Точно сказать не могу...

Просто некоторые мысли; Вам, вероятно, нужно сделать это в два этапа.

  1. Получить местоположение спутника относительно родительской планеты
  2. Получить местоположение планеты относительно наблюдателя
  3. Тригонометрический расчет; получить местоположение спутника относительно наблюдателя.

Вы уже сделали 1, и можете легко сделать 2. Преобразуйте все значения в x,y,z и добавьте затем обратно в угловую. Или я уверен, что вы / Ephym можете сделать это для вас напрямую.

НТН

Похоже, что правильное восхождение, склонение, азимут и т. Д. Вычислены правильно:

In [31]: g = ephem.Ganymede(Observer)

In [32]: j = ephem.Jupiter(Observer)

In [33]: g.ra, g.az, g.dec
Out[33]: (1.3024204969406128, 5.586287021636963, 0.38997682929039)

In [34]: j.ra, j.az, j.dec
Out[34]: (1.303646765055829, 5.5853118896484375, 0.39010250333236757)

Значения для Ганимеда и Юпитера достаточно близки, похоже, вы получаете правильные результаты для всего, кроме расстояния до объекта.

Другие вопросы по тегам