Здесь:
def suns_apparent_ecliptic_longitude
suns_mean_longitude
+ SUNS_GEODETIC_PRECESSION * sin(suns_mean_anomaly)
+ EARTHS_ORBITAL_ECCENTRICITY * sin(2 * suns_mean_anomaly)
end
Вы смешиваете единицы. suns_mean_longitude
- это радианы, как и SUNS_GEODETIC_PRECESSION
(и, следовательно, так же, как и второе слагаемое), но EARTHS_ORBITAL_ECCENTRICITY
- это 0.020
градусов .
Дополнительно:
EARTHS_APPROXIMATE_ATMOSPHERIC_REFRACTION = degrees_to_radians 0.01671
должно быть просто
EARTHS_APPROXIMATE_ATMOSPHERIC_REFRACTION = 0.01671
Я думаю, поскольку это используется в формуле, которая определяет расстояние .
Дополнительно дополнительно
def suns_right_ascension
atan2(cos(suns_apparent_ecliptic_longitude) * sin(suns_apparent_ecliptic_longitude), cos(suns_apparent_ecliptic_longitude)) / 15
end
Я не проверял, какие единицы возвращает эта atan2
функция - вы уверены, что это градусы, которые должны были бы быть для деления на 15, чтобы иметь смысл?
Могут быть и другие проблемы; это только те, которые я вижу.