ВНИМАНИЕ! На форуме начался конкурс - астрофотография месяца ИЮНЬ!
0 Пользователей и 1 Гость просматривают эту тему.
Тут пару раз такое просили.https://disk.yandex.ru/d/43K20UuFK5ee6Q
А просто в виде формулы/функции есть возможность выложить?
Там у меня много формул , я давно наделал всяких модулей. И там избыточная точность в некоторых местах, поэтому слишком много.Проще вот тут - Помогите рассчитать азимут и высоту (угол) Солнца над горизонтом? Pluto выложил исходник на Си , там вроде все можно понять.
import mathdef calc_sun_az_alt(year, month, day, ut, lon, lat): """ Calculate sun's azimuth and altitude by UT date|time and coords lon lat :param: year, month, day, ut, lon, lat :return: azimut, altitude """ def rev(q): return q - math.floor(q / 360.0) * 360.0 rad_deg = 180.0 / math.pi deg_rad = math.pi / 180.0 # Расчет количества целых суток прошедших от 01 января 0.0ч 2000г data = 367 * year - (7 * (year + (month + 9) / 12)) / 4 + (275 * month) / 9 + day - 730530 data1 = data * 1.0 + ut / 24.0 # расчет даты с учетом текущего времени UT # Элементы орбиты Солнца (Земли) w = 282.9404 + 0.0000470935 * data1 # долгота перигелия e = 0.016709 - 0.000000001151 * data1 # эксцентриситет орбиты m = 356.047 + 0.9856002585 * data1 # средняя аномалия m = rev(m) oblecl = 23.4393 - 0.0000003563 * data1 # наклон плоскости эклиптики l = w + m l = rev(l) ee = m + (180.0 / math.pi) * e * math.sin(m * deg_rad) * (1 + e * math.cos(m * deg_rad)) # эксцентрическая аномалия x = math.cos(ee * deg_rad) - e y = math.sin(ee * deg_rad) * math.sqrt(1 - e * e) r = math.sqrt(x * x + y * y) v = math.atan2(y, x) * rad_deg longt = v + w # эклиптическая долгота Солнца longt = rev(longt) x = r * math.cos(longt * deg_rad) y = r * math.sin(longt * deg_rad) z = 0.0 xequat = x yequat = y * math.cos(deg_rad * oblecl) - z * math.sin(deg_rad * oblecl) zequat = y * math.sin(deg_rad * oblecl) + z * math.cos(deg_rad * oblecl) # экваториальные координаты Солнца ra = math.atan2(yequat, xequat) * rad_deg # прямое восхождение dec = math.asin(zequat / r) * rad_deg # склонение # расчет азимутальных координат gmst0 = l / 15.0 + 12.0 # звездное время для гринвичского меридиана sidtime = gmst0 + ut + lon / 15.0 # Звездное время if sidtime < 0: sidtime = sidtime + 24.0 if sidtime > 24: sidtime = sidtime - 24.0 ha = sidtime * 15.0 - ra # Часовой угол xx = math.cos(ha * deg_rad) * math.cos(dec * deg_rad) yy = math.sin(ha * deg_rad) * math.cos(dec * deg_rad) zz = math.sin(dec * deg_rad) xhor = xx * math.sin(lat * deg_rad) - zz * math.cos(lat * deg_rad) yhor = yy zhor = xx * math.cos(lat * deg_rad) + zz * math.sin(lat * deg_rad) azimut = math.atan2(yhor, xhor) * rad_deg + 180 # азимут Солнца [град] altitude = math.asin(zhor) * rad_deg # высота Солнца над горизонтом [град] return azimut, altitude
переделал под Python: