1° Forum di Astronomia Amatoriale Italiano

Il primo forum di astrofili per astrofili, nato nel 2000!
Oggi è mercoledì 28 gennaio 2026, 12:30

Menu

* Home
* Iscriviti
* La Bacheca
* F.A.Q.
* Cerca
* Login/Logout 

Login

Nome utente:
Password:

 Ho dimenticato la password

In Linea

Visitano il forum: Nessuno e 21 ospiti

Regolamento

regolamento

Links

*
Astrocafè

Segnala bolide
* Meteoblue.com
* Previsioni seeing
* Il Meteo.it
Help Forum
 

Tutti gli orari sono UTC + 1 ora




Apri un nuovo argomento Rispondi all’argomento  [ 7 messaggi ] 
Autore Messaggio
MessaggioInviato: venerdì 12 febbraio 2010, 16:52 
Non connesso

Iscritto il: lunedì 8 febbraio 2010, 17:55
Messaggi: 4
Premetto che sono solo un "misero" programmatore php e che di astronomia (fortuna che un amico mi ha corretto, all'inizio avevo scritto "astrologia"... perdonate l'ignoranza... :P) conosco molto poco, anche se devo ammettere che col progetto che sto portando avanti da circa un anno mi sto appassionando molto alla materia.

Premesso questo, il mio problema ora è quello di realizzare una funzione in php che mi restituisca la coordinate celesti del punto del cielo che, in un dato momento, si trova esattamente "sopra alla testa" (90° rispetto alla perpendicolare sulla superficie terrestre) dell'osservatore. In parole povere, mi serve capire come calcolare più o meno esattamente, quale stella era sopra la mia testa il giorno x alla ora y, mentre ero in vacanza a Cuba. Ho già un database di stelle con le coordinate e so già fare query georeferenziate, quindi il mio problema è solo il primo passaggio: trovare le coordinate sopra la testa in un dato momento in radianti/declinazione.

Ho chiesto e contattato diverse persone, tra le quali solo una mi ha saputo dare "il via" e indicarmi l'algoritmo corretto. Ora che l'ho scritto però avrei bisogno che qualcuno più esperto di me e con magari qualche competenza php, mi dicesse se è corretto, se è totalmente cannato, se mancano costanti di correzione, o simili...

L'algoritmo non prende in considerazione il fatto che le stelle si allontanano/avvicinano tra di loro in tempi "lunghi" perchè mi basta sia approssimativamente corretto nell'arco di +/-200 anni.

Di seguito le due funzioni (giuste? Sbagliate? Boh...aiuto!!!):

Codice:
function getObserverRaDec($observer_lat, $observer_long, $observer_datetime = null,$H = 90, $A = 0) {
   //Converto prima da gradi a radianti (seni e coseni usano i radianti)
   $H = deg2rad($H);
   $observer_lat = deg2rad($observer_lat);
   $observer_long = deg2rad($observer_long);
   
   if ($observer_datetime === null) {
      $observer_datetime = getdate();
   }
   
   $ums = $observer_datetime['hours'] + $observer_datetime['minutes']/60. + $observer_datetime['seconds']/3600;
   $jd = cal2Jul($observer_datetime['mday'],$observer_datetime['mon'],$observer_datetime['year']);
   //sin(dec)=sin(lat)*sin(alt)+cos(lat)*cos(alt)*cos(az)
   //sin(ha)=(cos(alt)*sin(az))/cos(dec)
   //cos(ha)=(cos(lat)*sin(alt)-sin(lat)*cos(alt)*cos(az))/cos(dec)
   $Dec = asin(sin($observer_lat)); //Ho dovuto fixare così perchè il cos di 90 gradi, convertendoli in radianti, non era esattamente 0, ma "prossimo" allo 0.
   $HA = 0;
   $TS = 100.46 + 0.9856474 * $jd + $observer_long + 15*$ums;
   $AR = $TS - $HA;
   $AR = fmod($AR,360);
   //$costante_di_conversion_ra = 360/23.93447; //(23h 56m 4.100s)
   return array('dec'=>$Dec,'ra'=>$AR);
}
function cal2Jul($dd,$mm,$yyyy){
   $xa=0;
   $xb=0;
   $xc=0;
   $xd=0;
   $ind=0;
   if ($yyyy < 0) $yyyy++;
   if ($mm < 3) {
      $mm+=12;
      $yyyy--;
   }
   if ($yyyy < 1582) $ind=1;
   if (($yyyy == 1582) && ($mm < 10)) $ind=1;
   if (($yyyy == 1582) && ($mm == 10) && ($dd < 15)) $ind=1;
   if ($ind == 0) {
      $xa=(int)($yyyy/100);
      $xb=2-$xa+(int)($xa/4);
   }
   if ($yyyy < 0) {
      $xc=(int)((365.25*$yyyy)-0.75)-694025;
   } else {
      $xc=(int)(365.25*$yyyy)-694025;
   }
   $xd=(int)(30.6001*($mm+1));
   
   $DJD=$xb+$xc+$xd+$dd-0.5;
   $JD=$DJD+2415020;
   return $JD;
}


