Attenzione! Javascript è disabilitato

Il Cielo Delle Baronie

Benvenuto in questo sito, dedicato alle bellezze del cielo della Sardegna.

Versione inglese

ASTROJS - Esempi di codice: La posizione dei satelliti Medicei di Giove

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...

Posizione attuale dei satelliti:

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).

Listato valido per altre date:

<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.

Rappresentazione grafica del sistema:

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.

Codice CSS

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)*************************************************/

Codice HTML

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>

Completare con Javascript e AstroJS

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.

Visione per telescopio Newton/Dobson:

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

Visione con telescopio SCT/MAK/Rifrattore con diagonale:

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

Abbellire il grafico:

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.

Aumentare la precisione nella rappresentazione grafica:

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";

Miglioramenti del codice:

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.

Origine delle coordinate in una pagina Html

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.

Calcolare i transiti dei satelliti:

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.

Note per i calcoli :

Grafico di esempio, che descrive l'orbita di un satellite di Giove. La congiunzione inferiore 0°(in basso), è l'origine della longitudine.

giove
Apri Menu Scripts: >>

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