def __get_relative_prime_meridian(year): """ - total progression = 100d42.6 + cumulative prog + leap progs - cumulative progression: delta(year-2001) * -0d14.31667 - leap progression: (leap years elapsed) * 0d59.0 :param year: observation year :return: angle of prime meridian """ reference_rotation = Angle.from_string("100d42.6") # cumulative progression: delta(year-2001) * -0d14.31667 annual_gha_decrement = Angle.from_string("-0d14.32") delta_year = year - Aries.REFERENCE_YEAR cumulative_progression = Angle.multiply(annual_gha_decrement, delta_year) # leap progression: (leap years elapsed) * 0d59.0 daily_rotation = Angle.from_string("0d59.0") leap_years = math.floor((year - Aries.REFERENCE_YEAR) / 4) leap_progression = Angle.multiply(daily_rotation, leap_years) # total progression = 100d42.6 + cumulative prog + leap progs total_progression = Angle.add(reference_rotation, cumulative_progression) total_progression = Angle.add(total_progression, leap_progression) print("total progression" + total_progression.str) return total_progression
def get_greenwich_hour_angle(year, month, day, hour, minute, second): """ = relative_prime_meridian + earth rotation :param year: :param month: :param day: :param hour: :param minute: :param second: :return: """ reference_datetime_str = str(year) + ",01,01,00,00,00" observation_datetime_str = str(year) + ',' + str(month) + ',' + str( day) + ',' observation_datetime_str += str(hour) + ',' + str(minute) + ',' + str( second) observation_datetime = datetime.strptime(observation_datetime_str, '%Y,%m,%d,%H,%M,%S') reference_datetime = datetime.strptime(reference_datetime_str, '%Y,%m,%d,%H,%M,%S') elapsed_sed_since_ref = (observation_datetime - reference_datetime).total_seconds() relative_pm = Aries.__get_relative_prime_meridian(year) earth_rotation = Aries.__get_earth_rotation_since_observation( elapsed_sed_since_ref) print("relative_pm" + relative_pm.str) print("earth_rotation" + earth_rotation.str) return Angle.add(relative_pm, earth_rotation)
def test_arithmatic(self): small_aggle = Angle(60) big_angle = Angle(320) total_angle = small_aggle.add(big_angle) self.assertEqual(20, total_angle.degrees, 'Adding agle with wrap-around')