Vi riporto quanto mi scrisse quella persona tempo fa e ciò da cui son partito per estrapolare queste formule...

Cita:
Mi sembra di capire che il suo problema e' quello di trovare le coordinate celesti di un punto del cielo che in un dato momento si trova in una particolare posizione rispetto all'osservatore.
L'osservatore solitamente prende come riferimento il punto in cui si trova e misura due angoli: l'altezza sull'orizzonte dell'oggetto celeste e l'azimuth, ovvero l'angolo fra il piano meridiano nel punto di osservazione ed un piano verticale che passa per l'oggetto. Chiamiamo questi due angoli H (altezza) ed A (azimut).
Il calcolo solitamente avviene in due passi: prima si trasformano i due angoli detti (che identificano il sistema di riferimento altoazimutale) nel sistema di riferimento equatoriale locale, poi si effettua la trasformazione nel riferiemto equatoriale celeste..
Il primo passo e' rappresentato dalle seguenti formule:
sin Dec = sin B * sin H + cos B * cos H * cos A

sin HA = (cos H * sin A)/cos Dec
cos HA = (cos B * sin H + sin B * cos H * cos A) / sin Dec
Dove, B:latitudine, A: azimuth, H: altezza, sono i dati di ingresso e Dec: declinazione e HA: angolo orario, sono le coordinate nel riferimento equatoriale. In pratica dopo aver calcolato la declinazione con la prima formula, si utilizza la seconda, oppure la terza, per calcolare l'angolo orario (si scegle quella per la quale il denominatore e' un numero non troppo piccolo, ovviamente).
Il successivo passaggio, trasforma l'angolo orario in ascensione retta, dato che la declinazione rimane uguale nella trasformazione da coordinate equatoriali locali a coordinate equatoriali celesti.
La relazione e' la seguente:
AR = TS - HA
Dove AR e' l'ascensione retta e TS il "tempo sidereo".
Quest'ultimo e' il tempo misurato basandosi sul passaggio al meridiano di una stella (mentre il tempo che si usa normalmente e' basato sul passaggio al meridiano del sole. I due tempi non coincidono a cusa della rivoluzione della terra intorno al sole).
Il tempo sidereo si calcola a partire dal tempo locale:
TS = 100.46 + 0.985647 * d + long + 15*UT
dove d e' il numero di giorni (e frazioni) trascorsi dal giorno giuliano J2000 UT e' il tempo universale in ore e frazioni di ora, long: e' la longitudine in gradi (positiva ad est di Greenwich)
Il risultato e' in gradi e deve essere riportato nell'intervallo fra 0 e 360. Se i risultati delle relazioni precedenti sono stati calcolati anch'essi in gradi, il valore di TS puo' essere usato direttamente.
Calcolato TS e trovata AR, i due valori Dec e AR sono quelli che nei cataloghi si utilizzano per le coordinate degli oggetti celesti.
Note: J2000 indica il numero di giorni trascorsi dalle ore 12 UT del 1 gennaio 2000.


Julian Date
The Julian date is the number of days since Greenwich mean noon on the first of January, 4713 B.C.

To compute the Julian Date:

1. Convert local time to Greenwich Mean Time
2. Let Y equal the year, M equal the month, D equal the day in decimal form.
3. If M equals 1 or 2 then subtract 1 from Y. and add 12 to M.
4. Compute A. A=INT(Y/100)
5. Compute B. B=2-A+INT(A/4). However, if the date is earlier than October 15, 1582 then B=0.
6. Calculate C. C=INT(365.25*Y). If Y is negative then C=INT((365.25*Y)-.75).
7. Calculate E. E=INT(30.6001*(M+1))
8. Calculate JD (Julian Date). JD=B+C+D+E+1720994.5


Confermate la teoria? Grazie a chiunque avrà anche solo letto tutto questo post, ma sinceramente non sapevo più dove sbattere la testa e spero di esser capitato nel posto giusto! :P


Top
  Profilo    
 
MessaggioInviato: venerdì 12 febbraio 2010, 17:29 
Non connesso
Vendor
Avatar utente

Iscritto il: lunedì 11 settembre 2006, 8:35
Messaggi: 1342
Località: Codroipo (UD)
Tipo di Astrofilo: Visualista e Fotografo
Ci penso e ti dico. Bravo che hai corretto astrologi :P

Ciao Matteo!

Mauro

_________________

Mauro Narduzzi
Responsabile sezione Astronomia
www.skypoint.it


Top
  Profilo   WWW  
 
MessaggioInviato: sabato 13 febbraio 2010, 14:19 
Non connesso

Iscritto il: venerdì 29 agosto 2008, 10:37
Messaggi: 133
Località: Brindisi - Venezia
Tipo di Astrofilo: Fotografo
ti consiglio di mettere il parametro null come ultimo parametro passabile alla funzione, anche se i parametri $H
e $A non verranno mai modificati (e in tal caso assegnarli all'interno della funzione..)
credo che potrebbe essere un problema alla riga:
Codice:
$ums = $observer_datetime['hours'] + $observer_datetime['minutes']/60. + $observer_datetime['seconds']/3600;

il /60. dato che php la prende come concatenazione, magari prova con un debug a vedere cosa assume la var con o senza.

l'algoritmo non l'ho controllato a fondo, ma a colpo d'occhio non capisco nella formula
cos HA = (cos B * sin H + sin B * cos H * cos A) / sin Dec
tu fai combaciare la latitudine ad azimuth?

_________________
Konusky 90 f10
Bin. Konus 20x80
Vixen Photoguider GP

Canon EOS 350D nomod
Canon EF-S 55-250mm f/4-5.6 IS
Canon EF-S 18-55mm f/3.5-5.6 II
Canon EF 50mm f/1.8 II
Canon EF 28mm f/2.8
Petri m42 55mm f/2


Top
  Profilo   WWW  
 
MessaggioInviato: lunedì 15 febbraio 2010, 11:21 
Non connesso

Iscritto il: lunedì 8 febbraio 2010, 17:55
Messaggi: 4
Enzo84 ha scritto:
l'algoritmo non l'ho controllato a fondo, ma a colpo d'occhio non capisco nella formula
cos HA = (cos B * sin H + sin B * cos H * cos A) / sin Dec
tu fai combaciare la latitudine ad azimuth?


E' per questo che ho scritto su questo forum. Purtroppo ci capisco davvero poco: io ho solo preso la formula suggeritami da quella persona e trascritta in codice php...


Top
  Profilo    
 
MessaggioInviato: lunedì 22 febbraio 2010, 11:51 
Non connesso

Iscritto il: lunedì 8 febbraio 2010, 17:55
Messaggi: 4
Nessuno riesce a darmi una mano con questo algoritmo?


Top
  Profilo    
 
MessaggioInviato: lunedì 22 febbraio 2010, 11:56 
Non connesso
Avatar utente

Iscritto il: giovedì 7 dicembre 2006, 23:07
Messaggi: 8592
Località: Leiden, The Netherlands
Una domanda: ma stai facendo la funzione php perché non hai altri mezzi o solo per diletto?
Se ti serve sapere il cielo su Cuba in un dato luogo ad una data specifica ora ci sono programmi apposta (oltretutto in 3D ;) ). Cerca Stellarium

_________________
Tutto ciò che dà fastidio al potere e alle buone coscienze, questo è Marcos. E, per questo, tutti noi che lottiamo per un mondo diverso, per la libertà e l'emancipazione dell'umanità, tutti noi siamo Marcos.


Top
  Profilo    
 
MessaggioInviato: lunedì 22 febbraio 2010, 13:25 
Non connesso

Iscritto il: lunedì 8 febbraio 2010, 17:55
Messaggi: 4
Lead Expression ha scritto:
Una domanda: ma stai facendo la funzione php perché non hai altri mezzi o solo per diletto?
Se ti serve sapere il cielo su Cuba in un dato luogo ad una data specifica ora ci sono programmi apposta (oltretutto in 3D ;) ). Cerca Stellarium


No no, mi serve proprio in php. Non è per "interesse personale" che voglio sapere il cielo a Cuba in una data ora, ma per un "softwarino" online che sto facendo...


Top
  Profilo    
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 7 messaggi ] 

Tutti gli orari sono UTC + 1 ora


Chi c’è in linea

Visitano il forum: Nessuno e 21 ospiti


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzione Italiana phpBBItalia.net basata su phpBB.it 2010