суббота, 24 июня 2023 г.

Солнечные вычисления

Заголовок максимально размытый, да и статья не статья, а лишь анонс к некоторой штуке, которую недавно делал, но для начала немного предисловия. Я уже писал тут как-то калькулятор солнечного времени, там есть некоторые теоретические размышления о том как посчитать реальное солнечное время. И еще был эксперимент с подсчетом продолжительности суток. Все эти теоретические выкладки не учитывают наклона земли, эллиптическую орбиту, возможно даже что земля не такой уж и шар - это тоже возможно влияет на солнечные "параметры". В итоге если смотреть по расчетному времени полдня на сайте https://www.timeanddate.com/sun/russia/moscow для Москвы , то получается что время варьируется между 12:13 в ноябре до 12:43 в феврале, а среднее значение 12:28, у меня же по калькулятору постоянно +29 минут. 

Это сайт, как я и говорил использует тоже теоретическое время, но там расчет уже учитывает какие надо поправочные коэффициенты и все что может потребоваться. Оказывается есть уже готовая библиотека на js для таких расчетов, куда требуется просто передать время и координаты, и она сделает все нужные расчеты сама, покажет высоту и положение солнца и луны над горизонтом, а также время восхода, заката, полудня, полуночи и все такое прочее. Для меня  было интересно узнать текущее время по длине тени - в общем-то в этом нет ничего экстраординарного, вычисляется оно тоже по высоте солнца над горизонтом, ну и по направлению тоже. В интернете есть калькулятор тени, но мне он не понравился, т.к. был не очень удобный и поэтому я решил сделать свой, в нем вбит сразу мой рост, потому вычислить длину тени куда проще. 

Вот собственно и все о чем я хотел поведать) ссылка https://boolkin.github.io/html/sun-calculations/

1 комментарий:

  1. 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);
    }

    ОтветитьУдалить