Lune / Phase Lunaire Algorithme
Quelqu'un sait-il un algorithme pour calculer la phase de la lune ou de l'âge à une date donnée ou trouver les dates de la nouvelle/pleine lune dans une année donnée?
Recherche sur google me dit que la réponse est dans certains livres d'Astronomie, mais je n'ai pas vraiment envie d'acheter un livre en entier quand je n'ai besoin que d'une seule page.
Mise à jour:
J'aurais qualifié de ma déclaration au sujet de googler un peu mieux. J'ai fait de trouver des solutions qui n'a travaillé que sur certains sous-ensembles de temps (années 1900); et le trig solutions serait plus gourmand en ressources que je le voudrais.
S Lott dans son Python livre a plusieurs algorithmes pour le calcul de Pâques sur une année donnée, la plupart sont de moins en moins de dix lignes de code et du travail pour tous les jours dans le calendrier Grégorien. Trouver la pleine lune de Mars est un élément clé de trouver de Pâques, j'ai donc pensé il devrait y avoir un algorithme qui ne nécessite pas de trig et fonctionne pour toutes les dates du calendrier Grégorien.
- Le même problème a été ici grappes de fois caché dans le problème de la détermination de la date de Pâques, de la Charpie, le vendredi saint, et/ou de la Pâque.
- Une précision astronomique modèle est inévitablement complexe, le calcul de la pleine lune à partir de la date de Pâques est dérivé (voir en.wikipedia.org/wiki/Paschal_full_moon) utilise un modèle simplifié.
- D'une grande utilité pour l'moon.py cité dans la réponse choisie est d'écrire une interface graphique de l'application (j'irais avec GTK) pour réellement montrer la phase de la lune avec une photo de la lune (en fait, je suis en train de faire ce qui est devenu beaucoup plus facile avec cette question et ses réponses...)
Vous devez vous connecter pour publier un commentaire.
J'ai porté du code Python pour cela un moment de retour. J'allais juste un lien, mais il s'avère qu'il est tombé sur le web dans l'intervalle, j'ai donc dû aller dépoussiérer et le télécharger à nouveau. Voir moon.py qui est dérivée à partir de John Walker moontool.
Je ne trouve pas de référence pour ce pour ce les travées du temps c'est exact, soit, mais il semble que les auteurs ont été assez rigoureux. Ce qui signifie oui, il fait utiliser la trigo, mais je ne peux pas imaginer ce que le diable vous utiliserez pour ce qui ferait de calcul prohibitif. Python appel de fonction, les frais généraux est probablement plus élevé que le coût des opérations trigonométriques. Les ordinateurs sont assez rapide à l'informatique.
Les algorithmes utilisés dans le code sont tirées des sources suivantes:
Meeus, Jean. Astronomical Algorithms. Richmond: Willmann-Bell, 1991. ISBN 0-943396-35-2.
Un must-have; si vous achetez seulement un livre, assurez-vous qu'il est celui-là. Les algorithmes sont présentés mathématiquement, pas comme les programmes d'ordinateur, mais le code source de la mise en œuvre de la plupart des algorithmes dans le livre peut être commandé séparément à partir de l'éditeur dans QuickBasic, Turbo Pascal ou C. Meeus fournit de nombreux exemples de calculs qui sont essentiels pour le débogage de votre code, et souvent présente plusieurs algorithmes différents compromis entre la précision, la vitesse, la complexité, et à long terme (du siècle et du millénaire) la validité.
Duffett-Smith, Peter. L'Astronomie Pratique Avec Votre Calculatrice. 3e ed. Cambridge: Cambridge University Press, 1981. ISBN 0-521-28411-2.
Malgré le mot de la Calculatrice dans le titre; c'est une référence précieuse si vous êtes intéressé dans le développement de logiciel qui calcule les positions des planètes, les orbites, les éclipses, et la comme. Plus de renseignements, étant donné que dans Meeus, qui aide ceux qui ne sont pas déjà versé dans l'astronomie apprennent souvent de la confusion terminologique. Les algorithmes donnés sont plus simples et moins précises que celles fournies par Meeus, mais sont adaptés pour la plupart des travaux pratiques.
Je pense que vous avez cherché à tromper google:
Si vous êtes comme moi, vous essayez d'être prudent programmeur. Si cela vous rend nerveux quand vous voyez code aléatoire dispersés à travers l'internet qui vise à résoudre un complexe astronomique problème, mais n'explique pas pourquoi la solution est correcte.
Vous croyez qu'il doit y avoir des sources faisant autorité tels que livres qui contiennent de l'attention, et complète, des solutions. Par exemple:
Vous placez votre confiance dans largement utilisé et bien testé, bibliothèques open source qui peuvent avoir leurs erreurs corrigées (à la différence des pages web statiques). Ici, alors, est un Python solution à votre question en se basant sur la PyEphem de la bibliothèque, à l'aide de la Les Phases de la Lune interface.
Cela renvoie
Aussi, pyephem — scientifique de qualité de l'astronomie routines [PyPI], qui est un paquet Python mais a la calcul tripes dans C, et que ne dire
Pyephem utilise par défaut universel coordonné (UTC) heure. Je voulais un programme qui permettrait de générer une liste de pleines lunes qui seraient exactes dans le fuseau horaire du pacifique. Le code ci-dessous calculer les pleines lunes pour une année donnée, puis de régler cela à l'aide de la ephem.localtime() la méthode pour calibrer le fuseau horaire désiré. Il apparaît également pour prendre correctement en compte l'heure d'été ainsi. Merci à Richard, ce code est similaire à ce qu'il avait écrit.
Le code ci-dessus sera de retour:
Je sais que vous êtes à la recherche pour le Python, mais si vous pouvez comprendre C# il y a un projet open source là-bas appelé Chronos XP qui le fait très bien.
Un rapide google a révélé cette.
Si vous n'avez pas besoin d'une grande précision, vous pouvez toujours (ab)utiliser un lunaire (ou luni-solaire) calendrier de la classe (p. ex.,
HijriCalendar
ouChineseLunisolarCalendar
dans Microsoft .NET) pour calculer le (approximative) de la phase de lune de toute date, le calendrier du "jour du mois" la propriété étant un lunaire (ou luni-solaire) jour de calendrier, correspond toujours à la phase de la lune (par exemple, le jour 1 est la nouvelle lune, le jour, le 15, c'est la pleine lune, etc.)