Как построить эту орбиту?

У меня есть эти данные для некоторых орбит без каких-либо объяснений значения каждого элемента данных:

{
  "objects": [
    {
      "name": "Earth",
      "id": "solar.planet.earth",
      "elements": {
        "q": 0.98322073104899
        "a": 0.99920537923658
        "node": 207.00538100359,
        "e": 0.0159973600220234 
        "peri": 256.950444448438,
        "incl": 0.0038067895470298  
        "T": 2459218.90577274
      },
      "position": {
        "y": 0.9297659392321,
        "z": -4.515675204152e-05,
        "x": 0.3275590103186
      }
    },
    {
      "position": {
        "z": 0.06029318307615,
        "x": -0.4584994822692,
        "y": 1.094698818492
      },
      "elements": {
        "q": 0.806176191073582,
        "a": 1.0323483836211,
        "node": 75.5720068963318,
        "e": 0.219085142318127,
        "incl": 4.80809622578363,
        "peri": 179.397909345983,
        "T": 2459318.63483092
      },
      "id": "solar.minorplanet.98943",
      "name": "2001 CC21"
    },
    {
      "name": "1998 KY26",
      "id": "solar.minorplanet.1998KY26",
      "elements": {
        "T": 2459001.17727408,
        "incl": 1.48102189788285,
        "peri": 209.372033608463,
        "e": 0.201828518064676,
        "node": 84.3664587661475,
        "a": 1.23285180453922,
        "q": 0.984027151835704
      },
      "position": {
        "y": 1.407810076987,
        "z": -0.002082322485705,
        "x": 0.2198001273522
      }
    },
    {
      "name": "Hayabusa 2",
      "id": "solar.spacecraft.hayabusa2",
      "elements": {
        "T": 2459212.01173911,
        "incl": 5.99763881195244,
        "peri": 205.214139025915,
        "e": 0.187058473659886,
        "node": 253.856900249799,
        "q": 0.970678629676518,
        "a": 1.19403253275367
      },
      "position": {
        "z": 0.006301058519122,
        "x": 0.3323137692169,
        "y": 0.932379875888
      }
    }
  ],
  "TT": 2459186.10708546,
  "UTC": "2020-12-02T14:33:03"
}

Я пытаюсь построить их в 3D в этом JSFiddle , но я действую случайным образом.... кто-нибудь может помочь?

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

Допустимые значения для библиотеки spacekit :

  • initialValues.a Большая полуось

  • InitialValues.e Эксцентриситет

  • InitialValues.i Наклон

  • initialValues.epoch Эпоха в JD

  • initialValues.period Период в днях

  • initialValues.ma Средняя аномалия

  • initialValues.n Среднее движение

  • initialValues.L Средняя долгота

  • initialValues.om Долгота восходящего узла

  • initialValues.w Аргумент перигелия

  • initialValues.wBar Долгота перигелия

Хорошо для incl , peri и node , я могу предположить для «a» (initialValues.a — большая полуось), «e» (initialValues.e — эксцентриситет), но как насчет «q» и «peri»?

  • initialValues.a Большая полуось ---> "a"

  • InitialValues.e Эксцентриситет ---> "e"

  • InitialValues.i Наклон ---> "incl"

  • initialValues.epoch Эпоха в JD ---> "T"

  • initialValues.period Период в днях --->?

  • initialValues.ma Средняя аномалия --->?

  • initialValues.n Среднее движение --->?

  • initialValues.L Средняя долгота --->?

  • initialValues.om Долгота восходящего узла ---> "узел"

  • initialValues.w Аргумент перигелия ---> "peri"?

  • initialValues.wBar Долгота перигелия ---> "peri"?

Я также получил данные NASA Horizons for Earth, чтобы сравнить их с доступными, но я все равно не могу понять, чему соответствуют «q» и «peri»:

  • JD 2459218.905775463,
  • AD 2021-Jan-04 09:44:19.0000,
  • EC Эксцентриситет, e 0,01637
  • QR Перицентр, q (км) 147092887 км
  • IN Наклон относительно плоскости XY, i (градусы) 0,00285
  • OM Долгота восходящего узла, OMEGA, (градусы) 177
  • W Аргумент перифокуса, w (градусы) 284,4
  • Tp Время перицентра (юлианское число суток) 2459216 км
  • N Среднее движение, n (град/с) 0,0001141
  • МА Средняя аномалия, М (градусы) 2,15
  • ТА Истинная аномалия, ню (градусы) 2,22
  • Большая полуось, а (км) 149541385 км
  • Расстояние до апоцентра нашей эры (км) 151989883 км
  • PR Звездный период обращения (сек) 31540276 км

  • "q": 0,98322073104899, расстояние до перицентра, q (AU) = 147087727 км
  • "a": 0,99920537923658, большая полуось, a (AU) = 149478997 км
  • "узел": 207.00538100359,
  • "e": 0,0159973600220234, Эксцентриситет, e
  • "пери": 256.950444448438,
  • "incl": 0,0038067895470298, наклон относительно плоскости XY, i (градусы)
  • «Т»: 2459218.90577274
