HEALPix - help!

Già la parola HEALPix suona come una richiesta di aiuto e infatti ho chiesto chiarimenti su un forum più specializzato.

Tuttavia è una cosa interessante da condividere qui e magari qualche appassionato di astronomia può darmi qualche dritta.

Dunque: HEALPix (Hierarchical Equal Area isoLatitude pixelization) può riferirsi sia un algoritmo, che a un pacchetto software associato, che ad una classe associata di proiezioni cartografiche. HEALPix è nato originariamente per poter elaborare i grandi CMB data set come quello di Planck e di WMAP ed ora è ampiamente utilizzato per le sue notevoli caratteristiche.

Sucessive iterazione della divisione. Credit: NASA.

Il software è scaricabile qui (60MB) e sono disponibili la documentazione le sorgenti in vari linguaggi. Veniamo alla richiesta d’aiuto:

Vorrei disegnare una sfera (anzi solo un poliedro!) con la pixelizzazione HEALPix. La versione in IDL della libreria mi permette di conoscere i vertici dei vari pixel (cioè i nodi della griglia) mentre la versione in C mi permette di conoscere solo il centro dei pixel (i punti neri nell’immagine). Ovviamente sto scrivendo il mio programma in C.

Purtroppo il codice IDL è molto incasinato e non mi è facile importare nella libreria C la funzionalità che mi serve.

Si trova della buona documentazione sulla geometria di HEALPix, ma non mi sembra il caso di scrivermi l’algoritmo da zero.

Beh, se qualcuno ha qualche idea…

EDIT: ho postato la solenne richiesta su www.stackoverflow.com nel caso qualcuno volesse qualche dettaglio in più - o guadagnarsi un po’ di reputazione ; )

La usiamo nel software per Gaia (che e’ in Java).
Vedo se riesco a trovare come si fa…:thinking::thinking:

1 Mi Piace

OK, nella versione Java, basta usare il metodo HealpixBase.boundaries , che restituisce le coordinate dei 4 vertici di un dato pixel. Non so in C, ma immagino che ci sia una funzione equivalente.

2 Mi Piace

Che tempismo! Poco fa avevo trovato la stessa funzione in un file c++ sperduto nel pacchetto che ho scaricato

void boundaries (I pix, tsize step, std::vector<vec3> &out) const;

Pero’ ha moltissime dipendenze mentre la libreria in C ha solo un “.c” e un “.h” molto piccoli e ha funzionato al primo colpo (ma appunto mi dava solo il centro dei pixel).

Con questi sorgenti in c++ ho avuto degli strani problemi in compilazione, domani ci riprovo e vediamo se riesco, grazie intanto!

1 Mi Piace

Ok, compilato, creato i vertici, e renderizzato: così è come i cosmologi dividono l’universo! I tasselli, oltre ad avere la stessa area, sono distribuiti su linee di latitudine costante e questo è fondamentale per tutte analisi armoniche che coinvolgono armoniche sferiche. Altra notevole proprietà di questa suddivisione è la bellezza! :wink:


3072 celle di uguale area!
l’ho provato fino a 196 608 celle e funziona bene. Ho usato la funzione HealpixBase.boundaries della libreria in C++, grazie ancora a Paky per la dritta!

1 Mi Piace