Saltar al contenido

Algoritmo Luna / Fase Lunar

La guía paso a paso o código que hallarás en este artículo es la resolución más rápida y efectiva que hallamos a tu duda o dilema.

Solución:

Transferí un código a Python para esto hace un tiempo. Iba a vincularlo, pero resulta que se cayó de la web mientras tanto, así que tuve que desempolvarlo y subirlo de nuevo. Consulte moon.py, que se deriva de la herramienta lunar de John Walker.

No puedo encontrar una referencia para esto para qué períodos de tiempo es preciso tampoco, pero parece que los autores fueron bastante rigurosos. Lo que significa que sí, usa trigonometría, pero no puedo imaginar para qué diablos estarías usando esto que lo haría computacionalmente prohibitivo. La sobrecarga de la llamada a la función de Python es probablemente más que el costo de las operaciones trigonométricas. Las computadoras son bastante rápidas en la computación.

Los algoritmos utilizados en el código se extraen de las siguientes fuentes:

Meeus, Jean. Algoritmos astronómicos. Richmond: Willmann-Bell, 1991. ISBN 0-943396-35-2.

Una necesidad; si solo compras un libro, asegúrate de que sea este. Los algoritmos se presentan matemáticamente, no como programas de computadora, pero el código fuente que implementa muchos de los algoritmos del libro se puede pedir por separado al editor en QuickBasic, Turbo Pascal o C. Meeus proporciona muchos ejemplos resueltos de cálculos que son esenciales para la depuración. su código, y con frecuencia presenta varios algoritmos con diferentes compensaciones entre precisión, velocidad, complejidad y validez a largo plazo (siglo y milenios).

Duffett-Smith, Peter. Astronomía Práctica Con Tu Calculadora. 3ra ed. Cambridge: Cambridge University Press, 1981. ISBN 0-521-28411-2.

A pesar de la palabra Calculadora en el título; esta es una referencia valiosa si está interesado en desarrollar software que calcule posiciones planetarias, órbitas, eclipses y similares. Se proporciona más información básica que en Meeus, lo que ayuda a aquellos que aún no están versados ​​en astronomía a aprender la terminología que suele ser confusa. Los algoritmos proporcionados son más simples y menos precisos que los proporcionados por Meeus, pero son adecuados para la mayoría de los trabajos prácticos.

Si eres como yo, intenta ser un programador cuidadoso. Así que te pone nervioso cuando ves un código aleatorio esparcido por Internet que pretende resolver un problema astronómico complejo, pero no explica por qué la solución es correcta.

Usted cree que debe haber fuentes autorizadas como libros que contienen soluciones cuidadosas y completas. Por ejemplo:

Meeus, Jean. Algoritmos astronómicos. Richmond: Willmann-Bell, 1991. ISBN 0-943396-35-2.

Duffett-Smith, Peter. Astronomía Práctica Con Tu Calculadora. 3ra ed. Cambridge: Cambridge University Press, 1981. ISBN 0-521-28411-2.

Usted deposita su confianza en bibliotecas de código abierto ampliamente utilizadas, bien probadas, que pueden corregir sus errores (a diferencia de static páginas web). Aquí, entonces, hay una solución de Python para su pregunta basada en la biblioteca PyEphem, utilizando la interfaz Phases of the Moon.

#!/usr/bin/python
import datetime
import ephem

def get_phase_on_day(year,month,day):
  """Returns a floating-point number from 0-1. where 0=new, 0.5=full, 1=new"""
  #Ephem stores its date numbers as floating points, which the following uses
  #to conveniently extract the percent time between one new moon and the next
  #This corresponds (somewhat roughly) to the phase of the moon.

  #Use Year, Month, Day as arguments
  date=ephem.Date(datetime.date(year,month,day))

  nnm = ephem.next_new_moon    (date)
  pnm = ephem.previous_new_moon(date)

  lunation=(date-pnm)/(nnm-pnm)

  #Note that there is a ephem.Moon().phase() command, but this returns the
  #percentage of the moon which is illuminated. This is not really what we want.

  return lunation

def get_moons_in_year(year):
  """Returns a list of the full and new moons in a year. The list contains tuples
of either the form (DATE,'full') or the form (DATE,'new')"""
  moons=[]

  date=ephem.Date(datetime.date(year,01,01))
  while date.datetime().year==year:
    date=ephem.next_full_moon(date)
    moons.append( (date,'full') )

  date=ephem.Date(datetime.date(year,01,01))
  while date.datetime().year==year:
    date=ephem.next_new_moon(date)
    moons.append( (date,'new') )

  #Note that previous_first_quarter_moon() and previous_last_quarter_moon()
  #are also methods

  moons.sort(key=lambda x: x[0])

  return moons

print get_phase_on_day(2013,1,1)

print get_moons_in_year(2013)

esto vuelve

0.632652265318

[(2013/1/11 19:43:37, 'new'), (2013/1/27 04:38:22, 'full'), (2013/2/10 07:20:06, 'new'), (2013/2/25 20:26:03, 'full'), (2013/3/11 19:51:00, 'new'), (2013/3/27 09:27:18, 'full'), (2013/4/10 09:35:17, 'new'), (2013/4/25 19:57:06, 'full'), (2013/5/10 00:28:22, 'new'), (2013/5/25 04:24:55, 'full'), (2013/6/8 15:56:19, 'new'), (2013/6/23 11:32:15, 'full'), (2013/7/8 07:14:16, 'new'), (2013/7/22 18:15:31, 'full'), (2013/8/6 21:50:40, 'new'), (2013/8/21 01:44:35, 'full'), (2013/9/5 11:36:07, 'new'), (2013/9/19 11:12:49, 'full'), (2013/10/5 00:34:31, 'new'), (2013/10/18 23:37:39, 'full'), (2013/11/3 12:49:57, 'new'), (2013/11/17 15:15:44, 'full'), (2013/12/3 00:22:22, 'new'), (2013/12/17 09:28:05, 'full'), (2014/1/1 11:14:10, 'new'), (2014/1/16 04:52:10, 'full')]

Creo que buscaste en google equivocado:

  • http://home.att.net/~srschmitt/zenosamples/zs_lunarphasecalc.html
  • http://www.voidware.com/fase_luna.htm
  • http://www.ben-daglish.net/moon.shtml
  • http://www.faqs.org/faqs/astronomy/faq/part3/section-15.html

Reseñas y valoraciones

Nos puedes añadir valor a nuestra información aportando tu veteranía en las interpretaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *