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 C++ suivant :
Essayer maintenant !
- #include <iostream>
- #include <math.h>
-
- double MoonPhase(int Year,int Month,int Day) {
- double M;
- int XYear,Century;
- if(Month<=2) {
- Year--;
- Month+=12;
- }
- Month-=3;
- XYear=Year % 100;
- Century=(int(Year / 100)*146097) >> 2;
- XYear=(XYear*1461) >> 2;
- M=(floor(((((Month*153)+2)/ 5)+Day)+1721119+XYear+Century)+4.867)/29.53058;
- return fabs(2*(M-floor(M))-1);
- }
-
- int main()
- {
- int I;
- double CircleType;
- for(I=1;I<=31;I++) {
- CircleType=MoonPhase(1999,11,I);
- if(CircleType>0.97) std::cout << I << " novembre 1999, Phase de la lune:Pleine lune" << std::endl; else
- if(CircleType<0.03) std::cout << I << " novembre 1999, Phase de la lune:Pas de lune" << std::endl; else
- if((CircleType>0.46)&&(CircleType<0.53)) std::cout << I << " novembre 1999, Phase de la lune: Quart de lune" << std::endl;
- }
- for(I=1;I<=31;I++) {
- CircleType=MoonPhase(2007,8,I);
- if(CircleType>0.97) std::cout << I << " août 2007, Phase de la lune:Pleine lune" << std::endl; else
- if(CircleType<0.03) std::cout << I << " août 2007, Phase de la lune:Pas de lune" << std::endl; else
- if((CircleType>0.46)&&(CircleType<0.53)) std::cout << I << " août 2007, Phase de la lune: Quart de lune" << std::endl;
- }
- return 0;
- }
on obtiendra le résultat suivant :
1 novembre 1999, Phase de la lune: Quart de lune8 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 24 novembre 2015