Anda di halaman 1dari 28

http://jms32.eresmas.net/web2008/docume ntos/divulgacion/astronomia/2010_08_14_ FasesLuna.

html Edad de la luna


Descripcin general
Este documento pretende mostrar la forma de calcular la edad de la luna, es decir la forma de calcular las fases de la luna para una fecha dada

[TOC] Tabla de Contenidos

Edad de la luna o Definiciones o Clculos Numero de Oro Epacta Edad lunar Mtodo primero (Sin epacta) Mtodo segundo (Con epacta) Observaciones sobre los mtodos de clculo Fases de la Luna 2010 Formulas matemticas con precisin astronmica Bibliografa consultada

Fases de la luna

Definiciones

Se llama Edad de la Luna al nmero de das y fraccin de da transcurridos desde la ltima luna nueva. Vara de 0 a 29,5 (duracin de la revolucin sindica). Ciclo Lunar o Ciclo de Mentn por ser este astrnomo griego el primero que se fij que 235 lunaciones comprenden 6.939,69 das y 19 aos trpicos corresponden a 6.939,69 das, es decir que cada 19 aos se vuelven a encontrar el Sol y la Luna en las mismas posiciones relativas y por lo tanto cada 19 aos se vuelven a repetir las fases de la Luna en las mismas fechas. Nmero de Oro es el nmero que corresponde al ao considerado en el ciclo lunar. Debido a que el primer ao de nuestra era le corresponde el nmero 2, para obtener el nmero de oro de un ao cualquiera, se divide por 19 el nmero del ao, y el resto de la divisin (aumentndolo en 1 unidad) es el nmero de oro buscado. Epacta es la edad de la Luna el 1 de Enero del ao considerado. Este nmero indica la fase en que se encuentra la Luna al empezar el ao.

Clculos

Numero de Oro
El Nmero de oro (o nmero ureo, y no tiene nada que ver con las matemticas) se calcula de la siguiente manera (se trata de un clculo mdulo 19):

Se divide el ao por 19 (por ejemplo, el ao 2008, 2008/19 = 105,68 que truncan en 105); Se coge el residuo de la divisin anterior (105 19 = 1995 restado de 2008, nos queda un residuo de 13 aos); Se suma 1 (13+1 = 14): en 2008 tiene pues un nmero ureo 14. Que corresponde a la frmula: (ao mdulo 19)+1

Observacin: Esta regla ser vlida hasta que el Ciclo Lunar o Ciclo de Mentn de 19 aos, que es ligeramente ms largo de la cuenta (casi una hora y media), no sea ajustado para reflejar su avance, que al cabo de 16 ciclos (304 aos) ser de casi un da, de acuerdo con las observaciones actuales del ciclo lunar.

Epacta
Existen varios mtodos, ms o menos complicados para calcular la epacta, pero la forma ms sencilla es utilizar una tabla con los valores pre calculados.

Hay que tener en cuenta que segn el Ciclo Lunar o Ciclo de Mentn, los valores se repiten cada 19 aos, por lo que para calcular la epacta de un ao que no est en la tabla hay que sumar o restar 19 aos tantas veces como sean necesarias para entrar dentro del rango de valores de la tabla. Valores pre calculados de la Epacta Aos Valor Epacta 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 24 5 16 28 9 20 1 12 22 3 15 25 7 18 0 11 22 2 14

Edad lunar
Mtodo primero (Sin epacta) Para ver la forma de hacerlo utilizaremos un ejemplo, cul ser la fase lunar el da 6 de Diciembre de 2004?

En primer lugar, sumamos las cifras del ao actual pero tratando los dos ltimos dgitos del ao como un slo nmero, en lugar de cifras individuales, as la suma para el ao 2015 sera: 2 + 0 + 15 = 17. ( Valores del ejemplo: 2004=2+0+04=6 ) Multiplicamos el resultado por 11: (Valores del ejemplo: 6x11=66 ) Suma el nmero del mes. Si el mes es Enero o Febrero sumamos 1 ms. . (Valores del ejemplo: 66+12=78 ) Suma el da del mes. (Valores del ejemplo: 78+6=84 ) Al resultado le restamos 30 sucesivamente hasta que no se puedan seguir realizando sustracciones: (Valores del ejemplo: 84-30=54-30=24 ) Este resultado (24)es la edad de la Luna al medioda del da elegido

As pues el da 6 de diciembre la edad de la Luna es de 24 das, lo cual corresponde a 3 das despus del cuarto menguante. Si el resultado es 0 o 29 tendremos luna nueva, si es 7 cuarto creciente, para 14 tenemos luna llena, para 21 cuarto menguante. Los resultados intermedios determinan los valores entre fases correspondientes. El mtodo es vlido desde el ao 2000 al 2018 Lo mejor del mtodo es que puede ser vlido para cualquier fecha porque el Ciclo Lunar o Ciclo de Mentn indica que la misma fase lunar se vuelve a producir en la misma fecha cada 19 aos. Por tanto si quieres calcular la fase en una fecha anterior al 2000, puedes sumar 19 repetidas veces hasta que llegues a una fecha incluida en el rango 2000 - 2018, para aos posteriores basta con restar 19 hasta encontrarse en el intervalo indicado Atencin!!!: Esta forma de calcular la edad de la luna tiene un margen de error de 1 da en ms o en menos Un ejemplo: Para 1978 sumamos 19 repetidamente hasta encontrarnos en el intervalo 2000-2018:

1978+19=1997 1997+19=2016

Hacemos el clculo para 2016 tal como se explic anteriormente y obtendremos el resultado. La clave est en que las fases de la Luna se repiten en las mismas fechas tanto en 1978 como en 2016. Por ejemplo si tienes una fecha tal como 25/01/2005 si aplicas ese mtodo

2005=2+0+05=7 7x11=77 77+25+1=103 103-30=73 ; 73-30=43 ; 43-30=13

Te sale una edad de 13 das, que corresponde a Luna Llena. En realidad una edad de 13 das no corresponde cuarto creciente, sino prcticamente Luna llena, que se produce efectivamente en el da 14, pero 13 est ms cerca de 14 que de 7, as que la fase ms aproximada es la de llena. Mtodo segundo (Con epacta) La frmula es la siguiente:

