Расчет координат по параметрам базы данных малых тел JPL?

Я хотел бы написать скрипт, который может рассчитать расстояние между двумя астероидами в какой-то момент времени, учитывая какой-то объект в базе данных астероидов и комет JPL , поэтому доступные параметры ограничены меню, которое они там предоставляют. Для этого было бы достаточно просто получить согласованные пространственные координаты для объектов (в любой системе координат, меня не волнует определение системы) в значении времени.

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

Что касается степеней свободы, я в конечном итоге ожидаю 3 функции, которые принимают один входной параметр (время) и дают пространственную координату (x, y, z). Учитывая эту спецификацию задачи, я думаю, нужно 5 свободных параметров. Я говорю это для того, чтобы охватить протяженность по каждой координате, временной сдвиг для этого периода и угловую ориентацию орбитального эллипса. Орбитальный период является избыточным с пространственными данными, так как я знаю GM Солнца, поэтому мне не нужен другой для этого. База данных JPL имеет большое количество параметров с небольшим очевидным значением. Мой вопрос касается их использования. Какие из них мне нужны и как их использовать?

Вот некоторые из наиболее перспективных, мне нужно будет рассортировать их по категориям. Теперь я понимаю, что JED, вероятно, является единицей времени (несложно). Я понимаю, что эпоха, вероятно, является эталонным временем и может понадобиться, но не будет учитываться в моих 5 ожидаемых бесплатных переменных.

связанный со временем

  • tp, время прохождения перигелия, JED
  • эпоха, эпоха оскуляции, JED (не считая)

традиционные параметры орбиты

  • а, большая полуось, а.е.
  • е, эксцентриситет

концепции пространственного смещения

  • i, наклонение, град
  • пери, аргумент перигелия, град
  • узел, долгота восходящего узла, град

Я знаю, что этот вопрос звучит как материал из Википедии/учебника, который я мог бы легко найти. Итак, давайте обратимся к Википедии за их методом расчета координат тела на орбите. Они полагаются на истинную аномалию (или среднюю аномалию) для установки временной начальной точки. JPL, похоже, имеет среднюю аномалию, но я должен что-то упустить для этого метода. Этот параметр относится к местоположению объекта в некоторый момент времени , а параметр (переменная M) не дает никакой точки отсчета для использования. На самом деле моя идея о том, что эпоха является эталонным временем для других параметров, с моей стороны полностью спекуляция. Этот параметр (и только этот параметр) одинаков для всех объектов в базе данных, поэтому я подумал, что такая интерпретация имеет смысл, но могу ошибаться.

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

Как мне проще всего получить кулинарную книгу, чтобы начать писать этот скрипт для получения координат объектов в базе данных?

Заранее спасибо за интерес к такому подробному вопросу.


Позвольте мне занять немного больше места (в уже переполненном вопросе), чтобы ответить на комментарий.

вы просите нас написать главу книги. Это слишком много для вопросов типа вопросов и ответов по стеку обмена.

В этом учебнике будут чрезвычайно короткие главы. Но я понимаю опасность этого вопроса, похожего на «объясните мне орбитальную механику!» потому что это не то, что я имею в виду. Поэтому вместо того, чтобы пытаться выразить это словами, позвольте мне просто выразить это уравнениями.

р знак равно а 1 е 2 1 + е потому что Т А Икс знак равно р ( потому что Н потому что ( Т А + ж ) грех Н грех ( Т А + ж ) ) потому что я Д знак равно р ( грех Н потому что ( Т А + ж ) + потому что Н грех ( Т А + ж ) ) потому что я Z знак равно р грех ( Т А + ж ) грех я

Я только что нашел это в физических формах , и это почти отвечает на мой вопрос, за исключением нескольких проблем с обработкой... если я правильно интерпретировал это. В источнике не было последовательных скобок, но приведенная выше форма соответствует моей математической картине проблемы. Получение ТА также не должно быть трудным, учитывая, что все, что мне нужно, — это решение с поддержкой сценариев . Но я до сих пор не видел формы для ТА, которую явно можно было бы получить с текущим временем.

Здесь должно отсутствовать только одно дополнительное выражение или несколько других подобных деталей. Я хотел бы просто получить какой-нибудь код из инструментария SPICE, который делает то же самое, но его источник, вероятно, состоит из 10 000 строк кода, выполняющих всевозможные не относящиеся к делу вещи. Если приведенные выше уравнения верны, для этого действительно потребуется всего 1 или 2 небольших, лаконичных элемента.

Проще всего, если вы настаиваете на написании сценария вместо простого импорта в готовый пакет, возможно, будет использовать хорошую библиотеку. Если вам подходит Python, я бы посоветовал PyEphem .
@TildalWave Изучаю это. Теперь мой большой вопрос заключается в том, включены ли астероиды из коробки или есть какой-то другой способ получить формат файла XEphem с относительно свежим списком астероидов.
@AlanSE, вы просите нас написать главу книги. Это слишком много для вопросов типа вопросов и ответов по стеку обмена.
На ftp.lowell.edu/pub/elgb/astorb.dat.gz есть файл данных в формате pyephem/ xephem с примерно 1600 астероидами. У меня был некоторый успех с PyEphem, хотя базовая библиотека немного... эксцентрична.

