Алгоритм Превращение полных дат наблюдений в Юлианские дни и доли суток



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

PRINT " Дата :"; MyDate(1).Day; "."; MyDate(1).Month; "."; MyDate(1).Year

PRINT " Время "; MyDate(1).Hour; "."; MyDate(1).Min; "."; MyDate(1).Sec

PRINT

PRINT "Полученные результаты"

PRINT

PRINT "*НУЛЕВОЙ* Юлианский день месяца JD_0 "; JD0

PRINT "Юлианский день JD "; MyDate(1).JDay

PRINT "Число юлианских столетий от полудня 1 января 2000 года "

PRINT "T "; MyDate(1).T

PRINT

---------------- Выход из программы --------------------------------------------------

INPUT " Чтобы закончить , нажмите Q"; A$

IF ((A$ <> "q")) THEN

                IF A$ <> "Q" THEN

GOTO L0

END IF

END IF

STOP

Публикация проект “Астрогалактика”, с разрешения автора, декабрь 2006 года

 

 


Дата добавления: 2022-01-22; просмотров: 60; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!