Edad de la Luna = Epacta + Correccin Mensual + da del mes Si el nmero obtenido es superior a 30 das restar 30 para obtener el valor

La epacta se calcula segn hemos visto en el apartado correspondiente La correccin mensual es un valor numrico que se toma de la tabla siguiente El da del mes es el valor numrico del da del mes (Ejemplo: un 15 de septiembre el valor es 15) Correccion Mensual Mes Correccin Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre Diciembre Ejemplos * Edad de la Luna = Epacta + Correccin Mensual + da del mes * Si la numero obtenido es superior a 30 das restar 30 para obtener el valor Calcular la edad de la luna el da 1 de enero de 2010 0 1 0 1 2 3 4 5 6 7 8 9

* Edad de la luna = 15+0+1=16 Calcular la edad de la luna el da 11 de Agosto de 2010 * Edad de la luna = 15+5+11=31 (-30) = 1 Calcular la edad de la luna el da 24 de Agosto de 2010 * Edad de la luna = 15+5+24=44 (-30) = 14

Observaciones sobre los mtodos de clculo


El valor obtenido segn se calcula la edad de la luna por un mtodo u otro hay veces que difiere en un da en ms o en menos, y adems no existen desviaciones en los clculos es decir hay veces que un mtodo da un da ms y en otro clculo da un da menos. La realidad es que al ser unos mtodos aproximados, la fiabilidad de los resultados obtenidos est a nivel aficionado, es decir no sirven para realizar clculos astronmicos complicados, pero si sirven para la gran mayora de la gente que quiere saber qu da ser luna llena Para realizar comprobaciones en el cuadro siguiente se muestran las fechas importantes de las fases lunares durante el ao 2010
Fases de la Luna 2010

Luna Nueva

Fases de la Luna 2010 Cuarto Luna Cuarto Creciente Llena Menguante 07/01/2010

15/01/2010 23/01/2010 30/01/2010 05/02/2010 14/02/2010 22/02/2010 28/02/2010 07/03/2010 15/03/2010 23/03/2010 30/03/2010 06/04/2010 14/04/2010 21/04/2010 28/04/2010 06/05/2010 14/05/2010 20/05/2010 27/05/2010 04/06/2010 12/06/2010 19/06/2010 26/06/2010 04/07/2010 11/07/2010 18/07/2010 26/07/2010 03/08/2010 10/08/2010 16/08/2010 24/08/2010 01/09/2010 08/09/2010 15/09/2010 23/09/2010 01/10/2010

Fases de la Luna 2010 Luna Cuarto Luna Cuarto Nueva Creciente Llena Menguante 07/10/2010 14/10/2010 23/10/2010 30/10/2010 06/11/2010 13/11/2010 21/11/2010 28/11/2010 05/12/2010 13/12/2010 21/12/2010 28/12/2010

Formulas matemticas con precisin astronmica


Si sabes programar y necesitas las formulas matemticas que permiten calcular con precisin astronmica las fases de la luna puedes ver este documento donde se describe una clase (escrita en Visual Basic .NET) que permite realizar ese tipo de clculos

Bibliografa consultada

http://86400.es/2007/11/26/epacta-como-calcular-la-fase-de-la-luna-mentalmente/ http://mizar.blogalia.com/historias/21732 http://guias.masmar.net/Apuntes-Nuticos/Manual-Navegacin/Manual-deNavegacin-Astronoma-7/Edad-de-la-Luna,-Ciclo-Lunar,-Nmero-de-oro,-Epacta http://www.solar-ecuador.com/Calendario-Lunar/Explicaciones/Fase-LunarNacimiento.html http://www.tutiempo.net/luna/fases_8_2010.htm http://es.wikipedia.org/wiki/Epacta http://es.wikipedia.org/wiki/Ciclo_met%C3%B3nico http://es.wikipedia.org/wiki/N%C3%BAmero_%C3%A1ureo_(astronom%C3%AD a)

A.2.Enlaces
[Para saber mas] [Grupo de documentos] [Documento Index] [Documento Start] [Imprimir el Documento]

No Olvides adir ste sitio a tus marcadores favoritos ! Pulsa (Ctrl + D)

Calculo de las fases de la luna


Descripcin general
En este documento contiene una clase escrita en Visual Basic.NET que contiene las formulas que permiten calcular con precisin astronmica las fases de la luna en una fecha determinada.

[TOC] Tabla de Contenidos

Calculo de las fases de la luna o Introduccin o Cdigo de la clase o Ejemplo para control de resultados

Calculo de las fases de la luna

Introduccin
Las funciones que se muestran estn traducidas de el programa [Moontool for Windows] escrito por John Walker en Diciembre de 1987. Y son de dominio pblico Referencias Web:

http://www.fourmilab.ch/ http://www.fourmilab.ch/moontoolw/

El cdigo original est escrito en C Estndar, y en ese lenguaje lo normal es que las funciones reciban una serie de datos por parmetro y devuelvan los resultados tambin por parmetro, utilizando punteros. Al traducir las funciones a Visual Basic, he respetado ese comportamiento, devolviendo los valores a travs de parmetro calificados como [ByRef] Las funciones que contiene la clase podemos clasificarlas como funciones auxiliares (calificadas con el modificador de acceso Private) que trabajan todas para la funcin que podemos considerar principal) [Phase]. (Calificada como Public)
''' <summary> ''' Calcular las fases de la luna como una fraccin: ''' </summary> ''' <param name="pdate"> Fecha de clculo juliana astronmica</param> ''' <param name="pphase">Porcentaje Iluminado de la luna en porcentaje</param> ''' <param name="mage"> Edad de la luna en das</param> ''' <param name="dist"> Distancia de la luna del centro de la tierra en Km</param> ''' <param name="angdia">Dimetro angular de la luna</param> ''' <param name="sudist">Distancia al sol</param> ''' <param name="suangdia">Dimetro angular del sol</param> ''' <returns> ''' Devuelve el ngulo de fase de terminacin como ''' un porcentaje de un crculo completo ''' </returns> Public Shared Function Phase( _ ByVal pdate As Decimal, _ ByRef pphase As Decimal, _ ByRef mage As Decimal, _ ByRef dist As Decimal, _ ByRef angdia As Decimal, _ ByRef sudist As Decimal, _ ByRef suangdia As Decimal) _ As Decimal

