Catalejo: anatomía de un planetario

Catalejo es un planetario interactivo que escribí en Punk, mi propio lenguaje (que transpila a C y dibuja con Raylib). Renderiza el cielo real a partir de 28 catálogos astronómicos —estrellas, cúmulos, galaxias, nebulosas y todo el medio interestelar— más el Sistema Solar calculado con efemérides JPL y más de mil millones de objetos del Minor Planet Center. Lo proyecta con coordenadas reales (ecuatoriales, alt-azimutales, eclípticas y galácticas), con el color físico de cada estrella, control del tiempo, magnitudes y etiquetas ajustables, y las figuras clásicas de las constelaciones. Y, sobre el mapa vectorial, puede superponer imágenes fotográficas reales del cielo (DSS2 del CDS).

Todo se maneja desde una barra de comandos (56 órdenes), se puede guionizar con Rumbo —un mini-lenguaje con variables, condicionales y bucles para grabar recorridos por el cielo— y exportar a SVG vectorial hasta 8K, capturas PNG o PDF. Esto es lo que hay dentro.

Capturas

Tres shots reales de Catalejo — el nombre del archivo lleva su RA · Dec · fecha, como los genera el comando shot. Se ven mucho mejor a pantalla completa: haz clic en cualquiera para ampliarla.

Los catálogos que se renderizan

28 catálogos curados a mano, cada uno con su referencia científica. Los marcados como tiles son surveys gigantes que se sirven por región del cielo.

6 catálogos de Estrellas

4 catálogos de Cúmulos

7 catálogos de Galaxias

11 catálogos de Medio interestelar

Sistema Solar

Los planetas no son catálogos: sus posiciones se calculan con efemérides JPL (kernels SPICE) para cualquier fecha. Los cuerpos menores sí son catálogos orbitales del Minor Planet Center.

SolLunaMercurioVenusMarteJúpiterSaturnoUranoNeptunoPlutón

Estrategia de renderizado

Cómo se pasa de una tabla de coordenadas a un cielo dibujado en pantalla.

  1. Punk → C → Raylib

    Toda la app está escrita en Punk, mi lenguaje, que transpila a C. El dibujado real lo hace Raylib, y los arrays de puntos viven en memoria estática de C para no recrearlos cada frame.

  2. Proyección estereográfica

    Cada objeto pasa de coordenadas ecuatoriales (ascensión recta / declinación) a píxeles con una proyección estereográfica. Los puntos que caen detrás del hemisferio visible se descartan antes de dibujar.

  3. Cuatro sistemas de coordenadas

    Rejillas conmutables: ecuatorial, horizontal (alt-azimutal, lo que ves desde un sitio y hora), eclíptica y galáctica. Convertir entre ellas es pura trigonometría esférica.

  4. Nivel de detalle por magnitud

    A cada catálogo se le pone una magnitud límite que sube o baja con el zoom (FOV = 2·atan(1/zoom)). Al alejar, solo se pintan los objetos brillantes; al acercar, aparecen los débiles.

  5. Binarios y tiles

    Los catálogos grandes se preprocesan a formato binario (.bin) para cargarlos al instante. Los surveys gigantes —Gaia DR3, DESI— se sirven en tiles por región: solo se lee la porción de cielo que estás mirando.

  6. Planetas con efemérides JPL

    El Sol, la Luna y los planetas no son catálogos: sus posiciones se calculan con las efemérides de la NASA/JPL (kernels SPICE DE421 y satélites), para una fecha y hora cualesquiera.

  7. Sectores fotográficos reales (render / HiPS)

    El comando render (tecla [R] con el modo Glass activo) descarga una imagen fotográfica real del campo que estás mirando —el sondeo DSS2 en color, servido por el CDS de Estrasburgo vía HiPS/hips2fits— y la superpone como un sector encima del mapa vectorial. [C] lo cancela.

Control visual

Todo se enciende, apaga y ajusta en vivo desde la barra de comandos.

Líneas y overlays

Conmutables uno a uno: líneas de constelación (const), bordes IAU (borders), rejilla (grid), ecuador y rejilla galácticos (galeq, galgrid), M31/M33 y el buscador Telrad.

Figuras de constelación

El arte clásico de las constelaciones según el atlas de Hevelius (1690), superpuesto como figuras sobre las estrellas.

Color físico real

Una paleta HSL dinámica para los overlays, y para cada estrella su color real: derivado del índice B-V (y V-I en las frías), convertido de XYZ a sRGB (D65). El cielo sale con sus colores de verdad.

Etiquetas flexibles

Cada capa tiene su propio límite de magnitud para etiquetas (label <capa> N), independiente del de los puntos, más un tamaño angular mínimo (size). Tú decides cuántos nombres aparecen y cuándo.

Comandos

Todo se controla desde la barra de comandos (se abre con /). Una idea clave: los nombres de los catálogos (bsc, hip, ngc…) no son comandos, son capas; los comandos de verdad son los verbos (on, mag, label…) que se aplican a esas capas. Busca por nombre o por lo que hace.

31 comandos

Las capas (a las que aplicas los comandos)

Estos son los nombres de capa. Por ejemplo: bsc on, mag hip 6, label ngc 9, mars on.

Estrellas

stars · bsc · hip · cns · carbon · gcvs · gaia3 · gaia3live · xiang

Cielo profundo

ngc · pgc · galaxy · glxsc · desi · gaiagcl · pngal3 · haocl · diasocl · youngcl

Medio interestelar

milky · hii · southii · wisehii · mwpbub · mwpbow · dark2mass · irdcpari · molclouds · dust · frmreg · msxirdc · snr

Líneas y overlays

const · borders · grid · galeq · galgrid · m31 · m33 · telrad

Sistema Solar

sun · moon · mercury · venus · mars · jupiter · saturn · uranus · neptune · pluto · planets

MPC

comets · curcomets · allaster · nea · pha · tno · minorplanets

Rumbo: el lenguaje de tours

Catalejo se puede guionizar con Rumbo, un mini-lenguaje de líneas numeradas (estilo BASIC). No es solo una lista de comandos: tiene variables (set), condicionales (if) y transferencias (jumpline), así que con if + jumpline puedes montar bucles. Un guion se lanza con run <archivo>.

10 set n 0
20 slide jupiter
30 wait animation
40 shot
50 set n n+1
60 if n < 5 jumpline 20
70 shutdown

Exportar y generar datos

SVG vectorial hasta 8K

El comando svg N exporta las capas visibles a un SVG vectorial de N×1024 px de ancho — hasta 8×1024 = 8192 px (8K). Al ser vectorial no pierde nitidez al ampliar, y reproduce tanto el fondo HiPS como cada capa.

Capturas (shots)

El comando shot guarda un PNG de la pantalla, nombrado con la ascensión recta, la declinación y la fecha. Con viewmode print el fondo se vuelve blanco para imprimir o exportar.

Render a PDF

Punk trae su propio backend de PDF (PDF 1.4 en C puro, sin dependencias externas): páginas A4, las 14 fuentes estándar, imágenes JPEG y Markdown básico. El cielo puede acabar en un documento imprimible.

Generación de datos binarios

Los catálogos en bruto (Hipparcos, MPCORB, HyperLeda…) se preprocesan con scripts de Python (hip_to_bin, mpcorb_to_bin, pgc_to_bin) a un formato binario compacto, para que Catalejo los cargue al instante en vez de parsear millones de líneas de texto.