Section courante

A propos

Section administrative du site

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, inspiré du code d'Alan Graff, à l'aide du code source LotusScript suivant :

  1. Function MoonPhase(Yr As Integer, Mh As Integer,Dy As Integer) As Double
  2.      Dim M As Double
  3.      Dim  XYear,Century As Long
  4.      If Mh <= 2 Then
  5.           Yr = Yr - 1
  6.           Mh = Mh + 12
  7.      End If
  8.      Mh = Mh - 3
  9.      XYear = Yr Mod 100
  10.      Century = (((Yr \ 100) * 146097)) \ 4
  11.      XYear = (XYear * 1461) \ 4
  12.      M = (Int(((((Mh * 153) + 2) / 5) + Dy) + 1721119 + XYear + Century) + 4.867) / 29.53058
  13.      MoonPhase=Abs(2 * (M - Int(M)) - 1)
  14. End Function
  15.  
  16. Sub Main()
  17.      Dim I As Integer
  18.      Dim  CircleType As Double
  19.      For I = 1 To 31
  20.           CircleType = MoonPhase(1999, 11, I)
  21.           If CircleType > 0.97 Then
  22.                Print Str$(I) & " novembre 1999, Phase de la lune:Pleine lune"
  23.           Else 
  24.                If CircleType < 0.03 Then
  25.                     Print Str$(I) & " novembre 1999, Phase de la lune:Pas de lune"
  26.                Else 
  27.                     If (CircleType > 0.46) And (CircleType < 0.53) Then
  28.                          Print Str$(I) & " novembre 1999, Phase de la lune: Quart de lune"
  29.                     End If
  30.                End If
  31.           End If
  32.      Next
  33.      For I = 1 To 31
  34.           CircleType = MoonPhase(2007, 8, I)
  35.           If CircleType > 0.97 Then
  36.                Print Str$(I) & " août 2007, Phase de la lune:Pleine lune"
  37.           Else 
  38.                If CircleType < 0.03 Then
  39.                     Print Str$(I) & " août 2007, Phase de la lune:Pas de lune"
  40.                Else
  41.                     If (CircleType > 0.46) And (CircleType < 0.53) Then 
  42.                          Print Str$(I) & " août 2007, Phase de la lune: Quart de lune"
  43.                     End If
  44.                End If 
  45.           End If
  46.      Next
  47. 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 : Dimanche, le 18 janvier 2015