Esta funcin recibe la fecha de clculo en formato de fecha juliana astronmica y devuelve el ngulo de fase de terminacin como un porcentaje de un crculo completo (es decir, de 0 a 1). Tambin devuelve por parmetro la fraccin iluminada del disco de la Luna, la edad de la Luna en das y fraccin, la distancia de la Luna desde el centro de la Tierra, y el dimetro angular de la Luna vista por un observador en el centro de la Tierra.

La otra funcin que realiza un trabajo es


''' <summary> ''' Localiza las fases de la luna que rodean a la fecha actual (Juliana) ''' </summary> ''' <param name="sdate">Fecha Juliana</param> ''' <returns>una matriz con los datos</returns> ''' <remarks> ''' Encuentra las fechas de las fases de la luna que rodean la fecha actual. ''' Se devuelve en una matriz cinco fechas julianas astronmicas que ''' corresponden a la luna nueva, cuarto creciente, luna llena, ''' cuarto menguante, y siguiente luna nueva '''</remarks> Public Shared Function PhaseHunt(ByVal sdate As Decimal) As Decimal()

Que se encarga de calcular las fases de la luna ms cercanas a la fecha de trabajo (en formato Juliana astronmica) pasada por parmetro. Devuelve una matriz que contiene cinco fechas julianas que corresponde a la luna nueva (anterior a la fecha de trabajo), el cuarto creciente, la luna llena, el cuarto menguante y la prxima luna llena.

Cdigo de la clase
' ' ' '-------------------------------------------------' Clase ....: CalculosFasesLuna ' Lenguaje .: (.NET Framework 4-0) - Visual Basic .NET (Version 9.0) 2010 ' Autor ....: - Aguila - Joaquin ' Emilio ...: mailto:joaquin@medina.name ' ' DESCRIPCION.: ' Clase escrita en Visual Basic.NET que contiene las formulas que permiten ' calcular con precisin astronmica las fases de la luna en una fecha determinada. ' OBSERVACIONES.: ' ' Las funciones que se muestran estn traducidas de el programa ' [Moontool for Windows] escrito por John Walker en Diciembre de 1987. ' Y son de dominio pblico ' ' Referencias Web: ' ** http://www.fourmilab.ch/ ' ** http://www.fourmilab.ch/moontoolw/ '

' El cdigo original est escrito en C Estndar, y en ese lenguaje lo ' normal es que las funciones reciban una serie de datos por parmetro ' y devuelvan los resultados tambin por parmetro, utilizando punteros. ' Al traducir las funciones a Visual Basic, he respetado ese comportamiento, ' devolviendo los valores a travs de parmetro calificados como [ByRef] ' ' Las funciones que contiene la clase podemos clasificarlas como ' funciones auxiliares (calificadas con el modificador de acceso Private) ' que trabajan todas para la funcin que podemos considerar principal) ' [Phase]. (Calificada como Public) ' ' Los nombres de las funciones originales se han adaptado al ' sistema CamelCase usado por Microsoft, pero mantienen su nombre original ' ' BIBLIOGRAFIA.: ' "Practical Astronomy With Your Calculator" by Peter Duffett-Smith ' "Astronomical Formulae for Calculators" by Jean Meeus ' "Planetary Programs and Tables from -4000 to +2800" ' by Pierre Bretagnon and Jean-Louis Simon, Willmann-Bell, 1986. ' "Celestial BASIC" by Eric Burgess, Revised Edition, Sybex, 1985. ' ' ' MODIFICACIONES [aaaa-mm-dd h:m:s] ' - 2010-09-16 0:00:57 - Creacin ' ------------------------------------------------' '*/ ' ' ------------------------------------------------Option Explicit On ' Se deben declarar explcitamente todas las variables mediante ' instrucciones Dim o ReDim. Si intenta usar un nombre de variable ' no declarada, se producir un error en tiempo de compilacin. Option Strict On ' No se permiten las conversiones implicitas de datos, ' deben realizarse explictamente (mediante el objeto Convert) Option Infer Off ' No se permite la inferencia automatica del tipo de variables Option Compare Binary ' Declara el mtodo de comparacin predeterminado que utilizar ' al comparar los datos de cadena. ' Se producirn comparaciones de cadenas basadas en un criterio ' de ordenacin que se deriva de las representaciones binarias ' internas de los caracteres.

' Este tipo de comparacin es especialmente til si las cadenas ' pueden contener caracteres que no sern interpretados como texto. ' En este caso, no se desea afectar a las comparaciones con ' equivalencias alfabticas, como la distincin entre ' maysculas y minsculas ' ''' <summary> ''' <para>Contiene las formulas que permiten calcular con precisin ''' astronmica las fases de la luna en una fecha determinada.</para> ''' </summary> ''' <remarks> ''' <para>Funciones matematicas para el calculo de las fases de la luna</para> ''' <para>Las funciones que se muestran estn traducidas de el programa ''' [Moontool for Windows] escrito por John Walker en Diciembre de 1987. ''' Y son de dominio pblico</para> ''' ''' <para>El cdigo original est escrito en C Estndar, y en ese lenguaje ''' lo normal es que las funciones reciban una serie de datos por ''' parmetro y devuelvan los resultados tambin por parmetro, ''' utilizando punteros. Al traducir las funciones a Visual Basic, ''' he respetado ese comportamiento, devolviendo los valores a ''' travs de parmetro calificados como [ByRef]</para> ''' ''' <para>Las funciones que contiene la clase podemos clasificarlas como ''' funciones auxiliares (calificadas con el modificador de acceso Private) ''' que trabajan todas para la funcin que podemos considerar principal) ''' [Phase]. (Calificada como Public)</para> ''' <autor> John Walker en Diciembre de 1987</autor> ''' <traductor> Joaquin medina Serrano: joaquin@medina.name</traductor> ''' <rights>Dominio pblico</rights> ''' <code> ''' <para> Moontool for Windows </para> ''' <para> Release 2.0</para> ''' <para> Designed and implemented by John Walker in December 1987.</para> ''' <para> Revised and updated in July of 1989 by Ron Hitchens.</para> ''' <para> Converted to Microsoft Windows in January of 1992 by John Walker.</para> ''' <para> Convert to Win32 in March of 1999 by John Walker.</para> ''' ''' <para> The algorithms used in this program to calculate the positions of</para> ''' <para> the Sun and Moon as seen from the Earth are given in the book</para>

''' <para> "Practical Astronomy With Your Calculator" by Peter Duffett-Smith,</para> ''' <para> Second Edition, Cambridge University Press, 1981. Ignore the word</para> ''' <para> "Calculator" in the title; this is an essential reference if</para> ''' <para> you're interested in developing software which calculates</para> ''' <para> planetary positions, orbits, eclipses, and the like. If you're</para> ''' <para> interested in pursuing such programming, you should also obtain:</para> ''' ''' <para> "Astronomical Formulae for Calculators" by Jean Meeus, Third</para> ''' <para> Edition, Willmann-Bell, 1985. A must-have.</para> ''' ''' <para> "Planetary Programs and Tables from -4000 to +2800" by Pierre</para> ''' <para> Bretagnon and Jean-Louis Simon, Willmann-Bell, 1986. If you want</para> ''' <para> the utmost (outside of JPL) accuracy for the planets, it's here.</para> ''' ''' <para> "Celestial BASIC" by Eric Burgess, Revised Edition, Sybex, 1985.</para> ''' <para> Very cookbook oriented, and many of the algorithms are hard to dig</para> ''' <para> out of the turgid BASIC code, but you'll probably want it anyway.</para> ''' ''' <para> Many of these references can be obtained from WillmannBell, P.O.</para> ''' <para> Box 35025, Richmond, VA 23235, USA. Phone: (804) 3207016. In</para> ''' <para> addition to their own publications, they stock most of the</para> ''' <para> standard references for mathematical and positional astronomy.</para> ''' ''' <para> This program was written by:</para> ''' <para> John Walker</para> ''' <para> http://www.fourmilab.ch/ </para> ''' <para> http://www.fourmilab.ch/moontoolw/ </para> ''' ''' <para> This program is in the public domain: "Do what thou wilt shall be</para>" ''' <para> the whole of the law". I'd appreciate receiving any bug fixes</para>" ''' <para> and/or enhancements, which I'll incorporate in future versions of</para> ''' <para> the program. Please leave the original attribution information</para> ''' <para> intact so that credit and blame may be properly apportioned.</para> ''' ''' <para> History:</para>

