Алгоритм Превращение полных дат наблюдений в Юлианские дни и доли суток
1. Скорректируем номер года и номер месяца
Если Month меньше или равен 2 тогда делаем следующее:
· Прибавим к номеру месяца 12
(C_Month = Month + 12)
· Отнимем от номера года 1
( C_Year = Year -1)
Иначе
· C _ Month = Month
· C_Year = Year
Конец Если
4. Вычислим поправку к Григорианскому календарю
· 
5. Вычисляем модифицированный Юлианский день на полночь рассматриваемой даты
· 
4. Вычислим “Нулевой” модифицированный Юлианский день рассматриваемой даты
· 
5. Вычисляем "НУЛЕВОЙ" Юлианский день месяца
· 
6. Определяем введенное время в часах
· 
7. Определяем введенное время в долях суток
·
8. Определяем модифицированный Юлианский день
·
9. Определяем Юлианский день
·
10. Определяем число юлианских столетий, отделяющих эпоху от
полудня 1 января 2000 года
·
Пример Превращение полных дат наблюдений в Юлианские дни и доли суток
Возьмем для примера дату 1986 года, СЕНТЯБРЯ 3, 03 h 40 m UT, которую мы рассматривали ранее, и, пользуясь Алгоритмом Превращения полных дат наблюдений в Юлианские дни и доли суток, вычислим юлианский день этой даты.
Для начала составим таблицу и занесем в нее известные данные.
Исходная таблица
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | ||
| C_Month | ||
| b | ||
| ||
| MJD_0 | ||
| JD_0 | ||
| ||
| FracOfDay | ||
| MJD | ||
| JD | ||
| T |
1. Скорректируем номер года и номер месяца
Так как Month > 2 то
· C _ Month = Month = 9
· C_Year = Year = 1986
Занесем результат в таблицу
Таблица 1
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | ||
| ||
| MJD_0 | ||
| JD_0 | ||
| ||
| FracOfDay | ||
| MJD | ||
| JD | ||
| T |
2. Вычислим поправку к Григорианскому календарю
· 
Занесем результат в таблицу
Таблица 2
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | 481 | |
| ||
| MJD_0 | ||
| JD_0 | ||
| ||
| FracOfDay | ||
| MJD | ||
| JD | ||
| T |
3. Вычисляем модифицированный Юлианский день на полночь рассматриваемой даты

Занесем результат в таблицу
Таблица 3
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | 481 | |
| 46676 | |
| MJD_0 | ||
| JD_0 | ||
| ||
| FracOfDay | ||
| MJD | ||
| JD | ||
| T |
4. Вычислим “Нулевой” модифицированный Юлианский день рассматриваемой даты

Занесем результат в таблицу
Таблица 4
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | 481 | |
| 46676 | |
| MJD_0 | 46676 | |
| JD_0 | ||
| ||
| FracOfDay | ||
| MJD | ||
| JD | ||
| T |
5. Вычисляем "НУЛЕВОЙ" Юлианский день месяца

Занесем результат в таблицу
Таблица 5
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | 481 | |
| 46676 | |
| MJD_0 | 46676 | |
| JD_0 | 2446674 | |
| ||
| FracOfDay | ||
| MJD | ||
| JD | ||
| T |
6. Определяем введенное время в часах

