Ok, après plusieurs jours de petite galère, j'ai finalement réussie à me faire un petit bout de code permettant plusieurs choses comme le calcule du Jour Jullien, le temps sidéral à Greenwich et le temps sidéral local, l'heure horaire pour un astre, et son azimut/hauteur d'une précision de 0,01 degrés, ce qui pour moi en largement suffisant.
Je vous met donc le code, si jamais quelqu'un dans le futur voudrai obtenir ces résultats ou voir quel en sont les calcules.
Et aussi, si vous voyer des choses qui ne vont pas dans le code, merci de me le dit pour que je puisse le corriger 😉
import math
def julian_day(year, month, day, hour, minute, second):
if month <= 2:
year -= 1
month += 12
A = math.trunc(year / 100)
if year < 1582:
B = 0
else:
B = 2 - A + math.trunc(A / 4)
JD = math.trunc(365.25 * (year + 4716)) + math.trunc(30.6001 * (month + 1)) + day + B - 1524.5
JD += (hour + minute / 60.0 + second / 3600.0) / 24.0
return JD
def sideral_time_greenwich(julian_day):
T = (julian_day - 2451545.0) / 36525
temp = (
280.46061837
+ 360.98564736629 * (julian_day - 2451545)
+ 0.000387933 * T * T
- (T * T * T) / 38710000
) % 360
if temp < 0:
temp += 360
return temp
def local_sideral_time(year, month, day, hour, minute, second, longitude):
JD = julian_day(year, month, day, hour, minute, second)
GST = sideral_time_greenwich(JD)
LST = (GST + longitude) % 360
return LST
def degrees_to_hms(degrees):
total_hours = degrees / 15.0
hours = int(total_hours)
total_minutes = (total_hours - hours) * 60
minutes = int(total_minutes)
total_seconds = (total_minutes - minutes) * 60
seconds = total_seconds
return hours, minutes, seconds
def hms_to_degrees(hours, minutes, seconds):
degrees_from_hours = hours * 15.0
degrees_from_minutes = (minutes / 60.0) * 15.0
degrees_from_seconds = (seconds / 3600.0) * 15.0
total_degrees = degrees_from_hours + degrees_from_minutes + degrees_from_seconds
return total_degrees
def dms_to_decimal(degrees, minutes, seconds):
decimal_degrees = degrees + (minutes / 60.0) + (seconds / 3600.0)
return decimal_degrees
def calculate_azimuth_hauteur(latitude, H_degrees, Dec_degrees):
lat_rad = math.radians(latitude)
H_rad = math.radians(H_degrees)
Dec_rad = math.radians(Dec_degrees)
sin_hauteur = math.sin(Dec_rad) * math.sin(lat_rad) + math.cos(Dec_rad) * math.cos(lat_rad) * math.cos(H_rad)
hauteur = math.degrees(math.asin(sin_hauteur))
cos_az = (math.sin(Dec_rad) - math.sin(math.radians(hauteur)) * math.sin(lat_rad)) / (math.cos(math.radians(hauteur)) * math.cos(lat_rad))
azimuth = math.degrees(math.acos(cos_az))
if math.sin(H_rad) > 0:
azimuth = 360 - azimuth
return azimuth, hauteur
# Données d'entrée à changer
longitude = 2.5
latitude = 45.0
year = 2024
month = 6
day = 19
hour = 2
minute = 0
second = 0
#Ascension Droite de l'asrte à changer
AD_hours = 19
AD_minutes = 50
AD_seconds = 46.999
#Déclinaison de l'asrte à changer
D_degrees = 8
D_minutes = 52
D_seconds = 5.96
D_decimal_angle = dms_to_decimal(D_degrees, D_minutes, D_seconds)
JJ = julian_day(year, month, day, hour, minute, second)
LST_degrees = local_sideral_time(year, month, day, hour, minute, second, longitude)
LST_hours, LST_minutes, LST_seconds = degrees_to_hms(LST_degrees)
STG = sideral_time_greenwich(JJ)
STG_hours, STG_minutes, STG_seconds = degrees_to_hms(STG)
AD = hms_to_degrees(AD_hours, AD_minutes, AD_seconds)
H_degrees = LST_degrees - AD
H_hours, H_minutes, H_seconds = degrees_to_hms(H_degrees)
azimuth, hauteur = calculate_azimuth_hauteur(latitude, H_degrees, D_decimal_angle)
print(f"Données d'entrée:\nAnnée: {year}, Mois: {month}, Jour: {day}, Heure: {hour}, Minute: {minute}, Seconde: {second}, Latitude: {latitude}, Longitude: {longitude}")
print(f"Jour Julien (JJ):", JJ)
print(f"Heure sidérale Greenwich: {STG_hours} heures, {STG_minutes} minutes, {STG_seconds:.2f} secondes")
print(f"Heure sidérale locale: {LST_hours} heures, {LST_minutes} minutes, {LST_seconds:.2f} secondes")
print(f"Ascension Droite (AD):", AD)
print(f"Angle horaire (H): {H_hours} heures, {H_minutes} minutes, {H_seconds:.2f} secondes")
print(f"Azimut: {azimuth:.2f} degrés")
print(f"Hauteur: {hauteur:.2f} degrés")