Телескопы покупают здесь


A A A A Автор Тема: Линия "Терминатора"  (Прочитано 13951 раз)

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

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Линия "Терминатора"
« : 22 Янв 2010 [19:37:51] »
Доброго времени суток.
Уважаемые господа помогите с такой проблемкой.
Необходима формула для расчета  линии терминатора земли, для карты (только не глобуса).
Нужно для организации  (день/ ночь) в своей программе.
Подскажите где взять?
С уважением RN3QGA.
р.s Как выглядит см. "прицеп". из программы Orbitron
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #1 : 23 Янв 2010 [06:41:48] »
Мне тоже стало интересно - как оно рисуется. :)
Мой вариант:
1) Вычислить геоцентрический вектор Солнца на нужный момент.
2) Перевести его в гринвическую систему координат, разложить на углы Lsun, Fsun.
3) Lsun и Fsun - координаты полюса большого круга - терминатора. Найти ряд значений этого круга - долготы и широты: для всех (от 0 до 360 градусов) долгот L  большого круга широта f как tg f = -ctg(Fsun)*cos(L - Lsun). Особый  случай: Fsun = 0 (равноденствия), терминатор проходит через полюса Земли.
4) Нарисовать эти значения в нужной проекции (Меркатора, равномасштабная или др.) на карте.
5) Закрасить ночную область. Я красила по условию: скалярное произведение < 0, но наверняка реально и побыстрее что-нибудь придумать.

На 23.01.2010 UT 2.0 выглядит как-то так:

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #2 : 24 Янв 2010 [17:13:37] »
Уважаемый(ая) Tau.
Большое спасибо Вам за ответ.
Если не секрет на чем писали, я пробую освоить Delphi - полный самоучка,
поэтому сразу попрошу, если конечно Вы не против и это возможно, пример кода - хоть для одной даты.
С уважением RN3QGA. :)
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #3 : 24 Янв 2010 [20:20:02] »
На Visual Basic. Проект прицепляю ниже. Если VB у вас нет, то читайте файл module1.bas

ЗЫ. Я, кстати, не нашла в инете готовых алгоритмов, только он-лайн рисовалки. Уж такую простую ерунду могли бы и опубликовать, редиски. 
ЗЫ2. В Орбитроне похоже равномасштабная проекция (масштаб по широте одинаковый везде). В Меркаторе карта Земли и форма линии терминатора выглядят иначе.
« Последнее редактирование: 24 Янв 2010 [20:32:39] от Tau »

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #4 : 24 Янв 2010 [22:26:16] »
Огромное Вам Спасибо Tau. Приятно, что поделились.
Я специалист то небольшой но вот увлекся Delphi , сам радиолюбитель пишу программку "под себя", а там это очень нужно в VB ноль но попробую разобраться.  ;D
С уважением RN3QGA.
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #5 : 24 Янв 2010 [23:10:09] »
Если что непонятно - спрашивайте.  :angel:

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #6 : 26 Янв 2010 [18:14:26] »
Не новичку не разобраться.  ???
Tau посоветуйте (если есть конечно "инфо") как перевести с VB этот проект в проект Delphi 7.0 ?
Уж очень загорелось.
C уважением RN3QGA.
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #7 : 27 Янв 2010 [03:53:36] »
Не, про дельфи я ничего не знаю. А если я вам только нужные формулы дам без мусора в виде печати и графики - это поможет написать на Дельфях с нуля?

UPD. Прицепила doc-файл.
UPD2. 07.02.2010 прицепка изменена
« Последнее редактирование: 07 Фев 2010 [19:09:22] от Tau »

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #8 : 27 Янв 2010 [10:29:45] »
Не, про дельфи я ничего не знаю. А если я вам только нужные формулы дам без мусора в виде печати и графики - это поможет написать на Дельфях с нуля?

UPD. Прицепила doc-файл.

Не могли бы коротко рассказать как Вы привязали координаты к картинке(развернутая поверхность земли)?

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #9 : 27 Янв 2010 [10:36:43] »
Конкретно к картинке ничего не привязывала, картинка является абсолютно пассивной подложкой. По картинке определяется только масштаб рисования: размер картинки по горизонтали соответствует 360 градусам, по вертикали - 180 градусам, отсюда масштаб: сколько градусов на пиксел.

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #10 : 27 Янв 2010 [11:22:48] »
Конкретно к картинке ничего не привязывала, картинка является абсолютно пассивной подложкой. По картинке определяется только масштаб рисования: размер картинки по горизонтали соответствует 360 градусам, по вертикали - 180 градусам, отсюда масштаб: сколько градусов на пиксел.

