AstroZenitniebo policzone od zera.
- Rok
- 2026
- Rola
- Projekt, silnik graficzny, obliczenia, wdrożenie
- Kategoria
- Aplikacja / Własny silnik graficzny
- Na żywo
- astrozenit.pl
Wyzwanie
Polskich map nieba w przeglądarce właściwie nie ma, a te zagraniczne pokazują gwiazdozbiory pod angielskimi nazwami i nie odpowiadają na pytanie, czy dziś w ogóle warto wychodzić z domu. Oczywistą drogą było wzięcie gotowego silnika Stellarium, ale on stoi na licencji AGPL v3, która przy serwisie internetowym wymusza otwarcie źródeł całej strony. Musiałem więc napisać silnik rysowania od zera i zmieścić się z pełną klatką w budżecie, który pozwala płynnie przewijać czas.
Proces
- /01
Licencja przed pierwszą linijką
Sprawdzenie warunków AGPL przesądziło o architekturze: dane ze Stellarium tak (CC BY-SA 4.0), kod silnika nie. Ta decyzja zapadła zanim powstał pierwszy piksel.
- /02
Własny silnik na Canvas 2D
Rzut stereograficzny, katalog gwiazd, figury gwiazdozbiorów po numerach HIP i granice IAU. Bez WebGL i bez biblioteki 3D.
- /03
Matematyka zamiast rysowania po pikselach
Horyzont w tym rzucie jest okręgiem o środku (0, 2 ctg h) i promieniu 2/|sin h|, więc liczę go analitycznie zamiast próbkować. Pozycje przeliczam przy zmianie czasu albo miejsca, nigdy przy przesuwaniu mapy.
- /04
Sześć otwartych źródeł danych
Panorama Drogi Mlecznej z ESO, tekstury planet z Solar System Scope, elementy orbitalne satelitów z Celestraku, pogoda z Open-Meteo, kafelki map z OpenStreetMap. Wszystko na wolnych licencjach, z podaniem autorstwa.
- /05
Ocena warunków obserwacji
Zapas jasności ponad próg widoczności, zachmurzenie i zamglenie mnożą się przez siebie, a nie sumują. Pierwsza wersja dodawała punkty i wychodziło jej, że Jowisz o dziewiątej rano jest doskonale widoczny.
- /06
Kontrole zamiast zaufania
Osobne skrypty sprawdzają efemerydy i ocenę warunków przy każdym budowaniu. Fazę Księżyca zweryfikowałem pomiarem udziału jasnych pikseli dla siedmiu faz, nie na oko.
Rozwiązanie
Aplikacja pokazuje niebo dokładnie z Twojego miejsca i o dowolnej godzinie: gwiazdy, figury gwiazdozbiorów, planety z teksturami powierzchni, fazy Księżyca, przeloty satelitów i prognozę zachmurzenia. Czas przewija się płynnie, bo pełna klatka kosztuje około milisekundy przy 1440×900. Kalendarz odpowiada na pytanie kiedy, sekcja zjawisk tłumaczy co i na co patrzeć. Całość po polsku, z nazwami gwiazdozbiorów w poprawnym dopełniaczu.
- React 19
- TypeScript
- Vite
- Canvas 2D
- zustand
- satellite.js
- IndexedDB
- Open-Meteo
Efekty
~1 ms
na klatkę przy 1440×900
0
kodu na licencji AGPL w silniku
6
otwartych źródeł danych
Następny projekt (02)
Psi Azymut