Section courante

A propos

Section administrative du site

C# (C Sharp)   Oberon .NET   RemObjects Chrome   VB .NET  

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 Visual Basic .NET (VB .NET) suivant :

  1. Module Module1
  2.  
  3.     Function MoonPhase(ByVal Year As Integer, ByVal Month As Integer, ByVal Day As Integer) As Double
  4.         Dim M As Double
  5.         Dim XYear, Century As Integer
  6.         If Month <= 2 Then
  7.             Year -= 1
  8.             Month += 12
  9.         End If
  10.  
  11.         Month -= 3
  12.         XYear = Year Mod 100
  13.         Century = Math.Floor(((Math.Floor(Year / 100) * 146097)) / 4)
  14.         XYear = Math.Floor((XYear * 1461) / 4)
  15.         M = (Math.Floor(((((Month * 153) + 2) / 5) + Day) + 1721119 + XYear + Century) + 4.867) / 29.53058
  16.         MoonPhase = Math.Abs(2 * (M - Math.Floor(M)) - 1)
  17.     End Function
  18.  
  19.     Sub Main()
  20.         Dim I As Integer
  21.         Dim CircleType As Double
  22.         For I = 1 To 31
  23.             CircleType = MoonPhase(1999, 11, I)
  24.             If CircleType > 0.97 Then
  25.                 Console.WriteLine(CStr(I) & " novembre 1999, Phase de la lune:Pleine lune")
  26.             Else
  27.                 If CircleType < 0.03 Then
  28.                     Console.WriteLine(CStr(I) & " novembre 1999, Phase de la lune:Pas de lune")
  29.                 Else
  30.                     If (CircleType > 0.46) And (CircleType < 0.53) Then
  31.                         Console.WriteLine(CStr(I) & " novembre 1999, Phase de la lune: Quart de lune")
  32.                     End If
  33.                 End If
  34.             End If
  35.         Next
  36.         For I = 1 To 31
  37.             CircleType = MoonPhase(2007, 8, I)
  38.             If CircleType > 0.97 Then
  39.                 Console.WriteLine(CStr(I) & " août 2007, Phase de la lune:Pleine lune")
  40.             Else
  41.                 If CircleType < 0.03 Then
  42.                     Console.WriteLine(CStr(I) & " août 2007, Phase de la lune:Pas de lune")
  43.                 Else
  44.                     If (CircleType > 0.46) And (CircleType < 0.53) Then
  45.                         Console.WriteLine(CStr(I) & " août 2007, Phase de la lune: Quart de lune")
  46.                     End If
  47.                 End If
  48.             End If
  49.         Next
  50.     End Sub
  51.  
  52. End Module

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 : Samedi, le 22 octobre 2016