Спасибо.

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #11 : 28 Янв 2010 [17:51:02] »
Не знаю пока , но буду разбираться .
Спасибо Tau.
Celestron SkyMaster 15x70 Binoculars

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #12 : 29 Янв 2010 [08:36:25] »
Не, про дельфи я ничего не знаю. А если я вам только нужные формулы дам без мусора в виде печати и графики - это поможет написать на Дельфях с нуля?

UPD. Прицепила doc-файл.

Перевожу на CDuilder Вашу программу. Начал сперва считать по формулам из doc-файла и споткнулся на вычислении среднего звездного времени после чего полез в Ваши исходники  и...тоже не продвинулся.

Из doc-файла на CDuilder.
S0 = 24110.54841 + 8640184.812*T + 0.093104*(T*T) - 0.0000062*(T*T*T);
Ww = 1.002737909350795;
dT = UT*86400.0*Ww;
Ss = S0 + dT;
S = Ss/240.0;
S = Ug360(S); //звездное время в градусах приведенное к 360 градусам.
Edit10->Text = FloatToStr(S);
Не бьет с контрольными цифрами в конце файла.

Код из Вашей программы на Бейсике переведенный в CDuilder
a1 = 24110.54841;
a2 = 8640184.812;
a3 = 0.093104;
a4 = 0.0000062;
tint = (int)MD;
T0 = (tint - 51544.5) / 36525.0;
s0 = a1 + a2 * T0 + a3 * (T0*T0) - a4 * (T0*T0*T0);
Nsec = (MD - tint) * 86400.0;
UT1 = Nsec * 366.2422 / 365.2422;
s0 = s0 + UT1; //  ' UT in sideral seconds
s0 = s0 / 3600.0; // ' in hour
s0 = s0 * 15.0; //' in deg
s0 = Ug360(s0);
Edit12->Text = FloatToStr(s0);

Оба фрагмента дают разный результат и они отличаются от контрольного.
Не очень понятно почему в одном варианте формула такая
dT = UT*86400.0*Ww; и используется время UT, а из Вашего исходника
формула аналогичная формула
tint = (int)MD;
Nsec = (MD - tint) * 86400.0;
UT1 = Nsec * 366.2422 / 365.2422;
Содержит разность (MD – tint)  Не могли бы Вы привести формулу вычисления
MD которой Вы пользовались в Вашей программе.(чтобы не разбирать алгоритм)
P.S. Может в doc-файле ошибка какая вкралась?



Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #13 : 29 Янв 2010 [12:27:46] »
Уважаемая Tau, нашел на другой ветке https://astronomy.ru/forum/index.php/topic,21684.0.html "Положение Солнца на небе" Вами же приведенный алгоритм(здесь под CBUilder)
T0 = (MD - 51544.5) / 36525.0;
a1 = 24110.54841;
a2 = 8640184.812;
a3 = 0.093104;
a4 = 0.0000062;
s0 = a1 + a2 * T0 + a3 * T0*T0 - a4 *T0*T0*T0;
Nsec = UT * 3600.0;
Nsec = Nsec * 366.2422/365.2422;
S = (s0 + Nsec) /3600.0 * 15.0;
Среднее звездное время совпадает до целых с Вашим контрольным числом из doc-файла. Почему-то алгоритмы ни из doc-файла ни из исходника Ваше программы значения среднего звездного времени не совпадали с контрольным значениями. 


Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #14 : 29 Янв 2010 [12:45:03] »
Когда писала формулы в doc-файле - не перевела время в доли суток.
UT[в долях суток] = UT[в часах] /24
Теперь результат и в программе и в doc-файле совпадает

Цитата
Nsec = UT * 3600.0;
А здесь входное время UT было в часах

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #15 : 29 Янв 2010 [12:58:51] »
' На входе MD = юлианская дата полуночи +UT/24
Private Function MD_Sideral_1(MD As Double) As Double
 Const A1 = 24110.54841
 Const a2 = 8640184.812
 Const A3 = 0.093104
 Const a4 = 0.0000062
 Dim tint As Double, Ut1 As Double, T0 As Double, S0 As Double, Nut_ra As Double, w As Double
 tint = Int(MD)
 T0 = (tint - 51544.5) / 36525
 S0 = A1 + a2 * T0 + A3 * T0 ^ 2 - a4 * T0 * T0 ^ 2
 Ut1 = (MD - tint) * 86400 * 366.2422 / 365.2422
 S0 = S0 + Ut1   
 S0 = Ang360(S0 / 3600 * 15) ' in degrees
 MD_Sideral_1 = Ang360(S0)
End Function

