Explicación del Applet Medici7
Significado de x e y
La posición (x,y) de los satélites s toma en unidades de radio de Júpiter. La imagen telescópica de un reflector tiene la orientación N arriba (y positivo) y E a la izquierda (x negativo). El E y W están cambiados respecto a la visión normal, pero mantienen su signo con respecto a su posición habitual, dando lugar a un sistema de referencia contrario al habitual en matemáticas. El sentido de giro observado del satélite alrededor de Júpiter es según las agujas del reloj contrario al sentido real de giro. El satélite pasa por delante del disco cuando va de E a W y se oculta cuando va de W a E
Al igual que medici3 se calcula la posición de los satélites.
El problema que se plantea aquí es coger la hora del reloj del ordenador local, que puede estar en cualquier lugar, y calcular la posición de los satélites en este instante, que se refiere siempre a una hora de Tiempo Universal (TU).
Java tiene algunas funciones para tratar las fechas y horas:
var fecha = new Date(); Introduce en la variable fecha un objeto Date
var YY = (fecha.getYear())+1900; Obtiene el año en formato dos dígitos.
No hay problema del año 2000 porque la función devolveráa 100 para ese año, 101 para el 2001 etc. Analogamente:
var MM = (fecha.getMonth())+1; mes en rango 0 a 11
var DD = (fecha.getDate()); día del mes en rango 1 a 31
var HR = (fecha.getHours()); Obtiene Hora
var MN = (fecha.getMinutes()); Obtine minutos
var SG = (fecha.getSeconds()); Obtiene segundos
Así obtendríamos en esos campos la hora que marca el reloj del ordenador, que deberá ser lo mas exacta posible, pero nunca la hora TU, que corsponde al meridiano de Greenwich. La función:
var zona=(fecha.getTimezoneOffset())/60; permite obtener la zona horaria partiendo de la configuración del ordenador. Así para paises extensos, con varios husos horarios puede haber problemas. En el oeste de EEUU la función debería devolver 8horas = 480 minutos y devuelve 300 minutos. Para agravar la cuestión diferentes versiones de los conocidos browser Netscape y Iexplorer dan resultados diferentes y aun la misma versión dan resultados diferentes según el sistema operativo sobre el que funcionen. Netscape 4 e IE4 dan las dos el mismo resultado.
La función var tu=(fecha.toGMTString()); convierte a fecha a GMT pero la devuelve como cadena alfanumérica de la que es dificil extraer la fecha y hora.
La función Date.parse(tu) donde tu es una cadena devuelve los milisegundos trascurridos desde el 1 de Enero de 1970.
Para la creación de un objeto Date se puede recurrir a ingresar como argumento los milisegundos:
var fecha=new Date(miliseg);
Por si poco teníamos, la hora de verano cuyo inicio y final cambian arbitrariamente los gobiernos complica la situación. Se ha optado por una casilla de verificación (llamada v) que si está activada posee la propiedad checked
if (document.galileo.v.checked) {
var miliseg=(Date.parse(tu))+(zona-1)*60*60*1000;
}else {
var miliseg=(Date.parse(tu))+zona*60*60*1000;
}
Quizá debería haber optado por una lista desplegable y que cada usuario eligiese su zona.
He comprobado el programa para España con varios browser y funciona. Netscape 3 reconoce la hora de verano de Windows 95 por lo que no es necesario activarla. IExplorer 3 no puede usarse pues no reconoce bien alguna de las funciones de fecha tratadas. Las versiones 4 de los dos browser funcionan bien.
Ignoro que funcionamiento tendrá el programa en Hispano América por lo que si son tan amables ruego me manden información sobre lo que debería señalar en TU y lo que realmente marca y del país donde esto sucede. He puesto un enlace al usno para que nos indique el TU en ese instante. Si ambas indicaciones no coinciden se puede usar medici3 para entrar manualmente la fecha y hora TU.
El programa se actualiza cada 5 segundos y espero que sea una velocidad adecuada.