Функция для текущего расстояния в световых секундах между Марсом и Землей

Я ищу функцию, которая с учетом времени (например, времени Unix ) возвращает текущее расстояние между Марсом и Землей в световых секундах.

Это может быть математическая функция или функция программирования (предпочтительно на Python или псевдокоде), но она не должна зависеть от подключения к Интернету.

Этот вопрос похож на вопрос, который я задавал ранее , но мне снова нужно получить расстояние без подключения к Интернету.

Заранее спасибо!

Примечание: я планирую изучать орбитальную механику, но эта функция мне нужна раньше. :)

Ответы (2)

Нет простой функции, которая была бы точной. И Земля, и Марс вращаются по эллипсам (первый закон Кеплера). Они движутся с разной скоростью (секунда Кеплера). Чтобы найти текущее расстояние между ними, вы должны вычислить их положение в трех измерениях.

Другими словами, вы должны сделать орбитальную кинематику. Как рассчитать положение объектов на орбите?

Если точность не важна. Вы можете аппроксимировать орбиты кругами в одной плоскости. Тогда положение Земли

( потому что ( 2 π т + α ) , грех ( 2 π т + α ) )
и Марс
( 1,5 потому что ( 2 π т / 1,882 + β ) , 1,5 грех ( 2 π т / 1,882 + β ) )

Расстояние между ними рассчитывается по Пифагору

Расстояния указаны в а.е., а время в годах (тогда легко преобразовать в световые секунды). α и β - константы, выбранные для соответствия положениям планет в момент времени 0. Значения 1,5 и 1,882 выбраны потому, что орбита Марса примерно в 1,5 раза больше, чем Земля, а марсианский год в 1,882 раза длиннее, чем земной.

Круговая аппроксимация, однако, плоха для Марса, и при этом игнорируется тот факт, что Марс не находится точно в той же орбитальной плоскости, что и Земля, поэтому значения будут весьма приблизительными.

Спасибо! Два вопроса, когда (какая дата) т знак равно 0 и что это за единица т ? Каков максимальный процент ошибок? Заранее спасибо.

примечание. Это ответ типа «расширенный комментарий», в котором рассматриваются два потенциальных решения, которые могут быть не совсем тем, что вам нужно, но близки.

Вещь, которая дает вам информацию о положении вещей в Солнечной системе в определенное время, называется эфемеридой .

Первоначально это были таблицы предсказаний (прошлого и будущего), основанные на расчетах. Ко времени Ньютона они стали довольно хорошими, так как Ньютон разработал метод итеративного решения уравнения Кеплера (например , метод Ньютона ). См. вопрос Как это сделали Ньютон и Кеплер (на самом деле)? и ответы там для немного больше фона.

  1. Пакет Python PyEphem существует и хорошо поддерживается, и является реинкарнацией XEphem на языке python . Я им не пользовался, но считаю, что он хранит достаточно информации об орбитальных параметрах в определенные эпохи для создания эфемерид, включая некоторые гравитационные возмущения. Другими словами, это гораздо больше, чем планеты, движущиеся по фиксированным эллиптическим орбитам вокруг неподвижного солнца. Поэтому я считаю, что он работает без подключения к Интернету.

  2. Я никогда не использовал его, потому что мне рекомендовали посмотреть Skyfield , и это именно то, что мне было нужно. Он загружает стандартные эфемериды JPL, которые вы выбираете, а затем просто использует их с вашего жесткого диска. Однако, чтобы иметь дело с секундами координации и другими эффектами, связанными со временем , время от времени необходимо проверять Интернет на наличие обновлений информации о секундах координации, поскольку они произвольны.

Я не знаю, есть ли в Skyfield способ избежать этого. На самом деле это хороший вопрос. Если вы работаете со шкалой времени, в которой нет високосных секунд, я не уверен, будет ли она работать в текущей версии.

Пакеты Skyfield и PyEphem Python написаны и поддерживаются @BrandonRhodes.

Если вы можете позволить время от времени подключаться к Интернету (скажем, каждый месяц или несколько месяцев), то Skyfield чрезвычайно прост в использовании. Например, вот сценарий, который я использовал в этом ответе . Если вы хотите преобразовать форматы времени из системного времени, вы можете выполнить поиск моих вопросов в stackoverflow и исследовании пространства. Если вы хотите, чтобы системное время вашего локального компьютера теперь использовалось t = ts.now()напрямую вместо utc.

import numpy as np
import matplotlib.pyplot as plt

from skyfield.api import load

data   = load('de421.bsp')
ts     = load.timescale()
t      = ts.utc(2016, 7, 5, 9, 50, 0)

jupiter, earth  = data['Jupiter barycenter'], data['Earth']
jpos, epos      = jupiter.at(t).position.km, earth.at(t).position.km
d_instantaneous = np.sqrt(((jpos - epos)**2).sum())

d_light = earth.at(t).observe(jupiter).distance().km  # where WAS Jupiter 48 minutes ago?

clight = 299792.458  # km/s

print "d_instantaneous / c = ", d_instantaneous/clight
print "d_light / c =         ", d_light/clight
Обратите внимание, что вы также можете использовать эфемериды напрямую, используя CSPICE ( naif.jpl.nasa.gov/naif/tutorials.html ) или даже через функции Perl, которые я написал (дешевый плагин). См. github.com/barrycarter/bcapps/blob/master/ASTRO/README.bsp и другие файлы в этом каталоге.
@barrycarter Хотя в вопросе не упоминается «Python или псевдокод», это определенно то место, где можно найти настоящий исходный код!
примечание: я спрашивал о долгосрочном автономном использовании Skyfield здесь: https://github.com/skyfielders/python-skyfield/issues/105 .
... и, конечно же, замените jupiter = data['Jupiter barycenter']на mars = data['Mars barycenter']Марс, если хотите :-)