Gladir.com - LotusScript - Astronomie - Phase lunaire


Depuis déjà fort longtemps, certaines applications DOS, fournissait la possibilité d'obtenir les phases lunaires lorsqu'on consultait leur calendrier comme en fait fois la capture du MonsterBook:

Pourtant, même s'il ne s'agit que de convertir une date Julienne en Grégorienne pour ensuite calculer à tous les 30 jours (plus exactement 29,53058) la lune revenant inlassablement, les systèmes d'exploitation ne l'indique pas! Vous trouverez la réponse que vous souhaitez, à l'aide du code source LotusScript suivant:
Function MoonPhase(Yr As Integer, Mh As Integer,Dy As Integer) As Double
     Dim M As Double
     Dim  XYear,Century As Long
     If Mh <= 2 Then
          Yr = Yr - 1
          Mh = Mh + 12
     End If
     Mh = Mh - 3
     XYear = Yr Mod 100
     Century = (((Yr \ 100) * 146097)) \ 4
     XYear = (XYear * 1461) \ 4
     M = (Int(((((Mh * 153) + 2) / 5) + Dy) + 1721119 + XYear + Century) + 4.867) / 29.53058
     MoonPhase=Abs(2 * (M - Int(M)) - 1)
End Function

Sub Main()
     Dim I As Integer
     Dim  CircleType As Double
     For I = 1 To 31
          CircleType = MoonPhase(1999, 11, I)
          If CircleType > 0.97 Then
               Print Str$(I) &" novembre 1999, Phase de la lune:Pleine lune"
          Else 
               If CircleType < 0.03 Then
                    Print Str$(I) &" novembre 1999, Phase de la lune:Pas de lune"
               Else 
                    If (CircleType > 0.46) And (CircleType < 0.53) Then
                         Print Str$(I) &" novembre 1999, Phase de la lune: Quart de lune"
                    End If
               End If
          End If
     Next
     For I = 1 To 31
          CircleType = MoonPhase(2007, 8, I)
          If CircleType > 0.97 Then
               Print Str$(I) &" août 2007, Phase de la lune:Pleine lune"
          Else 
               If CircleType < 0.03 Then
                    Print Str$(I) &" août 2007, Phase de la lune:Pas de lune"
               Else
                    If (CircleType > 0.46) And (CircleType < 0.53) Then 
                         Print Str$(I) &" août 2007, Phase de la lune: Quart de lune"
                    End If
               End If 
          End If
     Next
End Sub
on obtiendra le résultat suivant:
1 novembre 1999, Phase de la lune: Quart de lune
8 novembre 1999, Phase de la lune:Pas de lune
15 novembre 1999, Phase de la lune: Quart de lune
23 novembre 1999, Phase de la lune:Pleine lune
30 novembre 1999, Phase de la lune: Quart de lune
6 août 2007, Phase de la lune: Quart de lune
13 août 2007, Phase de la lune:Pas de lune
20 août 2007, Phase de la lune: Quart de lune
28 août 2007, Phase de la lune:Pleine lune


Dernière mise à jour: Mardi, le 7 février 2006