''' <para> --------</para> ''' <para> June 1988 Version 2.0 for the Sun workstation posted</para> ''' <para> to usenet by John Walker</para> ''' ''' <para> June 1988 Modified by Ron Hitchens</para> ''' ''' <para> July 1989 Modified a little bit more to use an accurate</para> ''' <para> grey-scale moon face created by Joe Hitchens</para> ''' <para> on an Amiga.</para> ''' <para> Added The Apollo 11 Commemorative Red Dot, to show</para> ''' <para> where Neil and Buzz went on vacation 20 years ago.</para> ''' ''' <para> March 1992 Moontool for Windows 1.0 implemented by John Walker.</para> ''' ''' <para> April 1992 Bug fix update 1.01 correcting problems reported by</para> ''' <para> Michael Geary.</para> ''' ''' <para> March 1999 Win32 version, reverting to standard Julian Day</para> ''' <para> definition after ill-conceived flirtation with "civil</para>" ''' <para> Julian Day" beginning at midnight. Release 2.0.</para>" ''' ''' <para> Septiembre 2010 La parte correspondiente a los calculos astronomicos</para> ''' <para> ha sido traducida a Visual Basic .NET (Version 2010) </para> ''' <para> (.NET Framework 4.0) por Joaquin Medina Serrano</para> ''' <para> mailto:joaquin@medina.name </para> ''' </code> ''' </remarks> Public NotInheritable Class CalculosFasesLuna #Region "Calculos matematicos" #Region "Documentacion de los calculos" ' ' ' ' ' ' ' ' Walker. ' '

Moontool for Windows Release 2.0 Designed and implemented by John Walker in December 1987. Revised and updated in July of 1989 by Ron Hitchens. Converted to Microsoft Windows in January of 1992 by John Convert to Win32 in March of 1999 by John Walker.

' of ' book

The

algorithms used in this program to calculate the positions are given in the

the Sun and Moon as seen from the Earth

' "Practical Astronomy With Your Calculator" by Peter DuffettSmith, ' Second Edition, Cambridge University Press, 1981. Ignore the word ' "Calculator" in the title; this is an essential reference if ' you're interested in developing software which calculates ' planetary positions, orbits, eclipses, and the like. If you're ' interested in pursuing such programming, you should also obtain: ' ' "Astronomical Formulae for Calculators" by Jean Meeus, Third ' Edition, Willmann-Bell, 1985. A must-have. ' ' "Planetary Programs and Tables from -4000 to +2800" by Pierre ' Bretagnon and Jean-Louis Simon, Willmann-Bell, 1986. If you want ' the utmost (outside of JPL) accuracy for the planets, it's here. ' ' "Celestial BASIC" by Eric Burgess, Revised Edition, Sybex, 1985. ' Very cookbook oriented, and many of the algorithms are hard to dig ' out of the turgid BASIC code, but you'll probably want it anyway. ' ' Many of these references can be obtained from Willmann-Bell, P.O. ' Box 35025, Richmond, VA 23235, USA. Phone: (804) 320-7016. In ' addition to their own publications, they stock most of the ' standard references for mathematical and positional astronomy. ' ' This program was written by: ' ' John Walker ' http://www.fourmilab.ch/ ' http://www.fourmilab.ch/moontoolw/ ' ' This program is in the public domain: "Do what thou wilt shall be" ' the whole of the law". I'd appreciate receiving any bug fixes" ' and/or enhancements, which I'll incorporate in future versions of ' the program. Please leave the original attribution information

' intact so that credit and blame may be properly apportioned. ' ' History: ' -------' June 1988 Version 2.0 for the Sun workstation posted ' to usenet by John Walker ' ' June 1988 Modified by Ron Hitchens ' ' July 1989 Modified a little bit more to use an accurate ' grey-scale moon face created by Joe Hitchens ' on an Amiga. ' Added The Apollo 11 Commemorative Red Dot, to show ' where Neil and Buzz went on vacation 20 years ago. ' ' March 1992 Moontool for Windows 1.0 implemented by John Walker. ' ' April 1992 Bug fix update 1.01 correcting problems reported by ' Michael Geary. ' ' March 1999 Win32 version, reverting to standard Julian Day ' definition after ill-conceived flirtation with "civil" ' Julian Day" beginning at midnight. Release 2.0." ' ' Septiembre 2010 La parte correspondiente a los calculos astronomicos ' ha sido traducida a Visual Basic .NET (Version 2010) ' (.NET Framework 4.0) por Joaquin Medina Serrano ' mailto:joaquin@medina.name ' '*/ #End Region '-----------------------------------------------------------------' Private Const epoch As Decimal = 2444238.5D ' '----------------------------------------------------------------' Private Const elonge As Decimal = 278.83354D ' Private Const elongp As Decimal = 282.596403D ' Private Const eccent As Decimal = 0.016718D ' Private Const sunsmax As Decimal = 149598500D ' Private Const sunangsiz As Decimal = 0.533128D '

' '----------------------------------------------------------------' Private Const mmlong As Decimal = 64.975464D ' Private Const mmlongp As Decimal = 349.383063D ' Private Const mlnode As Decimal = 151.950429D ' Private Const minc As Decimal = 5.145396D ' Private Const mecc As Decimal = 0.0549D ' Private Const mangsiz As Decimal = 0.5181D ' Private Const msmax As Decimal = 384401D ' Private Const mparallax As Decimal = 0.9507D ' Private Const synmonth As Decimal = 29.53058868D ' Private Const lunatbase As Decimal = 2423436D ' '----------------------------------------------------------------Private Const earthrad As Decimal = 6378.16D ' Private Const PI As Decimal = 3.1415926535897931D ' Private Const EPSILON As Decimal = 0.000001D ' '----------------------------------------------------------------' *** Cdigo aadido por el traductor *** Private Sub New() ' Regla FxCop ' http://msdn.microsoft.com/library/ms182169(VS.90).aspx ' El constructor no es necesario puesto que al llamar a los miembros estticos ' no se requiere una instancia del tipo. Adems, como el tipo tiene ' miembros no estticos, al crear una instancia, no se proporciona ' acceso a cualquiera de los miembros del tipo. End Sub '----------------------------------------------------------------' Funciones matematicas '----------------------------------------------------------------'#define fixangle(a) ((a) - 360.0 * (floor((a) / 360.0))) Private Shared Function Fixangle(ByVal a As Decimal) As Decimal Return Convert.ToDecimal(a - 360.0 * (Math.Floor(a / 360.0))) End Function Private Shared Function Torad(ByVal d As Decimal) As Decimal Return Convert.ToDecimal(d * (PI / 180.0)) ' End Function '#define todeg(d) ((d) * (180.0 / PI)) Private Shared Function Todeg(ByVal d As Decimal) As Decimal Return Convert.ToDecimal(d * (180.0 / PI)) End Function '#define dsin(x) (sin(torad((x)))) Private Shared Function Dsin(ByVal x As Decimal) As Decimal Return Convert.ToDecimal(Math.Sin(Torad(x))) End Function '#define dcos(x) (cos(torad((x)))) Private Shared Function Dcos(ByVal x As Decimal) As Decimal

Return Convert.ToDecimal(Math.Cos(Torad(x))) End Function '------------------------------------------------------------------------------------' JYEAR -- Convert Julian date to year, month, day, which are ' returned via integer pointers to integers Private Shared Sub Jyear( _ ByVal td As Decimal, _ ByRef yy As Integer, ByRef mm As Integer, ByRef dd As Integer) Dim Dim Dim Dim Dim Dim Dim Dim z As Decimal = Decimal.Zero f As Decimal = Decimal.Zero a As Decimal = Decimal.Zero alpha As Decimal = Decimal.Zero b As Decimal = Decimal.Zero c As Decimal = Decimal.Zero d As Decimal = Decimal.Zero e As Decimal = Decimal.Zero

td += 0.5D z = Math.Floor(td) f = td - z If z < 2299161.0 Then a = z Else alpha = Convert.ToDecimal(Math.Floor((z - 1867216.25) / 36524.25)) a = z + 1 + alpha - Math.Floor(alpha / 4) End If b c d e e) + f)) mm = Convert.ToInt32(Math.Truncate(If((e < 14), (e - 1), (e 13)))) yy = Convert.ToInt32(Math.Truncate(If((mm > 2), (c - 4716), (c 4715)))) End Sub ' MEANPHASE -- Calculates time of the mean new Moon for a given ' base date. This argument K to this function is the ' precomputed synodic month index, given by: ' K = (year - 1900) * 12.3685 ' where year is expressed as a year and fractional year. Private Shared Function MeanPhase(ByVal sdate As Decimal, ByVal k As Decimal) As Decimal Dim t As Decimal = Decimal.Zero Dim t2 As Decimal = Decimal.Zero = = = = a + 1524 Convert.ToDecimal(Math.Floor((b - 122.1) / 365.25)) Convert.ToDecimal(Math.Floor(365.25 * c)) Convert.ToDecimal(Math.Floor((b - d) / 30.6001))

dd = Convert.ToInt32(Math.Truncate(b - d - Math.Floor(30.6001 *

Dim t3 As Decimal = Decimal.Zero Dim nt1 As Decimal = Decimal.Zero ' Time in Julian centuries from 1900 January 0.5 t = Convert.ToDecimal((sdate - 2415020.0) / 36525) t2 = t * t ' Square for frequent use t3 = t2 * t ' Cube for frequent use nt1 = Convert.ToDecimal((2415020.75933 + synmonth * k) _ + (0.0001178 * t2) _ - (0.000000155 * t3) _ + (0.00033 * Dsin(Convert.ToDecimal(166.56 + 132.87 * t 0.009173 * t2)))) Return nt1 End Function ' ' 0.5, ' 0.75), obtain the true, corrected phase time. Private Shared Function TruePhase(ByVal k As Decimal, ByVal phase As Decimal) As Decimal Dim Dim Dim Dim Dim Dim Dim t As Decimal = Decimal.Zero t2 As Decimal = Decimal.Zero t3 As Decimal = Decimal.Zero pt As Decimal = Decimal.Zero m As Decimal = Decimal.Zero mprime As Decimal = Decimal.Zero f As Decimal = Decimal.Zero TRUEPHASE -Given a K value used to determine the mean phase of the new moon, and a phase selector (0.0, 0.25,

k += phase ' Add phase to new moon time t = k / 1236.85D ' Time in Julian centuries from ' 1900 January 0.5 t2 = t * t ' Square for frequent use t3 = t2 * t ' Cube for frequent use ' Mean time of phase pt = Convert.ToDecimal(2415020.75933 _ + synmonth * k _ + 0.0001178 * t2 _ - 0.000000155 * t3 _ + 0.00033 * Dsin(Convert.ToDecimal(166.56 + 132.87 * t 0.009173 * t2))) ' Sun's mean anomaly m = Convert.ToDecimal(359.2242 _ + 29.10535608 * k _ - 0.0000333 * t2 _ - 0.00000347 * t3) ' Moon's mean anomaly mprime = Convert.ToDecimal(306.0253 _

+ 385.81691806 * k _ + 0.0107306 * t2 _ + 0.00001236 * t3) ' Moon's argument of latitude f = Convert.ToDecimal(21.2964 _ + 390.67050646 * k _ - 0.0016528 * t2 _ - 0.00000239 * t3) If (phase < 0.01) OrElse (Math.Abs(phase - 0.5) < 0.01) Then ' Corrections for New and Full Moon pt = Convert.ToDecimal(pt + ((0.1734 - 0.000393 * t) * Dsin(m) _ + 0.0021 * Dsin(2 * m) _ - 0.4068 * Dsin(mprime) _ + 0.0161 * Dsin(2 * mprime) _ - 0.0004 * Dsin(3 * mprime) _ + 0.0104 * Dsin(2 * f) _ - 0.0051 * Dsin(m + mprime) _ - 0.0074 * Dsin(m - mprime) _ + 0.0004 * Dsin(2 * f + m) _ - 0.0004 * Dsin(2 * f - m) _ - 0.0006 * Dsin(2 * f + mprime) _ + 0.001 * Dsin(2 * f - mprime) _ + 0.0005 * Dsin(m + 2 * mprime))) ElseIf (Math.Abs(phase - 0.25) < 0.01 OrElse (Math.Abs(phase 0.75) < 0.01)) Then pt = Convert.ToDecimal(pt + ((0.1721 - 0.0004 * t) * Dsin(m) _ + 0.0021 * Dsin(2 * m) _ - 0.628 * Dsin(mprime) _ + 0.0089 * Dsin(2 * mprime) _ - 0.0004 * Dsin(3 * mprime) _ + 0.0079 * Dsin(2 * f) _ - 0.0119 * Dsin(m + mprime) _ - 0.0047 * Dsin(m - mprime) _ + 0.0003 * Dsin(2 * f + m) _ - 0.0004 * Dsin(2 * f - m) _ - 0.0006 * Dsin(2 * f + mprime) _ + 0.0021 * Dsin(2 * f - mprime) _ + 0.0003 * Dsin(m + 2 * mprime) _ + 0.0004 * Dsin(m - 2 * mprime) _ - 0.0003 * Dsin(2 * m + mprime))) If phase < 0.5 Then ' First quarter correction pt = Convert.ToDecimal(pt + (0.0028 - 0.0004 * Dcos(m) _ + 0.0003 * Dcos(mprime))) Else ' Last quarter correction pt = Convert.ToDecimal(pt + (-0.0028 + 0.0004 * Dcos(m) _ - 0.0003 * Dcos(mprime))) End If End If Return pt End Function ''

'' '' '' ''

Find time of phases of the moon which surround the current date. Five phases are found, starting and ending with the new moons which bound the current lunation. */

' Encuentra las fechas de las fases de la luna que rodean la fecha actual. ' Se devuelve en una matriz cinco fechas julianas astronmicas que corresponden a ' la luna nueva mas prxima a la fecha de clculo, cuarto creciente, ' luna llena , cuarto menguante, y siguiente luna nueva ''' <summary> ''' Localiza las fases de la luna que rodean a la fecha actual (Juliana) ''' </summary> ''' <param name="sdate">Fecha Juliana</param> ''' <returns>una matriz con los datos</returns> ''' <remarks> ''' Encuentra las fechas de las fases de la luna que rodean la fecha actual. ''' Se devuelve en una matriz cinco fechas julianas astronmicas que ''' corresponden a la luna nueva, cuarto creciente, luna llena, ''' cuarto menguante, y siguiente luna nueva '''</remarks> Public Shared Function PhaseHunt(ByVal sdate As Decimal) As Decimal() Dim phases(5) As Decimal Dim Dim Dim Dim Dim Dim Dim Dim adate As Decimal = Decimal.Zero k1 As Decimal = Decimal.Zero k2 As Decimal = Decimal.Zero nt1 As Decimal = Decimal.Zero nt2 As Decimal = Decimal.Zero yy As Integer = 0 mm As Integer = 0 dd As Integer = 0

