Википедия приводит эту формулу для расчета солнечного азимута:
Где:
Я реализую это уравнение в JavaScript, но оно не кажется правильным. Может ли кто-нибудь здесь помочь мне подтвердить, правильно ли это уравнение?
Вот моя реализация JS. Единственная странность в конце: ограничение домена acos до [-1, 1], чтобы предотвратить значения NaN.
const getSolarAzimuth = function(
zenithAngle, hourAngle, declination, latitude
) {
const cos = Math.cos;
const sin = Math.sin;
const cos_phi = (
sin(declination) * cos(latitude) - cos(hourAngle) * cos(declination) *
sin(latitude)) /
sin(zenithAngle);
return Math.acos(Math.min(Math.max(cos_phi, -1), 1));
};
Я подтвердил, что эта формула действительно верна. У меня были неправильные единицы в коде, которые предложил @Glorfindel: часовой угол солнца был в часах, а не в радианах.
Мне нужно было настроить смещение угла азимута на основе часового угла:
// The angle offset needs to be adjusted based on whether the hour angle
// is in the morning or the evening.
// https://en.wikipedia.org/wiki/Solar_azimuth_angle#Formulas
if (hourAngle < 0 || hourAngle > Math.PI) {
return az;
}
return (Math.PI * 2) - az;
Глорфиндель
нниби
Тошич