Jako semestrální práci do předmětu "Programovací jazyk C" jsem napsal
program pro výpočet poloh planet naší Sluneční soustavy.
1. Úvod
Antares je program pro základní astronomické výpočty
v rámci sluneční soustavy. Začal vznikat původně pro moje vlastní použití
a také proto, že se začínám zajímat o astronomii a tato problematika mě stále
více zajímá, poté jsem z něj udělal semestrální práci do předmětu
36PJC (Programovací jazyk C) na ČVUT/FEL.
Po zadání pozorovatelovy polohy a času spočítá program polohu slunce, heliocentrické
elkiptikální sférické a pravoúhlé souřadnice, geocentrické pravoúlé souřadnice,
rektascenzi, deklinaci a azimutární souřadnice planet. Program má již v této
verzi implementovánu částečnou podporu pro výpočet polohy hvězd a také Messierův
katalog, ale tyto funkce nejsou ve verzi 0.1 dostupné a plánuji je kompletně
implementovat až v příští verzi.
Poznámka k názvu programu: Dlouho jsem premýšlel,
jak tento program nazvat. Listoval jsem knížkou Patricka Moora - Hvězdy a
Planety - tak dlouho, až jsem našel dostatečně zajímavý a vhodný název. Takže:
Antares je hvězda spektrální třídy M1 patřící svojí velikostí do kategorie
"Veleobrů", její centrální teplota dosahuje hodnoty 100 milionů stupňů Celsia.
Nachazí se ve vzdálenosti 330 svetelných roků v souhvězdí Štíra (Scorpius),
v blízkosti kulové hvězdokupy M4.
2. Implementace
Program Antares je napsán v jazyce ANSI C, pro operačí
systém GNU-Linux. Ve verzi 0.1 je možné jej kompilovat ve dvou režimech -
pro práci s menu, nebo pro řádkově orientované rozhraní (snadnější portovatelnost
na jiné platformy), podrobnosti viz. odstavec kompilace.
Používá veřejně dostupné a víceméně známé astronomické algoritmy pro výpočty
souřadnic a poloh, v odstavci Odkazy uvádím seznam literatury a internetových
adres, ze kterých jsem čerpal informace.
Program používá knihovnu curses pro práci s okny (v textovém režimu).
Zdrojové kódy programu se skládají z následujících souborů:
astro.c
|
Knihovna pro astronomické výpočty.
|
astro.h
|
Hlavičkový soubor pro knihovny astro.c (hlavičky funkcí
a datové typy)
|
global.h
|
Některé globální definice, především makra pro možnost
překladu ve dvou režimech.
|
main.c
|
Hlavní program, využívá funkce z knihovny astro.c
a ostatních, obsahuje hlavní programovou smyčku.
|
menu.c
|
Knihovna pro práci s menu, obsahuje také definici
hlavního menu aplikace.
|
menu.h
|
Hlavičkový soubor pro knihovnu menu.c
|
messier.c
|
Data Messierova katalogu (v této verzi se nepoužívá) |
messier.h
|
Hlavičkový soubor pro Messierův katalog, obsahuje
definici datového typu popisujícího položky katalogu.
|
planets.c
|
Data pro výpočet polohy planet, dráhové elementy,
a také obecné informace o planetách.
|
planets.h
|
Hlavičkový soubor pro katalog planet, planets.c
|
ui.c
|
Knihovna pro práci s uživatelským rozhraním, především
inicializace a deinicializace potřebných proměnných.
|
ui.h
|
Hlavičkový soubor pro knihovnu ui.c
|
3. Ovládání
Ovládání programu je velmi jednoduché a ve většině
případů stačí tři klávesy (mimo zadávání číselných údajů).
- Pokud je program přeložen v řádkovém režimu, probíhá ovládání pomocí
nabídek, ve kterých uživatel vybírá volbu zadáním čísla patřičné položky
v nabídce. Tento režim není sice tak interaktivní a možná někomu bude v dnešní
době připadat poněkud předpotopní, ale vzhledem k povaze programu (podotýkám,
že se nejedná o žádnou interaktivní akční hru) je více než postačující, navíc
umožňuje snadnou přenostitelnost na jiné platformy, protože využívá v podstatě
pouze knihovní funkce printf a scanf.
- Pokud se při kompilaci využije druhá možnost a program je přeložen
v režimu s podporou menu, je práce s programem o něco jednodušší a pro vetšinu
lidí asi přijatelnější. Celý program se pak ovládá pomocí menu, umístěného
na pravé straně. Z něj položky vybírají pomocí kláves "a"/"z" pro posun nahoru/dolů
a potvrzení volby se provede mezerníkem. Druhá skupina ovládácích kláves
je "j", "k" (nahoru, dolů) a "l" (potvrzení), zde jsem se inspiroval programy
"vi" a "lynx". Pro ovládání jsem úmyslně zvolil tyto alfanumerické klávesu
(namísto, možná standardnějších, kurzorových kláves) kvůli možnosti ovládání
programu i na poněkud "hloupějších" terminálech.
Popis jednotlivých voleb:
Zobrazeni nastaveni
|
Vypíše aktuální nastavení programu: čas, datum polohu
pozorovatele.
|
Nastaveni casu
|
Umožňuje nastavení aktuálního času (viz. ještě poznámka
pod tímto seznamem)
|
Nastaveni data
|
Umožňuje nastavení datumu pozrování v rozsahu od
1.1.1900 do 31.12.2099
|
Nastaveni polohy
|
Nastavení zeměpisné šířky a délky místa pozorování
na Zemi
|
Vypocet polohy slunce
|
Zobrazení aktuální (podle zadaného data a času) polohy
slunce - azimutární souřadnice
|
Souradnice planet (h)
|
Výpočet heliocentrických ekliptikáních pravoúhlých
a sférických souřadnic planet
|
Souradnice planet (g)
|
Výpočet geocentrických (i rovníkových) pravoúhlých
souřadnic planet
|
Vypocet polohy planet
|
Zobrazí polohy planet v (pro smrtelníka asi nejpřijatelnějších)
azimutárních souřadnicích
|
Elementy drah planet
|
Výpočet elementů drah planet, data potřebná pro řešení
Keplerovy rovnice, pohyb po elipse
|
Merkur, Venuse...
|
"Encyklopedie" planet, obsahuje informace o oběžné
době, hmotnosti, době rotace, měsících apod....
|
Konec programu
|
Tuto funkci jsem původně do tak skvělého programu
ani nechtěl dávat :-)
|
Poznámka k zadávaní času: Program očekává zadání času v hodnotách
Světového času SČ (UT), nikoliv Středoevropského (SEČ), či dokonce
Středoevropského letního (SELČ) času. Při zadávání času je nutné si toto
uvědomit, jinak program bude počítat neco úplně jiného, než uživatel očekává.
Vzorečky pro přepočet časů: SEČ=SČ+1h, SELČ=SEČ+1h.
4. Kompilace
Program jsem vyvíjel, testoval a odladil na této konfiguraci:
Operační systém:
|
RedHat Linux 7.1CZ
|
Verze jádra:
|
2.4.2-2SMP, i686
|
Překladač:
|
gcc 2.96-81
|
glibc
|
2.2.2
|
Překlad programu je velkmi jednoduchý a snad by neměl činit žádné problémy.
Jak jsem již nekolikrát zmínil, je možné program přeložit ve dvou režimech.
Překlad se uskuteční po zadání následujícího příkazu (v adresáři se zdrojovými
soubory).
- rádkový režim: make nomenu
- režim s podporou menu (defaultní): make
Po dokončení tohoto příkazu se vytvoří soubor "antares", který je již spustitelným
binárním souborem a po jeho spuštění si můžete do systosti vychutnávat program
Antares.
Pokud chcete odstranit všechny soubory vzniklé kompilací (pro další používání
programu nejsou potřebné), lze tak učinit pomocí příkazu: make clean
Příkaz make distclean odstraní i vlastní spustitelný soubor, takže
vám zůstanou opět jen zdrojové soubory.
Ještě znovu upozorňuji, že program využívá knihovnu curses, a pro kompilaci v
režimu menu (implicitní), je potřeba ji mít.
5. Download
Zde si můžete program stáhnout (ve formě zdrojových kódů):
antares_0.1.tar.gz, 18.1kB
Pokud se vám program líbí, nebo máte nějaké připomínky či náměty, budu rád,
když mi napíšete. Upozorňuji však že jsem začátečník (a když píši začátečník,
mám opravdu na mysli začátečníka s triedrem v ruce :-) ) na poli astronomie,
takže pravděpodobně nebudu schopen se s vámi pustit do hlubších debat. Ale
na druhou stranu se rád něco nového v tomto oboru přiučím.
6. Odkazy
Seznam literatury ze které jsem čerpal.
6.1. Tištěné materiály
- Zdeněk Pokorný - Astronomické algoritmy pro kalkulátory, 1998 (Hvězdárna
a planetárium hl.m. Prahy)
- Patrick Moore - Hvězdy a planety
- Pavel Příhoda, Helena Holovská - Průvodce astronomií, pro posluchače
1. ročníku astronomického kursu
- Hans-Jochen Bartsch - Matematické vzorce
- Pavel Příhoda a kol. - Malý astronomický kalendář Vesmír 2002
6.2. Internet
|