' На входе MD - юлианская дата полуночи и UT в часах
Private Function MD_Sideral_2(MD As Long, UT As Double) As Double
 Const A1 = 24110.54841
 Const a2 = 8640184.812
 Const A3 = 0.093104
 Const a4 = 0.0000062
 Dim Ut1 As Double, T0 As Double, S0 As Double
 T0 = (MD - 51544.5) / 36525
 S0 = A1 + a2 * T0 + A3 * T0 ^ 2 - a4 * T0 * T0 ^ 2
 Ut1 = UT / 24 * 86400 * 1.0027379093508
 S0 = S0 + Ut1
 S0 = Ang360(S0 / 240)
 MD_Sideral_2 = Ang360(S0)
End Function

Две функции - результат одинаков.

Kedr

  • Гость
Re: Линия "Терминатора"
« Ответ #16 : 29 Янв 2010 [14:45:42] »
Tau, скажите пожалуйста, с помощью Visual Basic можно любую программу написать? ??? Скажем программу для работы со звездными каталогами, и вообще для работы с табличными данными. Насколько универсально это средство?

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #17 : 30 Янв 2010 [05:59:30] »
Kedr, в смысле вычислений и работы с данными ограничений нет. По-крайней мере я и с каталогами работаю, и с Fts-файлами, и с любыми табличными данными без проблем. По вычислительным возможностям VB ничем не отличается от других языков.
Из плюсов:
1) Быстрое создание интерфейса.
2) Читабельность кода :))
3) Двумерная графика реализуется очень просто.
4) Работа в window-скими функциями тоже просто реализуется посредством API.
Из минусов:
1) некоторое расхождение в типах данных по сравнению с другими языками, что может не позволить подключить какую-нибудь Dll, написанную на другом языке.
2) VB работает медленнее, чем тот же C++, и в случае обработки большого количества данных в реалтайм-режиме VB не подойдет.
3) В VB нет указателей.
4) С трехмерной графикой проблемы. Возможности DirectX использовать можно, но для этого нужно быть маньяком.

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #18 : 30 Янв 2010 [15:03:42] »
' На входе MD = юлианская дата полуночи +UT/24
Private Function MD_Sideral_1(MD As Double) As Double
 Const A1 = 24110.54841
 Const a2 = 8640184.812
 Const A3 = 0.093104
 Const a4 = 0.0000062
 Dim tint As Double, Ut1 As Double, T0 As Double, S0 As Double, Nut_ra As Double, w As Double
 tint = Int(MD)
 T0 = (tint - 51544.5) / 36525
 S0 = A1 + a2 * T0 + A3 * T0 ^ 2 - a4 * T0 * T0 ^ 2
 Ut1 = (MD - tint) * 86400 * 366.2422 / 365.2422
 S0 = S0 + Ut1   
 S0 = Ang360(S0 / 3600 * 15) ' in degrees
 MD_Sideral_1 = Ang360(S0)
End Function

' На входе MD - юлианская дата полуночи и UT в часах
Private Function MD_Sideral_2(MD As Long, UT As Double) As Double
 Const A1 = 24110.54841
 Const a2 = 8640184.812
 Const A3 = 0.093104
 Const a4 = 0.0000062
 Dim Ut1 As Double, T0 As Double, S0 As Double
 T0 = (MD - 51544.5) / 36525
 S0 = A1 + a2 * T0 + A3 * T0 ^ 2 - a4 * T0 * T0 ^ 2
 Ut1 = UT / 24 * 86400 * 1.0027379093508
 S0 = S0 + Ut1
 S0 = Ang360(S0 / 240)
 MD_Sideral_2 = Ang360(S0)
End Function

Две функции - результат одинаков.

Да, UT поделив на 24 цифры, наконец сошлись осталось нарисовать. Спасибо, Вам.

Kedr

  • Гость
Re: Линия "Терминатора"
« Ответ #19 : 31 Янв 2010 [19:11:22] »
Kedr, в смысле вычислений и работы с данными ограничений нет. По-крайней мере я и с каталогами работаю, и с Fts-файлами, и с любыми табличными данными без проблем. По вычислительным возможностям VB ничем не отличается от других языков.
Из плюсов:
1) Быстрое создание интерфейса.
2) Читабельность кода :))
3) Двумерная графика реализуется очень просто.
4) Работа в window-скими функциями тоже просто реализуется посредством API.
Из минусов:
1) некоторое расхождение в типах данных по сравнению с другими языками, что может не позволить подключить какую-нибудь Dll, написанную на другом языке.
2) VB работает медленнее, чем тот же C++, и в случае обработки большого количества данных в реалтайм-режиме VB не подойдет.
3) В VB нет указателей.
4) С трехмерной графикой проблемы. Возможности DirectX использовать можно, но для этого нужно быть маньяком.

Спасибо! Я в программировании пока ноль, но появляются задачи которые без нужной программы не решить. Вот незнаю как, с какой стороны подойти к этому делу. VB подайдет для новичка? ;D Насколько долго в нем надо разбираться?