Вы можете сделать 3 2D-графика, плоскости xy, yz и xz. Но вы можете определить другие наклонные плоскости, не параллельные осям x, y и z.
Действуя случайным образом, я обновил свой JSFiddle, назначив «q» и «peri» для «Среднего аномалия» и «Аргумента перигелия»… кто знает, правильно ли это?? jsfiddle.net/spaceexplorer2020/6cqdLhzj/20
похоже, что предоставлены избыточные данные: используя формулу, предложенную в ответе @Ryan C для перицентрального расстояния ( =a(1-e) ), я получаю для hayabusa: 1.19403253275367 * (1-0.187058473659886 ) = 0,9706786296765 20 , что равно очень близко к значению, указанному как "q" ( 0.9706786296765 18 )

Ответы (3)

Работа в процессе, будут новые цифры.

Я взял данные об орбите Хаябусы-2, чтобы нарисовать пурпурный эллипс. Я использовал ось initialValues.a Semimajor и initialValues.e Excentricity . Две красные точки — фокусы эллипса.

Синяя точка — это единственное положение Hayabusa2, которое мы получили, только x и y были использованы.

Солнце находится в центре x = 0 и y = 0, конечно, там тоже есть одна точка фокусировки.

Затем я повернул эллипс на угол node": 253,856900249799 , чтобы получить зеленый угол. Единственное положение Хаябусы (синяя точка) теперь находится на повернутом эллипсе, а не на пурпурном эллипсе.

введите описание изображения здесь

Я добавил оси, линии пурпурного цвета — это оси эллипса (тоже пурпурного), выровненные по системе координат. Зеленые линии — это повернутые оси, принадлежащие зеленому эллипсу. Маркеры «x» пурпурного цвета — это фокусы невращающегося эллипса. Маркер x в начале координат также является одним из фокусов зеленого повернутого эллипса. Черная дуга показывает угол узла. Я добавил некоторые аннотации.

введите описание изображения здесь

На следующем шаге эта 2D-плоскость должна быть вставлена ​​в 3D-график. Солнце должно быть в центре 2D и 3D графика. Hayabusa2 должен находиться в заданной позиции xyz. " incl": 0,0038067895470298, наклон относительно плоскости XY, i (градусы) тоже должны быть правильными.

Но нам нужно 3 точки, чтобы определить правильную ориентацию плоскости. Мы можем посмотреть, можно ли использовать орбиту Земли для получения дополнительной информации. Но у нас должно быть время, когда и Земля, и Хаябуса находятся в одном месте. Само по себе пересечение земной орбиты не поможет, когда Земля находится далеко от той точки, где находится Хаябуса. Два небольших тела также должны быть близки к орбите Хаябусы.

введите описание изображения здесь

3D-график, включающий приведенный выше 2D-график.

внимательно ответьте на вопрос: «Я пытаюсь построить это в этом JSFiddle» (это javascript, вы ответили на python) и «я все равно не могу понять, чему соответствуют «q» и «peri»:» (и вы не не упоминать "q" и "peri")
кроме того, "solar.spacecraft.hayabusa2" - это не планета, и вы загружаете данные о планетах из файла de421.bsp, а не из моего файла.
Мне не нужны данные из других источников, мне нужно построить данные, указанные в моем вопросе.
похоже, что решения этой проблемы нет из-за отсутствия данных (на самом деле у нас есть только 5 элементов орбиты, поэтому орбиты можно отображать только в 2d, см. мой ответ)
рисование также осей эллипсов помогло бы немного понять метод, который вы использовали.
Построение осей — очень хорошая идея, я сделаю это дальше.
У нас есть два разных времени в доступных данных: глобальное «TT» и «T» для каждого объекта; Я не знаю, почему их два и как их использовать; насколько я понимаю, время объекта предоставляется, чтобы знать, когда объекты расположены в позиции x, y, z, но я не понимаю, что означает «TT».
Разница между "Т": 2459212.01173911, "ТТ": 2459186.10708546, не маленькая, 26 дней. Это юлианские даты, используемые в астрономических расчетах, см. Википедию . Разница 0,25 составляет 6 часов.
Очевидно, что это юлианские даты... но юлианские даты чего?

Вам нужно немного узнать о многих способах представления данных об орбитах, начиная с базового руководства, такого как https://en.wikipedia.org/wiki/Orbital_elements .

