time - sale - salida y puesta de sol
¿Cómo puedo calcular las horas de salida/puesta del sol? (8)
Me gusta hacer un seguimiento de los horarios de salida y puesta del sol. En los últimos años he estado haciendo esto con un pequeño programa escrito con una biblioteca popular para mi lenguaje de programación favorito. Los últimos dos meses he estado haciendo un seguimiento de estos momentos con más regularidad que de costumbre, y me di cuenta de que el día del equinoccio el tiempo del amanecer saltó ocho minutos en comparación con el día anterior. Sabía que esto era imposible y lo comparé con NOAA , descubriendo que mi subida y puesta a punto habían estado suspendidas durante varios días y, de hecho, parecían estar fuera de alrededor de un minuto la mayor parte del año.
En este punto, me gustaría simplemente implementar los cálculos yo mismo. ¿Qué algoritmos o fórmulas están disponibles para hacer este cálculo?
Eche un vistazo a este libro:
"Astronomía práctica con su calculadora (Paperback)" por Peter Duffett-Smith.
Es bastante antiguo, pero aún está impreso ... link
En Ruby, escribí esto para la ecuación del tiempo.
include Math
# degrees to radians = PI/180
to_r = PI/180.0
#radians to degrees = 180/PI
to_d = 180.0/PI
puts "Day, Declination, EofT"
# test a celestial year worth of values.
for jday in 1..366
et = -7.633 * sin(jday * (2 * PI)/365.24) + 9.65 * sin((jday - 78) * 180/92 * to_r)
a_sin = sin(23.433 * to_r) * sin((2 * PI/366) * (jday - 81))
declination = asin(a_sin) * to_d
puts "#{jday}, #{declination}, #{et}"
end
Entonces para la ecuación anterior:
# center disk and refraction factor have been considered.
cos_omega = sin(-0.83 * to_r) - tan(latitude * to_r) * tan(declination * to_r)
semi_diurnal_arc = acos(cos_omega)
Hay un sitio web completo dedicado a esto en http://www.analemma.com/
- La clave de estos cálculos son buenas bibliotecas como la de Python anterior.
- También uso de clases de fecha y hora. Me gustaría ver en rubyforge algo así como Ephhem.
Las definiciones de lo que constituye el amanecer / ocaso pueden variar. Por ejemplo, en ephem
"levantarse y ponerse se definen como los momentos en que la extremidad superior del cuerpo toca el horizonte (es decir, cuando el radio más alto del cuerpo es igual a cero)" [Referencia rápida de PyEphem] .
#!/usr/bin/env python
import datetime
import ephem # to install, run `pip install pyephem`
o = ephem.Observer()
o.lat, o.long, o.date = ''34:3'', ''-118:15'', datetime.datetime.utcnow()
sun = ephem.Sun(o)
print "Los Angeles"
print "sunrise:", o.next_rising(sun), "UTC"
print "sunset:",o.next_setting(sun), "UTC"
Salida
Los Angeles, CA
sunrise: 2010/3/30 13:42:43 UTC
sunset: 2010/3/30 02:11:50 UTC
Si se trata de una biblioteca de código abierto, podrías corregirla en lugar de crear una nueva con nuevos errores.
Para una precisión en el rango de 5 minutos, debes considerar "qué" puesta de sol .
¿Deseas que la parte inferior del sol toque el horizonte o el momento en que la parte superior del sol pasa por debajo del horizonte?
El sol tarda 2 minutos en cruzar el horizonte.
Por debajo del nivel de 1 minuto, también debes tener en cuenta la refracción atmosférica.
Puede considerar leer el artículo de Wikipedia sobre las ecuaciones del amanecer . El párrafo principal da la ecuación:
dónde:
- ω o es el ángulo horario en grados al amanecer (cuando se toma el valor negativo) o al atardecer (cuando se toma el valor positivo) en grado (°)
- φ es la latitud del observador en la Tierra en grados
- δ es la declination del sol en grados
Si quieres unir NOAA, deberás consultar los algoritmos astronómicos de Jean Meeus (principalmente el Capítulo 15). ¡Y es complicado! Martin Beckett tiene razón, debes definir la puesta de sol. Por lo general, este es el aparente aumento o conjunto de la extremidad superior del sol, que hace que su altitide "estándar" sea de -5/6 grados (no cero). Y no puede calcular el amanecer o el ocaso directamente con la precisión de NOAA. Tendrás que crear un conjunto gobernante de ecuaciones para la ascensión recta aparente y la declinación para el día en cuestión y luego interpolar la ascensión recta aparente y la declinación a lo largo del tiempo para encontrar los tiempos exactos de ascenso y ajuste a la altitud estándar.
Espero que esto ayude. Pasé aproximadamente un mes digiriendo AA y reescribiendo todo nuestro código solar cuando me encontré con lo mismo, y aún me llevó más de un año resolver algunos de los casos más importantes en los que se rompió mi código. Por lo tanto, tomará un tiempo averiguarlo. No conozco ningún ejemplo de código público de este algoritmo y no tengo ninguno para compartir en este momento, pero me complace ayudarlo con algunos dolores de cabeza si puedo.
Vi algunas cosas interesantes en esta página de NOAA en el encabezado de Definiciones técnicas y Detalles computacionales, pero estoy seguro de que ya las ha leído.
La respuesta a la pregunta de SO " Posición del sol dada la hora del día, y latitud / longitud " y lo anterior en realidad puede ser todo lo que necesita.
Como nota al margen (no responde su pregunta directamente), ¿hay algún motivo por el que no pueda extraer los datos de NOAA y utilizarlos como una tabla de búsqueda en lugar de calcularla? El almacenamiento tiende a ser relativamente barato en estos días.
Es posible que desee ver una entrada anterior sobre el cálculo de la posición del sol. Específicamente, el programa Solpos que señalé tiene soporte para el amanecer / atardecer.