Алгоритм Превращение полных дат наблюдений в Юлианские дни и доли суток
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; просмотров: 60; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!