adate = sdate - 45 Jyear(adate, yy, mm, dd) ' parametros Byref k1 = Convert.ToDecimal(Math.Floor((yy + ((mm - 1) * (1.0 / 12.0)) - 1900) * 12.3685)) adate = Convert.ToDecimal(nt1 = MeanPhase(adate, k1)) While True adate += synmonth k2 = k1 + 1 nt2 = MeanPhase(adate, k2) If nt1 <= sdate AndAlso nt2 > sdate Then Exit While ' ----------salida del bucle End If nt1 = nt2 k1 = k2 End While phases(0) = TruePhase(k1, 0D) phases(1) = TruePhase(k1, 0.25D)

phases(2) = TruePhase(k1, 0.5D) phases(3) = TruePhase(k1, 0.75D) phases(4) = TruePhase(k2, 0D) Return phases End Function ' KEPLER -Solve the equation of Kepler. Private Shared Function Kepler(ByVal m As Decimal, ByVal ecc As Decimal) As Decimal Dim e As Decimal = Decimal.Zero Dim delta As Decimal = Decimal.Zero m = Torad(m) e = m Do delta = Convert.ToDecimal(e - ecc * Math.Sin(e) - m) e = Convert.ToDecimal(e - (delta / (1 - ecc * Math.Cos(e)))) Loop While Math.Abs(delta) > EPSILON Return e End Function ' PHASE -- Calculate phase of moon as a fraction: ' Calcular las fases de la luna como una fraccin: ' ' The argument is the time for which the phase is requested, ' expressed as a Julian date and fraction. Returns the terminator ' phase angle as a percentage of a full circle (i.e., 0 to 1), and ' stores into pointer arguments the illuminated fraction of the ' Moon's disc, the Moon's age in days and fraction, the distance of ' the Moon from the centre of the Earth, and the angular diameter ' subtended by the Moon as seen by an observer at the centre of the ' Earth. ' ' El argumento es el dia para el que se reliza el calculo expresado como ' fecha juliana astronomica. ' Devuelve el ngulo de fase de terminacin como un porcentaje de un crculo completo ' (es decir, de 0 a 1), y devuelve a traves de punteros: la fraccin ' iluminada del disco de la Luna, la edad de la Luna en das y fraccin, ' la distancia de la Luna desde el centro de la Tierra, y el dimetro angular ' de la Luna vista por un observador en el centro de la Tierra. ''' <summary> ''' Calcular las fases de la luna como una fraccin: ''' </summary>

''' <param name="pdate"> Fecha de clculo juliana astronmica</param> ''' <param name="pphase">Porcentaje Iluminado de la luna en porcentaje</param> ''' <param name="mage">Edad de la luna en das</param> ''' <param name="dist">Distancia de la luna del centro de la tierra en Km</param> ''' <param name="angdia">Dimetro angular de la luna</param> ''' <param name="sudist">Distancia al sol</param> ''' <param name="suangdia">Dimetro angular del sol</param> ''' <returns> ''' Returns the terminator phase angle as a percentage of a full circle (i.e., 0 to 1) ''' Devuelve el ngulo de fase de terminacin como un porcentaje de un crculo completo ''' </returns> Public Shared Function Phase( _ ByVal pdate As Decimal, _ ByRef pphase As Decimal, _ ByRef mage As Decimal, _ ByRef dist As Decimal, _ ByRef angdia As Decimal, _ ByRef sudist As Decimal, _ ByRef suangdia As Decimal) _ As Decimal '--------------------------------------------Dim Day As Decimal = Decimal.Zero Dim N As Decimal = Decimal.Zero Dim M As Decimal = Decimal.Zero Dim Ec As Decimal = Decimal.Zero Dim Lambdasun As Decimal = Decimal.Zero Dim ml As Decimal = Decimal.Zero Dim MM As Decimal = Decimal.Zero Dim MN As Decimal = Decimal.Zero Dim Ev As Decimal = Decimal.Zero Dim Ae As Decimal = Decimal.Zero Dim A3 As Decimal = Decimal.Zero Dim MmP As Decimal = Decimal.Zero Dim mEc As Decimal = Decimal.Zero Dim A4 As Decimal = Decimal.Zero Dim lP As Decimal = Decimal.Zero Dim V As Decimal = Decimal.Zero Dim lPP As Decimal = Decimal.Zero Dim NP As Decimal = Decimal.Zero Dim y As Decimal = Decimal.Zero Dim x As Decimal = Decimal.Zero Dim Lambdamoon As Decimal = Decimal.Zero Dim BetaM As Decimal = Decimal.Zero Dim MoonAge As Decimal = Decimal.Zero Dim MoonPhase As Decimal = Decimal.Zero Dim MoonDist As Decimal = Decimal.Zero Dim MoonDFrac As Decimal = Decimal.Zero Dim MoonAng As Decimal = Decimal.Zero Dim MoonPar As Decimal = Decimal.Zero Dim F As Decimal = Decimal.Zero Dim SunDist As Decimal = Decimal.Zero Dim SunAng As Decimal = Decimal.Zero

