Заголовок максимально размытый, да и статья не статья, а лишь анонс к некоторой штуке, которую недавно делал, но для начала немного предисловия. Я уже писал тут как-то калькулятор солнечного времени, там есть некоторые теоретические размышления о том как посчитать реальное солнечное время. И еще был эксперимент с подсчетом продолжительности суток. Все эти теоретические выкладки не учитывают наклона земли, эллиптическую орбиту, возможно даже что земля не такой уж и шар - это тоже возможно влияет на солнечные "параметры". В итоге если смотреть по расчетному времени полдня на сайте https://www.timeanddate.com/sun/russia/moscow для Москвы , то получается что время варьируется между 12:13 в ноябре до 12:43 в феврале, а среднее значение 12:28, у меня же по калькулятору постоянно +29 минут.
Это сайт, как я и говорил использует тоже теоретическое время, но там расчет уже учитывает какие надо поправочные коэффициенты и все что может потребоваться. Оказывается есть уже готовая библиотека на js для таких расчетов, куда требуется просто передать время и координаты, и она сделает все нужные расчеты сама, покажет высоту и положение солнца и луны над горизонтом, а также время восхода, заката, полудня, полуночи и все такое прочее. Для меня было интересно узнать текущее время по длине тени - в общем-то в этом нет ничего экстраординарного, вычисляется оно тоже по высоте солнца над горизонтом, ну и по направлению тоже. В интернете есть калькулятор тени, но мне он не понравился, т.к. был не очень удобный и поэтому я решил сделать свой, в нем вбит сразу мой рост, потому вычислить длину тени куда проще.
Вот собственно и все о чем я хотел поведать) ссылка https://boolkin.github.io/html/sun-calculations/
function addDays(date, days) {
ОтветитьУдалитьvar result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
for(var i=0;i<365;i++){
var dt = SunCalc.getTimes(addDays("2023-01-01", i),55.7558333,37.6177778);
let span2 = document.createElement('span');
span2.innerHTML = dt.solarNoon.getHours() + ':' + dt.solarNoon.getMinutes()+':'+dt.solarNoon.getSeconds()+ "
";
document.getElementById("suntimes").append(span2);
}