Ответы (2)

Используйте эту страницу , чтобы сгенерировать ядра SPICE для интересующих вас тел, а затем используйте подпрограммы SPICE для расчета всего, что душе угодно.


Ааррр. Я не знаю, зачем ты заново изобретаешь колесо.

Хорошо, цинга, трюмная крыса, вот оно:

Икс знак равно а ( потому что т е )
у знак равно а 1 е 2 грех т
г знак равно 0

Это будет дано вам в самолете. Тогда я буду вращать самолет с преобразованием Эйлера в эту землю. Ом , я , ю (долгота восходящего узла, наклон и аргумент перицентра), умножив его матрицу на ваш вектор:

( потому что ю потому что Ом потому что я грех ю грех Ом потому что Ом грех ю потому что я потому что ю грех Ом грех я грех Ом потому что я потому что Ом грех ю + потому что ю грех Ом потому что я потому что ю потому что Ом грех ю грех Ом потому что Ом грех я грех я грех ю потому что ю грех я потому что я )

Вы также будете нуждаться в это время ( мю будучи й грамм М солнца):

т знак равно а 3 мю ( т е грех т )

Йер т знак равно 0 а также т знак равно 0 в свое время перицентр. Вы видите, что каждый 2 π в т , это будет один оборот вокруг Солнца.

Если ваша цинговая скала приближается к планете, то вы теряете время, так как ее орбита меняется.

Я не знаю, доказывает ли этот ответ, что вы можете писать солидные ответы по орбитальной механике, будучи несколько пьяным в субботу вечером, или мне не хватает какой-то важной культурной ссылки. В любом случае, ЛОЛ :)
Вы будете скучать по нему .
@MarkAdler - Плюс один. Ваш комментарий опоздал на день из-за использования пиратских разговоров, но ваш ответ был точным - особенно о сухопутном лубриканте Эйлере. (Мой комментарий тоже опоздал на день, так что теперь я вернусь к обычному разговору.) Любой пират знает, что правильный способ представить ориентацию — это крен, тангаж и рыскание. Это помогло бы решить обратное уравнение Кеплера к этому ответу (вы знаете т , так как решить для т ?)
Я думал, для этого и нужен ром, чтобы компенсировать крен, тангаж и рыскание :)
!$$SOF
    COMMAND = 'DES=2010 VQ'
    CENTER =  '500@0'
    MAKE_EPHEM = 'YES'
    TABLE_TYPE = 'VECTORS'
    START_TIME = '2017-04-01 00:00:00'
    STOP_TIME = '2017-04-01 00:00:01'
    STEP_SIZE = '1'
    OUT_UNITS =  'AU-D'
    VECT_TABLE =  '3'
    REF_PLANE =  'ECLIPTIC'
    REF_SYSTEM =  'J2000'
    VECT_CORR =  'NONE'
    VEC_LABELS =  'NO'
    CSV_FORMAT =  'YES'
    OBJ_DATA =  'YES'
    !$$EOF

возвращает гелиоцентрические координаты:

$$SOE
2457844.500000000, A.D. 2017-Apr-01 00:00:00.0000,  7.539123579055962E-01,  7.098001692200981E-01,  1.408370538460704E-03, -1.019002972030220E-02,  1.127277705358026E-02,  9.280758228718769E-05,  5.980387083611182E-03,  1.035471924841630E+00,  3.082270281389151E-04,
2457844.500011574, A.D. 2017-Apr-01 00:00:01.0000,  7.539122399654240E-01,  7.098002996920419E-01,  1.408371612622512E-03, -1.019003207292571E-02,  1.127277484368998E-02,  9.280757740530809E-05,  5.980387104214990E-03,  1.035471928409068E+00,  3.082263804494916E-04,
$$EOE

Здесь координаты XYZ выглядят так:

JDTDB,            Calendar Date (TDB),                      X,                      Y,                      Z,                     VX,                     VY,                     VZ,                     LT,                     RG,                     RR,

Другой астероид:

COMMAND = 'DES=2008 LD'
CENTER =  '500@0'
MAKE_EPHEM = 'YES'
TABLE_TYPE = 'VECTORS'
START_TIME = '2017-04-01 00:00:00'
STOP_TIME = '2017-04-01 00:00:01'
STEP_SIZE = '1'
OUT_UNITS =  'AU-D'
VECT_TABLE =  '3'
REF_PLANE =  'ECLIPTIC'
REF_SYSTEM =  'J2000'
VECT_CORR =  'NONE'
VEC_LABELS =  'NO'
CSV_FORMAT =  'YES'
OBJ_DATA =  'YES'
!$$EOF

....
тогда делайsqrt(dx^2+dy^2+dz^2)