A A A A Автор Тема: Помогите разобраться с алгоритмом SGP4 и координатами TLE  (Прочитано 6398 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн WhitefootАвтор темы

  • Новичок
  • *
  • Сообщений: 5
  • Благодарностей: 0
    • Skype - gl-whitefoot@rambler.ru
    • Сообщения от Whitefoot
Здравствуйте!
Буду очень благодарен, если поможете, дадите совет, укажете в каком направлении двигаться в решении следующей проблемы.
У меня есть задание построить систему, которая будет в режиме реального времени отображать в 3D движение спутника вокруг земли. На данный момент имеется сам трехмерный движок, который позволяет отображать Землю и спутник, ранее подготовленные в трехмерном редакторе. Движок использует декартову систему координат. За точку (0;0;0) берется центр земли. Необходимо создать модуль, который будет просчитывать координаты спутника для того, чтобы их можно было применять для визуализации движения спутника. Так же учитывается, что земля вращается и для расчета зоны освещенности вокруг земли должно вращаться Солнце(шар с источником света). Необходимо, чтобы система могла не только моделировать движение в реальном времени, но и могла также осуществлять моделирование на заданном промежутке времени(например, если необходимо смоделировать, что будет с КА через год).
Для решения задачи расчета координат я решил использовать алгоритм SGP4 скаченный вот здесь(http://www.centerforspace.com/downloads/files/sgp4/AIAA-2006-6753Code.zip).
Проблема в том, что он считает координаты на заданное время, а мне необходимо, чтобы алгоритм рассчитывал координаты в режиме реального времени, чтобы можно было наблюдать движение спутника. Задача решается на Visual Studio C++ 2005.
Так же не совсем понятно как он определяет дату. В TLE юлианская дата. Если посчитать ее например на текущий день, то алгоритм в конце выводит абсолютно другую дату в другом тысячелетии. Помогите пожалуйста разобраться с этой проблемой и правильно настроить алгоритм SGP для того, чтобы система могла адекватно отображать движение спутника.
« Последнее редактирование: 30 Ноя 2009 [02:35:39] от Whitefoot »

Оффлайн Ink

  • ****
  • Сообщений: 430
  • Благодарностей: 10
    • Сообщения от Ink
Проблема в том, что он считает координаты на заданное время, а мне необходимо, чтобы алгоритм рассчитывал координаты в режиме реального времени, чтобы можно было наблюдать движение спутника. Задача решается на Visual Studio C++ 2005.
Ну так задавайте текущее время :)

Так же не совсем понятно как он определяет дату. В TLE юлианская дата. Если посчитать ее например на текущий день, то алгоритм в конце выводит абсолютно другую дату в другом тысячелетии.

Каким образом вы считаете?

Оффлайн Ink

  • ****
  • Сообщений: 430
  • Благодарностей: 10
    • Сообщения от Ink
Так же не совсем понятно как он определяет дату. В TLE юлианская дата. Если посчитать ее например на текущий день, то алгоритм в конце выводит абсолютно другую дату в другом тысячелетии. Помогите пожалуйста разобраться с этой проблемой и правильно настроить алгоритм SGP для того, чтобы система могла адекватно отображать движение спутника.
Если что, в функции sgp третий аргумет tsince -- это не юлианское время, а "time eince epoch (minutes)".

Оффлайн WhitefootАвтор темы

  • Новичок
  • *
  • Сообщений: 5
  • Благодарностей: 0
    • Skype - gl-whitefoot@rambler.ru
    • Сообщения от Whitefoot
Я не уверен, что правильно ее считаю, но вот,например, конвертер http://aa.usno.navy.mil/data/docs/JulianDate.php если там конвертировать следующую дату 2009 November 30 12:30:30.0, то получается вот, что JD 2455166.02118, подставив их вот сюда
1 26056U 00002A   2455166.02118  .00000088  00000-0  10000-3 0  4865
2 26056 000.5746 083.1707 0002318 142.0726 134.7604 00.99643563 32538,
используя готовый SGP4, получим следующее ScenarioEpoch 13 Jan 2175  0:30:29.952013493
Может быть я не правильно уловил суть? Может быть не туда подставляю? Или конвертировать надо другим способом?

Оффлайн Ink

  • ****
  • Сообщений: 430
  • Благодарностей: 10
    • Сообщения от Ink
Так делать нельзя!

Во-первых, третье поле, которое вы подменили, имеет совсем другой формат.  Например, если в поле записано 09326.70572066, то 09 -- это год, а 326.70572066 -- это время от начала года в сутках.  И эта дата называется эпохой.

Во-вторых, запись изменять вообще нельзя; если вам нужно посчитать для конкретного времени, то в третий аргумент фунции sgp4 нужно передать разницу между эпохой и текущим временем в минутах.

Оффлайн Acrux

  • ****
  • Сообщений: 363
  • Благодарностей: 39
  • Eppur si Muove!
    • DeepSkyHosting: AlexanderKrutov
    • Сообщения от Acrux
    • Astrarium — бесплатный open-source планетарий для Windows
Хорошее описание TLE формата есть тут: http://space.kursknet.ru/ts_kelso/russian/v04n03/v04n03.sht (на русском).
Если нужен оригинал: http://celestrak.com/columns/v04n03/
Astrarium — бесплатный open-source планетарий для Windows

SW SkyMax 127, SW BKP1145, Svbony SV48, Nikon Aculon A211 7x35
SW AZ5 HD, SW AZ-GTi
Svbony SV105, SV305

Оффлайн WhitefootАвтор темы

  • Новичок
  • *
  • Сообщений: 5
  • Благодарностей: 0
    • Skype - gl-whitefoot@rambler.ru
    • Сообщения от Whitefoot
 ::)Спасибо
