Newsgroup: it.scienza.astronomia
Titolo: Scrivere un programma di astronomia

Ciao,
sto scrivendo un programma di astronomia, ma sto avendo alcuni problemi nel
proiettare gli oggetti sullo schermo, in particolare vorrei sapere se e
quali sono gli algoritmi per le proiezioni di Marcator soprattutto per
larghi zoom.
Chiunque sia interessato ad aiutarmi in qualsiasi modo mi scriva a 
nam...@hotmail.com
Grazie

Mariapia Ambrosetti ha scritto nel messaggio
<01bdb1d3$2ae7ebe0$e3a5bec3@98165>...

Brava!
Ti sei presa un bell'impegno e ne so qualcosa perchè ho dovuto affrontare e
superare i tuoi stessi problemi.
La proiezione di Mercatore, seppure sia la più usata, non è certo la
migliore, sia per la resa grafica che per l'implementazione dell'algoritmo.
Tale tipo di proiezione, come penso saprai, è in grado di rappresentare
correttamente (quasi) la fascia di globo (Terra o Sfera Celeste che sia) nei
pressi dell'Equatore, in quanto in tale zona le deformazioni (che comunque
sono caratteristiche ed ineliminabili da qualunqure tipo di proeizione) sono
ridotte al minimo.
Allontanandoci dall'Equatore le deformazioni diventano così insopportabili
da snaturare la rappresentazione fino a renderla addirittura impossibile. Ad
esempio, come noto, non è possibile rappresentare i poli che sono, in questa
proiezione, a distanza infinita. Non potrai quindi piazzare la Stella Polare
e neanche parte dell'Orsa Minore.
Se ti accontenti di arrivare ad una rappresentazione delle stelle che hanno
declinazione fino a circa 60° gradi (zona comunque in cui risiedono la
maggior parte delle stelle visibili) puoi ottenere un buon compromesso tra
facilità di lettura della carta e non eccessiva compressione della fascia
zodiacale.
Per rappresentare i Poli (e zone limitrofe) dovrai utilizzare un altro tipo
di proiezione, ad. esempio una stereografica o una gnomonica polare
(quest'ultima è molto semplice da implementare).
La Proiezione di Mercatore è soprattutto usata nel campo della Navigazione
marittima perchè consente la conservazione degli angoli (isogonismo) e
permette di tracciare le rotte delle navi (lossodromie - non sono
rettilinee) secondo una linea retta.
Un arco di circolo massimo sulla sfera celeste, cioè la congiungente diretta
tra due astri che ai nostri occhi appare rettilinea, su Mercatore non rimane
tale ma assume una maggiore minore concavità verso l'Equatore; in pratica su
di essa non potrai riportare tutti i classici allineamenti stellari così
come si vedono ad occhio.
Ma non ti scoraggiare! Nonostante i difetti citati anch'io utilizzo spesso
la proiezione di Mercatore per la rappresentazione della Sfera Celeste; un
po' per familiarità (qui siamo all'Istituto Nautico e Mercatore per noi è
pane quotidiano), un po' perchè dà una buona rappresentazione della fascia
eclitticale (quindi Sole, pianeti e stelle) e, in rappresentazione
altazimutale, della fascia vicino all'orizzonte.
Passiamo all'aspetto tecnico:
-la scala delle longitudini (pardon! ascensioni rette) è uniforme e quindi
dovrai stabilire quanti pixel vuoi che occupino ad es. 1°, 2°, 5° di
ascensione retta. Il rapporto tra pixel e gradi viene definito il modulo
della carta.
Esempio vuoi rappresentare 2° di alfa ogni 30 pixel? allora il modulo è 15
(30/2). Un astro che ha alfa=5° lo dovrai posizionare distante (5X15) 75
pixel dal meridiano di riferimento
Se vuoi rappresentare tutto il cielo su uno schermo a risoluzione 800X600
dovrai utilizzare un modulo pari 800/360 = 2.222.
-La rappresentazione della declinazione è più complessa poichè essa non
segue una legge lineare come nel caso delle ascensioni.
Dalla declinazione dell'astro devi passare ad un valore intermedio che
prende il nome di Latitudine Crescente (in questo caso bisognerebbe dire
Declinazione Crescente) la cui espressione approssimata (ma più che
sufficiente per questi scopi) è
DC=log(tan(45+Decl/2))
Dovrai calcolarti tale valore per tutti gli astri e quindi moltiplicarlo per
il modulo prima determinato.
Il valore che ottieni
y=DC x modulo/60
è la distanza in pixel dalla linea che rappresenta l'Equatore Celeste
all'astro. Se l'Equatore lo metti a metà altezza schermo (quindi a 300 pixel
dal bordo inferiore) l'astro sarà a 300+y.
Attenzione: y si calcola solo così. Non puoi moltiplicare direttamente la
Declinazione dell'astro per il modulo, come invece si fa per le ascensioni.
Niente però ti vieta di farlo. Non otterrai una proiezione di mercatore ma
qualcosa d'altro che però potrebbe anche piacerti di più. Prova.
Ricorda che qualunque proiezione tu usi non potrai mai rappresentare il
cielo come lo vedi. Ogni proiezione si porta dietro i propri difetti e le
poprie deformazioni prospettiche, per cui provane diverse e scegli quella
che più si confà ai tuoi scopi.
Tornando a Mercatore, per cambiare la scala della carta (cioè zoomare in più
o in meno) è sufficiente semplicemente cambiare valore al modulo (se lo
raddoppi ingrandirai del doppio se lo dimezzi dimezzerai le distanze tra gli
astri) e ovviamente ridisegnare tutto il cielo.
A tale scopo ti converrà organizzare il disegno del cielo in una routine
separata a cui passerai di volta in volta come parametro anche il valore
dinamico del modulo.
L'implementazione materiale di questi algoritmi (te lo dico per esperienza)
ti creerà qualche piccolo problema (te ne cito uno solo: la chiusura del
cielo su ste stesso) che dovrai provare a risolvere da sola con qualche
buona tecnica di programmazione.
Comunque non demordere e prova.
Non so se ti ho dato le risposte che cercavi.
Fammi sapere, se vuoi, come procede il lavoro.
A proposito quale linguaggio di programmazione usi?
Saluti
Franco Martinelli
ISTITUTO TECNICO NAUTICO "ARTIGLIO"
VIAREGGIO
URL:                                    
www.nauticoartiglio.lu.it
mio URL privato                
www.dex-net.com/ei886