' Calculation of the Sun's position ' Clculo de la posicin del Sol Day = pdate - epoch ' Date within epoch Fecha en la poca N = Fixangle(Convert.ToDecimal((360 / 365.2422) * Day)) ' Mean anomaly of the Sun Anomala media del Sol M = Fixangle(N + elonge - elongp) ' Convert from perigee co-ordinates to epoch 1980.0 'Convertir de perigeo coordenadas a la poca 1980.0 Ec = Kepler(M, eccent) ' Solve equation of Kepler Resolver la ecuacin de Kepler Ec = Convert.ToDecimal(Math.Sqrt((1 + eccent) / (1 - eccent)) * Math.Tan(Ec / 2)) Ec = 2 * Todeg(Convert.ToDecimal(Math.Atan(Ec))) ' True anomaly Lambdasun = Fixangle(Ec + elongp) ' Sun's geocentric ecliptic longitude geocntrica de longitud eclptica del Sol ' Orbital distance factor Orbital factor distancia F = Convert.ToDecimal(((1 + eccent * Math.Cos(Torad(Ec))) / (1 eccent * eccent))) SunDist = sunsmax / F ' Distance to Sun in km Distancia al sol en kilmetros SunAng = F * sunangsiz ' Sun's angular size in degrees tamao angular del Sol en grados ' Calculation of the Moon's position la Luna ' Moon's mean longitude longitud media de la Luna ml = Fixangle(Convert.ToDecimal(13.1763966 * Day + mmlong)) ' Moon's mean anomaly Luna MM = Fixangle(Convert.ToDecimal(ml - 0.1114041 * Day - mmlongp)) ' Moon's ascending node mean longitude nodo ascendente de la Luna longitud media MN = Fixangle(Convert.ToDecimal(mlnode - 0.0529539 * Day)) ' Evection Ev = Convert.ToDecimal(1.2739 * Math.Sin(Torad(2 * (ml Lambdasun) - MM))) ' Annual equation ecuacin anual Ae = Convert.ToDecimal(0.1858 * Math.Sin(Torad(M))) ' Correction term Correccin plazo A3 = Convert.ToDecimal(0.37 * Math.Sin(Torad(M))) ' Corrected anomaly MmP = MM + Ev - Ae - A3 Corregido anomala anomala media de la Clculo de la posicin de

