Attenzione! Javascript è disabilitato
Esempi di listati relativi al calcolo di posizione dei satelliti Medicei rispetto al pianeta Giove; compresi i transiti dei satelliti e della Grande Macchia Rossa (GRS).
Prima di iniziare, collegate la vostra pagina Html alla libreria Astrojs, incollando il seguente listato, sotto il tag <title>.
IMPORTANTE! Le funzioni evidenziate in rosso, non sono comandi Javascript, ma appartengono alla libreria Astrojs.
<script type="text/javascript" src="http://www.suchelu.it/astrojs/astrojs.js"></script>
Utilizzate il menu a tendina [ Apri Menu Scripts: ], per poter accedere velocemente, all'elenco di tutti gli scripts, finora realizzati...
Questo listato restituisce tre valori per ogni satellite, che corrispondono alle coordinate cartesiane (x,y), e alla longitudine del satellite rispetto alla congiunzione inferiore col pianeta.
Giove è ubicato sull'origine del sistema di coordinate cartesiane, e la x,y, sono espresse in raggi gioviani, dove il raggio, è uguale a 1.
L'ultima variabile, corrisponde alla longitudine del meridiano centrale del pianeta nel sistema II.
I tempi sono sempre espressi in T.U. di Greenwich.
<script language="JavaScript" type="text/javascript"> //<!-- var njd=calcola_jd(); // Il G.G. per il tempo di Greenwich in questo istante. var pos_sat=moons_jup(njd); // Calcola la posizione dei satelliti e restituisce un'Array. // Recupero dei risultati: // satellite IO. document.write(pos_sat[0]+"<br>"); // coordinata x document.write(pos_sat[1]+"<br>"); // coordinata y document.write(pos_sat[2]+"<br>"); // longitudine // satellite EUROPA. document.write(pos_sat[3]+"<br>"); // coordinata x document.write(pos_sat[4]+"<br>"); // coordinata y document.write(pos_sat[5]+"<br>"); // longitudine // satellite GANIMEDE. document.write(pos_sat[6]+"<br>"); // coordinata x document.write(pos_sat[7]+"<br>"); // coordinata y document.write(pos_sat[8]+"<br>"); // longitudine // satellite CALLISTO. document.write(pos_sat[9]+"<br>"); // coordinata x document.write(pos_sat[10]+"<br>"); // coordinata y document.write(pos_sat[11]+"<br>"); // longitudine document.write(pos_sat[11]+"<br>"); // longitudine del meridiano centrale di Giove. document.write(pos_sat[12]+"<br>"); // declinazione planetocentrica della Terra. // la [12] è utile per calcoli particolari. //--> </script>
Con queste coordinate, il Nord è in alto e l'ovest è a destra. Per la (x) con valore positivo, nel grafico, corrisponde ad un punto posizionato a destra rispetto all'asse (y), verso (ovest).
<script language="JavaScript" type="text/javascript"> //<!-- //calcola il G.G. per la data indicata nelle variabili. var dd=23; // giorno. var mm=6; // mese. var yy=2011; // anno. var hh=10; // ora. var mi=20; // minuti. var se=30.256; // secondi (possono avere decimali). var njd=calcola_jddata(dd,mm,yy,hh,mi,se); // calcola il giorno giuliano. var pos_sat=moons_jup(njd); // Calcola la posizione dei satelliti e restituisce un'Array. // Recupero dei risultati: // satellite IO. document.write(pos_sat[0]+"<br>"); // coordinata x document.write(pos_sat[1]+"<br>"); // coordinata y document.write(pos_sat[2]+"<br>"); // longitudine // satellite EUROPA. document.write(pos_sat[3]+"<br>"); // coordinata x document.write(pos_sat[4]+"<br>"); // coordinata y document.write(pos_sat[5]+"<br>"); // longitudine // satellite GANIMEDE. document.write(pos_sat[6]+"<br>"); // coordinata x document.write(pos_sat[7]+"<br>"); // coordinata y document.write(pos_sat[8]+"<br>"); // longitudine // satellite CALLISTO. document.write(pos_sat[9]+"<br>"); // coordinata x document.write(pos_sat[10]+"<br>"); // coordinata y document.write(pos_sat[11]+"<br>"); // longitudine document.write(pos_sat[11]+"<br>"); // longitudine del meridiano centrale di Giove. //--> </script>
Nella pagina successiva, realizzeremo un grafico, utilizzando delle semplici stringhe di testo.
Le coordinate numeriche, (x,y) non sono di immediato aiuto, al fine di rappresentarci mentalmente la posizione dei satelliti;
l'unico modo è quello di utilizzarle per creare un grafico, che a colpo d'occhio ci dia una visione chiara delle lune gioviane.
Col listato in basso, creeremo un semplicissimo grafico, realizzato con testi che si disporranno su un sfondo nero, in funzione delle coordinate dei satelliti.
Inserite questo codice CSS nella vostra pagina web nella sezione Style Block... <head></head>.
#sist_gioviano: crea un semplice rettangolo nero da 600x80 pixel, sul quale inseriremo giove e le sue lune.
#JP: è il testo che indica la posizione di Giove.
#S0,#S1,#S2,#S3: sono le lettere che rappresentano i satelliti. (position: absolute) è fondamentale per il corretto funzionamento dello script.
/************************* codice CSS (nizio)************************************************/ #sist_gioviano{ background-color: #000000; width: 600px; height: 80px; border: 1px solid red; position: relative; } #JP{ position: absolute; color: red; font-size: 16px; } /* GIOVE */ #S0{ position: absolute; color: yellow; font-size: 10px; } /* IO */ #S1{ position: absolute; color: red; font-size: 10px; } /* EU */ #S2{ position: absolute; color: green; font-size: 10px; } /* GA */ #S3{ position: absolute; color: blue; font-size: 10px; } /* CA */ /************************* codice CSS (fine)*************************************************/
Inserite questo listato all'interno della sezione <body></body> della vostra pagina.
Questi elementi visualizzano il rettangolo nero #sist_gioviano:, e le 5 stringhe di testo, con i nomi di Giove (J), e delle sue 4 lune.
Come potete notare, le stringhe di testo, sono posizionate nell'angolo il alto a sinistra, in attesa che lo script Javascript/AstroJs,
faccia il suo lavoro di traslazione nella posizione corretta.
<div id="sist_gioviano"> <p id="JP"> J </p> <!-- GIOVE --> <p id="S0"> Io </p> <!-- IO --> <p id="S1"> Eu </p> <!-- EUROPA --> <p id="S2"> Ga </p> <!-- GANIMEDE --> <p id="S3"> Ca </p> <!-- CALLISTO --> </div>
Per finire, inserite questo listato, subito dopo il precedente. I testi relativi a ciascun elemento, verranno spostati, nella posizione corrispondente alle coordinate calcolate (x,y).
<script language="JavaScript" type="text/javascript"> //<!-- var x=new Array(); var y=new Array(); var testo ="***"; var scala=10; // fattore di scala. // posizionare Giove al centro del grafico. testo=document.getElementById("JP"); // id pianeta="JP" testo.style.marginTop = "40px"; testo.style.marginLeft= "300px"; var njd=calcola_jd(); // Il G.G. per il tempo di Greenwich in questo istante. var pos_sat=moons_jup(njd); // Calcola la posizione dei satelliti e restituisce un'Array. x[0]=300+pos_sat[0]*scala; // X di IO. y[0]= 40-pos_sat[1]*scala; // Y di IO. x[1]=300+pos_sat[3]*scala; // X di EU. y[1]= 40-pos_sat[4]*scala; // Y di EU. x[2]=300+pos_sat[6]*scala; // X di GA. y[2]= 40-pos_sat[7]*scala; // Y di GA. x[3]=300+pos_sat[9]*scala; // X di CA. y[3]= 40-pos_sat[10]*scala; // Y di CA. for (a=0; a<4; a++){ testo=document.getElementById("S"+a); // id satellite="S"+a testo.style.marginTop = y[a]+"px"; testo.style.marginLeft= x[a]+"px"; } </script>
Questo è il risultato: semplice, ma già sufficiente a visualizzare il sistema gioviano.
Se vi accingete ad osservare col telescopio, probabilmente la visualizzazione del grafico in modalità diretta, potrebbe crearvi un pò di confusione,
a causa della visione capovolta del telescopio.
Per risolvere questo problema, possiamo applicare delle modifiche alle coordinate, in modo tale, da avere un grafico, che simula la visione telescopica.
Le prime due righe sono da inserire dopo la funzione moons_jup(njd), in quelle dei satelliti aggiungete, rispettivamente, *view_x; e *view_y; alla fine.
var view_x=-1; var view_y=-1; x[0]=300+pos_sat[0]*scala*view_x; // X di IO. y[0]= 40-pos_sat[1]*scala*view_y; // Y di IO. //**************** continuate con gli altri satelliti
Da inserire dopo la funzione moons_jup(njd).
var view_x=-1; var view_y= 1; x[0]=300+pos_sat[0]*scala*view_x; // X di IO. y[0]= 40-pos_sat[1]*scala*view_y; // Y di IO. //**************** continuate con gli altri satelliti
Potete sostituire i testi dei satelliti con un'immagine, ad esempio, con un cerchietto da 10x10pixel. Ancora meglio, se abbinate al simbolo (cerchietto), il testo: la cosa importante, è che l'id di ogni singolo elemento sia univoco, in modo tale da poterlo spostare.
<img id="S0" src="mio_file.png" width="5" height="5" alt="satellite IO"/>';
Per abbellire il grafico, potete sostituire anche il background di #sist_gioviano{} con un'immagine, che contenga un cerchio per indicare
il disco di Giove, oppure una piccola miniatura del pianeta.
Se volete utilizzare un'immagine come sfondo, potete modificare le dimensioni predefinite di 600x80 pixel del <div>, in modo tale, che possa contenere la vostra immagine.
Con l'inserimento di una miniatura di Giove, la variabile scala=10;, presente nel listato, dovrà essere calibrata in funzione del raggio
dell'immagine del pianeta.
Inserite poco prima del ciclo for{}, queste due righe, modificate il fattore di scala fino a quando il satellite Io, non si posizionerà, esattamente, sul bordo destro del disco o dell'immagine che rappresenta Giove.
x[0]=300+scala; y[0]= 40 ;
Queste due righe sono simili a quelle presenti nel listato principale, ma qui abbiamo la x=1 e la y=0. Dopo aver scalato il grafico in funzione del raggio del vostro Giove; cancellate le due righe.
Se utilizzate un simbolo (immagine), per rappresentare i satelliti, dovete tener conto delle dimensioni in pixel del vostro simbolo.
Nell'ipotesi di utilizzare, un cerchietto di 10x10pixel (è un quadrato con all'interno il cerchio) il punto di inserimento non sarà il centro ma l'angolo in alto a sinistra.
Per far coincidere il centro del simbolo con le coordinate (x,y) dobbiamo sottrarre dalle coordinate x[],y[], 5 pixel, cioè la metà delle dimensioni del simbolo.
La stessa cosa è valida anche per le stringhe di testo, utilizzate nel listato precedente, ma per semplicità non ho applicato la correzione.
Le righe delle coordinate diventano:
x[0]=300+pos_sat[0]*scala-5; // X di IO. y[0]= 40-pos_sat[1]*scala-5; // Y di IO. // per il pianeta Giove. testo.style.marginTop = "32px"; testo.style.marginLeft= "292px";
Utilizzando le coordinate (x,y) del satellite e quelle del pianeta (0,0), calcoliamo la distanza apparente; quando questa è inferiore a 1 (minore del raggio di Giove),
possiamo fare in modo, che lo script segnali un transito o un'occultazione.
Per distinguere un transito da un'occultazione è sufficiente verificare la longitudine del satellite; per valori vicini a 0° o 360° e distanza minore di 1, ci sarà un transito,
per una longitudine vicina a 180° un'occultazione.
Le variabili della longitudine (vedi listati della prima pagina), sono evidenziate nelle note a destra della riga di codice.
var distanza=dist_cart(x1,y1,x2,y2); // calcola la distanza tra due punti nel piano cartesiano.
Sostituite x1,y1 con x,y e x2,y2 con 0,0.
Nelle pagine Html l'origine delle coordinate (0,0) è in alto a sinistra, dovete tener conto di questo, per poter posizionare correttamente gli
elementi.
Da notare, come in questo caso, per posizionare Giove al centro del grafico sono state utilizzate le coordinate 300(x) e 40(y), che corrispondono alla metà
delle dimensioni del rettangolo nero (600x80pixel).
Utilizzando la stessa tecnica, si possono realizzare grafici come questo.
Con questo listato, è possibile calcolare il transito dei satelliti sul disco di Giove.
Gli istanti sono 3: Inizio - Centralità - Fine.
Per il satellite Callisto, l'algoritmo calcola la congiunzione inferiore più vicina, sucessivamente verificherà il valore assoluto della
coordinata (y), se questa è maggiore di 1, significa, com'è facilmente comprensibile, che il satellite non transiterà, perchè la sua distanza
dal centro di Giove è maggiore di 1.
La funzione restituirà il numero 999, al verificarsi di una congiunzione inferiore senza transito.
Gli instanti sono indicati in giorni giuliani del T.U.
<script language="JavaScript" type="text/javascript"> //<!-- // ns=1 IO | ns=2 EUROPA | ns=3 GANIMEDE | ns=4 CALLISTO | var ns=1; // ns=1 per il satellite IO var njd=calcola_jd(); // Il G.G. per il tempo di Greenwich in questo istante. var tempi=transit_moonsjp(njd,ns); // ns=1 per il satellite IO document.write(tempi[0]+"<br>"); // g.g ingresso document.write(tempi[1]+"<br>"); // g.g centralità document.write(tempi[2]+"<br>"); // g.g fine </script>
Sostituendo il valore di ns, potete calcolare i transiti di tutti e 4 i satelliti; oppure racchiudete il listato in un ciclo for{}.
Per trasformare i giorni giuliani in date, selezionate la pagina: Calcolo del Giorno Giuliano
Listato per il calcolo del prossimo transito della Macchia Rossa di Giove.
<script language="JavaScript" type="text/javascript"> //<!-- var angolo_grs=184; // longitudine attuale della GMR var njd=calcola_jd(); // Il G.G. per il tempo di Greenwich in questo istante. var tempi=transit_grs(njd,angolo_grs); // g.g. transito document.write(tempi+"<br>"); // g.g del transito in T.U. </script>
La longitudine della M.R. non è costante e va periodicamente verificata: in rete potete trovare facilmente questo dato aggiornato.
Grafico di esempio, che descrive l'orbita di un satellite di Giove. La congiunzione inferiore 0°(in basso), è l'origine della longitudine.
Riferimenti bibliografici:
JEAN MEEUS - Astronomia con il computer. ( Hoepli-1990 ) - PETER DUFFETT-SMITH -Astronomia pratica. ( Sansoni Studio 1981 )
Copyright ©2009 - Salvatore Ruiu
Tutti i contenuti del sito sono protetti dal diritto d'autore.
All Rights Reserved.
Questo sito è Online da dicembre 2009 || Ultima modifica: 10-Dicembre 2009 || Questa pagina web rispetta le direttive del W3C | CSS 2.1 | XHTML 1.0