A A A A Автор Тема: Ошибка или нет ? У меня или в StarCalc? Помогите разобраться...  (Прочитано 1107 раз)

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

Оффлайн βλακασАвтор темы

  • Новичок
  • *
  • Сообщений: 11
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от βλακασ
Собственно, написал подобие программы для вычисления восходов/закатов Солнца и Луны. Точность, для оценки которой использовал StarCalc, меня устроила
вполне (несоответствие не более 1 мин.) Но вот только не понял я одного ньюанса :
Если взять в качестве места наблюдения город Норильск (координаты 69,33 СШ, 88,22 ВД) и даты близкие к окончанию полярного дня 24 - 28 июля 2016г. то в StarCalc-е 24 июля Солнце не заходит, а 25 имеет место восход в 01:46 и потом закат в 00:42. Не совсем понимаю как может полярный день оканчиваться восходом (ведь Солнце уже светит), к тому же наступающим после заката, но если эти моменты принять как происходящие в течение одних суток, то долгота дня получается очень короткой (чуть больше часа, - и это сразу по окончании полярного дня. Разве так бывает ?)
В моей же программе, как я догадался, закат происходит уже 24 июля в 00:43, а следующий восход будет в 01:45 на следущий день 25 июля. А затем, следующий закат будет уже в 00:27 следующих суток (то есть 26 июля). Вследствие чего, долгота дня всегда в этот период (сразу после полярного дня) - довольно велика - более 22 часов. Вопрос, собственно, в том, прав ли я ? И следует ли мне исправить представление результатов в программе - если да, то каким образом ?
Извините, если невнятно изложил, но если погонять генератор эфемерид StarCalc-а с координатами Норильска в окрестностях этих дат (около окончания полярного дня) и для сравнения воспользоваться  моей программкой - всё будет понятно и так. Программку (файл .exe) выкладываю . (написана в Visual Studio на языке VB).  Вводим дату и выбираем город (координаты при этом сами установятся) - нажимаем на "Пощщитать"
« Последнее редактирование: 23 Фев 2016 [18:26:29] от βλακασ »

Оффлайн gasha

  • ****
  • Сообщений: 353
  • Благодарностей: 17
  • 61:45:28,6 N 34:21:39.5 E (134 + 15 этаж) м
    • Сообщения от gasha
    • Siä Karjalassa
$ ./Sunset

      SUNSET: solar and lunar rising and setting times 
        (c) 1999 Oliver Montenbruck, Thomas Pfleger     

 First date (yyyy mm dd)               ... 2016 07 20

 Observing site:  east longitude [deg] ... 88.22
                  latitude [deg]       ... 69.33
                  local time - UT [h]  ... 7
 Twilight definition (c, n or a)       ... с

    Date             Moon              Sun             Twilight
                   rise/set          rise/set        beginning/end

 2016/07/20     22:59    03:22    always visible     always bright
 2016/07/21     23:06    04:57    always visible     always bright
 2016/07/22     23:11    06:38    always visible     always bright
 2016/07/23     23:13    08:21    always visible     always bright
 2016/07/24     23:15    10:05    always visible     always bright
 2016/07/25     23:17    11:49    01:46    00:42     always bright
 2016/07/26     23:20    13:33    02:01    00:27     always bright
 2016/07/27     23:25    15:19    02:13    00:15     always bright
 2016/07/28     23:33    17:04    02:22    00:05     always bright
 2016/07/29     23:48    18:46    02:31    23:49     always bright

 all times in local time (=UT+7h)

https://astronomy.ru/forum/index.php/topic,105562.msg3563594.html#msg3563594

У вас там, скорей всего, ошибка в формулах:

(кликните для показа/скрытия)

P.S. Я понимаю, что тренируетесь/учитесь, но ЗАЧЕМ такую страшную форму делать?))
« Последнее редактирование: 24 Фев 2016 [00:50:56] от gasha »
БПЦ 15х50, Nikon Aculon 7x50, Celestron Advanced VX 8" N, Sky-Watcher BK 909AZ3, ТАЛ-65, Таир-3ФС, Canon EOS 60D, Sony Alpha NEX-3.

Оффлайн βλακασАвтор темы

  • Новичок
  • *
  • Сообщений: 11
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от βλακασ
скорей всего, ошибка в формулах