' Correction for the equation of the centre La correccin de la ecuacin del centro mEc = Convert.ToDecimal(6.2886 * Math.Sin(Torad(MmP))) ' Another correction term Otro trmino de correccin A4 = Convert.ToDecimal(0.214 * Math.Sin(Torad(2 * MmP))) ' Corrected longitude lP = ml + Ev + mEc - Ae + A4 Corregido de longitud

' Variation V = Convert.ToDecimal(0.6583 * Math.Sin(Torad(2 * (lP Lambdasun)))) ' True longitude lPP = lP + V ' Corrected longitude of the node NP = Convert.ToDecimal(MN - 0.16 * Math.Sin(Torad(M))) ' Y inclination coordinate y = Convert.ToDecimal(Math.Sin(Torad(lPP - NP)) * Math.Cos(Torad(minc))) ' X inclination coordinate x = Convert.ToDecimal(Math.Cos(Torad(lPP - NP))) ' Ecliptic longitude Lambdamoon = Todeg(Convert.ToDecimal(Math.Atan2(y, x))) Lambdamoon += NP ' Ecliptic latitude BetaM = Todeg(Convert.ToDecimal(Math.Asin(Math.Sin(Torad(lPP NP)) * Math.Sin(Torad(minc))))) ' Calculation of the phase of the Moon ' Age of the Moon in degrees MoonAge = lPP - Lambdasun ' Phase of the Moon MoonPhase = Convert.ToDecimal((1 - Math.Cos(Torad(MoonAge))) / 2) ' Calculate distance of moon from the centre of the Earth MoonDist = Convert.ToDecimal((msmax * (1 - mecc * mecc)) / (1 + mecc * Math.Cos(Torad(MmP + mEc)))) ' Calculate Moon's angular diameter MoonDFrac = MoonDist / msmax MoonAng = mangsiz / MoonDFrac ' Calculate Moon's parallax MoonPar = mparallax / MoonDFrac