У меня тоже было такое подозрение, что не так делаю ;D
Не судите строго, просто столкнулся с этим недавно, потому в этом вопросе плохо разбираюсь  :) А у Вас нет подробного описания как работать с этим SGP?

Оффлайн WhitefootАвтор темы

  • Новичок
  • *
  • Сообщений: 5
  • Благодарностей: 0
    • Skype - gl-whitefoot@rambler.ru
    • Сообщения от Whitefoot
Хорошее описание TLE формата есть тут: http://space.kursknet.ru/ts_kelso/russian/v04n03/v04n03.sht (на русском).
Если нужен оригинал: http://celestrak.com/columns/v04n03/

Спасибо  :)

Оффлайн ko4

  • Новичок
  • *
  • Сообщений: 2
  • Благодарностей: 0
    • Сообщения от ko4
Whitefoot,
А для чего программа 3D отображения, если не секрет? Было бы интересно глянуть на результат.

Оффлайн WhitefootАвтор темы

  • Новичок
  • *
  • Сообщений: 5
  • Благодарностей: 0
    • Skype - gl-whitefoot@rambler.ru
    • Сообщения от Whitefoot
Конечно не секрет :) Просто это часть моей дипломной работы. Результат с огромным удовольствием покажу, только надо сначала его добиться   :) И еще , может быть знает кто-нибудь формулы перевода григорианской даты в юлианскую с учетом времени суток? Необходимо для расчета эфемерид солнца

Оффлайн Ink

  • ****
  • Сообщений: 430
  • Благодарностей: 10
    • Сообщения от Ink
Время суток просто приплюсовывается.  Юлианская дата -- это действительное число.
Найдите книгу "Астрономия на домашнем персональном компьютере" или что-нибудь в этом роде.
« Последнее редактирование: 30 Ноя 2009 [18:03:21] от Ink »

Оффлайн 1212Lupus

  • *****
  • Сообщений: 3 094
  • Благодарностей: 196
  • Мне стал не очень нравиться этот форум...
    • Сообщения от 1212Lupus
    • http://belastro.net
И еще , может быть знает кто-нибудь формулы перевода григорианской даты в юлианскую с учетом времени суток? Необходимо для расчета эфемерид солнца
О. Монтенбрук , Т. Пфлегер "Астрономия с персональным компьютером" вам в поможет.
Радиоастрономы-любители -- объединяемся!


Если утро наступает в три -
Через два часа уже зажгут фонари.
Уже кончился день, а я только встал,
А я только что встал и уже устал.
(с) НОЛЬ

Оффлайн ko4

  • Новичок
  • *
  • Сообщений: 2
  • Благодарностей: 0
    • Сообщения от ko4
Во-первых, третье поле, которое вы подменили, имеет совсем другой формат.  Например, если в поле записано 09326.70572066, то 09 -- это год, а 326.70572066 -- это время от начала года в сутках.  И эта дата называется эпохой.
Обращаю внимание, что 326.70572066 - это не время от начала года в сутках!!! Время от начала года в данном случае будет 325.70572066, т.е. на 1 сутки меньше!!! Так происходит из-за того, что для TLE наборов 1 января считается первым днем года, а не нулевым. Т.е. третье поле вида 09001.50000000 будет означать 12:00 1 января 2009 года. Поэтому же нельзя встретить TLE с датой 000.хххххххх.

Оффлайн Ink

  • ****
  • Сообщений: 430
  • Благодарностей: 10
    • Сообщения от Ink
Ценное замечание, спасибо.