может быть, конечно..... но для других (не полярных) широт - всё прекрасно работает. Да и сами формулы не особо сложные, брал их из книги Ж Меёса "Астрономические формулы для калькуляторов".  Подозреваю, что нужно как-то оговорить условиями момент принятия результирующей переменной значения NaN.
из приведённой Вами ссылки, практически ничего не понял. Я кроме Бейсика, который учил в конце восьмидесятых годов прошлого века, с программированием не знаком. потому и пишу "написал подобие программы". Слишком нескромно, назвать меня программистом, хоть и начинающим; так, скорее хобби. А с другой стороны - точность получилась высокая. Вот под спойлером  часть кода, которая отвечает за рассчёт солнца с комментариями - что к чему:
(кликните для показа/скрытия)
и ещё - а что это у Вас под спойлером ? Некорректности в моем exe-шнике ?  а как Вы их получили ? :o
PS в любом случае - Спасибо за ответ !

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
Есть граница, разделяющая заходящие и незаходящие объекты. Для незаходящих объектов зенитное расстояние в нижней кульминации менее 90°. Высота/зенитное расстояние в кульминации зависит от широты на Земле и склонения светила, а также от атмосферной рефракции и горизонтального параллакса. Для Луны и Солнца склонение меняется в течение дня. Для приполярных широт, когда продолжительность суток короткая, нельзя брать склонение от балды. Если для расёта захода Вы возьмёте склонение на предыдущий полдень, а для восхода - на следующий, то ошибка будет большой, а для совсем приграничных случаев можно и вовсе получить абсурдные варианты. А вот брать склонение в момент нижней кульминации можно, и если  сделать ещё одну итерацию, уточняющую склонение в момент захода, результат получится очень хороший.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн βλακασАвтор темы

  • Новичок
  • *
  • Сообщений: 11
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от βλακασ
Полностью согласен! Только я ничего от балды и не брал. Тем более не задавался моментами из предыдущей или последующей даты. Такие моменты у меня вылезают в результате вычислений, вблизи начала и окончания полярного дня. Я  рассуждал так:
Создал подпрограмму (функцию, назвал её SunCalc) которая вычисляет моменты восхода Tr и заката Ts солнца в зависимости от произвольного момента времени выраженного в юлианских столетиях J.
То есть - задаёшь ей в качестве входных данных определённый момент времени J и на выходе получаешь готовые моменты восхода и заката, выраженные в десятичных долях часа Tr и Ts.
Затем, вычисляю юлианскую дату, на момент Гринвичского полудня (переменная P, выраженная в сутках) той самой даты, которая используется для рассчёта (не предыдущая и не последующая, - а именно та, которая введена в программу). Чтобы определить момент полдня по среднему солнечному времени для заданной местности из момента полдня по Гринвичу вычитаю долготу места, выраженную в долях суток.  Ведь местный средний полдень на восточной долготе наступит на Lon/15/24 суток раньше Гринвича. (Lon - это долгота в градусах). Для западной долготы - долгота со знаком минус.
Отсюда выражение для юлианской даты среднего местного полдня  P - Lon / 15 / 24. Дальше находим переменную J , то есть находим количество юлианских столетих, между местным средним полднем указанной даты и началом эпохи 1900.
J = ((P - Lon / 15 / 24) - 2415020.0) / 36525. Именно этот момент и использую для первого приближения. Момент среднего местного полдня на указанную дату.
Теперь, получив в первом приближении два значения (момент восхода Tr и момент заката Ts), уточняем их. Для этого находим количество юлианских столетий от полученного момента восхода до начала эпохи и повторяем вычисления. Также находим и количество юлианских столетий от полученного момента заката до начала эпохи и также повторяем рассчёты.
Поскольку Tr и Ts выражены в долях часа поясного времени, в первом случае, для восхода (здесь Gr - разница между местным поясным и Гринвичским временем, положит. для вост. долготы)
J = ((P - Gr/24 - 2415020.0) / 36525) + ((Tr - 12) / 876600)   
тут ((P - Gr/24 - 2415020.0) / 36525)  - количество юлианских столетий от полдня местного поясного времени указанной даты до начала эпохи
((Tr - 12) / 876600)  - время от момента полдня  до рассвета, как правило число отрицательное, выраженное в юлианских столетиях (876600 это число часов в столетии)
Аналогично, для заката
J = ((P - Gr/24 - 2415020.0) / 36525) + ((Ts - 12) / 876600)
Таким образом, первое приближение берётся на средний местный полдень, а второе - на непосредственно полученные моменты восхода и заката указанной даты.  по-моему всё правильно....
но если нет - как тогда вычислить количество юлианских столетий от моментов восхода и заката, выраженных в часах по местному поясному времени на указанную дату до начала эпохи J1900. ?  :facepalm:

