He estado buscando, sin éxito, durante horas un conjunto simple de ecuaciones:
Entrada :
RA y Dec de un objeto
Observadores Lat y Lng
Hora actual
Salida :
Rise Time
Transit Time
Set Time
(y, con suerte) elevación máxima en tránsito
(y, con suerte) actual alt y az del objeto
Parece que esta debería ser una relación simple, pero no he podido encontrarla.
Si una ecuación simplemente da el alt/az actual para un objeto, supongo que podría resolver para az y luego encontrar el máximo para un rango de tiempo dado.
Preguntas :
1. ¿Alguien sabe de tales ecuaciones? O, mejor aún, algún código de muestra.
2. Si no es así, ¿alguien puede indicarme la dirección correcta?
Gracias
No estoy seguro de que califique como "simple", pero usando http://idlastro.gsfc.nasa.gov/ftp/pro/astro/hadec2altaz.pro (y algunos cálculos/simplificaciones adicionales):
dónde:
es el acimut del objeto
es la altitud del objeto sobre el horizonte
es la ascensión recta del objeto
es la declinación del objeto
es la latitud del observador
es la hora sideral local actual
Tenga en cuenta que se requiere la forma de arcotangente de dos argumentos para que los resultados estén en el cuadrante correcto: https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Two-argument_variant_of_arctangent
Advertencias adicionales:
Si , el objeto siempre está por debajo del horizonte y las ecuaciones para el tiempo de salida y el tiempo de puesta no funcionarán.
Si , el objeto siempre está por encima del horizonte (circunpolar), y las ecuaciones para el tiempo de salida y puesta tampoco funcionarán.
Las medidas anteriores están en radianes. Puedes convertir para grados.
Debido a que usamos el tiempo sideral local, la longitud no aparece en ninguna de las fórmulas anteriores. Sin embargo, lo necesitamos para encontrar la hora sidérea local, como se muestra a continuación.
Para encontrar la hora sideral local en radianes, usamos http://aa.usno.navy.mil/faq/docs/GAST.php y hacemos algunas sustituciones para obtener:
dónde es su longitud en radianes, y es el número de días (incluidos los días fraccionarios) desde "2000-01-01 12:00:00 UTC". Tradicionalmente, usamos para la longitud, pero ya lo estoy usando en las fórmulas anteriores para el acimut.
Si combina la fórmula para el tiempo sideral local y el acimut/altitud y asume una precisión excesiva, obtiene mi respuesta a https://astronomy.stackexchange.com/a/8415/21
Cálculos adicionales para estos resultados en: https://github.com/barrycarter/bcapps/blob/master/STACK/bc-rst.m
Iba a agregar algunos gráficos para mostrar cómo la altitud NO es una onda sinusoidal y cómo el azimut NO es una línea recta (aunque es de esperar que lo sean), pero resultaron no ser muy instructivos/útiles.
También puede obtener fórmulas más simples si establece ser el "ángulo horario" (que es en la configuración actual).
Los cálculos no son triviales, pero están encapsulados en bibliotecas de software como pyephem, que tiene ejemplos de cómo encontrar la salida, la puesta y el tránsito . Si desea comprender cómo se calculan, puede leer el código fuente, que se basa en la aplicación xephem.
Un detalle que complica el cálculo es la refracción provocada por la atmósfera, que puede cambiar el momento de fraguado en varios minutos.
pyephem
parece ser solo una envoltura delgada xephem
, cuyo código fuente está incluido.Si desea un sitio web en lugar de un paquete de software como sugiere James, le recomiendo usar la herramienta de visibilidad de objetos INGT que tiene las 3 entradas que solicita y produce un gráfico de elevación con tiempos de subida y puesta, altitud máxima, etc. A continuación se muestra un ejemplo:
Meeus proporciona un algoritmo bastante simple en Algoritmos astronómicos. Una implementación de ejemplo está disponible en Rise and Set Algorithm . El código es bastante simple y lo he reproducido a continuación.
Un par de advertencias. La primera es que el algoritmo asume que las longitudes hacia el oeste son positivas, que es lo opuesto a cómo lo devuelven la mayoría de las API de GPS. Y, si el objeto se mueve considerablemente a lo largo del día, es posible que desee volver a calcular la posición para las horas dadas y luego volver a calcular las horas de salida y puesta nuevamente.
//By Greg Miller gmiller@gregmiller.net www.astrogreg.com
//Released as public domain
const toRad=Math.PI/180.0;
const toDeg=180.0/Math.PI;
//Corrects values to make them between 0 and 1
function constrain(v){
if(v<0){return v+1;}
if(v>1){return v-1;}
return v;
}
//All angles must be in radians
//Outputs are times in hours GMT (not accounting for daylight saving time)
//From Meeus Page 101
function getRiseSet(jd,lat,lon,ra,dec){
const h0=-0.8333 //For Sun
//const h0=-0.5667 //For stars and planets
//const h0=0.125 //For Moon
const cosH=(Math.sin(h0*Math.PI/180.0)-Math.sin(lat)*Math.sin(dec)) / (Math.cos(lat)*Math.cos(dec));
const H0=Math.acos(cosH)*180.0/Math.PI;
const gmst=GMST(Math.floor(jd)+.5);
const transit=(ra*toDeg+lon*toDeg-gmst)/360.0;
const rise=transit-(H0/360.0);
const set=transit+(H0/360.0);
return [constrain(transit)*24.0,constrain(rise)*24.0,constrain(set)*24.0];
}
//Greenwhich mean sidreal time from Meeus page 87
//Input is julian date, does not have to be 0h
//Output is angle in degrees
function GMST(jd){
const T=(jd-2451545.0)/36525.0;
let st=280.46061837+360.98564736629*(jd-2451545.0)+0.000387933*T*T - T*T*T/38710000.0;
st=st%360;
if(st<0){st+=360;}
return st;
//return st*Math.PI/180.0;
}
usuario21
W. Cristóbal Moisés
usuario21