|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.01.2010, 19:33 | #21 |
Игрок
Форумчанин
Регистрация: 29.10.2006
Сообщений: 367
|
вводить надо координату и дату. Остальное считается математически. Вспомните астрономию из школы. Там вычислений то на 5 минут. И результат - одна формула.
Жизнь всегда игра. Но смерть - не всегда поражение.
#define true (Math.random()>0.5) //Удачной отладки |
12.01.2010, 20:36 | #22 | |
Форумчанин
Регистрация: 27.05.2009
Сообщений: 127
|
Точнее широту. И ещё там должна быть поправка на летнее время
http://ru.wikipedia.org/ http://planetcalc.ru/300/ http://podlodka.info/content/view/161/207/ - расчет http://williams.best.vwh.net/sunrise_sunset_example.htm - вот какой-то алгоритм. Не знаю то, не то. В поиске больше встречается азимут, чем время. Цитата:
Ещё один калькулятор И вот(может пригодится) P.S. Самому тема интересна стала Последний раз редактировалось NSV; 12.01.2010 в 21:18. |
|
15.05.2022, 16:06 | #23 |
Новичок
Джуниор
Регистрация: 15.05.2022
Сообщений: 1
|
Упрощенное вычисление заката и рассвета по дате, подробная инструкция
Подробно разобрался и даю подробнейшую инструкцию:
Задача грубо вычислить время восходя и заката на ESP32 оснащенной часами реального времени, чтобы можно было контролировать освещение независимо от доступа в интернет, основываясь только на текущей дате. Величина склонения Солнца может быть грубо рассчитана по формуле Склонение солнца для текущего дня =-23.44 х cos ( 360 / 365 х ( N + 10 ) ) где N это количество дней начиная с 1 января, где 1 января = 0. Объяснение данной формулы: 23.44 максимальное наклонение земли к плоскости орбиты в крайних точках, это и есть склонение солнца, в день зимнего противостояния со знаком минус и со знаком плюс в день летнего противостояния 360 это градусы полной оборота земли по орбите за 1 год 365 это дней в году 10 дней это количество дней от 21 декабря, дня зимнего солнцестояния, когда наклонение орбиты составляет -23.44 градуса Вычисление значения N (количества дней прошедших с 1 января) с точки зрения программирования где у нас есть номер месяца и число Для расчета времени рассвета и заката нам нет смысла учитывать, что в одном месяце 31 день в другом 30, високосные годы и т.д. Учитывая, что нам нужен грубый расчет, количество дней прошедших с 1 января до текущей даты рассчитаем следующим образом: Количество дней в году (365)/Количество (12) = среднее количество дней в месяце (30.42) Теперь в программе, чтобы узнать число дней прошедших с 1 января нам достаточно умножить число полных месяцев прошедших с 1 января на среднее количество дней в месяце и прибавить текущий день месяца ПРИМЕР: Например, для 15 мая получится так: Число полных месяцев = май(5 месяц) минус 1 = 4 полных месяца (4 х 30.42) + 15 дней с начала мая = 136,68 дней с 1 января Осталось прибавить 10, чтобы получить количество дней с момента зимнего солнцестояния = 146,68 В нашей формуле по сути есть коэффициент соотношения между градусом полного орбиты за год и количеством дней в году 360/365 = 0,9863 Умножаем 146,68х0,9863 =144,67 Косинус от 144,67 = -0,8158 Теперь умножаем на -23,44 и получаем 19.12 Таким образом, по грубым расчетам склонение солнца на 15 мая равно 19.12 (сравнение с более точными данными покажут, что это значение на самом деле больше соответствует 16 мая, но для определения времени захода и восхода это даёт погрешность всего в пару минут, что вполне устраивает для большинства задач) ТЕПЕРЬ НЕПОСРЕДСТВЕННО РАССЧЕТ ВРЕМЕНИ ВОСХОДА И ЗАКАТА формула для расчета восходов и заходов: cos(t) = -(sin(a) + sin(f)*sin(d)) / (cos(f) * cos(d)), где t - часовой угол, f - широта, d - склонение. sin(a)=0.0148 (это синус -0,83градуса, либо -51') - вклад от рефракции и размера диска. Если бы его не было, формула была бы гораздо красивее, в правой части было бы -tg(f)*tg(d) *. Поясню, что мы получим cos(t), а для получения непосредственно значение t из косинуса t, надо выполнить операцию арккосинус. При этом значение t – это время в часовых углах, которое нужно будет перевести в обычные часы и минуты. Чтобы получить значение времени рассвета, надо будет затем вычесть полученное время из времени фактического полудня, а для расчета времени заката прибавить к времени полудня полученное число. Продолжим наш пример: Координаты Москвы в десятичном формате: 55.75583 северной широты, 37.6173 восточной долготы. Мы также перевели географические координаты в градусы, минуты, секунды — 55°45′20.97″ и 37°37′2.28″. Десятичный формат широты г.Москва составляет 55.75583 Для нашего примера мы нашли, что 15 марта склонение солнца составило примерно 19.12 Рассчитываем формулу: cos(t)= -(0.0148+(sin(55.75583)*sin(19.12))/(cos(55.75583)*cos(19.12)))=-0,5242 (Возможно, что 0.0148 должно в этой формуле быть вне дроби деления и складываться с дробью в которой синусы в числителе, а косинусы в знаменателе, экспериментально смотрел по разным месяцам, и так и так работает, даже не смог понять в каком случае меньше погрешность, если кто точно знает эту формулу, напишите, как правильно) Теперь вычисляем арксосинус из -0,5242, чтобы найти t Acos(-0,5242)=121.614403246605° Осталось перевести градусы в часы и минуты. Принцип простой: в сутках 24 часа = 360 градусов. То есть 1 час = 360/24= 15 угловых градусов. Для простоты воспользуемся следующей таблицей: Перевод мер угла из часовой системы в градусную. Таблица соотношений между единицами мер угла. Часовая система Градусная система 1 час (1h) 15 градусов 1 минута (1m) 15 минут (15') 1 секунда (1s) 15 секунд (15") 121.61 градус делим на 15 градусов в одном часе и получаем: 8 часов и остаток 1,61 градус Теперь остаток надо перевести в минуты. Для этого узнаем сколько одна часовая минута составляет градусов. 1 час = 15 градусов = 60 часовых минут Значит одна часовая минута равна 15/60 = 0,25 градуса Чтобы перевести наш остаток в минуты надо наш остаток (1,61) разделить на 0,25 1.61 / 0,25 = 6.4 часовых минут Мы получили, что время за 8 часов 6 минут до астрономического полудня у нас восход и через 8 часов 6 минут после полудня закат. Напомню, что чтобы получить значение времени рассвета, надо будет вычесть полученное время из времени астрономического полудня, а для расчета времени заката прибавить к времени полудня полученное число. Более точное время астрономического полудня можно узнать основываясь на долготе того места, для которого идёт расчет применяя формулы, которые я не буду рассматривать, т.к. есть еще два более простых способа: 1) можно грубо, исходя из часового пояса узнать время фактического полудня 2) есть точный метод: зайти в Яндекс, найти свой город и найти среднее время между восходом и закатом – это и будет точное время полудня для вашего города. Так для Москвы время полудня примерно 12:30. Вычитая 8часов 6 минут из 12:30 мы найдем время рассвета 4:24, а прибавляя к 12:30 8часов 6 минут мы найдём время заката для 15 мая 2022г в районе г.Москва 20:36. Последний раз редактировалось Alexvoskres; 15.05.2022 в 19:17. |
15.05.2022, 16:51 | #24 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
12 лет на труд потратил?
Чтобы учесть високосный год, раз пользуетесь усредненными значениями, достаточно на 48 разделить 1461 (или 365.25 / 12). Последний раз редактировалось macomics; 15.05.2022 в 17:24. |
16.05.2022, 09:43 | #25 |
Техножрец
Форумчанин
Регистрация: 04.07.2014
Сообщений: 289
|
Еще можно добавить поправку по высоте над уровнем моря
— Двери есть везде. Просто нужно знать, как в них войти.
|
22.06.2022, 04:27 | #26 |
Новичок
Джуниор
Регистрация: 22.06.2022
Сообщений: 1
|
Попробовал сделать данный расчет, как вы описали. 15 мая вычисления совпадают с вашими, а вот если ставишь июнь и выше, то не совпадают.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Узнать время существования окна | SamuraiPro | Win Api | 10 | 18.12.2009 15:23 |
Имитировать восход солнца на Pascal | Мент | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 24.05.2009 12:38 |
Как программно узнать время? | Bigtyoma | Общие вопросы Delphi | 4 | 15.03.2009 05:38 |
Как узнать время работы программы в паскаль? | bullvinkle | Помощь студентам | 2 | 26.12.2008 11:20 |
Как узнать создана ли форма во время работы приложения? | Avalonix | Общие вопросы Delphi | 4 | 31.05.2008 21:01 |