Calcul des phases lunaire pour la date du jour
Publié : ven. 12/sept./2025 7:38
Bonjour,
Petit programme fonctionnel de calcul des phases lunaire pour la date du jour pour l'hémisphère nord (Paris).
Petit programme fonctionnel de calcul des phases lunaire pour la date du jour pour l'hémisphère nord (Paris).
Code : Tout sélectionner
; ----------- Calcul des phases lunaire pour la date du jour ----------
; pour l'hémisphère nord (Paris)
; Site de contrôle : https://starwalk.space/fr/moon-calendar
; Ph. Mijon - septembre 2025 - PB 6.21 sur Windows 11
; ---------------------------------------------------------------------
; -------------------------- Déclaration des procédures de calcul et données fixes
Declare.f AgeLune(annee, mois, jour)
Declare.s PhaseLune(age.f)
Declare.f IlluminationLune(age.f)
Global RefJulien = 2451550.1 ; Nouvelle lune de référence du 6 janvier 2000 à 14h24
Global Lunaison = 29.530588853 ; Longueur du mois lunaire 29j 12h 44m 2,9s
; -------------------------- Calcul de la phase lunaire du jour
annee = Year(Date())
mois = Month(Date())
jour = Day(Date())
age.f = AgeLune(annee, mois, jour)
illumination.f = IlluminationLune(age.f)
phase$ = PhaseLune(age.f)
MessageRequester("Phase Lunaire du " + Str(jour) + "/" + Str(mois) + "/" + Str(annee), "La Lune est en phase : " + phase$ + " (" + StrF(illumination.f, 1) + "% illuminée)")
End
; -------------------------- Calcul de l'âge lunaire avec correction
Procedure.f AgeLune(annee, mois, jour)
If mois <= 2
annee = annee - 1
mois = mois + 12
EndIf
a = annee / 100
b = 2 - a + a / 4
JL = Int(365.25 * (annee + 4716)) + Int(30.6001 * (mois + 1)) + jour + b - 1524.5
age.f = Mod(JL - RefJulien, Lunaison)
If age.f < 0
age.f = age.f + Lunaison
EndIf
; Correction simple de l’anomalie moyenne
M = 2 * #PI * age.f / Lunaison
correction.f = 0.5 * Sin(M) - 0.25 * Sin(2 * M)
age.f = age.f + correction.f
; Facteur de correction pour coller aux données observées
; aux coordonnées de Paris (Lat:48.86667 / Lon:2.33333)
age.f = age.f + 0.56
ProcedureReturn age.f
EndProcedure
; -------------------------- Détermination de la phase lunaire
Procedure.s PhaseLune(age.f)
If age.f < 1.84566
phase$ = "🌑 Nouvelle lune"
ElseIf age.f < 5.53699
phase$ = "🌒 Premier croissant"
ElseIf age.f < 9.22831
phase$ = "🌓 Premier quartier"
ElseIf age.f < 12.91963
phase$ = "🌔 Gibbeuse croissante"
ElseIf age.f < 16.61096
phase$ = "🌕 Pleine lune"
ElseIf age.f < 20.30228
phase$ = "🌖 Gibbeuse décroissante"
ElseIf age.f < 23.99361
phase$ = "🌗 Dernier quartier"
ElseIf age.f < 27.68493
phase$ = "🌘 Dernier croissant"
Else
phase$ = "🌑 Nouvelle lune"
EndIf
ProcedureReturn phase$
EndProcedure
; -------------------------- Calcul du pourcentage d'illumination
Procedure.f IlluminationLune(age.f)
illumination.f = (1 - Cos(2 * #PI * age.f / Lunaison)) / 2 * 100
ProcedureReturn illumination.f
EndProcedure