Démonstration · construite pour ce site en 1 jour · non commanditée
Ciel de Toulouse
La voûte céleste au-dessus de la ville, calculée à l’heure et à la date de votre choix : étoiles visibles à l’œil nu, noms des plus brillantes, horizon, Soleil et crépuscule. C’est le même moteur qui dessine le fond de cette page.
Toulouse · 43,60° N · 1,44° E
Précision ± 1° : suffisant pour l’œil nu, pas pour pointer un télescope · sans Lune ni planètes
Les 20 objets les plus brillants au-dessus de l’horizon
Ce que ça démontre
Un calcul astronomique juste, côté client. Temps sidéral, conversion des coordonnées équatoriales en hauteur et azimut, position du Soleil et seuils de crépuscule : tout est calculé dans le navigateur à partir d’un catalogue de 415 étoiles (Yale Bright Star Catalogue, noms de l’Union astronomique internationale). La précision annoncée est de ± 1°, ce qu’il faut pour reconnaître le ciel à l’œil nu ; elle est vérifiée par des tests automatisés sur des invariants (la Polaire à la latitude du lieu, Véga au méridien, le Soleil aux solstices).
Un rendu canvas qui ne tourne pas pour rien. Aucune boucle continue : le ciel se redessine quand une commande change, et une fois par minute si « Suivre l’heure » est coché. Les textes, le réticule, les noms et la bulle sont en DOM, jamais dans le canvas : ils se lisent au zoom, au lecteur d’écran et en contraste renforcé.
Une donnée dense rendue lisible. Les étoiles brillantes sont plus grosses et plus vives, les noms n’apparaissent que pour les plus connues, le Soleil et le crépuscule expliquent pourquoi on ne voit rien à 14 h, et la version texte donne la même information à qui ne voit pas la carte.
Comment c’est conçu
La carte est un dôme vu de dessous — nord en haut, est à gauche — comme toute carte du ciel qu’on tient au-dessus de sa tête. C’est déroutant une seconde, puis juste : c’est le geste qu’un médiateur enseigne à la sortie de la coupole. Le même moteur dessine le fond de la page d’accueil, en panorama cette fois.
- à venir
Croquis papier — à venir
- à venir
Maquette Figma — à venir
- à venir
Écran final — à venir
Ce que j’ai rejeté, et pourquoi
-
Une projection « photo » du ciel entier avec lignes de constellations par défaut
C’est ce que font toutes les applications ; les lignes attirent l’œil et on ne regarde plus les étoiles. Un planétarium apprend d’abord à reconnaître les brillantes.
Gardé à la place — un dôme sobre, les noms des étoiles brillantes, les constellations en option décochée.
-
La Lune et les planètes
Leur position demande un modèle bien plus lourd que le nôtre et une précision qu’on ne pouvait pas garantir en une journée ; un médiateur repérerait une Lune fausse immédiatement.
Gardé à la place — les étoiles et le Soleil, avec la mention permanente « sans Lune ni planètes » et la précision annoncée.
-
Afficher les étoiles en plein jour comme s’il faisait nuit
Juste géométriquement, faux visuellement : à 14 h, personne ne voit Véga. On perdait la confiance d’un public qui connaît le ciel.
Gardé à la place — la hauteur du Soleil calculée, les étoiles atténuées le jour, et l’heure à partir de laquelle le ciel est noir.
Comment c’est construit
Le cœur tient en trois fonctions pures, sans dépendance, empruntées à Jean Meeus. Le reste (dôme, commandes, liste, bulle) n’est que de la projection et du DOM.
// src/lib/sky.ts — de la sphère céleste au ciel du lieu, en vingt lignes.
// Temps sidéral moyen de Greenwich, en degrés (Meeus 12.4).
export function gmstDeg(jd: number): number {
const d = jd - J2000; // jours depuis le 1er janvier 2000, 12 h
const t = d / 36_525; // siècles juliens
return norm360(280.460_618_37 + 360.985_647_366_29 * d + 0.000_387_933 * t * t - (t * t * t) / 38_710_000);
}
// Temps sidéral local : on ajoute la longitude (est positif ; Toulouse + 1,4442°).
export function lstDeg(jd: number, lonEast: number): number {
return norm360(gmstDeg(jd) + lonEast);
}
// Équatorial (ascension droite, déclinaison) → horizontal (hauteur, azimut).
export function toHorizontal(ra: number, dec: number, lst: number, lat: number): Horizontal {
const h = (lst - ra) * DEG; // angle horaire : où en est l'étoile dans sa rotation
const phi = lat * DEG;
const d = dec * DEG;
const sinAlt = Math.sin(d) * Math.sin(phi) + Math.cos(d) * Math.cos(phi) * Math.cos(h);
const alt = Math.asin(clamp(sinAlt, -1, 1)) * RAD;
const y = -Math.sin(h) * Math.cos(d);
const x = Math.sin(d) * Math.cos(phi) - Math.cos(d) * Math.sin(phi) * Math.cos(h);
const az = norm360(Math.atan2(y, x) * RAD); // depuis le nord, vers l'est
return { alt, az };
}
// Tests (tests/sky.test.ts) : la Polaire culmine à la latitude du lieu, Véga passe au
// méridien à 90° − |φ − δ| ≈ 85,2°, le temps sidéral vaut 280,46° à J2000, le Soleil
// atteint ± 23,44° de déclinaison aux solstices. src/lib/sky.ts— temps, coordonnées, Soleil, crépuscule, fuseau horaire (testé, ≈ 3 ko compressé).src/lib/sky-canvas.ts— projections panorama et dôme, tracé des étoiles, des lignes et de l’horizon.src/lib/sky-demo.ts— noms français des constellations, tri, dates locales, hit-test (testé).src/scripts/ciel-demo.ts— commandes, sélection, position, version texte, mode borne.src/data/stars.json— 415 étoiles [ascension droite, déclinaison, magnitude, constellation, nom] (12 ko) ;constellations.json— 12 figures.scripts/build-stars.mjs— régénère le catalogue depuis les sources ;scripts/posters/sky.mjs— posters SVG au build.
Accessibilité
- Clavier — toutes les commandes sont des champs natifs : curseurs, cases, liste « Pointer une étoile », boutons. Le canvas n’est pas focusable ; il porte une description mise à jour.
- Lecteur d’écran — une zone polie unique annonce l’état après un changement de commande ou une sélection, jamais spontanément à la minute ; la version texte liste les vingt objets les plus brillants avec hauteur, azimut et magnitude.
- Mouvement réduit — « Suivre l’heure » est décoché par défaut ; aucune transition ; tout se fait pas à pas.
- Pointeur — cibles de 12 px à la souris, 20 px au doigt ; la bulle se ferme par Échap ou en touchant ailleurs.
- Mode borne — plein écran, retour au ciel de maintenant après soixante secondes, désactivable et prolongeable.
- Sans JavaScript — le poster du ciel au moment du build, avec sa date.
- Reste à améliorer — navigation d’étoile en étoile au clavier directement sur la carte, relecture par un médiateur de planétarium sur plusieurs dates, Lune et planètes.
Pour votre lieu
Dans un planétarium, ce moteur devient l’écran du hall qui montre le ciel de ce soir à la sortie de la séance, ou la page que vos visiteurs ouvrent chez eux avec le QR code du billet. On y ajoute vos horaires de séance, vos objets du mois et vos coordonnées exactes.
Ce concept vous parle ? Il reste à l’adapter à votre lieu, votre public et vos contraintes. Parler de votre projet →