'-------------------------------------

' devolver resultados ' ' ' ' ' ' ' Date for which to calculate phase Illuminated fraction Age of moon in days Distance in kilometres Angular diameter in degrees Distance to Sun Sun's angular diameter

pphase = MoonPhase mage = Convert.ToDecimal(synmonth * (Fixangle(MoonAge) / 360.0)) dist = MoonDist angdia = MoonAng sudist = SunDist suangdia = SunAng Return Convert.ToDecimal(Fixangle(MoonAge) / 360.0) End Function ' ----------------------------------------------------------------' *** Cdigo aadido por el traductor *** ' ----------------------------------------------------------------''' <summary> ''' <para>Calculo de las fases lunares relevantes del mes</para> ''' <para> Localiza las fases IMPORTANTES de la luna que rodean a la fecha actual</para> ''' </summary> ''' <param name="jd">Fecha juliana sobre la que se calculan los datos</param> ''' <returns> ''' <para>Una matriz de cinco (5) elementos con numeros decimales .</para> ''' <para>Cada numero decimal es una fecha juliana</para> ''' <para>El resultado esta en formato juliano</para> ''' <para>Elemento [0] = luna nueva</para> ''' <para>Elemento [1] = cuarto creciente</para> ''' <para>Elemento [2] = luna llena</para> ''' <para>Elemento [3] = cuarto menguante</para> ''' <para>Elemento [4] = proxima luna nueva</para> ''' </returns> Public Shared Function CalculoFechasFasesLunares(ByVal jd As Decimal) As Decimal() '--------------------------------' El parametro es una fecha en formato juliano ' Calculo de las fases lunares relevantes del mes ' Localiza las fases IMPORTANTES de la luna que rodean a la fecha actual (Juliana) ' El resultado esta en formato juliano ' Elemento [0] = luna nueva ' Elemento [1] = cuarto creciente ' Elemento [2] = luna llena ' Elemento [3] = cuarto menguante ' Elemento [4] = proxima luna nueva '--------------------------------Return PhaseHunt(jd + 0.5D)

End Function ' ----------------------------------------------------------------' *** Cdigo aadido por el traductor *** ' ----------------------------------------------------------------''' <summary> ''' Es un numero (integer) que representa el numero de la lunacion ''' </summary> ''' <param name="jd">Fecha juliana sobre la que se calculan los datos</param> ''' <returns>numero (integer) que representa el numero de la lunacion</returns> Public Shared Function CalculoNumeroLunacion(ByVal jd As Decimal) As Integer ' El numero no se de donde sale ' Es un numero (integer) que representa el numero de la lunacion ' No s cual es la razon de que empieze a contar a partir de la fecha [1922-11-19T00:06:22Z --> lunacion =0] '--------------------------------Dim fasesLunaresRelevates As Decimal() = PhaseHunt(jd + 0.5D) Return Convert.ToInt32(Math.Floor(((fasesLunaresRelevates(0) + 7 - lunatbase) / synmonth)) + 1) End Function #End Region End Class

Ejemplo para control de resultados


== Fechas del calculo == Fecha Juliana : Fecha UTC : 2451545,0 2000-01-01T12:00:00Z

== Informacin sobre la luna == : Edad de la luna : 24,8314545757241 | : 24 dias, 19 horas, 57 minutos : : Porcentaje iluminado| : 0,2298 | : 23% [0% nueva, 100% llena] | : Luna menguante : : Distancia al centro | : 400216 Km. de la tierra | : 62,75 radios tierra. : Diametro angular : 0,4976 grados. :

Luna con el Sol: - Distancia

| | | - Diametro angular |

: : : 147099300 Km. : 0,9833 unidades astronmicas. : 0,5422 grados. : 1999-12-07T22:33:04Z -1999-12-16T00:50:57Z 1999-12-22T17:33:08Z 1999-12-29T14:05:58Z 2000-01-06T18:14:57Z --

== Informacin sobre las fases de la luna == Luna nueva : 2451520,43962525 Lunacion = 952 Cuarto creciente : 2451528,53538194 luna llena : 2451535,23134153 Cuarto menguante : 2451542,08747989 Proxima luna nueva : 2451550,26038623 Lunacion = 953

A.2.Enlaces
[Para saber mas] [Grupo de documentos] [Documento Index] [Documento Start] [Imprimir el Documento] No Olvides adir ste sitio a tus marcadores favoritos ! Pulsa (Ctrl + D)

Anda mungkin juga menyukai