Оффлайн βλακασАвтор темы

  • Новичок
  • *
  • Сообщений: 11
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от βλακασ
полярный день заканчивается закатом, поэтому сначала поместил колонку заката, а потом восхода. Моя программа выдаёт довольно точные результаты, если не считать того глюка, что закат, приходящийся на начало суток она выдаёт при расчёте предыдущей даты (при вычислениях , например, на дату 26.07.2016 результат для заката выдаёт " в 00:16 следующих суток, то есть 27.07.2016").
И ещё: в старкальке нету двух закатов 28 июля .....получается закатится в 00:05 потом через два часа взойдёт в 02:23, потом не закатываясь ни разу, на следующий день в 02:32 опять восход и следующий закат будет в 23:48  ? чес.слово - что то тут
не так.....

программа стар кальк  (выдаёт сразу в таблице)                   моя программа (таблицу заполняю вручную, последовательно вводя даты)
Норильск, период от 24 по 29 июля 2016 г.                          Норильск, период от 24 по 29 июля 2016 г.

   дата            закат         восход                                                дата                закат            восход
24.07.2016       нету           нету                                              24.07.2016            нету               нету
25.07.2016      00:42          01:46                                             25.07.2016            00:43            01:45     
26.07.2016      00:27          02:01                                             26.07.2016            00:27            02:01           
27.07.2016      00:15          02:13                                             27.07.2016            00:16            02:12     
28.07.2016      00:05          02:23                                             28.07.2016            00:06            02:22      снова закат  23:57
29.07.2016      23:48          02:32                                             29.07.2016            23:49            02:31     
30.07.2016      23:41          02:40                                             30.07.2016            23:41            02:40
« Последнее редактирование: 24 Фев 2016 [21:21:38] от βλακασ »

Оффлайн βλακασАвтор темы

  • Новичок
  • *
  • Сообщений: 11
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от βλακασ
И всё-таки в приполярных областях бывают дни, когда в течение суток наблюдается восход и два заката !
Полностью переделал алгоритм расчёта восходов и закатов Солнца. Теперь программа с шагом 12 мин. вычисляет высоту Солнца над горизонтом в течение суток и проверяет моменты, когда высота меняет знак (Солнце пересекает горизонт). Момент восхода/заката вычисляется интерполяцией. Для Луны - аналогично. Во вложении - исправленная версия и код программы (в виде текстового документа с комментариями). Точность - на мой взгляд, очень даже ничего....
Буду признателен за отзывы (в т. ч. критические) по существу !  Поскольку нисколько не программист....  :)

Оффлайн 1valdis

  • *****
  • Сообщений: 1 315
  • Благодарностей: 131
  • ИСЗ - наше всё.
    • Сообщения от 1valdis
    • Telegram
восход и два заката !
Если Солнце второй раз заходит, оно должно и второй раз взойти. Что-то здесь нечисто.
Сателлитчики, объединяйтесь!
Sky-Watcher 1149eq2 + DS UHC & Plano 6,5mm
Celestron SkyMaster 15х70

Оффлайн βλακασАвтор темы

  • Новичок
  • *
  • Сообщений: 11
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от βλακασ
Если Солнце второй раз заходит, оно должно и второй раз взойти
Оно взойдёт непременно, НО уже в течение СЛЕДУЮЩИХ суток. Как например, упомянуто выше, в Норильске 28 июля 2016г. на момент начала суток (в полночь) солнце будет светить. Первый закат в 0.05 , потом восход в 02.23 и снова закат в 23.57 (за три минуты до окончания суток).
Таким образом каждый раз восход и закат чередуются как надо, но в течение конкретных суток (интервала от 00.00 до 24.00 часов) иногда случается два заката и один восход. (Второй восход будет, но уже на следующие сутки.)
StarCalc при этом показывает первый закат 0ч.05м., не отображая нигде закат в 23ч.57м., а моя программа наоборот указывает момент заката 23ч.57м., и ни слова о том, что будет закат в 0ч.05м. Бесспорно, редчайший случай, но факт.