Занесем результат в таблицу
Таблица 6
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | 481 | |
| 46676 | |
| MJD_0 | 46676 | |
| JD_0 | 2446674 | |
| 3,6666667 | |
| FracOfDay | ||
| MJD | ||
| JD | ||
| T |
7. Определяем введенное время в долях суток
Занесем результат в таблицу
Таблица 7
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | 481 | |
| 46676 | |
| MJD_0 | 46676 | |
| JD_0 | 2446674 | |
| 3,6666667 | |
| FracOfDay | 0,1527777 | |
| MJD | ||
| JD | ||
| T |
8. Определяем модифицированный Юлианский день
Занесем результат в таблицу
Таблица 8
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | 481 | |
| 46676 | |
| MJD_0 | 46673 | |
| JD_0 | 2446674 | |
| 3,6666667 | |
| FracOfDay | 0,1527777 | |
| MJD | 46676,1527777 | |
| JD | ||
| T |
9. Определяем Юлианский день
Сравните с результатом предыдущих вычислений JD = 2 446 676, 6528;
Занесем результат в таблицу
Таблица 9
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | 481 | |
| 46676 | |
| MJD_0 | 46673 | |
| JD_0 | 2446674 | |
| 3,6666667 | |
| FracOfDay | 0,1527777 | |
| MJD | 46676,1527777 | |
| JD | 2 446 676, 6527777 | |
| T |
10. Определяем число юлианских столетий, отделяющих эпоху от
полудня 1 января 2000 года
Занесем результат в таблицу
Таблица 10
| Обозначение | Комментарий | |
| Year | 1986 | |
| Month | 9 (Сентябрь) | |
| Day | 3 | |
| Hour | 03h | |
| Minute | 40m | |
| Second | 00s | |
| C_Year | 1986 | |
| C_Month | 9 | |
| b | 481 | |
| 46676 | |
| MJD_0 | 46673 | |
| JD_0 | 2446674 | |
| 3,6666667 | |
| FracOfDay | 0,1527777 | |
| MJD | 46676,1527777 | |
| JD | 2 446 676, 6527777 | |
| T | -0, 133 288 8 |
Как мы видим производить эти расчеты вручную – очень утомительная работа. Поэтому, лучше поручить её вычислительной машине. Тот, кто знаком с языком программирования “BASIC” предлагается небольшая программа, производящая все перечисленные вычисления. Те, кто знает другие языки, очень легко может адаптировать эту программу под них
''Программа
''Вычисления:
' 1. Нулевого юлианского дня
' 2. Юлианского дня
' 3. Число юлианских столетий от полудня
' 1 января 2000 года
''по календарной дате и времени
'
'Входные данные:
' 1. Год
' 2. Месяц
' 3. День
' 4. Час дня
' 5. Минута часа
' 6. Секунда минуты
'
'Выходные данные:
' 1. Нулевой юлианский день месяца
' 2. Текущий юлианский день
' 3. Число юлианских столетий от полудня
' 1 января 2000 года
''Авторы: Оливер Монтенбрук
' Томас Пфлегер
'
' Идея программы взята из книги
' "Астрономия на персональном компьютере"
' Издательский дом "ПИТЕР", 2002
'Модификация под BASIC:
'' Плетнев С.Л.
TYPE TDate
Year AS INTEGER
Month AS INTEGER
Day AS INTEGER
Hour AS INTEGER
Min AS INTEGER
Sec AS DOUBLE
JDay AS DOUBLE
MJDay AS DOUBLE
T AS DOUBLE
END TYPE
'----------------------------- Переменные-----------------------------------------------
DIM MyDate(1) AS TDate ' Запись данных
'================== Программа ==============================
L0:
CLS 'Очистить экран
'----------------------------- Ввод даты и времени -------------------------------------
L1:
INPUT "Введите номер года <от 1900 и далее>"; MyDate(1).Year
'---------------Проверка введенного года-----------------------------------------------
IF MyDate(1).Year < 1900 THEN
PRINT "Ошибка ввода. Попробуйте еще раз"
GOTO L1
END IF
L2:
INPUT "Введите номер месяца <От 1 до 12>"; MyDate(1).Month
'---------------Проверка введенного месяца -------------------------------------------
IF ((MyDate(1).Month < 1) OR (MyDate(1).Month > 12)) THEN
PRINT "Ошибка ввода. Попробуйте еще раз"
GOTO L2
END IF
L3:
INPUT "Введите номер дня <От 1 до 31>"; MyDate(1).Day
'--------------Проверка введенного дня------------------------------------------------
IF ((MyDate(1).Day < 1) OR (MyDate(1).Day > 31)) THEN
PRINT "Ошибка ввода. Попробуйте еще раз"
GOTO L3
END IF
'-------- Проверка номера дня относительно года и месяца--------------------------
SELECT CASE MyDate(1).Day
END SELECT
L4:
INPUT "Введите час суток <От 0 до 23>"; MyDate(1).Hour
'------------- Проверка введенного часа------------------------------------------------
IF ((MyDate(1).Hour > 23)) THEN
PRINT "Ошибка ввода. Попробуйте еще раз"
GOTO L4
END IF
L5:
INPUT "Введите минуты часа <От 0 до 59>"; MyDate(1).Min
'--------------------Проверка введенных минут----------------------------------------
IF ((MyDate(1).Min > 59)) THEN
PRINT "Ошибка ввода. Попробуйте еще раз"
GOTO L5
END IF
L6:
INPUT "Введите секунды <От 0 до 59>"; MyDate(1).Sec
'--------------- Проверка введенных секунд--------------------------------------------
IF ((MyDate(1).Sec > 59)) THEN
PRINT "Ошибка ввода. Попробуйте еще раз"
GOTO L6
END IF
'------------------------------- Начало обработки---------------------------------------
'------ Корректировка года и месяца---------------------------------------------------
IF MyDate(1).Month <= 2 THEN
AMonth = MyDate(1).Month + 12
AYear = MyDate(1).Year - 1
ELSE
AMonth = MyDate(1).Month
AYear = MyDate(1).Year
END IF
'----------- Поправка к Григорианскому календарю---------------------------------
b = FIX(AYear / 400 - AYear / 100 + AYear / 4)
'Вычисляем модифицированный Юлианский день на полночь введенной даты
MyDate(1).MJDay =
365 * AYear - 679004 + b + INT(30.6001 * (AMonth + 1)) + MyDate(1).Day
'------------- Вычисляем "НУЛЕВОЙ" Юлианский день месяца----------------------
MJD0 = 365 * AYear - 679004 + b + INT(30.6001 * (AMonth + 1))
JD0 = MJD0 + 2400001#
'------------- Вычисляем Юлианский период по введенным данным---------------
'------------- Определяем введенное время в часах -----------------------------------
AHour = (MyDate(1).Hour + MyDate(1).Min / 60 + MyDate(1).Sec / 3600)
'------------ Определяем введенное время в долях суток-----------------------------
FracOfDay = AHour / 24
'------------ Определяем модифицированный Юлианский день---------------------
MyDate(1).MJDay = MyDate(1).MJDay + FracOfDay
'------------ Определяем Юлианский день---------------------------------------------
MyDate(1).JDay = MyDate(1).MJDay + 2400000.5#
'------------ Определяем число юлианских столетий, отделяющих эпоху от
полудня 1 января 2000 года---------------------------------------
MyDate(1).T = (MyDate(1).JDay - 2451545) / 36525
'---------- Вывод результатов-----------------------------------------------------------
CLS
PRINT " Введенные данные "
PRINT " Дата :"; MyDate(1).Day; "."; MyDate(1).Month; "."; MyDate(1).Year
PRINT " Время "; MyDate(1).Hour; "."; MyDate(1).Min; "."; MyDate(1).Sec
PRINT "Полученные результаты"
PRINT "*НУЛЕВОЙ* Юлианский день месяца JD_0 "; JD0
PRINT "Юлианский день JD "; MyDate(1).JDay
PRINT "Число юлианских столетий от полудня 1 января 2000 года "
PRINT "T "; MyDate(1).T
‘---------------- Выход из программы --------------------------------------------------
INPUT " Чтобы закончить , нажмите Q"; A$
IF ((A$ <> "q")) THEN
IF A$ <> "Q" THEN
GOTO L0
END IF
END IF
STOP
Публикация проект “Астрогалактика”, с разрешения автора, декабрь 2006 года
Дата добавления: 2022-01-22; просмотров: 65; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!