Одна из важных вещей, которую следует иметь в виду, состоит в том, что из этого набора может быть не более шести независимых чисел, но не все шесть могут быть выбраны. Если вы введете слишком много значений, все пойдет не так, потому что они не будут согласовываться друг с другом. Например, если у вас есть большая полуось а и эксцентриситет е , то по определению расстояние перицентра равно а ( 1 е ) а расстояние в апоапсисе равно а ( 1 + е ) , поэтому укажите не более двух из этих четырех, иначе вы создадите проблемы. Точно так же среднее движение, период и большая полуось дублируют друг друга, если вы знаете, вокруг какого тела вращается (поскольку преобразование включает его массу). Истинная аномалия, средняя аномалия и время, прошедшее с момента прохождения перигея, или другая эталонная эпоха — это еще один набор, из которого вы должны выбрать не более одного в качестве входных данных.

Традиционный порядок элементов кеплеровской орбиты - большая полуось. а , эксцентриситет е , наклон я , прямое восхождение восходящего узла (RAAN) Ом , аргумент перицентра ю , и истинная аномалия ν . Имейте в виду, что некоторые из этих определений не работают, если другие принимают определенные значения. Например, если наклон точно равен нулю, то нет восходящего узла, поэтому он не имеет Ом , но это по-прежнему однозначно определяет плоскость орбиты. Точно так же, если эксцентриситет точно равен нулю, перицентр отсутствует (все точки находятся на одинаковом расстоянии от центра, потому что эллипс с е "=" 0 это круг), поэтому вам нужно определить ϖ скорее, чем ю сказать, с чего начать измерения ν "=" 0 .

это интересное объяснение, но не ответ на мой вопрос.

Похоже, что ответа на этот вопрос не существует: имеющихся данных недостаточно для построения трехмерной орбиты. Хотя на первый взгляд существует 6 орбитальных элементов, на самом деле их всего 5; действительно предоставлены эти три данных:

 - "e": 0.187058473659886
 - "a": 1.19403253275367
 - "q": 0.970678629676518

Но:

 periapsis distance = a * ( 1 - e) = 1.19403253275367 * (1 - 0.187058473659886 ) 
 = 0,970678629676520

Итак, на самом деле у нас есть только 5 элементов орбиты:

 - "incl": 5.99763881195244,
 - "peri": 205.214139025915,
 - "e": 0.187058473659886,
 - "node": 253.856900249799,
 - ("q": 0.970678629676518,)  <<<====== can be calculated from a and e
 - "a": 1.19403253275367

Их недостаточно для построения трехмерной орбиты; исходная страница, использующая эти данные, отображает орбиты только в формате 2d; путем обратного проектирования исходного кода мы видим, что параметр «q» вообще не используется:


key: "calcEllipse",    
value: function calcEllipse(object) {


////// "a" and "e"//////
var cx = -factor * object.elements.a * object.elements.e;     
var cy = 0;    
var rx = factor * object.elements.a;    
var ry = factor * object.elements.a * Math.sqrt(1 - Math.pow(object.elements.e, 2));    


////// "node", "incl" and "peri" //////
var transform = "\n              rotate(".concat(-1.0 * object.elements.node, ")\n    
scale(1.0, ").concat(Math.cos(object.elements.incl / 180 * Math.PI), ")\n    
rotate(").concat(-1.0 * object.elements.peri, ")");  
return {    
cx: cx,    
cy: cy,    
rx: rx,    
ry: ry,   
transform: transform

Передача всего 5 параметров в библиотеку spacekit.js приводит к ошибке:

NaN position value - you may have bad or incomplete data in the following ephemeris:` 
a: 0.937550412197935, 
e: 0.140879661549663, 
i: 0.0748349916816544, 
om: 1.2865260962475196,
w: 2.0673222342313817`
Было немного тяжело читать. Я улучшил форматирование.
Я не использовал «форматирование кода» по одной причине: потому что оно не позволяет использовать жирный шрифт для текста; просто добавив «форматирование кода», вы вызвали небольшой беспорядок из-за блуждающих звездочек здесь и там ... Мне пришлось удалить их и заменить комментариями, которых нет в исходном коде.
Разница между двумя числами "q": 0,970 678 629 676 518 и расстоянием перицентра = 0,970 678 629 676 520, я думаю, не проблема. 64-битные числа двойной точности с плавающей запятой имеют точность от 15 до 17 значащих десятичных цифр. Таким образом, разница в 0,000 000 000 000 002 допустима.
@Uwe Конечно, это не проблема: вот почему я написал, что на самом деле у нас 5, а не 6 параметров: потому что предоставленный q бесполезен , так как мы можем вычислить его из a и e .
@jumpjack, хотя это может не решить проблему с «жирным шрифтом» для текста, может быть, добавить ответ на « Активировать подсветку с учетом языка» для блоков кода / скрипта? в мете и голосовать везде, если вы думаете, что это хорошая идея?