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. Преобразуйте все значения в 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)
Значения для Ганимеда и Юпитера достаточно близки, похоже, вы получаете правильные результаты для всего, кроме расстояния до объекта.