Na tomto m´ıstˇ e bude ofici´ aln´ı zad´ an´ı vaˇ s´ı pr´ ace • Toto zad´ an´ı je podepsan´e dˇekanem a vedouc´ım katedry, • mus´ıte si ho vyzvednout na studiijn´ım oddˇelen´ı Katedry poˇc´ıtaˇc˚ u na Karlovˇe n´amˇest´ı, • v jedn´e odevzdan´e pr´ aci bude origin´al tohoto zad´an´ı (origin´al z˚ ust´av´a po obhajobˇe na katedˇre), • ve druh´e bude na stejn´em m´ıstˇe neovˇeˇren´a kopie tohoto dokumentu (tato se v´am vr´ at´ı po obhajobˇe).
i
ii
ˇ e vysok´e uˇcen´ı technick´e v Praze Cesk´ Fakulta elektrotechnick´a Katedra poˇc´ıtaˇc˚ u
Bakal´aˇrsk´a pr´ace
Software pro zobrazen´ı hvˇ ezdn´ e oblohy Jiˇr´ı Marˇs´ıˇcek
Vedouc´ı pr´ace: Mgr. Jan Stoklasa
Studijn´ı program: Softwarov´e technologie a management, Bakal´aˇrsk´ y Obor: Softwarov´e inˇzen´ yrstv´ı 26. kvˇetna 2010
iv
v
Podˇ ekov´ an´ı M´e podˇekov´ an´ı patˇr´ı rodiˇc˚ um. Za dosavadn´ı i budouc´ı podporu bˇehem studia i mimo nˇej.
vi
vii
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem pr´ aci vypracoval samostatnˇe a pouˇzil jsem pouze podklady uveden´e v pˇriloˇzen´em seznamu. Nem´am z´ avaˇzn´ y d˚ uvod proti uˇzit´ı tohoto ˇskoln´ıho d´ıla ve smyslu §60 Z´akona ˇc. 121/2000 Sb., o pr´ avu autorsk´em, o pr´ avech souvisej´ıc´ıch s pr´avem autorsk´ ym a o zmˇenˇe nˇekter´ ych z´akon˚ u (autorsk´ y z´ akon).
Abstract The thesis deals with a problem of creation of celestial charts. At first the situation of present software is examined. It then continues with creation of a program that is designed to meet the requirement for high flexibility of generated charts. The resulting program is able to create maps from standart astronomical catalogues in a modern vector graphics format SVG. It provides selection from several map projections. The work also contains brief introduction to the world of map projections and graphic formats.
Abstrakt Bakal´aˇrsk´ a pr´ ace se zab´ yv´ a problematikou vytv´aˇren´ı map hvˇezdn´e oblohy. Zkoum´a situaci existuj´ıc´ıho softwaru a souˇcasnˇe obsahuje popis tvorby programu, kter´ y je navrˇzen s ohledem na splnˇen´ı poˇzadavku na velkou pˇrizp˚ usobivost v´ ystupu. V´ ysledn´ y program je schopn´ y vytv´ aˇret mapy z bˇeˇznˇe pouˇz´ıvan´ ych astronomick´ ych katalog˚ u v modern´ım vektorov´em form´atu SVG a d´av´a na v´ ybˇer z v´ıce mapov´ ych zobrazen´ı. Souˇc´ast´ı pr´ace je i letm´e sezn´amen´ı s problematikou geografick´ ych zobrazen´ı a grafick´ ych form´at˚ u.
Architektura syst´emu v z´avislosti na konfiguraci mapov´ ych zobrazen´ı. . . . . Srovn´ an´ı mapov´ ych popisk˚ u vykreslen´ ych s rozˇs´ıˇren´ım a bez nˇej. . . . . . . . Srovn´ an´ı elips a kruˇznic vykreslen´ ych s rozˇs´ıˇren´ım a bez nˇej. . . . . . . . . .
23 30 32
D.1 D.2 D.3 D.4
ˇ Mapa galaxi´ı v souhvˇezd´ıch Mal´e medvˇedice, Draka a Zirafy. . Orion˚ uv p´ as v souhvˇezd´ı Oriona. . . . . . . . . . . . . . . . . . Interaktivn´ı mapa s odkazy. Pohled na souhvˇezd´ı Velk´eho psa. . Interaktivn´ı mapa s tooltipy. Pohled na souhvˇezd´ı Velk´eho psa.
56 56 57 57
xv
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . .
xvi
´ U ˚ SEZNAM OBRAZK
Seznam tabulek 4.1
Symboly pouˇzit´e v rovnic´ıch mapov´ ych zobrazen´ı.
xvii
. . . . . . . . . . . . . . .
16
xviii
SEZNAM TABULEK
Kapitola 1
´ Uvod 1.1
Motivace projektu
Kdykoliv pohl´ednu na hvˇezdnou oblohu jsem fascinov´an a neuplnyne den, aniˇz bych nebyl pln oˇcek´ av´ an´ı, kdy za mrakem prosvitne stˇr´ıbrn´a z´aˇre hvˇezd. Z naˇseho pohledu je hvˇezdn´ a obloha st´ al´ a. Kaˇzd´ y veˇcer se setk´av´ame se stejnˇe rozm´ıstˇen´ ymi souhvˇezd´ımi a hvˇezdami v nich. Chtˇel jsem zn´ at v´ıce neˇz jen dvˇe nejzn´amˇejˇs´ı souhvˇezd´ı a tˇri hvˇezdy. N´astˇenn´a mapa hvˇezdn´e oblohy byla tou pom˚ uckou, kter´a by pomohla s identifikac´ı pozorovan´ ych objekt˚ u. V komerˇcnˇe dostupn´ ych map´ach obvykle pˇrevl´ad´a zpracov´an´ı nad obsahem, a t´emˇeˇr v´ yhradnˇe mapuj´ı oblohu celou, tedy i oblohu jiˇzn´ı, kterou z naˇs´ı zemˇepisn´e ˇs´ıˇrky nikdy nespatˇr´ıme. Zaˇcal jsem tedy hledat zp˚ usob, jak vytvoˇrit mapu hvˇezdn´e oblohy vlastn´ı. Uk´azalo se, ˇze existuje ˇrada program˚ u, kter´e uˇzivateli nab´ızej´ı moˇznost vytvoˇrit mapu hvˇezdn´e oblohy dle jeho specifikace. Avˇsak vˇzdy se jednalo o mapy, kter´e se drˇzely pˇredstav tv˚ urce a ned´avaly uˇzivateli velkou volnost v pˇrizp˚ usoben´ı obsahu nebo vzhledu mapy. Zaˇcal jsem tedy se psan´ım jendoduch´eho programu, kter´ y by mapu dle m´ ych poˇzadavk˚ u vytvoˇril. Jednalo se o jednoduch´ y skript, kter´ y byl pˇr´ıliˇs sv´azan´ y m´ ymi poˇzadavky, a proto jsem v´ yvoj pˇreruˇsil. Z ˇsupl´ıku jsem n´apad opˇet vyt´ahl v momentˇe zad´av´an´ı t´emat bakal´aˇrsk´ ych prac´ı.
1.2
Vymezen´ı c´ıl˚ u
C´ılem t´eto pr´ ace je vytvoˇrit univerz´aln´ı n´astroj k tvorbˇe map hvˇezdn´e oblohy. Program, kter´ y nen´ı z´ avisl´ y na propriet´ arn´ım form´atu vstupn´ıch dat. Bude akceptovat form´at, ve kter´em jsou bˇeˇznˇe dod´ av´ any astronomick´e katalogy. Samozˇrejmost´ı bude podpora v´ıce geografick´ ych zobrazen´ı a n´ avrh programu takov´ y, aby umoˇznil snadnou implementaci dalˇs´ıch zobrazen´ı. A na druh´e stranˇe mince bude podporovat ˇsirokou pˇrizp˚ usobivost v´ ystupu. V dobˇe, kdy je web bˇeˇznou souˇc´ast´ı ˇzivota, je kr´atkozrak´e orientovat se jen na tiˇstˇen´ y obsah. Program tedy mus´ı b´ yt schopen generovat mapy interaktivn´ı a ve form´atu vhodn´em i pro prezentaci na webu.
1
´ KAPITOLA 1. UVOD
2
1.3
Struktura bakal´ aˇ rsk´ e pr´ ace
Nejprve ˇcten´ aˇre sezn´ am´ım s t´ım, co tvorba map hvˇezdn´e oblohy obn´aˇs´ı. Souˇc´ast´ı sezn´amen´ı v kapitole 2 bude popis existuj´ıc´ıho softwaru a sezn´amen´ı s form´atem astronomick´ ych katalog˚ u. Poˇzadavky na program budou vymezeny v kapitole 3, kde bude proveden v´ ybˇer technologi´ı. To bude mimo jin´e obn´ aˇset i sezn´amen´ı s r˚ uzn´ ymi grafick´ ymi form´aty. Souˇc´ast´ı anal´ yzy pˇred n´ avrhem programu je i prozkoum´an´ı problematiky mapov´ ych zobrazen´ıch. Toto t´ema je ovˇsem natolik natolik rozs´ ahl´e, ˇze je vyˇclenˇeno do vlastn´ı kapitoly 4. V´ yvoj vlastn´ıho programu zaˇc´ın´ a n´ avrhem v kapitole 5 a zaj´ımav´e ˇc´asti implementace jsou pak pops´any v kapitole 6. O metod´ ach testov´an´ı se zmiˇ nuji v kapitole 7. Z´avˇereˇcn´a kapitola 8 hodnot´ı hotov´ y program z hlediska naplnˇen´ı poˇzadavk˚ u. Srovn´av´a mnou implementovan´e ˇreˇsen´ı s existuj´ıc´ımi programy a zam´ yˇsl´ı se nad rozˇs´ıˇritelnost´ı programu o dalˇs´ı funkce.
Kapitola 2
Popis probl´ emu V t´eto kapitole shrnuji obecn´e poznatky, kter´e jsem nashrom´aˇzdil o map´ach hvˇezdn´e oblohy. N´ asleduje reˇserˇse existuj´ıc´ıho softwaru, pˇredevˇs´ım z hlediska zaj´ımav´ ych moˇznost´ı, kter´e nab´ızej´ı oproti standartu. N´asleduje uveden´ı do problematiky souˇradnicov´ ych syst´em˚ u pouˇz´ıvan´ ych pro zamˇeˇrov´ an´ı objekt˚ u hvˇezdn´e oblohy. Z´avˇerem kapitoly se vˇenuji problematice bˇeˇznˇe pouˇz´ıvan´ ychy form´at˚ u datov´ ych soubor˚ u, ve kter´ ych jsou dostupn´a data o nebesk´ ych objektech.
2.1
Obsah mapy hvˇ ezdn´ e oblohy
V z´ avislosti na vstupn´ıch datech a poˇzadavc´ıch uˇzivatele se mapa hvˇezdn´e oblohy m˚ uˇze skl´adat z n´ asleduj´ıc´ıch prvk˚ u. • Opakuj´ıc´ı se stejn´e symboly ve stejn´e i r˚ uzn´e velikosti. • Kˇrivky nebo rovn´e ˇc´ ary souˇradnicov´e s´ıtˇe. • Kˇrivky nebo rovn´e ˇc´ ary hranic souhvˇezd´ı. ´ cky spojnic souhvˇezd´ı. • Useˇ • Kr´ atk´e textov´e popisky. • Barevn´e plochy, jako pozad´ı, vyplnˇen´e jednou barvou. Symbol˚ u je zpravidla velk´e mnoˇzstv´ı a mapa jich m˚ uˇze obsahovat ˇr´adovˇe tis´ıce aˇz statis´ıce. Z toho je zˇrejm´e, ˇze ne kaˇzd´ y objekt m˚ uˇze m´ıt sv˚ uj popisek - takov´a mapa by byla nepouˇziteln´ a. Vykreslen´ı nˇekter´ ych prvk˚ u je tedy omezeno podm´ınkou.
2.2 2.2.1
Existuj´ıc´ı ˇ reˇ sen´ı Filtry
Povahou je tato skupina program˚ u nejbl´ıˇze pl´anovan´emu ˇreˇsen´ı. Aplikace v tomto pˇr´ıpadˇe pracuje s pˇredpˇripraven´ ym vstupem a podle konfigurace generuj´ı statick´e mapy ve specifick´em grafick´em form´ atu.
3
´ KAPITOLA 2. POPIS PROBLEMU
4
V n´asleduj´ıc´ı reˇserˇsi se zamˇeˇruji pˇredevˇs´ım na pr´aci s uˇzivatelem dodan´ ym vstupem, moˇznostmi volby v´ ystupn´ıho form´ atu a portabilitou programu. U nˇekter´ ych program˚ u jsem mˇel moˇznost nahl´ednout do zdrojov´ ych k´od˚ u a spoleˇcnˇe s popisem funkˇcnosti jsem pˇridal sv˚ uj osobn´ı koment´ aˇr implementace. 2.2.1.1
PP3
Program PP3 byl vytvoˇren v roce 2003. Posledn´ı verze tohoto projektu byla vyd´ana v roce 2004, od t´e doby v´ yvoj neprob´ıh´ a. Kvalitn´ı program implementovan´ y v jazyce C++ m´a na dneˇsn´ı dobu ponˇekud tˇeˇzkop´ adnou strukturu. C++ nepovaˇzuji za vhodn´ y programovac´ı jazyk pro program vyuˇziteln´ y v ˇsirok´em spektru prostˇred´ı. Dostupn´ y je pod licenc´ı MIT. [3] V´ ystup programu prob´ıh´ a do form´ atu LATEXa nab´ız´ı velk´e mnoˇzstv´ı voleb jak v´ ystup A pˇrizp˚ usobit. L TEXje form´ at vhodn´ y pro tisk, a aˇckoliv je moˇzn´e ho pˇrev´est do grafick´ ych form´at˚ u pouˇz´ıvan´ ych na webu, je konverze vˇzdy ˇreˇsen´ım, kter´e pˇrin´aˇs´ı nev´ yhody. Nab´ızena je jedna mapov´ a projekce a implementace dalˇs´ı nen´ı jednoduˇse moˇzn´a. Vstupn´ı data je nutn´e konvertovat do form´atu specifikovan´eho v dokumentaci a nen´ı moˇzn´e pˇridat (napˇr´ıklad jako koment´ aˇr do v´ ystupu) jak´akoliv dalˇs´ı data. Rozˇs´ıˇren´ı tohoto programu bylo prvn´ı alternativou, kter´a mˇe napadla, kdyˇz jsem hledal aplikaci pro generov´ an´ı hvˇezdn´ ych map. I pˇres kvalitn´ı dokumentaci jsem ovˇsem nedok´azal proniknout do struktury programu, a proto jsem tuto alternativu odsunul za moˇznost implementace vlastn´ıho programu. Velk´a ˇc´ast obr´ azk˚ u souhvˇezd´ı prezentovan´ ych na str´ank´ach wikipedia.org je generov´ana t´ımto programem. 2.2.1.2
Star Chart Plot Program
Pozoruhodn´ y poˇcin vytvoˇren´ y Toshimim Takim v roce 2005. Toshimi se projektu vˇenoval naposledy v roce 2008. Jedn´ a se o sadu maker vytvoˇren´ ych v programu Microsoft Excel a Microsoft PowerPoint. Z´ avislost na programech firmy Microsoft je znaˇcn´ ym nedostaktem, kter´ y mˇe zamezil v pouˇzit´ı tohoto programu. Autor se nezmiˇ nuje o licenci, pod kterou d´av´a program k dispozici. [17] Microsoft Excel se star´ a o pˇr´ıpravu a zpracov´an´ı vstupn´ıch dat a konfiguraci a makra v Microsoft PowerPointu se staraj´ı o vykreslen´ı map. V´ yhodou je moˇznost ruˇcn´ı editace v´ ystupu, uˇzivatel m´ a moˇznost korektury tam kde program nesplnil jeho oˇcek´av´an´ı, napˇr´ıklad um´ıstˇen´ı popisku, kter´ y nen´ı podstatn´ y. Ponˇekud tˇeˇzkop´ adn´ y je zp˚ usob kombinace jednotliv´ ych vrstev map - je nutn´e ji prov´est ruˇcnˇe. Aˇckoliv program produkuje kvalitn´ı mapy, je jednoznaˇcnˇe zamˇeˇren pouze na tiˇstˇen´ y obsah a neumoˇzn ˇuje export do jin´eho form´atu neˇz PDF. Vstupn´ı data je tˇreba naimportovat do souboru, kter´ y dok´ aˇze zpracovat Microsoft Excel. Nab´ız´ı se tedy napˇr´ıklad CSV, ovˇsem n´aroky na uˇzivatele jsou pˇr´ıliˇs velk´e a ocen´ı ho sp´ıˇse nadˇsenci. 2.2.1.3
Starchart
Vyv´ yjen´ y pravdˇepodobnˇe od roku 1987, posledn´ı verze poch´az´ı z roku 1990. Aˇckoliv je to program starˇs´ıho data. D´ıky ˇsirok´emu spektru moˇznost´ı a funkc´ı, kter´e tento program
ˇ SEN ˇ ´I 2.2. EXISTUJ´IC´I RE
5
nab´ız´ı je jeho pouˇzit´ı st´ ale aktu´ aln´ı. Program je psan´ y v jazyce C a to m´a vliv nejen na jeho portabilitu, ale pˇredevˇs´ım na rozˇs´ıˇritelnost. Dnes je zdrojov´ y k´od nab´ızen pod licenc´ı GPL. [44] V´ yhodou starˇs´ıho data vytvoˇren´ı jsou minim´aln´ı n´aroky na zdroje poˇc´ıtaˇce. P˚ uvodn´ı program, kter´ y nab´ızel moˇznost v´ ystupu do form´atu PostScript byl v roce 2000 rozˇs´ıˇren o moˇznost exportu do form´ atu PNG. Nab´ız´ı moˇznost volby z v´ıce mapov´ ych projekc´ı. Program nab´ız´ı zaj´ımav´e a v kontextu doposud zm´ınˇen´ ych program˚ u jedineˇcn´e funkce. Mezi nˇe patˇr´ı napˇr´ıklad moˇznost vykreslen´ı v´ıce map do jednoho obr´azku. Vykreslen´ı drah a poloh planet, mˇes´ıc˚ u a komet nebo vykreslen´ı mapy ve znakov´e podobˇe do konzole. Na rozd´ıl od v´ yˇse zm´ınˇen´ ych nab´ız´ı moˇznost v´ ypoˇctu polohy nebesk´ ych tˇeles ve specifikovan´em ˇcase.
2.2.2
Programy s uˇ zivatelsk´ ym rozhran´ım
Dalˇs´ı skupinou aplikac´ı, kterou nelze opomenout, jsou programy vybaven´e grafick´ ym rozhran´ım. Budeme-li je zkoumat v kontextu vytv´aˇren´ı statick´ ych map, oproti pˇredchoz´ım se liˇs´ı pˇredevˇs´ım t´ım, ˇze uˇzivateli nab´ız´ı moˇznost prohl´ednout si sc´enu, kterou chce exportovat a dovoluje mu vyhnout se sloˇzit´emu nastavov´an´ı pozice a pˇribl´ıˇzen´ı, pokud nejsou pˇredem d´any. Na druhou stranu neumoˇzn´ı vytvoˇrit velk´e a detailn´ı mapy. 2.2.2.1
Cartes du Ciel
St´ale se vyv´ yjej´ıc´ı projekt vznikl roku 1997. Program je napsan´ y v jazyce Delphi a dostupn´ y pod licenc´ı GPL. [23] Program umoˇzn ˇuje export zobrazen´ ych dat na obrazovce do rastrov´eho souboru. Export v t´eto podobˇe je bohuˇzel kvalitou srovnateln´ y s poˇr´ızen´ım screenshotu. Kromˇe dod´ avan´ ych a pro program optimalizovan´ ych katalog˚ u jako prvn´ı umoˇzn ˇuje import dat z katalog˚ u ve form´ atu byte-by-byte. Pˇrehledn´ y pr˚ uvodce uˇzivateli dovol´ı popsat jednotliv´ a data, kter´ a chce naimportovat. 2.2.2.2
Xephem
Prvn´ı verze vznikla jako konverze programu ephem do grafick´eho prosˇred´ı v roce 1993. Program je st´ ale ve v´ yvoji a je vydan´ y pod propriet´arn´ı licenc´ı, je ovˇsem volnˇe k pouˇzit´ı pro osobn´ı a studijn´ı u ´ˇcely. Zdrojov´e k´ody jsou rovnˇeˇz k dispozici. [51] Nab´ız´ı ˇradu zaj´ımav´ ych funkc´ı, kter´e souvis´ı s pr˚ uzkumem vesm´ıru, ale jiˇz m´enˇe s tvorbou map hvˇezdn´e oblohy. Napˇr´ıklad komunikace s rozhran´ım teleskopu, Anal´ yza poˇr´ızen´ ych fotografi´ı. Nechyb´ı ani tvorba map Mˇes´ıce a Marsu, nebo zobrazen´ı pˇresn´ ych pozic mˇes´ıc˚ u planet sluneˇcn´ı soustavy. V modulu zobrazen´ı map hvˇezdn´e oblohy je zaj´ımavou funkc´ı moˇznost filtrov´an´ı zobrazen´ ych objekt˚ u podle zadan´ ych kriteri´ı, nebo nahrazen´ı vybran´ ych objekt˚ u rastrov´ ych obr´azkem. Umoˇzn ˇuje export do souboru ve form´atu PostScript.
´ KAPITOLA 2. POPIS PROBLEMU
6
2.2.2.3
Ostatn´ı
Interaktivn´ıch program˚ u pro zobrazov´an´ı hvˇezdn´e oblohy je velk´e mnoˇzstv´ı. V z´ajmu t´eto pr´ace jsou jen ty, kter´e jsou vhodn´e pro tvorbu map pro tisk, nebo maj´ı zaj´ımav´e vlastnosti. Mezi dalˇs´ı programy, kter´e bych r´ ad zm´ınil patˇr´ı Celestia, Stellarium, Kstars, Wolfram Mathematica Scientific Astronomer nebo TheSky6.
2.2.3
Webov´ e aplikace
Jedn´a se o aplikace, kter´e sv´e uˇzivatelsk´e rozhran´ı maj´ı v podobˇe webov´e prezentace. Tato skupina m´a dle m´eho n´ azoru v dneˇsn´ı dobˇe nejvˇetˇs´ı perspektivu, protoˇze uˇzivatel´e nejsou svazov´ani technick´ ymi rozd´ıly mezi r˚ uzn´ ymi platformami, nestaraj´ı se o instalaci podp˚ urn´ ych program˚ u a mohou k nim pˇristupovat z r˚ uzn´ ych zaˇr´ızen´ı.
2.2.3.1
Your Sky
Webov´a aplikace vyv´ yjen´ a od roku 1998, byla naposledy upravov´ana pravdˇepodobnˇe v roce 2003. Vzhledem k dynamicky se mˇen´ıc´ım podm´ınk´am na webu m´a tato aplikace i pˇres starˇs´ı datum vzniku st´ ale co nab´ıdnout. [54] Nab´ız´ı tˇri z´ akladn´ı reˇzimy v´ ystupu: Cel´a obloha jak ji lze vidˇet ze zadan´eho m´ısta. Pohled na horizont ze zadan´eho m´ısta v zadan´em smˇeru a reˇzim virtu´aln´ıho teleskopu, kdy je obraz zamˇeˇren´ y na vybran´ y nebesk´ y objekt. Netradiˇcn´ı zp˚ usoby zobrazen´ı jsou ˇsikovnou pom˚ uckou pˇri pozorov´an´ı hvˇezdn´e oblohy. Na webov´ y projekt se pyˇsn´ı pomˇernˇe ˇsirokou ˇsk´alou nastaven´ı a moˇznost´ı pˇrizp˚ usoben´ı v´ ystupu podle vlastn´ıch poˇzadavk˚ u. Zobrazen´ı hvˇezdn´e oblohy v urˇcit´em ˇcase. Moˇznost zobrazen´ı planet a mˇes´ıce. V´ ybˇer z r˚ uzn´ ych grafick´ ych sch´emat. Grafick´ y v´ ystup je ve form´ atu GIF s maxim´aln´ım rozliˇsen´ım 1024 x 1024. K tˇemto omezen´ım pˇrisp´ıv´ a jeˇstˇe fakt, ˇze v´ ystup nelze jednoduˇse uloˇzit, jelikoˇz je pˇrekryt´ y jin´ ym elementem. Laik se tedy mus´ı spokojit se zobrazen´ım v oknˇe prohl´ıˇzeˇce.
2.2.3.2
WIKISKY
Fantastick´ y projekt webov´e mapy hvˇezdn´e oblohy, kter´a kombinuje data z r˚ uzn´ ych zdroj˚ u. Setk´ame se v nˇem nejen s mapami tvoˇren´ ymi symboly, ale i s fotografick´ ym pˇrekryvem, kter´ y poch´az´ı jak z renomovan´ ych zdroj˚ u tak od uˇzivatel˚ u. Tato webov´a aplikace, nejenom ˇze nab´ız´ı interaktivn´ı prohl´ıˇzeˇc hvˇezdn´ ych map, ale nab´ız´ı i moˇznost integrace okna do vlastn´ı webov´e str´anky, nebo moˇznost exportu do grafick´eho souboru, i kdyˇz jen rastrov´eho. Za nejzaj´ımavˇejˇs´ı vlastnost z hlediska m´eho projektu povaˇzuji moˇznost odkazov´an´ı na urˇcit´e objekty na mapˇe pomoc´ı zdokumentovan´ ych parametr˚ u. [42] Uˇziteˇcnou vlastnost´ı tohoto API je i XML dotazovac´ı engine, kter´ y umoˇzn ˇuje zjiˇst’ovat informace o urˇcit´ ych nebesk´ ych objektech za pomoc´ı URL dotaz˚ u. V´ ysledek dostaneme ve form´atu XML a dal by se snadno vyuˇz´ıt i v jin´em projektu. [53]
ˇ ´ SYSTEM ´ 2.3. SOURADNICOV Y
2.2.3.3
7
Ostatn´ı
Mezi dalˇs´ı, kter´e bych r´ ad zm´ınil, patˇr´ı Neave Planetarium. [13] Jedn´a se o kr´asnˇe zpracovan´e flashov´e planet´ arium, zobrazuj´ıc´ı kromˇe jasn´ ych hvˇezd a souhvˇezd´ı tak´e pozice planet a mˇes´ıce.
2.3
Souˇ radnicov´ y syst´ em
Vstupn´ı data pro kaˇzd´ y objekt jsou sloˇzena z nˇekolika veliˇcin, ale nejd˚ uleˇzitˇejˇs´ı souˇc´ ast´ı pro zobrazen´ı objektu na mapu jsou jeho souˇradnice. Ty je moˇzn´e ud´avat v r˚ uzn´ ych souˇradnicov´ ych syst´emech, napˇr´ıklad galaktick´ y souˇradnicov´ y syst´em, kdy je stˇredem soustavy Slunce a osa galaktick´e d´elky smˇeˇruje do stˇredu Ml´eˇcn´e dr´ahy. Ekliptik´aln´ı souˇradn´ y syst´em m´ a t´eˇz poˇc´atek soustavy ve stˇredu Slunce, ale obˇe osy leˇz´ı v rovinˇe ekliptiky 1 . Nejˇcastˇeji pouˇz´ıvan´ y syst´em pro urˇcov´ an´ı pozic nebesk´ ych objekt˚ u je tzv. rovn´ıkov´ y souˇradnicov´ y syst´em, kter´ y m´a rovinu rovn´ıku kolmou na zemskou osu. Dalˇs´ı uv´adˇen´e souˇradnice v tomto textu budou v rovn´ıkov´em souˇradnicov´em syst´emu, nebude-li uvedeno jinak. Souˇradnice v tomto syst´emu se skl´adaj´ı z rektascenze a deklinace. Protoˇze n´as tyto dvˇe veliˇciny budou prov´ azet cel´ ym textem, bude dobr´e je bl´ıˇze definovat. Rektascenze je hodnota, kter´a ud´av´a velikost u ´hlu mezi rovinou kruˇznice proch´azej´ıc´ı bodem nebesk´e sf´ery a kruˇznic´ı proch´azej´ıc´ı tzv. jarn´ım bodem. V jarn´ım bodˇe se nach´ az´ı Slunce pˇri u ´svitu v okamˇziku jarn´ı rovnodennosti. Rektascenze je bˇeˇznˇe ud´av´ana v hodin´ ach, minut´ach a sekund´ ach nebo v radi´anech. Deklinace je velikost u ´hlu od roviny rovn´ıku. Na severn´ı polokouli je deklinace kladn´ aa na jiˇzn´ı z´ aporn´ a. Deklinace je obvykle ud´av´ana ve stupn´ıch, minut´ach a sekund´ach nebo radi´anech. Ekvinokcium urˇcuje pro jak´ y historick´ y okamˇzik vol´ıme rovinu rovn´ıku a pozici p´ ol˚ u. Tyto prvky souˇradnicov´eho syst´emu se v ˇcase mˇen´ı vlivem precese2 a nutace3 zemsk´e osy. Standartnˇe pouˇz´ıvan´e datum je nyn´ı oznaˇcov´ano jako J2000.04 . Pˇri v´ ypoˇctu pˇresn´e polohy nebesk´eho tˇelesa se pak mus´ı vz´ıt v u ´vahu nejen zmˇena velikosti rektascenze a deklinace, ale i zmˇeny zemsk´e osy. Tyto v´ ypoˇcty jsou mimo r´amec t´eto pr´ace, z´ajemce odkazuji napˇr´ıklad na [16] nebo [15].
2.4
Form´ at astronomick´ ych dat
Nejbˇeˇznˇeji se setk´ ame s form´atem popsan´em ve standartu pro astronomick´e katalogy [43]. Datov´e soubory obsahuj´ı jen data v ASCII textov´e podobˇe. Data jsou bez titulk˚ u a 1
rovina v n´ıˇz ob´ıh´ a Zemˇe kolem Slunce zmˇena orientace 3 kol´ıs´ an´ı 4 2451545.0 Juli´ ansk´eho data, 1. Ledna 2000 12:00 Terestrick´eho data, 1. Ledna 2000 11:58:55.816 UTC 2
8
´ KAPITOLA 2. POPIS PROBLEMU
koment´aˇr˚ u. Vyj´ımku tvoˇr´ı tzv. uv´ıtac´ı ˇra´dky (intoductory lines), kter´e jsou uvozen´e specifikovan´ ym znakem. Nav´ıc datov´e soubory mohou obsahovat pr´azdn´e ˇr´adky, takov´ y ˇr´adek m´a b´ yt pˇreskoˇcen. V tomto form´ atu jsou dostupn´e nejzn´amˇejˇs´ı astronomick´e katalogy jako Smithsonian Astrophysical Observatory Star Catalog [40] nebo katalog Henryho Drapera [5]. N´asleduje uk´azka z katalogu v tomto form´atu. 106 03554.451-0.0549 2 57.109 41901.6+8213 5.64+0.091 2 1.13 41900.5 1099.9 6.4F8 141701000070 760BD+81 13 34400 7600.15667613 1.43 497886 03947. 218-0.0580+822938.19+0.0860.17360339 1.43979090 Druh´ y form´ at, kter´ y by bylo uˇziteˇcn´e podporovat je tzv. Delimiter Separated Value. Jedn´a se o obecnˇeji definovan´ y zn´ amˇejˇs´ı form´at Comma Separated Value, kter´ y je podporovan´ y bˇeˇznˇe pouˇz´ıvan´ ymi tabulkov´ ymi procesory. Speci´aln´ı znaky pokud jsou pˇr´ıtomny, mus´ı b´ yt uzavˇreny do dvojice uvozuj´ıc´ıch znak˚ u. V tomto form´atu je vyd´an napˇr´ıklad katalog Deep Sky objekt˚ u Saguaro Astronomy Club [38]. N´asleduje uk´azka z katalogu v tomto form´atu. "NGC 292 ","Small Magellanc Cl","GALXY","TUC","00 52.6","-72 48"," 2. 3","14 ","460","24"," 319 m"," 205 m","45 ","Ir "," "," ", " ","!!!vvB;eeL;iR;st 12...18 ","Memb Local G roup;LMC 22 deg distant "
Kapitola 3
Anal´ yza poˇ zadavk˚ u a v´ ybˇ er technologi´ı Pˇri definici poˇradavk˚ u na funkˇcnost programu jsem se snaˇzil vybrat zaj´ımav´e vlastnosti z jiˇz existuj´ıc´ıch program˚ u. V prvn´ı ˇc´asti kapitoly jsou seps´any nefunkˇcn´ı a funkˇcn´ı poˇzadavky, ze kter´ ych je nutn´e vych´ azet pˇri dalˇs´ım v´ ybˇeru technologi´ı a n´asledn´em n´avrhu syst´emu.
3.1
Katalog poˇ zadavk˚ u
3.1.1
Nefunkˇ cn´ı poˇ zadavky
• Aplikace nebude m´ıt grafick´e prostˇred´ı. • Aplikace bude pˇrenositeln´ a mezi platformami. • Aplikace bude generovat data ve vhodn´em grafick´em form´atu. • Konfigurace bude uloˇzena v XML dokumentu. • Program bude snadno rozˇsiˇriteln´ y. • Program bude schopn´ y zpracovat statis´ıce vstupn´ıch objekt˚ u.
´ ˇ ˚ A VYB ´ ER ˇ TECHNOLOGI´I KAPITOLA 3. ANALYZA POZADAVK U
10
Vstup • Moˇznost definice form´ atu uˇzivatelem dodan´eho vstupn´ıho souboru. • Podpora v´ıce druh˚ u form´ atov´ an´ı vstupn´ıch soubor˚ u. • Filtrov´an´ı vstupn´ıch dat dle zadan´e podm´ınky. • Definice vlastn´ıch promˇenn´ ych, z´ avisl´ ych na jiˇz naˇcten´ ych datech, nebo na ostatn´ıch promˇenn´ ych.
V´ ystup • Tvorba v´ ystupu vhodn´eho pro web i pro tisk. • Moˇznost tvorby interaktivn´ıho v´ ystupu. • V´ ybˇer z v´ıce grafick´ ych form´ at˚ u pro v´ ystup. • Jednoduchou u ´pravou konfigurace lze zmˇenit celkov´ y vzhled v´ ystupu. • Moˇznost definice vlastn´ıch symbol˚ u pro urˇcit´e objekty. • Voliteln´e vykreslov´ an´ı textov´ ych popisk˚ u.
3.2
V´ ybˇ er technologi´ı
V t´eto ˇc´asti bude prob´ıhat diskuze jednotliv´ ych moˇznost´ı, ze kter´ ych je tˇreba vybrat pˇred n´avrhem a implementac´ı. Nejprve provedu v´ ybˇer v´ ychoz´ıho grafick´eho v´ ystupn´ıho form´atu a pak rozhodnu pro jak´ y jazyk bude program navrhov´an a n´aslednˇe v nˇem implementov´an.
3.2.1
Volba v´ ychoz´ıho v´ ystupn´ıho form´ atu
V´ ybˇer v´ ystupn´ıho grafick´eho form´ atu bylo nutn´e prov´est s ohledem na povahu dat a na pouˇzit´ı v´ ystupu. Nem´enˇe d˚ uleˇzit´ a je i kompatibilita grafick´eho form´atu s bˇeˇznˇe pouˇz´ıvan´ ymi programy a moˇznost konverze do jin´eho grafick´eho form´atu. Pˇredem je tˇreba ˇr´ıci, ˇze jsem zvaˇzoval pouze form´ aty svobodnˇe pouˇziteln´e. D´ale je tˇreba pˇripomenout prim´arn´ı urˇcen´ı v´ ystupn´ıch soubor˚ u. C´ılem je vytv´ aˇret mapy hvˇezdn´e oblohy pˇredevˇs´ım jako souˇc´ast webov´e prezentace a pro tisk. Pˇredt´ım neˇz zaˇcneme srovn´ avat konkr´etn´ı typy grafick´ ych soubor˚ u, je nutn´e prov´est v´ ybˇer mezi rastrov´ ym a vektorov´ ym grafick´ ym form´atem.
´ ER ˇ TECHNOLOGI´I 3.2. VYB
3.2.1.1
11
Rastrov´ y form´ at
Obr´ azek v rastrov´em nebo-li bitmapov´em form´atu je sloˇzen z pixel˚ u (obrazov´ ych bod˚ u) uloˇzen´ ych v dvourozmˇern´em poli. Kaˇzd´ y bod si nese informaci o sv´e barevnosti. To m˚ uˇze v z´avislosti na specifick´em form´ atu souboru zahrnovat i pr˚ uhlednost. Tento zp˚ usob uloˇzen´ı dat je ide´aln´ı pro sloˇzit´e kompozice, kter´e obsahuj´ı velk´e mnoˇzstv´ı barev, barevn´ ych pˇrechod˚ u a st´ın˚ u. Takov´ y v´ ystup z´ısk´ ame tˇreba z digit´aln´ıho fotoapar´atu, kde kaˇzd´ y pixel odpov´ıd´ a bodu na CCD ˇcipu. Ze zp˚ usobu uloˇzen´ı dat plynou v´ yhody i nev´ yhody, kter´e volba rastrov´eho form´ atu pˇrin´aˇs´ı. Nev´ yhodou je pˇredevˇs´ım nemoˇznost zmˇeny velikosti obr´azku bez zhorˇsen´ı obrazov´e kvality. Se zvˇetˇsuj´ıc´ım se rozliˇsen´ım se z´aroveˇ n zvˇetˇsuje velikost souboru a zvyˇsuj´ı se n´aroky na pamˇet’. Pokud chceme prov´est drobnou zmˇenu ve v´ ystupu, napˇr´ıklad zmˇenit barvu jednoho objektu, je nutn´e cel´ y v´ ystup generovat znovu. Zaj´ımavou vlastnost´ı nˇekter´ ych rastrov´ ych form´at˚ u je pˇr´ıtomnost komprese. Rozliˇsujeme dva druhy komprese – ztr´ atovou a bezeztr´atovou. Ztr´atov´a komprese se projev´ı sn´ıˇzenou kvalitou v´ ysledn´eho obr´ azku a ˇcasto znamen´a vˇetˇs´ı sn´ıˇzen´ı n´arok˚ u na zdroje. Bezeztr´atov´ a naopak na kvalitu nem´ a vliv. V z´ avislosti na povaze obr´ azku existuj´ı moˇznosti konverze do vektorov´eho form´atu pomoc´ı trasov´ an´ı. Konverzi lze prov´est bud’ manu´alnˇe nebo pomoc´ı specializovan´eho programu, jako je napˇr´ıklad Autotrace [18]. Vyuˇzit´ı najdeme napˇr´ıklad pˇri pˇrevodu naskenovan´eho fontu do vektorov´e podoby. Kvalita v´ ystupn´ıho vektorov´eho souboru je ovˇsem niˇzˇs´ı neˇz pˇr´ımo generovan´ y vektorov´ y soubor a ˇcasto je nutn´a manu´aln´ı korekce. JPEG File Interchange Format pouˇz´ıv´a ztr´atovou kompresn´ı metodu a je cenˇen´ y zejm´ena pˇri ukl´ ad´ an´ı fotografi´ı. S´ıla komprese je v barevn´ ych pˇrechodech a naopak hlavnˇe ztr´ac´ı pˇri ostr´ ych pˇrechodech jako je text nebo perokresba. Pˇri ostr´ ych pˇrechodech se objevuj´ı ruˇsiv´e artefakty. I proto je dnes u grafick´ ych prvk˚ u nahrazov´an form´atem PNG. Portable Network Graphics navrˇzen´ y jako patenty nesv´azan´a n´ahrada form´atu GIF pro pˇrenos obr´ azku po internetu. Rozˇsiˇruje 8 bitovou barevnou hloubku a 1 bitov´ y alfa kan´al pr˚ uhlednosti na 24 bitovou (volitelnˇe aˇz 48 bitovou) barevnou hloubku a 8 bitov´ y alfa kan´al. Obr´ azky jsou komprimov´ any bezeztr´atovou metodou. Perfektn´ıch v´ ysledk˚ u dosahuje u obr´azk˚ u obsahuj´ıc´ıch text a nebo jednolit´e barevn´e plochy – neobjevuj´ı se zde artefakty a nesniˇzuje se ˇcitelnost jako u JPEG, i pˇresto jsou data efektivnˇe komprimov´ana. 3.2.1.2
Vektorov´ y form´ at
Obr´ azek ve vektorov´em form´ atu je definov´an jako mnoˇzina bod˚ u, u ´seˇcek a kˇrivek. Kombinac´ı tˇechto z´ akladn´ıch struktur je moˇzn´e vytv´aˇret sloˇzit´e objekty, kter´e je moˇzn´e obarvit, vyplnit gradientem nebo vzorem. Protoˇze soubor s vektorov´ ym obr´azkem nenese informace o tom jak obr´ azek vypad´ a, ale o tom jak ho vytvoˇrit, nen´ı probl´em ho vytvoˇrit v r˚ uzn´ ych velikostech bez ztr´ aty obrazov´e kvality. Cenou za tuto v´ yhodu je nemoˇznost vytv´aˇren´ı tak sloˇzit´ ych kompozic´ı, jak´e je moˇzn´e vytvoˇrit v rastrov´em obr´azku a s rostouc´ı sloˇzitost´ı se rapidnˇe zvyˇsuj´ı n´ aroky na pamˇet’.
´ ˇ ˚ A VYB ´ ER ˇ TECHNOLOGI´I KAPITOLA 3. ANALYZA POZADAVK U
12
Vektorov´a grafika v sobˇe m˚ uˇze zahrnout rastrov´ y obraz, ovˇsem ten i jako ˇc´ast vektorov´eho celku ponese sv´ a omezen´ı. Velikost vektorov´eho souboru je nez´avisl´a na velikosti v´ ystupu. Konstantn´ı jsou i n´ aroky na vykreslen´ı obr´azku. Nev´ yhodou, kterou je nutn´e vz´ıt v potaz, je skuteˇcnost, ˇze v´ ysledn´ y obraz je z´avisl´ y na implementaci zobrazen´ı vektorov´eho form´atu. Nedodrˇzen´ı specifikace grafick´eho form´atu v programu, m˚ uˇze v´est k nepˇresn´e reprodukci.
Encapsulated PostScript je PostScriptov´ y dokument, kter´ y m´a sv´a specifick´a pravidla. PostScript je programovac´ı jazyk urˇcen´ y pro zobrazov´an´ı1 grafiky a textu. Hlavn´ım u ´ˇcelem bylo vytvoˇrit vhodn´ y jazyk, kter´ y popisuje dokument nez´avisle na zaˇr´ızen´ı, na kter´em m´a b´ yt zobrazen. [56] Soubory obsahuj´ı s´erii pˇr´ıkaz˚ u v postfixov´e notaci2 . V odvozen´em form´ atu EPS je dovoleno vytvoˇrit pouze jednostr´ankov´ y dokument a je nutn´e specifikovat rozmˇery a um´ıstˇen´ı grafiky. Volitelnˇe m˚ uˇze kaˇzd´ y EPS soubor obsahovat n´ahled grafiky. [56]. Form´at je podporovan´ y pˇredevˇs´ım ve specializovan´ ych kresl´ıc´ıch programech jako je Inkscape, Corel Draw nebo Adobe Illustrator. Internetov´e prohl´ıˇzeˇce tento form´at neum´ı vykreslit.
Portable Document Format P˚ uvodnˇe propriet´arn´ı form´at byl zveˇrejnˇen jako standart publikovan´ y organizac´ı ISO [25]. Z´ akladem PDF souboru je PostScriptov´ y dokument, nˇekter´e instrukce jsou zmˇenˇen´e a jin´e nejsou pˇr´ıtomn´e v˚ ubec. Form´at PDF je komprimovan´ y. Silnou str´ankou form´ atu je moˇznost vloˇzit do dokumentu r˚ uzn´e objekty. M˚ uˇze obsahovat fonty, obr´azky, hypertextov´e odkazy a dokonce i videa. [29] Pro zobrazen´ı PDF soubor˚ u je tˇreba specializovan´ y prohl´ıˇzeˇc, kter´ y je zpravidla snadno dostupn´ y. Internetov´e prohl´ıˇzeˇce jsou schopny tyto soubory zobrazit jen za pomoci rozˇs´ıˇren´ı. Aˇckoliv byl p˚ uvodnˇe vytvoˇren jen pro u ´ˇcely webov´ ych prezentac´ı, pomalu se dost´av´a i do segmentu tiskov´eho.
Scalable Vector Graphics Form´ at vytvoˇren´ y W3C konsorciem. Data jsou uloˇzena v XML souboru. SVG m˚ uˇze obsahovat text, vektorovou grafiku a rastrovou grafiku. Definov´an´ı vzhledu dokumentu je moˇzn´e prov´ adˇet pomoc´ı jazyka kask´adov´ ych styl˚ u CSS. Je pˇr´ıtomna podpora skriptov´ an´ı pomoc´ı skriptovac´ıch jazyk˚ u. Dohromady tvoˇr´ı kask´adov´e styly a skriptovac´ı jazyky silnou kombinaci schopnou vytv´aˇret interaktivn´ı grafiku. Moˇznosti interaktivity jeˇstˇe rozˇsiˇruje podpora XLink pro vytv´ aˇren´ı hypertextov´ ych odkaz˚ u. Ve f´azi n´avrhu je podmoˇzina SVG specifikace zamˇeˇren´a na tisk zvan´a SVG Print [47]. Tento form´ at je podporovan´ y hlavn´ımi webov´ ymi prohliˇzeˇci, kromˇe Microsoft Internet Explorer. Schopnosti zobrazen´ı ovˇsem z´ aleˇz´ı na rozsahu implementace, ta b´ yv´a zpravidla jen ˇc´asteˇcn´a. [50] Pro editaci je nutn´ y specializovan´ y program jako napˇr´ıklad Inkscape. 1 2
Zobrazen´ım se mysl´ı jak tisk na pap´ır, tak zobrazen´ı na obrazovce poˇc´ıtaˇce. Oper´ ator je vˇzdy naps´ an pˇred operandy.
´ ER ˇ TECHNOLOGI´I 3.2. VYB
3.2.2
13
Volba programovac´ıho jazyka
S pˇrihl´ednut´ım ke katalogu poˇzadavk˚ u je nutn´e prov´est vhodnout volbu programovac´ıho jazyka, kter´ y dok´ aˇze splnit poˇzadavky na portabilitu ˇreˇsen´ı a z´aroveˇ n bude vhodn´ y k implementaci specifick´ ych funkˇcn´ıch pozadavk˚ u. Do uˇzˇs´ıho v´ ybˇeru jsem zvolil programovac´ı jazyky Java a Python. Sezn´ amen´ı s programovac´ım jazykem Java Syntaxe jazyka Java vych´az´ı z jazyka ˇ ala knihoven, kter´e pro Javu existuj´ı je ohromn´a. Velkou v´ C++. Sk´ yhodou je moˇznost pˇripojen´ı knihovny do bal´ıku programu, odpad´a tedy nutnost instalace souˇc´ast´ı do operaˇcn´ıho syst´emu. Java oproti C++ v´ yraznˇe sniˇzuje n´aroky na program´atora, implementuje Garbage Collector, pr´ ace s ukazateli zde chyb´ı. Tˇeˇs´ı se podpoˇre ˇsirok´e ˇrady platforem a operaˇcn´ıch syst´em˚ u. Sezn´ amen´ı s programovac´ım jazykem Python Syntaxe jazyka Python je jednoduch´ a a snadno ˇciteln´ a. Existuj´ı r˚ uzn´e implementace, nejpouˇz´ıvanˇejˇs´ı je tzv. Cpython – s interpretem napsan´ ym v programovac´ım jazyce C. Zaj´ımavou alternatiovou je i Jpython, interpret jazyka Python napsan´ y v Javˇe, kter´ y mimo jin´e umoˇzn ˇuje z Pythonu pˇristupovat ke knihovn´ am Javy. Python je netypov´ y jazyk a oproti Javˇe m´a ˇradu zaj´ımav´ ych moˇznost´ı. Kaˇzd´ y objekt m´ a sadu speci´ aln´ıch metod definuj´ıc´ıch chov´an´ı objektu pˇri zvl´aˇstn´ıch pˇr´ıleˇzitostech. Napˇr´ıklad pˇri pouˇzit´ı oper´ atoru, pˇri konverzi na textov´ y ˇretˇezec nebo metody urˇcuj´ıc´ı chov´an´ı, kdyˇz je objekt zavol´ an jako funkce. V´ıce napˇr´ıklad zde [33]. T´ım se dost´av´ame k dalˇs´ı zaj´ımav´e vlastnosti jazyka Python – moˇznost vyuˇzit´ı jazyka pˇri funkcion´aln´ım programov´an´ı – definice anonymnich funkc´ı a pˇred´ av´ an´ı funkc´ı jako parametru. Stejnˇe jako jazyk Java i Python nab´ız´ı Garbage Collector a rovnˇeˇz je podporovan´ y ˇsirokou ˇsk´alou platforem. 3.2.2.1
Zpracov´ an´ı uˇ zivatelsk´ ych promˇ enn´ ych
D˚ uleˇzitou souˇc´ ast´ı programu bude zpracov´an´ı promˇenn´ ych a podm´ınek, kter´e definoval uˇzivatel. Tato funkce vyˇzaduje pˇr´ıtomnost interpretu matematick´ ych a logick´ ych v´ yraz˚ u. Pro tvorbu textov´ ych promˇenn´ ych se hod´ı vyuˇz´ıt moˇznosti vzorov´an´ı. Java standartnˇe nem´ a funkci typu eval, existuj´ı ale knihovny, kter´e jej´ı obdobu nab´ızej´ı. Daj´ı se rozdˇelit na interprety matematick´ ych v´ yraz˚ u a interprety programovac´ıho jazyka. Prvn´ı skupina nab´ız´ı dostateˇcn´e moˇznosti pro v´ ypoˇcet matematick´ ych promˇenn´ ych. Mezi pouˇz´ıvan´e interprety matematick´ ych v´ yraz˚ u patˇr´ı JFormula [28] nebo Java Expression Parser [26]. Jako interpret jazyka Java je napˇr´ıklad moˇzn´e vyuˇz´ıt vol´an´ı knihovny BeanShell z k´ odu [20]. Pro vzorov´ an´ı rovnˇeˇz existuj´ı knihovny – tyto funkce nab´ız´ı napˇr´ıklad Velocity Project [49] nebo StringTemplate [45]. Python Python nab´ız´ı funkci eval jako souˇc´ast standartn´ı knihovny. Moˇznosti vzorov´ an´ı jsou rovnˇeˇz souˇc´ ast´ı standartn´ı knihovny v modulu string [35].
14
3.2.2.2
´ ˇ ˚ A VYB ´ ER ˇ TECHNOLOGI´I KAPITOLA 3. ANALYZA POZADAVK U
Pr´ ace s XML a SVG
Java API pro pr´ aci s XML nen´ı u Javy souˇc´ast´ı standartn´ı knihovny, nicm´enˇe je dostupn´a ˇrada knihoven, kter´e nab´ızej´ı vˇse potˇrebn´e. Mezi popul´arn´ı knihovny patˇr´ı napˇr´ıklad Xerces [52] nebo JAXP [27]. Pro pr´ aci s grafick´ ym form´atem SVG je dostupn´a napˇr´ıklad knihovna Batik [19]. Python Jazyk Python nab´ız´ı moduly pro pr´aci s XML ve standartn´ı knihovnˇe. Na v´ ybˇer je z v´ıce implementac´ı, pro u ´ˇcely programu je dostateˇcn´ y napˇr´ıklad odlehˇcen´ y a jednoduch´ y modul minidom [37]. Pro pr´aci s grafick´ ym v´ ystupem je dostupn´a knihovna Cairo v kombinaci s modulem RSVG. Obˇe knihovny jsou knihovnami jazyka C++, kter´e Python um´ı pouˇz´ıvat. Drobn´ ym nedostatkem je, ˇze modul Pythonu RSVG nen´ı dostupn´ y pro prostˇred´ı MS Windows, nicm´enˇe knihovna jazyka C++ portov´ ana je a existuje jednoduch´ y zp˚ usob jak modul RSVG emulovat [22].
Kapitola 4
Mapov´ a zobrazen´ı Jedn´ım z nejd˚ uleˇzitˇejˇs´ıch funkˇcn´ıch poˇzadavk˚ u programu je moˇznost volby mapov´eho zobrazen´ı. Pˇred n´ avrhem a implementac´ı programu je nutn´e prozkoumat, jak´ ym zp˚ usobem se prov´ ad´ı transofrmace souˇradnic rovn´ıkov´eho souˇradnicov´eho syst´emu na ploˇsn´e souˇradnice grafick´eho v´ ystupu. V n´ asleduj´ıch ˇc´astech pˇredstav´ım vybran´a mapov´a zobrazen´ı. Jedn´ a se o geografick´ a zobrazen´ı, kter´a vˇsak s u ´spˇechem m˚ uˇzeme pouˇz´ıt pro vizualizaci dat hvˇezdn´e oblohy, protoˇze v ploˇsn´em zobrazen´ı nen´ı rozd´ıl v tom zda je vizualizovan´ a plocha konvexn´ı nebo konk´ avn´ı. Jednotliv´a zobrazen´ı jsou ˇcasto publikov´ana s v´ ypoˇcetn´ım algoritmem i pro jin´ a prostorov´ a tˇelesa neˇz je koule – napˇr´ıklad elipsoid. Pro u ´ˇcely mapov´ an´ı hvˇezdn´e oblohy je vˇsak koule ide´ aln´ı, a proto se tˇemito rozˇs´ıˇren´ımi d´ale nebudu zab´ yvat. Nen´ı moˇzn´e ˇr´ıci, jak´e zobrazen´ı je nejlepˇs´ı a je riskantn´ı vyb´ırat jedno nejlepˇs´ı pro urˇcitou aplikaci [14]. Proto zde uv´ ad´ım jen ta, kter´a povaˇzuji za vhodn´e z hlediska vyuˇzit´ı pro mapov´ an´ı hvˇezdn´e oblohy. U kaˇzd´eho uvedu, proˇc je vhodn´e pro vizualizaci dat hvˇezdn´e oblohy a jak´ ym zp˚ usobem se prov´ad´ı transformace. Na z´avˇer t´eto sekce shrnu spoleˇcn´e vlastnosti mapov´ ych projekc´ı, tyto informace n´aslednˇe budou vyuˇzity pˇri n´avrhu a implementaci programu. Jednotliv´ a zobrazen´ı zde nebudou matematicky odvozena a podrobnˇeji definov´ana. Budou zde uvedeny z´ akladn´ı v´ ypoˇcetn´ı vzorce a d˚ uleˇzit´e vlastnosti kaˇzd´eho zobrazen´ı. Souˇc´ ast´ı jednotliv´ ych sekc´ı budou i obr´ azky zobrazen´ı v r˚ uzn´ ych poloh´ach. Tyto obr´azky byly generov´any pomoc´ı zde popisovan´eho programu a jako vstupn´ı data poslouˇzila kompilace vytvoˇren´ a Torstenem Brongerem jako souˇc´ast programu PP3 [3]. Zdrojem jeho dat byla fotografie Ml´eˇcn´e dr´ ahy poˇr´ızen´ a Axelem Mellingerem [12]. Nejprve je nutn´e uv´est nˇekolik d˚ uleˇzit´ ych definic´ı. Kuˇ zelov´ a zobrazen´ı jsou takov´a zobrazen´ı, jejichˇz obraz pˇripom´ın´a rozvinutou kuˇzelovou plochu. Konstrukci tohoto zobrazen´ı si m˚ uˇzeme pˇredstavit tak, ˇze na kouli, jej´ıˇz povrch zobrazujeme je posazen kuˇzel. Kuˇzel m˚ uˇze kouli prot´ınat bud’ v jedn´e nebo ve dvou rovinn´ ach a pr˚ unikem jsou kruˇznice. Tyto kruˇznice jsou nazv´any z´akladn´ı rovnobˇeˇzky. Na pl´aˇst tohoto kuˇzele je pak zobrazen povrch koule. Obrazem poledn´ık˚ u je svazek pˇr´ımek o stˇredu v obrazu vrcholu kuˇzele. Obrazem rovnobˇeˇzek jsou soustˇredn´e kruˇznice opsan´e rovnˇeˇz obrazu vrcholu kuˇzele. Obrazy poledn´ık˚ u a rovnobˇeˇzek jsou na sebe vˇzdy kolm´e. [1]
15
´ ZOBRAZEN´I KAPITOLA 4. MAPOVA
16
V´ alcov´ a zobrazen´ı je moˇzn´e si pˇredstavit jako limitn´ı pˇr´ıpad kuˇzelov´ ych zobrazen´ı, kdy je vrchol kuˇzele um´ıstˇen v nekoneˇcnu. Obraz v´alcov´eho zobrazen´ı je rozvinut´a plocha v´alce, jehoˇz osa je kolm´ a na rovn´ıkovou rovinu. Poledn´ıky a rovnobˇeˇzky jsou zobrazeny jako navz´ajem kolm´e pˇr´ımky. Poledn´ıky jsou od sebe stejnˇe vzd´alen´e. Nejmenˇs´ıch zkreslen´ı dosahuj´ı kolem dotykov´e kruˇznice, kterou je zpravidla rovn´ık. Jsou tedy vhodn´a pˇredevˇs´ım pro zobrazen´ı rovn´ıkov´ ych oblast´ı. [1] Azimut´ aln´ı zobrazen´ı je opˇet moˇzn´e si pˇrestavit jako limitn´ı pˇr´ıpad kuˇzelov´ ych zobrazen´ı, kdy m´ a vrchol kuˇzele nulovou v´ yˇsku nad kulov´ ym povrchem. Zobrazuje se tedy na rovinu kolmou na spojnici stˇredu koule a stˇredu projekce. [1] Nˇekter´a azimut´aln´ı zobrazen´ı je moˇzn´e odvodit geometrickou cestou a proto se naz´ yvaj´ı projekcemi. Ty vznikaj´ı prom´ıt´an´ım povrchu kulov´e plochy na rovinu z bodu perspektivy. Rovina je kolm´a na spojnici stˇredu koule a bodu perspektivy. [1] Konformn´ı zobrazen´ı je takov´e zobrazen´ı, kter´e zachov´av´a velikost u ´hl˚ u mezi kaˇzdou dvojic´ı kˇrivek. Konformn´ı zobrazen´ı maj´ı velk´a ploˇsn´a zkreslen´ı. [1] Ekvivalentn´ı zobrazen´ı je takov´e zobrazen´ı, pˇri kter´em nedoch´az´ı ke zkreslen´ı plochy. Ekvivalentn´ı zobrazen´ı maj´ı velk´ au ´hlov´ a zkreslen´ı. [1] Ekvidist´ aln´ı zobrazen´ı je takov´e zobrazen´ı, u kter´eho v urˇcit´e soustavˇe kˇrivek nedoch´az´ı ke zkreslen´ı d´elky, napˇr´ıklad ve smˇeru poledn´ık˚ u. Cel´a mapa vˇsak ekvidist´aln´ı b´ yt nem˚ uˇze. [1] R x y λ λ0 φ φ0 φ1 φ2
Polomˇer zobrazovan´e koule. Souˇradnice v´ ystupu na ose X. Souˇradnice v´ ystupu na ose Y. Rektascenze zobrazovan´e souˇradnice. Rektascenze stˇredu zobrazen´ı. Deklinace zobrazovan´e souˇradnice. Deklinace stˇredu zobrazen´ı. Deklinace z´akladn´ı rovnobˇeˇzky. Deklinace druh´e z´akladn´ı rovnobˇeˇzky.
Tabulka 4.1: Symboly pouˇzit´e v rovnic´ıch mapov´ ych zobrazen´ı.
Oznaˇ cen´ı promˇ enn´ ych v rovnic´ıch je pops´ano v tabulce symbol˚ u 4.1. Jedn´a se o promˇenn´e, kter´e jsou bud’ vstupn´ım atributem algoritmu, nebo n´avratovou hodnotou.
4.1
Ortografick´ a projekce
Azimut´aln´ı projekce, kter´ a zobrazuje kouli vidˇenou vzd´alen´ ym pozorovatelem – pˇresnˇeji jen jej´ı polokouli. Bod perspektivy je um´ıstˇen v nekoneˇcnu. Zobrazen´ı nen´ı ani ekvivalentn´ı
´ PROJEKCE 4.2. STEREOGRAFICKA
17
ani konformn´ı, proto nen´ı vhodn´e pro mˇeˇren´ı. Tyto nedostatky ale vyvaˇzuje realistick´e zoˇ eji se setk´ brazen´ı koule. Castˇ ame s naklonˇenou projekc´ı se stˇredem mezi rovn´ıkem a p´olem, to proto, ˇze naklonen´ı umocˇ nuje vˇernost vizualizace koule. Poledn´ıky a rovnobˇeˇzky jsou zobrazeny jako elipsy nebo u ´seˇcky. [14]
(a) Ekvatori´ aln´ı
(b) Obecn´ a
(c) Pol´ arn´ı
Obr´ azek 4.1: Ortografick´a projekce v r˚ uzn´ ych poloh´ach. Tato projekce je vhodn´ a pro vizualizaci cel´e polokoule nebo jej´ıch vˇetˇs´ıch ˇc´ast´ı. Kr´ asa projekce vynikne pˇri mal´em zvˇetˇsen´ı. Pˇri velk´em zvˇetˇsen´ı je lepˇs´ı d´at pˇrednost projekc´ım, kter´e jsou ekvivalentn´ı nebo konformn´ı. Pro v´ ypoˇcet souˇradnic obrazu pouˇzijeme n´asleduj´ıc´ı rovnice: x = R · cos(φ) · sin(λ − λ0 )
(4.1)
y = R · [cos(φ1 ) · sin(φ) − sin(φ1 ) · cos(φ) · cos(λ − λ0 )]
(4.2)
Z tˇechto rovnic dostaneme souˇradnice vˇsech bod˚ u, kter´e zobrazujeme, tedy i tˇech na odvr´acen´e polokouli. Abychom eliminovali body, kter´e jsou na skryt´e polokoul,i pouˇzijeme doplˇ nuj´ıc´ı rovnici. cos(c) = sin(φ1 ) · sin(φ) + cos(φ1 ) · cos(φ) · cos(λ − λ0 )
(4.3)
pokud plat´ı cos(c) < 0 je bod na opaˇcn´e polokouli a nem´a b´ yt vykreslen.
4.2
Stereografick´ a projekce
Azimut´ aln´ı projekce, tentokr´ at m´a ovˇsem bod perspektivy um´ıstˇen´ y v bodˇe opaˇcn´em ke stˇredu projekce, kter´ y je na protˇejˇs´ı polokouli. Bod perspektivy nem˚ uˇze b´ yt zobrazen. Pokud je stˇredem projekce severn´ı p´ ol, je bodem perspektivy jiˇzn´ı p´ol. Je to jedin´a perspektivn´ı projekce, kter´ a je konformn´ı. Poledn´ık, proch´azej´ıc´ı stˇredem, a jedna rovnobˇeˇzka jsou zobrazeny jako pˇr´ımky. Vˇsechny ostatn´ı poledn´ıky a rovnobˇeˇzky jsou zobrazeny jako kruhov´e oblouky nebo kruˇznice. S rostouc´ı vzd´alenost´ı od stˇredu projekce se zvˇetˇsuje zkreslen´ı. ˇ Casto je tato projekce v publikac´ıch ohraniˇcena kruˇznic´ı, v´ ypoˇcet n´as ovˇsem takto neomezuje, je proto moˇzn´e vykreslit napˇr´ıklad obˇe pol´arn´ı oblasti na jednu mapu. Nejˇcastˇeji se tato projekce uplatˇ nuje pr´ avˇe pˇri zobrazoven´ı pol´arn´ıch oblast´ı.
´ ZOBRAZEN´I KAPITOLA 4. MAPOVA
18
(a) Ekvatori´ aln´ı
(b) Obecn´ a
(c) Pol´ arn´ı
Obr´ azek 4.2: Stereografick´a projekce v r˚ uzn´ ych poloh´ach. Pro v´ ypoˇcet souˇradnic obrazu pouˇzijeme n´asleduj´ıc´ı rovnice: x = R · k · cos(φ) · sin(λ − λ0 )
(4.4)
y = R · ·[cos(φ1 ) · sin(φ) − sin(φ1 ) · cos(φ) · cos(λ − λ0 )]
Nen´ı ani ekvivalentn´ı ani konformn´ı a nejedn´a se o perspektivn´ı zobrazen´ı. Zobrazuje cel´ y povrch koule a jen ve stˇredu projekce nedoch´az´ı ke zkreslen´ı. Vzd´alenost libovoln´eho bodu od stˇredu projekce je nezkreslen´ a. Pokud je stˇredem projekce jeden z p´olu, tak i u ´seˇcky proch´azej´ıc´ı p´olem jsou nezkreslen´e. Pokud je stˇredem projekce jeden z p´ ol˚ u, jsou vˇsechny poledn´ıky zobrazeny jako u ´seˇcky a rovnobˇeˇzky jako kruˇznice, jejichˇz obvod roste smˇerem od stˇredu line´arnˇe – jedn´a se tedy o ekvidist´aln´ı zobrazen´ı. Pokud nen´ı stˇredem projekce p´ol, je jako u ´seˇcka zobrazen jen poledn´ık proch´azej´ıc´ı stˇredem, a vˇsechny ostatn´ı poledn´ıky a rovnobˇeˇzky jsou kˇrivky. Bod, opaˇcn´ y ke stˇredu projekce, je zobrazen jako kruˇznice ohraniˇcuj´ıc´ı mapu. Stejnˇe jako stereografick´ a projekce je tato ˇcasto pouˇz´ıv´ana pro zobrazov´an´ı pol´arn´ıch oblast´ı. Uplatnˇen´ı vˇsak najde i pˇri vizualizaci velk´ ych nepol´arn´ıch oblast´ı. Pro v´ ypoˇcet souˇradnic obrazu pouˇzijeme n´asleduj´ıc´ı rovnice: x = R · k 0 · cos(φ) · sin(λ − λ0 )
(4.7)
y = R · k 0 · [cos(φ1 ) · sin(φ) − sin(φ1 ) · cos(φ) · cos(λ − λ0 )]
Obr´ azek 4.3: Azimut´aln´ı ekvidist´aln´ı projekce v r˚ uzn´ ych poloh´ach. Pokud plat´ı cos(c) = 1, potom nelze rovnici 4.10 vyˇreˇsit a k 0 = 1. Pokud plat´ı cos(c) = −1 je vykreslov´ an bod opaˇcn´ y ke stˇredu - ten je zn´azornˇen jako kruˇznice kolem cel´eho zobrazen´ı.
4.4
Gnomick´ a projekce
Azimut´ aln´ı a perspektivn´ı projekce. Zobrazuje m´enˇe neˇz jednu polokouli a pouze ve stˇredu projekce nedoch´ az´ı ke zkreslen´ı. Bod perspektivy je ve stˇredu zobrazovan´e koule. Nen´ı ani konformn´ı ani ekvivalentn´ı. Vˇsechny poledn´ıky jsou zobrazeny jako u ´seˇcky a vˇsechny rovnobˇeˇzky, kromˇe rovn´ıku a p´ ol˚ u, jsou elipsy, paraboly nebo hyperboly.
(a) Ekvatori´ aln´ı
(b) Obecn´ a
(c) Pol´ arn´ı
Obr´ azek 4.4: Gnomick´a projekce v r˚ uzn´ ych poloh´ach. Aˇckoliv m´ a tato projekce ohromn´e zkreslen´ı, jej´ı (jedinou) v´ yhodou je, ˇze vˇsechny poledn´ıky jsou zobrazeny jako rovn´e ˇc´ ary. Pokud stˇred projekce leˇz´ı na rovn´ıku jsou na nˇej nav´ıc kolm´e. Gnomick´e mapy jsou d˚ uleˇzitou pom˚ uckou pˇri zobrazov´an´ı drah meteor˚ u. Dr´ahy nejsou zobrazeny jako ˇc´ asti oblouk˚ u, n´ ybrˇz jako u ´seˇcky. Pro v´ ypoˇcet souˇradnic obrazu pouˇzijeme n´asleduj´ıc´ı rovnice: x = R · k 0 · cos(φ) · sin(λ − λ0 )
(4.11)
20
´ ZOBRAZEN´I KAPITOLA 4. MAPOVA
y = R · k 0 · [cos(φ1 ) · sin(φ) − sin(φ1 ) · cos(φ) · cos(λ − λ0 )]
(4.12)
kde cos(c) = sin(φ1 ) · sin(φ) + cos(φ1 ) · cos(φ) · cos(λ − λ0 ) (4.13) 1 k0 = (4.14) cos(c) Z tˇechto dvou rovnic dostaneme souˇradnice vˇsech bod˚ u, kter´e zobrazujeme, tedy i tˇech na odvr´acen´e polokouli. Abychom eliminovali body, kter´e nemaj´ı b´ yt vykresleny, pouˇzijeme rovnici 4.13. Bod nem´ a b´ yt vykreslen, pokud plat´ı: cos(c) ≤ 0.
4.5
Lambertovo konformn´ı zobrazen´ı
K´onick´e zobrazen´ı, kter´e je konformn´ı. Ke stˇredu mapy se vzd´alenosti mezi rovnobˇeˇzkami zmenˇsuj´ı. Poledn´ıky jsou od sebe stejnˇe vzd´alen´e. Vzd´alenosti jsou nezkreslen´e na z´akladn´ıch rovnobˇeˇzk´ach. Jeden z p´ ol˚ u je zobrazen jako stˇred rovnobˇeˇzn´ıkov´ ych kruˇznic a druh´ y je v nekoneˇcnu. Na p´ olech zobrazen´ı ztr´ ac´ı konformn´ı vlastnost.
Obr´ azek 4.5: Lambertovo konfomn´ı zobrazen´ı. Pokud jsou z´ akladn´ı rovnobˇeˇzky stejnˇe vzd´alen´e od rovn´ıku a kaˇzd´a leˇz´ı na jin´e polokouli, v´ ysledkem je Mercatorovo zobrazen´ı. Pokud m´ame jen jedinou z´akladn´ı rovnobˇeˇzku, a ta je p´olem, je v´ ysledkem stereografick´ a projekce. Toto zobrazen´ı najde uplatnˇen´ı pˇredevˇs´ım pˇri mapov´an´ı mal´ ych oblast´ı um´ıstˇen´ ych mezi z´akladn´ımi rovnobˇeˇzkami. Pro v´ ypoˇcet souˇradnic obrazu pouˇzijeme n´asleduj´ıc´ı rovnice: x = ρ · sin(θ)
(4.15)
4.6. MERCATOROVO ZOBRAZEN´I
21
y = ρ0 − ρ · cos(θ) kde ρ=
(4.16)
R·F
(4.17)
tann ( π4 + φ2 )
θ = n · (λ − λ0 ) ρ0 =
(4.18)
R·F tann ( π4
+
(4.19)
φ0 2 )
tann ( π4 + φ21 ) n ln(cos(φ1 )/ cos(φ2 ))
F = cos(φ1 ) · n=
4.6
ln(tan( π4 +
φ2 n π 2 )/ tan ( 4
+
φ1 2 ))
(4.20) (4.21)
Mercatorovo zobrazen´ı
Konformn´ı kuˇzelov´ a projekce. Vzd´alenost mezi rovnobˇeˇzkami se zvˇetˇsuje smˇerem od rovn´ıku. Smˇerem k p´ ol˚ um doch´ az´ı k ohromn´emu zkreslen´ı a p´oly leˇz´ı v nekoneˇcnu. Vzd´alenosti jsou nezkreslen´e jen na rovn´ıku. V´ yhodou t´eto projekce je, ˇze spojnice mezi dvˇema body je zde zobrazena jako rovn´ a ˇc´ ara.
Obr´ azek 4.6: Mercatorovo zobrazen´ı. Projekce najde uplatnˇen´ı pˇri zobrazen´ı jak cel´e souˇradnicov´e s´ıtˇe tak pˇri zobrazen´ı menˇs´ıch oblast´ı pˇredevˇs´ım v okol´ı rovn´ıku. Pro v´ ypoˇcet souˇradnic obrazu pouˇzijeme n´asleduj´ıc´ı rovnice: x = R · (λ − λ0 ) (4.22)
´ ZOBRAZEN´I KAPITOLA 4. MAPOVA
22
y = R · ln(tan(
4.7
π φ − ) 4 2
(4.23)
Shrnut´ı
Z informac´ı, kter´e jsme nasb´ırali o mapov´ ych zobrazen´ıch je jasn´e, ˇze vstupn´ı hodnoty do vˇsech algoritm˚ u jsou podobn´e. Hodnota polomˇeru koule je pˇr´ıtomna v kaˇzd´e rovnici, m˚ uˇzeme ji tedy ze vˇsech rovnic vytknout a algoritmy tak zobecnit. Jejich v´ ysledkem bude souˇradnice v jednotkov´em ˇctverci. Z´ aklad tvoˇr´ı hodnota rektascenze stˇredu λ0 , kterou je nutn´e definovat u vˇsech zobrazen´ı. S vyj´ımkou Mercatorova zobrazen´ı je tak´e nutn´e definovat souˇradnice jedn´e z´akladn´ı rovnobˇeˇzky φ1 . T´ım jsme pokryli vˇsechna zobrazen´ı s vyj´ımkou Lambertova k´onick´eho zobrazen´ı, kter´e vyˇzaduje definici dvou z´akladn´ıch rovnobˇeˇzek φ1 respektive φ2 .
Kapitola 5
N´ avrh ˇ reˇ sen´ı 5.1
Architektura syst´ emu
Program bude ˇclenˇen do dvou separ´atn´ıch subsyst´em˚ u - vstupn´ıho a v´ ystupn´ıho. Tyto ˇc´asti budou pracuovat zcela nez´ avisle a budou sd´ılet jen nezbytn´e minimum tˇr´ıd. Objekty jsou mezi tˇemito dvˇema subsyst´emy pˇred´av´any pomoc´ı kolekc´ı. K uloˇzen´ı objekt˚ u do pˇred´avac´ıch kolekc´ı jsem se uch´ ylil proto, ˇze program bude nab´ızet v´ıcen´asobn´e generov´an´ı v´ ystupu pro jeden vstup a data je nutn´e nˇekde uchovat. Kaˇzd´ y subsyst´em bude spouˇstˇen jako samostatn´e vl´akno, toto chov´ an´ı ovˇsem bude moˇzn´e ovlivnit konfigurac´ı nebo parametrem pˇr´ıkazu a spouˇstˇet program jako jedin´e vl´ akno. V reˇzimu v´ıcen´ asobn´eho v´ ystupu bude moˇzn´e definovat mapov´e zobrazen´ı pro kaˇzd´ y ’ v´ ystup zvl´ aˇst nebo pro vˇsechny stejn´e. Negativn´ı str´ ankou tohoto zpracov´an´ı budou zcela urˇcitˇe vyˇsˇs´ı n´aroky na pamˇet’, pro m´ırn´e sn´ıˇzen´ı jsem navrhl n´ asleduj´ıc´ı opatˇren´ı. V reˇzimu jedn´e glob´aln´ı projekce se budou naˇc´ıtat jen objekty, kter´e budou viditeln´e na v´ ystupn´ı mapˇe. Pokud bude pr´avˇe zpracov´avan´ y v´ ystup t´ım posledn´ım zpracov´ avan´ ym v´ ystupem, bude data z kolekc´ı mazat.
(a) Glob´ aln´ı definice.
(b) Definice u v´ ystupu.
Obr´ azek 5.1: Architektura syst´emu v z´avislosti na konfiguraci mapov´ ych zobrazen´ı.
23
´ ˇ SEN ˇ ´I KAPITOLA 5. NAVRH RE
24
5.2 5.2.1
Z´ akladn´ı datov´ e struktury Velikost u ´ hlu
Velikost u ´hlu je nejd˚ uleˇzitˇejˇs´ı veliˇcinou, se kterou bude program pracovat. Na vstupu budeme podporovat velikosti u ´hl˚ u v r˚ uzn´ ych jednotk´ach. Tˇr´ıda Angle, pro uloˇzen´ı hodnoty velikosti u ´hlu, zajist´ı pˇri vytvoˇren´ı objektu pˇreveden´ı z jednotky na vstupu na jednotku pouˇz´ıvanou internˇe. Tˇr´ıda bude dˇedit z tˇr´ıdy float1 . To zajist´ı, ˇze s takto uloˇzen´ ymi u ´hly bude moˇzn´e pracovat jako s desetinn´ ym ˇc´ıslem.
5.2.2
Bod a useˇ cka
Velikost u ´hl˚ u je v kontextu souˇradnicov´eho syst´emu hvˇezdn´e oblohy souˇc´ast´ı souˇradnic. Ty jsou tvoˇreny dvojic´ı rektascenze a deklinace. Protoˇze se d´a oˇcek´avat ˇcast´a pr´ace s ploˇsn´ ymi souˇradnicemi, bude uˇziteˇcn´e vytvoˇrit datovou strukturu pro jejich uloˇzen´ı. Takovou strukturou bude tˇr´ıda nazvan´ a Point. Pro budouc´ı pouˇzit´ı bude implementovat metodu pro v´ ypoˇcet vzd´alenosti od jin´eho bodu, kterou nazveme getDistance. Datov´a struktura pro uloˇzen´ı useˇcky bude jednoduch´a - jej´ı objekty budou obsahovat dvojici krajn´ıch bod˚ u.
5.2.3
Objekt hvˇ ezdn´ e oblohy
Z´akladem bude tˇr´ıda, jej´ımˇz instanc´ım bude moˇzn´e pˇridat libovoln´e promˇenn´e - obdoba slovn´ıku, kterou nazveme CelestialAbstract. Bude obsahovat metodu pro pˇrid´an´ı hodnoty identifikovan´e n´ azvem a pro z´ısk´ an´ı hodnoty dan´eho n´azvu. Z t´eto tˇr´ıdy budou dˇedit tˇr´ıdy s v´ıce konkr´etn´ı definic´ı. Prvn´ı z nich bude CelestialBody, kter´a do slovn´ıku objekt˚ u pˇrid´ av´ a atributy rektascenze, deklinace – tyto atributy jsou zde tedy narozd´ıl od objekt˚ u CelestialAbstract vyˇzadov´any. Z t´eto tˇr´ıdy d´ale dˇed´ı tˇr´ıda DeepSkyBody, kter´ a nav´ıc pˇrid´ av´ a atributy maxim´aln´ı a minim´aln´ı velikosti objektu a velikosti u ´hlu osy objektu vzhledem k rovnobˇeˇzk´ am. Jin´ ym zp˚ usobem rozˇsiˇruje tˇr´ıdu CelestialAbstract tˇr´ıda CelestialLine, kter´a definuje ˇc´aru mezi dvˇema objekty. Tato tˇr´ıda bude m´ıt metody pro pˇrevod na jednoduchou u ´seˇcku nebo ˇc´aru sloˇzenou z v´ıce u ´seˇcek, kter´e pozdˇeji najdou uplatnˇen´ı pˇri vykreslov´an´ı mapy.
5.2.4
Vrtkav´ e promˇ enn´ e
Pro zpracov´ an´ı uˇzivatelsk´ ych promˇenn´ ych a podm´ınek bude slouˇzit konstrukce, kterou nazveme vrtkav´e promˇenn´e. Vrtkav´e promˇenn´e jsou objekty, jejichˇz aktu´aln´ı hodnota (textov´a, ˇc´ıseln´a nebo logick´ a) se mˇen´ı v z´ avislosti na objektu, pro kter´ y je zjiˇst’ov´ana. Z´akladem takov´eho objektu bude vzor ve specifikovan´em form´atu, kter´ y bude obsahovat libovoln´ y v´ yraz nebo textov´ y ˇretˇezec jehoˇz souˇc´ ast´ı m˚ uˇzou b´ yt promˇenn´e - ty budou oznaˇceny speci´aln´ımi znaky. Souˇc´ast´ı tˇr´ıdy vrtkav´ ych promˇenn´ ych bude metoda pro vyhodnocen´ı hodnoty pro pˇredan´ y objekt hvˇezdn´e oblohy. 1
Tˇr´ıda desetinn´ ych ˇc´ısel.
´ 5.3. VSTUPN´I SUBSYSTEM
25
V programu budeme potˇrebovat dva druhy vrtkav´ ych promˇenn´ ych. Prvn´ı z nich, konstrukce slouˇz´ıc´ı k vyhodnocen´ı logick´eho v´ yrazu, nazveme Condition. Ta se vˇzdy bude skl´ adat z lev´e strany, kompar´ atoru nebo logick´e spojky, a prav´e strany. Pravou a levou stranu m˚ uˇze tvoˇrit bud’ v´ yˇse zm´ınˇen´ y vzor, nebo objekt tˇr´ıdy Condition. Tato rekurzivn´ı definice uˇzivateli dovol´ı tvorbu sloˇzitˇejˇs´ıch podm´ınek. Druh´ y typ, kter´ y bude pouˇzit k z´ısk´an´ı ˇc´ıseln´e nebo textov´e hodnoty, nazveme Variable. Variable m´ a jednoduˇsˇs´ı konstrukci neˇz Condition, obsahuje pouze n´azev promˇenn´e a jej´ı vzor.
5.2.5
Vstupn´ı kolekce
Jiˇz bylo zm´ınˇeno, ˇze k pˇred´av´an´ı objekt˚ u mezi vstupn´ım a v´ ystupn´ım subsyst´emem bude pouˇzita konstrukce, kterou jsem nazval vstupn´ı kolekce. Pro tento u ´ˇcel bude vytvoˇrena jednoduch´ a tˇr´ıda nazvan´ a Queues. Bude poskytovat metodu, jej´ımˇz parametrem bude ˇc´ıseln´ a ’ hodnota priority. Tato metoda bude m´ıt za u ´kol bud pˇredat jiˇz existuj´ıc´ı kolekci dan´e priority, nebo vytvoˇrit novou. Jednotliv´e kolekce pak budou zpracov´any postupnˇe v z´avislosti na sv´e prioritˇe.
5.3
Vstupn´ı subsyst´ em
Z´akladem bude ˇr´ıd´ıc´ı modul, kter´ y bude spouˇstˇet naˇc´ıt´an´ı soubor˚ u z pˇredan´ ych vstup˚ u, nazveme ho needle. Bude na v´ ybˇer z v´ıcevl´aknov´e a jednoduch´e implementace. Funkce bude u obou stejn´ a, rozd´ıl bude v tom, ˇze u v´ıcevl´aknov´e implementace se spust´ı naˇc´ıt´an´ı vˇsech vstup˚ u najednou, naproti tomu u jednoduch´e se bude postupovat sekvenˇcnˇe. Naˇc´ıt´an´ı vstupu bude spuˇstˇeno pˇri vytvoˇren´ı jednoho z tˇechto objekt˚ u.
5.3.1
Atributy vstupu
U kaˇzd´eho vstupn´ıho souboru bude moˇzn´e definovat libovoln´ y poˇcet atribut˚ u naˇc´ıtan´ ych objekt˚ u. U tˇechto atribut˚ u bude specifikov´an n´azev, typ a popˇr´ıpadˇe i jednotka, ve kter´e je oˇcek´ avan´ a hodnota, vyˇzaduje-li to jej´ı typ. Z´akladn´ımi typy budou: textov´ y ˇretˇezec, cel´e ˇc´ıslo a desetinn´e ˇc´ıslo. Kaˇzd´ y takov´ y atribut bude identifikovan´ y jm´enem. Protoˇze je ˇrada hodnot, se kter´ ymi bude muset program pracovat a kter´e je nutn´e odliˇsit od ostatn´ıch, budou zavedeny speci´ aln´ı typy. Mezi takov´e hodnoty patˇr´ı napˇr´ıklad souˇradnice vyˇzadovan´e pro spr´ avn´e um´ıstˇen´ı na v´ ystupu. Dle konkr´etn´ıho form´ atu vstupu pak budou tyto atributy rozˇs´ıˇreny o informace o tom, jak ze vstupu hodnotu z´ıskat. Napˇr´ıklad u byte-by-byte form´atu budou specifikovan´e pozice poˇc´ateˇcn´ıho a koncov´eho znaku.
5.3.2
Vstupn´ı soubor
Aby byl vstupn´ı subsyst´em kompletn´ı je nutn´e navrhnout tˇr´ıdu, kter´a bude obsahovat seznam vstupn´ıch atribut˚ u a d´ ale informace o tom, kde se vstupn´ı data nach´azej´ı. Tˇr´ıdu nazveme InputFile. Moˇznosti konfigurace vstupu budou rozˇs´ıˇreny o moˇznost definice promˇenn´ ych -
´ ˇ SEN ˇ ´I KAPITOLA 5. NAVRH RE
26
atribut˚ u, kter´e jsou napˇr´ıklad vytvoˇreny dynamicky v z´avislosti na jiˇz naˇcten´ ych hodnot´ach, nebo jsou v´ ysledkem nˇejak´e funkce. Ty jsou k naˇcten´emu objektu pˇrid´any po naˇcten´ı vˇsech z´akladn´ıch atribut˚ u. Jiˇz m´ ame navrˇzenou konstrukci pro specifikaci vrtkav´ ych podm´ınek a m˚ uˇzeme ji vyuˇz´ıt i na vstupu. Uˇzivatel m˚ uˇze definovat podm´ınku, kter´a pokud je vyhodnocena jako pravdiv´ a, m´ a za n´ asledek nenaˇcten´ı vstupn´ıho objektu. Pokud bude program nakonfigurov´an pro pr´ aci s jedn´ım, glob´ alnˇe definovan´ ym zobrazen´ım, bude toto zobrazen´ı souˇc´ast´ı instanc´ı t´eto tˇr´ıdy. Bude implementov´ ana metoda, kter´ a spust´ı naˇc´ıt´an´ı objekt˚ u hvˇezdn´e oblohy ze vstupn´ıho souboru. Naˇc´ıt´ an´ı bude prob´ıhat z objektu typu Reader - kter´ y se bude liˇsit v z´avislosti na implementaci tˇr´ıdy dˇed´ıc´ı z InputFile.
5.4
Modul zobrazen´ı
Pˇri n´avrhu tohoto modulu vyuˇzijeme informace z´ıskan´e v kapitole o zobrazen´ıch. Z´akladn´ım stavebn´ım kamenem bude tˇr´ıda zobrazen´ı, kterou nazveme Projection. Tato tˇr´ıda definuje rozhran´ı pro vˇsechna implementovan´ a zobrazen´ı. Rozhran´ı je podrobnˇeji popsan´e v sekci Tˇr´ıda zobrazen´ı.
5.4.1
Dekor´ ator
V z´avislosti na typu objektu hvˇezdn´e oblohy se generuj´ı nov´e atributy nesouc´ı informace z´ıskan´e zobrazen´ım, napˇr´ıklad souˇradnice v mapˇe. Jelikoˇz architektura programu poˇc´ıt´a s v´ıcen´asobn´ ym zpracov´ an´ım jednotliv´ ych objekt˚ u, a to i paralelnˇe v r˚ uzn´ ych vl´aknech, nen´ı moˇzn´e tyto informace pˇrid´ avat pˇr´ımo do slovn´ıku objektu. Odpovˇed´ı na to, kam tyto informace uloˇzit, je tˇr´ıda Decorator. Z n´ azvu je patrn´e, ˇze se bude jednat o implementaci n´avrhov´eho vzoru dekor´ ator [24]. Dekor´ator je obaluj´ıc´ı tˇr´ıda, kter´a pˇrid´av´a ke slovn´ıku obalovan´eho objektu sv˚ uj vlastn´ı. Takov´ y n´avrh n´am umoˇzn´ı i v´ıcen´asobn´e pouˇzit´ı, bude ovˇsem nutn´e implementovat metodu pro zjiˇstˇen´ı informace o tom, jak´e tˇr´ıdy je p˚ uvodn´ı objekt. Dekor´ator bude m´ıt n´ asleduj´ıc´ı chov´an´ı. Pokud je uloˇzen atribut, kter´ y je pˇr´ıtomen v dekorovan´em objektu, dojde k jeho zast´ınˇen´ı. Pokud se dekor´atoru zept´ame na atribut, kter´ y nen´ı souˇc´ast´ı slovn´ıku dekor´ atoru, pokus´ı se atribut z´ıskat z obalovan´eho objektu.
5.4.2
Tˇ r´ıda zobrazen´ı
Tˇr´ıda zobrazen´ı bude obecnˇe definovat jak´e atributy a metody jsou oˇcek´av´any a vyˇzadov´any ve tˇr´ıd´ach z n´ı dˇed´ıc´ıch - v konkr´etn´ıch zobrazen´ıch nebo projekc´ıch. Z kapitoly o zobrazen´ıch v´ıme, ˇze z´akladem kaˇzd´eho zobrazen´ı jsou souˇradnice stˇredu. Tato informace by n´am k vytv´aˇren´ı jednoduch´ ych map staˇcila, nicm´enˇe bude jeˇstˇe pˇrid´ana informace o zvˇetˇsen´ı mapy - koeficient zvˇetˇsen´ı. Nejd˚ uleˇzitˇejˇs´ı metoda bude ta, kter´ a zobraz´ı pˇredan´ y objekt do souˇradnicov´e s´ıtˇe mapy. Nazveme ji projectObject. Oˇcek´ avan´ ym v´ ystupem bude dekorovan´ y objekt hvˇezdn´e oblohy, kter´ y byl pˇred´ an k zobrazen´ı. Potˇrebn´e souˇradnice z tohoto objektu budou zobrazov´any pomoc´ı metody, kter´ a zajist´ı spr´ avn´ y v´ ypoˇcet zvˇetˇsen´ı a samotn´e zobrazen´ı souˇradnic. Jelikoˇz
´ ´I SUBSYSTEM ´ 5.5. VYSTUPN
27
se jednotliv´ a zobrazen´ı budou liˇsit v´ yhradnˇe v algoritmu zobrazen´ı souˇradnic, bude tento algoritmus definovan´ y ve vlastn´ı metodˇe u konkr´etn´ıch zobrazen´ı. Souˇradnice obsaˇzen´e v dekor´ atoru jsou oˇcek´av´any jako souˇradnice v jednotkov´em ˇctverci. Pˇrevod na konkr´etn´ı velikosti bude proveden ve v´ ystupn´ım subsyst´emu, protoˇze je moˇzn´e, ˇze r˚ uzn´e v´ ystupy budou m´ıt r˚ uzn´a rozliˇsen´ı.
5.5
V´ ystupn´ı subsyst´ em
Z´aklad v´ ystupn´ıho subsyst´emu bude t´emˇeˇr totoˇzn´ y se vstupn´ım subsyst´emem. Bude j´ım opˇet ˇr´ıd´ıc´ı modul, kter´ y bude spouˇstˇet generov´an´ı v´ ystupu, nazveme ho quill. Stejnˇe jako u vstupn´ıho subsyst´emu bude na v´ ybˇer z v´ıcevl´aknov´e a jednoduch´e implementace. V´ ystupn´ı subsyst´em je navrˇzen´ y tak, aby odpov´ıdal potˇreb´am v´ ystupu do SVG, pˇriˇcemˇz v´ ystup do jin´ ych form´ at˚ u ˇreˇs´ı rozˇsiˇruj´ıc´ı modul popsan´ y d´ale. Bylo by moˇzn´e implementovat v´ ystupn´ı subsyst´em i pro jin´ y form´at, nicm´enˇe to je mimo r´amec t´eto pr´ace. Zde popisovan´ y subsyst´em vyˇsel nejl´epe ze zvaˇzovan´ ych alternativ, nenab´ız´ı sice velkou rychlost zpracov´ an´ı dat, ale nab´ız´ı ohromn´e moˇznosti pˇrizp˚ usoben´ı v´ ystupu uˇzivatelem. Jin´e zvaˇzovan´e n´avrhy popisuji na z´ avˇer t´eto kapitoly.
5.5.1
Pl´ atno
Protoˇze modul zobrazen´ı navrac´ı hodnoty souˇradnic v jednotkov´em ˇctverci, je nutn´e prov´est jejich transformaci do souˇradnicov´eho syst´emu velikosti rozliˇsen´ı v´ ystupn´ıho souboru. Pro tento u ´ˇcel bude vytvoˇrena tˇr´ıda, kterou nazveme Canvas. Bude udrˇzovat informaci o rozliˇsen´ı v´ ystupu. Transformace pak bude provedena v metodˇe nazvan´e transform, kter´ a, podobnˇe jako metoda project v modulu zobrazen´ı, obal´ı transformovan´ y objekt dekor´atorem s nov´ ymi atributy. Souˇradnicov´ y syst´em form´ atu SVG je moˇzn´e upravit dle vlastn´ıch poˇzadavk˚ u, nicm´enˇe z´akladn´ı neupraven´ y souˇradnicov´ y syst´em m´a poˇc´atek v lev´em horn´ım rohu obr´azku [46] na rozd´ıl od souˇradnicov´eho syst´emu ve kter´em je v´ ystup z modulu projekc´ı, kter´ y m´a poˇc´ atek v lev´em doln´ım rohu. I o takov´ y pˇrevod se bude tato tˇr´ıda starat.
5.5.2
Architektura v´ ystupn´ıho subsyst´ emu
Pˇred t´ım, neˇz zaˇcneme s podrobn´ ym n´avrhem vˇsech souˇc´ast´ı v´ ystupn´ıho subsyst´emu, je nutn´e nast´ınit, jak´ ym zp˚ usobem bude subsyst´em konstruov´an ,a jak´ ym zp˚ usobem se bude v´ ystup vytv´ aˇret. Soubory, celky a symboly jsou tˇri z´akladn´ı struktury pouˇz´ıvan´e ve v´ ystupn´ım subsyst´emu. Symbol definuje zp˚ usob vykreslen´ı ˇc´asti nebo cel´eho objektu hvˇezdn´e oblohy. Pˇr´ıkladem symbolu m˚ uˇze b´ yt XML element. V kontextu grafick´eho form´atu SVG je to pak jeden tvar, nebo objekt - nemus´ıme se totiˇz omezovat jen na geometrick´e tvary, ale m˚ uˇzeme pouˇz´ıt napˇr´ıklad rastrov´ y obr´ azek. Symbol je vytvoˇren´ y pomoc´ı vrtkav´ ych promˇenn´ ych a v´ ysledn´ y XML element se tedy bude liˇsit v z´avislosti na objektu, kter´ y je vykreslov´an. Nˇekolik nebo i jeden takov´ y symbol pak tvoˇr´ı celek. Celky jsou vˇzdy omezeny vrtkavou podm´ınkou. Koneˇcnˇe
´ ˇ SEN ˇ ´I KAPITOLA 5. NAVRH RE
28
soubor je tvoˇren mnoˇzinou celk˚ u. N´ asleduje uk´azka konfigurace v´ ystupn´ıho celku. Obsahuje symbol koment´ aˇre a dva symboly XML element˚ u. <svg:circle cx="${x}" cy="${y}" r="${r}" class="star"/> <svg:line x1="${x} - ${r} - 1.5" y1="${y}" x2="${x} + ${r} + 1.5" y2="${y}" class="mstar"/> Proces vytv´ aˇ ren´ı v´ ystupu Pro kaˇzd´ y objekt hvˇezdn´e oblohy je vybr´an celek, kter´ y jako prvn´ı splˇ nuje vrtkavou podm´ınku. Objekt je pak postupnˇe pˇred´an kaˇzd´emu symbolu z celku a ten je zpracov´ an.
5.5.3
Symboly
Vytv´aˇren´ı symbol˚ u bude m´ıt na starosti tˇr´ıda, kterou nazveme TokenBuilder, a tˇr´ıdy od n´ı zdˇedˇen´e. TokenBuilder je jednoduch´e vyuˇzit´ı n´avrhov´eho vzoru Builder [21]. Definuje prost´e rozhran´ı, kter´e odvozen´e tˇr´ıdy mus´ı implementovat. Vyˇzadov´ana je jen jedna metoda nazvan´a build, kter´e bude pˇred´ an objekt hvˇezdn´e oblohy, objekt zobrazen´ı a objekt pl´atna. Posledn´ı dva objekty jsou zde vyˇzadov´ any pˇredevˇs´ım kv˚ uli vykreslen´ı ˇcar, kter´e se zobrazuj´ı a d´ale transformuj´ı v z´ avislosti na tom, zda se jedn´a o kˇrivky nebo u ´seˇcky. Odvozenou tˇr´ıdu pro vytv´ aˇren´ı XML element˚ u nazveme ElementBuilder. Kaˇzd´ y objekt bude obsahovat seznam atribut˚ u, pro jejichˇz uloˇzen´ı se v´ ybornˇe hod´ı vrtkav´a promˇenn´a, a seznam potomk˚ u. Potomci budou opˇet tˇr´ıdy TokenBuilder nebo od n´ı odvozen´e. Souˇc´ast´ı XML dokumentu jsou i textov´a pole a koment´aˇre, pro jejich vytv´aˇren´ı n´am poslouˇz´ı tˇr´ıdy TextBuilder a CommentBuilder. Tyto budou jednoduˇsˇs´ı neˇz ElementBuilder - budou vytv´aˇreny z jedin´e vrtkav´e promˇenn´e. Pro vykreslov´ an´ı ˇcar a kˇrivek se budou hodit sloˇzitˇejˇs´ı konstrukce, kter´e pˇrevedou pole bod˚ u do syntaxe, ve kter´e se ˇc´ ary definuj´ı v SVG dokumentu.
5.5.4
Celky
Skupiny definovan´ ych symbol˚ u, kter´e dohromady tvoˇr´ı celkov´e ztv´arnˇen´ı objektu hvˇezdn´e oblohy, budou drˇzeny ve struktur´ ach odvozen´ ych od tˇr´ıdy EntityParser. EntityParser je abstraktn´ı tˇr´ıda, kter´ a pˇredkl´ ad´ a rozhran´ı pro ostatn´ı celky. Opˇet je vyuˇzit n´avrhov´ y vzor Builder [21]. O tom jak´ y celek pro vykreslen´ı objektu hvˇezdn´e oblohy pouˇz´ıt, je rozhodnuto na z´akladˇe pravdivostn´ı hodnoty vrtkav´e podm´ınky. Pˇredpokl´adan´a implementace je takov´a, ˇze jakmile objekt najde sv˚ uj celek, nebude uˇz dalˇs´ımi zpracov´av´an. Kaˇzd´ y celek nav´ıc umoˇzn´ı definici lok´aln´ıch promˇenn´ ych. Metodu, kter´ a rozhodne zda je tento celek pˇr´ısluˇsn´ y vykreslovan´emu objektu, nazveme belongsTo. V pˇr´ıpadˇe kladn´e n´ avratov´e hodnoty pak program pˇrejde ke zpracov´an´ı metody, kter´a vytvoˇr´ı v´ ystup pro dan´ y objekt hvˇezdn´e oblohy - tu nazveme getPainting. Oˇcek´avanou n´avratovou hodnotou bude seznam XML uzl˚ u. Pro u ´spˇeˇsn´e vytvoˇren´ı obsahu budeme potˇrebovat dvˇe r˚ uzn´e zdˇedˇen´e tˇr´ıdy. Prvn´ı z nich, kter´a bude slouˇzit k vykreslen´ı objekt˚ u typu CelestialBody a DeepSkyBody, pojmenujeme ObjectParser. Druh´ a, kter´ a poslouˇz´ı pˇri zpracov´an´ı objekt˚ u typu CelestialLine, oznaˇc´ıme LineParser.
´ ´I SUBSYSTEM ´ 5.5. VYSTUPN
5.5.5
29
V´ ystupn´ı soubory
K funkˇcn´ımu v´ ystupn´ımu subsyt´emu chyb´ı uˇz jen kr˚ uˇcek, t´ım je pr´avˇe tˇr´ıda v´ ystupn´ıho souboru, kterou nazveme OutputFile. Rozhran´ı t´eto abstraktn´ı tˇr´ıdy je opˇet jednoduch´e. Konstruktor bude vyˇzadovat cestu k v´ ystupn´ımu souboru, objekt pouˇzit´eho zobrazen´ı a objekt pl´ atna v´ ystupn´ıho form´ atu. Odvozen´e tˇr´ıdy mus´ı realizovat pouze metodu, kter´ a ˇr´ıd´ı cel´ y proces vytv´ aˇren´ı v´ ystupn´ıho souboru - tu nazveme paint. Metoda paint by mˇela postupnˇe ˇc´ıst data ze vstupn´ıch front a zpracov´avat je. V jak´em poˇrad´ı budou jednotliv´e fronty zpracov´ any se rozhodne dle jejich priority. Pro naˇse potˇreby bude vhodn´e vytvoˇrit konkr´etnˇeji specifikovanou odvozenou tˇr´ıdu pro v´ ystup do textov´eho souboru - TextOutputFile. Jelikoˇz uˇzivatel m˚ uˇze cht´ıt specifikovat nˇejak´e konstantn´ı informace, jak´ ymi m˚ uˇze b´ yt napˇr´ıklad definice kask´adov´ ych styl˚ u v hlaviˇccce dokumentu, pˇrid´ ame moˇznost definice pr´avˇe takov´e hlaviˇcky. Uˇziteˇcnou m˚ uˇze b´ yt i definice patiˇcky, proto budou tyto dvˇe informace pˇrid´any jako parametr konstruktoru tˇr´ıdy TextOutputFile.
5.5.6
Rozˇ siˇ ruj´ıc´ı moduly
N´avrh programu byl prov´ adˇen s ohledem na to, aby byl program jednoduˇse rozˇsiˇriteln´ y o dalˇs´ı moduly. Nen´ı sice zaveden mechanizmus na dynamick´e pˇripojov´an´ı externˇe dodan´ ych modul˚ u, ale n´ avrh je prov´ adˇen s ohledem na snadnou implementaci nov´ ych vlastnost´ı. Souˇc´ast´ı mnou navrhovan´eho ˇreˇsen´ı budou tˇri n´asleduj´ıc´ı rozˇs´ıˇren´ı, z nichˇz jedno se star´ a o konverzi v´ ystupu do jin´ ych grafick´ ych form´at˚ u a dvˇe obohacuj´ı moˇznosti v´ ystupu. 5.5.6.1
Modul konverz´ı
Tento modul bude m´ıt na starosti konverzi v´ ystupu do jin´eho grafick´eho form´atu. Ke konverzi bude pouˇzita knihovna Cairo[30] ve spolupr´aci s knihovnou rSVG [31]. Tato knihovna nab´ız´ı z´ apis do vektorov´ ych form´at˚ u PDF a EPS a do rastrov´eho form´atu PNG [30]. Modul bude do existuj´ıc´ıho sch´ematu zaˇrazen n´asleduj´ıc´ım zp˚ usobem. Pˇri vytv´aˇren´ı objektu v´ ystupn´ıho souboru TextOutputFile, bude tento objekt obalen tˇr´ıdou z modulu konverz´ı. Tato tˇr´ıda ovˇsem bude potomkem tˇr´ıdy OutputFile - bude tedy poskytovat stejn´e rozhran´ı, potˇrebn´e ke spuˇstˇen´ı tvorby v´ ystupu. V tˇele metody paint, kter´a ˇr´ıd´ı v´ ystupn´ı proces, bude spuˇstˇena metoda paint obalen´eho objektu tˇr´ıdy TextOutputFile. Takto se v´ ystup vytvoˇr´ı do doˇcasn´eho SVG souboru, kter´ y bude n´aslednˇe metodou, kterou nazveme convert, pˇreveden do vybran´eho form´ atu. 5.5.6.2
Modul popisk˚ u
Ned´ılnou souˇc´ ast´ı kaˇzd´e mapy jsou popisky. Aˇckoliv by bylo moˇzn´e textov´e popisky ’ jednoduˇse umist ovat pomoc´ı symbolu XML elementu, nemohli bychom zabr´anit n´ahodn´emu pˇrekryt´ı popisk˚ u mezi sebou nebo s jin´ ymi objekty. Probl´em vyˇreˇs´ı zde navrˇzen´ y modul pro ’ inteligentn´ı umist ov´ an´ı popisk˚ u. Pˇred n´ avrhem pouˇzit´ ych tˇr´ıd je tˇreba ˇr´ıci jak´ ym zp˚ usobem bude nutn´e popisky vykresloˇ sen´ı nen´ı tak jednoduch´e a bude vyˇzadovat nˇekolik podp˚ vat. Reˇ urn´ ych tˇr´ıd a konstrukc´ı.
Obr´azek 5.2: Srovn´ an´ı mapov´ ych popisk˚ u vykreslen´ ych s rozˇs´ıˇren´ım a bez nˇej. Pˇredevˇs´ım je nutn´e si uvˇedomit, ˇze popisky je moˇzn´e vykreslovat, aˇz po vykreslen´ı vˇsech symbol˚ u, aby nebyly pˇrekryty v´ yraznˇejˇs´ımi objekty. Abychom nemuseli rozs´ahlou kolekci objekt˚ u proch´ azet v´ıcekr´ at, budeme popisky konstruovat soubˇeˇznˇe s vykreslov´an´ım symbol˚ u a budeme je odkl´ adat do vstupn´ı kolekce s n´ızkou prioritou, kter´a bude zpracov´ana na z´avˇer dokumentu. Z´ aroveˇ n se budou do zvl´ aˇstn´ı datov´e struktury ukl´adat pozice a velikosti vˇsech vykreslen´ ych objekt˚ u. Bˇehem zpracov´ an´ı se pak kaˇzd´ y popisek bude umist’ovat na m´ısto, kter´e je voln´e. Tˇ r´ıda symbol˚ u popisk˚ u bude vytvoˇrena ke konstrukci popisk˚ u, nazveme ji LabelBuilder. Jeho souˇc´ast´ı bude vzor v podobˇe vrtkav´e promˇenn´e, ze kter´eho bude vytvoˇren text popisku. Tento symbol, na rozd´ıl od pˇredchoz´ıch, nebude slouˇzit k vykreslen´ı popisku, ale jen k vytvoˇren´ı objektu, kter´ y bude pˇred´ an do vstupn´ı kolekce n´ızk´e priority a vykreslen pozdˇeji. N´asleduje uk´azka symbolu popisku zaˇclenˇen´eho do konfigurace celku. Symbol je definov´an v elementu label. <svg:circle cx="${x}" cy="${y}" r="${r}" class="star"/> Objekty tˇ r´ıdy popisk˚ u maj´ı specifikovan´ y text, vypoˇc´ıtan´ y rozmˇer a tvar a odkaz na objekt, kter´ y maj´ı popisovat. D´ ale budou zahrnovat informace o form´atov´an´ı. Informace o form´atov´an´ı budou v objektu podp˚ urn´e tˇr´ıdy LabelFormat. Tyto objekty budou pˇred´any do vstupn´ı kolekce n´ızk´e priority, kter´ a bude zpracov´ana na z´avˇer.
´ ´I SUBSYSTEM ´ 5.5. VYSTUPN
31
Matice pl´ atna je datov´ a struktura, kter´a bude vytvoˇrena k udrˇzov´an´ı informac´ı o pozic´ıch a rozmˇerech vˇsech vykreslen´ ych objekt˚ u. Tˇr´ıdu nazveme CanvasMatrix. Z n´azvu je patrn´e, ˇze bude vnitˇrnˇe tvoˇrena matic´ı - dvourozmˇern´ ym polem. Rozmˇery matice budou z´avisl´e na koeficientu zvˇetˇsen´ı pouˇzit´e projekce, protoˇze se zvˇetˇsuj´ıc´ım se pˇribl´ıˇzen´ım zpravidla kles´ a hustota objekt˚ u hvˇezdn´e oblohy. Vzhledem k segmentaci pomysln´eho v´ ystupn´ıho pl´atna, bude doch´ azet k tomu, ˇze nˇekter´e objekty budou na hranici v´ıce segment˚ u. Takov´e objekty pak budou muset b´ yt uloˇzeny v kaˇzd´em z nich. N´asledkem sice bude v´ıcen´asobn´e uloˇzen´ı nˇekter´ ych objekt˚ u, nicm´enˇe se bude jednat jen o zlomek. Volba segmentovan´eho ˇreˇsen´ı byla provedena s ohledem na to, ˇze v pr˚ ubˇehu umist’ov´ an´ı popisk˚ u se bude poˇc´ıtat pˇrekryt´ı s ostatn´ımi objekty na pl´atnˇe a segmentac´ı eliminujeme ty objekty, kter´e se s n´ım pˇrekr´ yvat urˇcitˇe nebudou. V matici pl´ atna budou objekty hvˇezdn´e oblohy a jiˇz existuj´ıc´ı popisky uloˇzeny v podobˇe objekt˚ u tˇr´ıdy, kterou nazveme Shape. Tˇr´ıda bude implementovat metody pro kalkulaci pˇrekryvu.
Tˇ r´ıda symbol˚ u matice pl´ atna bude v pˇr´ıpadˇe pouˇz´ıt´ı tohoto rozˇs´ıˇren´ı pˇrid´ana do kaˇzd´eho celku. Pr´ avˇe tento symbol bude m´ıt za u ´kol pˇrid´avat vykreslovan´e objekty do matice pl´atna. Tˇr´ıda bude nazv´ ana CanvasBuilder.
Celek pro umist’ov´ an´ı popisk˚ u zakonˇc´ı v´ yˇcet navrhovan´ ych struktur. Bude automaticky pˇrid´an do seznamu celk˚ u kaˇzd´eho v´ ystupn´ıho souboru. Na rozd´ıl od dˇr´ıve definovan´ ych celk˚ u to nebude celek v prav´em slova smyslu. Nebude obsahovat ˇz´adn´e symboly, ale vykreslen´ı bude ´ provedeno pˇr´ımo v metodˇe getPainting. Ukolem t´eto metody bude v´ ybˇer nejvhodnˇejˇs´ı pozice pro popisek a jeho n´ asledn´e um´ıstˇen´ı do matice pl´atna.
5.5.7
Modul zobrazovan´ ych elips
V map´ ach vytvoˇren´ ych zobrazen´ımi, kter´a simuluj´ı zakˇriven´ı kulov´eho prostoru hvˇezdn´e oblohy, doch´ az´ı u vˇetˇs´ıch objekt˚ u ke znaˇcn´emu zkreslen´ı. Aby bylo moˇzn´e dos´ahnout l´ıbivˇejˇs´ıho a v jist´em smyslu pˇresnˇejˇs´ıho zobrazen´ı elipsovit´ ych objekt˚ u, navrhneme rozˇs´ıˇren´ı dostupn´ ych symbol˚ u o dalˇs´ı, nazvan´e EllipseBuilder. Spr´ avn´eho zobrazen´ı elipsovit´eho tvaru za pouˇzit´ı jiˇz navrˇzen´ ych tˇr´ıd a metod lze dos´anout pˇrevodem elipsy na posloupnost u ´seˇcek, kter´e budou n´aslednˇe postupnˇe zobrazeny a vykresleny pomoc´ı symbolu kˇrivky. Popis algoritmu je v kapitole 6. Tento algoritmus m˚ uˇze v z´ avislosti na pouˇzit´em zobrazen´ı v´ yraznˇe ztr´acet na pˇresnosti, pˇredevˇs´ım v okol´ı p´ ol˚ u, kde by se dal klasifikovat jako nepouˇziteln´ y. Vzd´alenost mezi dvojic´ı r˚ uzn´ ych bod˚ u leˇz´ıc´ıch na jedn´e rovnobˇeˇzce, se bude se zvyˇsuj´ıc´ı se vzd´alenost´ı od rovn´ıku sniˇzovat. To bude m´ıt za n´ asledek deformaci tvaru elipsy. Nen´ı ovˇsem snahou tohoto rozˇs´ıˇren´ı pˇresnˇe zn´azornit elipsovit´e objekty hvˇezdn´e oblohy, ale jen pˇribliˇzn´e, jelikoˇz je pˇribliˇzn´e i jejich vymezen´ı elipsou. Na ˇspatnˇe zobrazen´e objekty bude m´ıt uˇzivatel moˇznost odpovˇedˇet omezen´ım pouˇzit´ı tohoto symbolu podm´ınkou celku.
´ ˇ SEN ˇ ´I KAPITOLA 5. NAVRH RE
32
(a) Obyˇcejn´ a konfigurace.
(b) S modulem zobrazovan´ ych elips.
Obr´azek 5.3: Srovn´ an´ı elips a kruˇznic vykreslen´ ych s rozˇs´ıˇren´ım a bez nˇej. Za pozornost stoj´ı lev´ y horn´ı roh, kde je asterismus Velk´eho vozu.
5.6
Jin´ e n´ avrhy v´ ystupn´ıho subsyst´ emu
Pˇri n´avrhu v´ ystupn´ıho subsyst´emu byla nejvyˇsˇs´ı prioritou uˇzivatelsk´a pˇrisp˚ usobivost v´ ystupu. Vedle syst´emu symbol˚ u a celk˚ u, kter´ y jsem vybral, existovaly jeˇstˇe dvˇe alternativy. Prvn´ı alternativa by se dala pˇripodobnit zjednoduˇsen´emu zde popisovan´emu syst´emu, kdy by se celky nahradily symboly - nebo-li objekty by bylo moˇzn´e vykreslit jen jedn´ım symbolem. Nicm´enˇe by zde chybˇel prostor pro rozˇs´ıˇruj´ıc´ı symboly a ty by musely b´ yt v konfiguraˇcn´ım souboru um´ıstˇeny jinde. Zjednoduˇsen´ı generov´an´ı v´ ystupu by mˇelo za n´asledek znepˇrehlednˇen´ı architektury syst´emu. Jeˇstˇe jednoduˇsˇs´ım syst´emem, kter´ y jsem zvaˇzoval, byl syst´em zaloˇzen´ y na pouˇzit´ı rozˇs´ıˇren´ı XML dokumentu pro odkazy na objekty nazvan´e xlink. Uˇzivatel by v konfiguraˇcn´ım souboru nadefinoval s´erii symbol˚ u, kter´ ym by n´ aslednˇe pˇriˇradil objekty hvˇezdn´e oblohy dle specifikovan´ ych podm´ınek. Aˇckoliv by i tento syst´em ˇsel snadno pouˇz´ıt v navrhovan´em ˇreˇsen´ı, rozhodl jsem se od tohoto ˇreˇsen´ı ustoupit. D˚ uvodem byla horˇs´ı implementace v existuj´ıc´ıch programech a proto nebyl v´ ysledek v r˚ uzn´ ych programech vykreslen stejnˇe. Nejednoduˇsˇs´ı syst´em neuvaˇzuje uˇzivatelskou pˇrizp˚ usobivost na u ´rovni symbol˚ u, ale jen na u ´rovni kask´adov´ ych styl˚ u. V takov´em syst´emu by byl proces generov´an´ı v´ ystupu neovlivniteln´ y a uˇzivatel by mohl zmˇenit jen vzhled - barevnost ˇci v´ yraznost, generovan´ ych symbol˚ u. V´ yhodou takov´eho ˇreˇsen´ı by jistˇe byla rychlost. Ovˇsem i takov´ y syst´em by se dal zaˇradit do navrˇzen´eho syst´emu v podobˇe jednoduch´ ych rozˇs´ıˇren´ı. Jin´ y pohled je z hlediska v´ıcen´ asobn´eho zpracov´an´ı. Samozˇrejmˇe jsem uvaˇzoval i line´arnˇe pracuj´ıc´ı syst´em, kdy se naˇcten´e hodnoty pˇr´ımo vykresluj´ı na v´ ystup. Proti vˇsak hovoˇrily dva argumenty. Za prv´e je to nemoˇznost prioritizace jednotliv´ ych objekt˚ u. Tento probl´em je tˇreba ˇreˇsit na aplikaˇcn´ı u ´rovni, protoˇze form´at SVG nem´a alternativu k pozici na ose Z. Objekt, kter´ y je v dokumentu SVG uveden pozdˇeji vˇzdy pˇrekr´ yv´a ty co byly uvedeny dˇr´ıve.
5.7. KONFIGURACE
33
Nemoˇznost generov´ an´ı v´ıcen´ asobn´eho v´ ystupu pro stejn´a data by byla dalˇs´ı nev´ yhodou line´arnˇe pracuj´ıc´ıho syst´emu. Katalogy vstupn´ıch dat jsou ˇcasto velmi rozs´ahle, napˇr´ıklad katalog SAO obsahuje 258997 z´ aznam˚ u. Naˇcten´ı tohoto katalogu pouze jednou pro generov´ an´ı des´ıtek menˇs´ıch map, bude jistˇe znateln´e z hlediska v´ ykonu.
5.7
Konfigurace
Konfigurace programu bude naˇc´ıt´ana z XML souboru. Protoˇze se jedn´a o sloˇzitˇejˇs´ı proces, navrhl jsem oddˇelen´e metody, kter´e naˇcten´ı konfigurace zajist´ı pomoc´ı tˇr´ıdn´ıch metod. Spoleˇcn´e elementy budou naˇc´ıt´ any ve tˇr´ıdˇe XMLReader, ze kter´e budou dˇedit XMLProjectionReader – pro naˇc´ıt´ an´ı konfigurace projekce, XMLInputReader – pro naˇc´ıt´an´ı konfigurace vstupu a XMLOutputReader – pro naˇc´ıt´an´ı konfigurace v´ ystupu.
5.7.1
Obsah konfiguraˇ cn´ıho souboru
Konfiguraˇcn´ı soubor je ˇclenˇen na tˇri hlavn´ı ˇc´asti podle toho jak´ y subsyst´em konfiguruje.
Konfigurace zobrazen´ı • Volba typu zobrazen´ı. • Nastaven´ı rektascenze a deklinace stˇredu zobrazen´ı. • Nastaven´ı koeficientu zvˇetˇsen´ı na ose x a na ose y. • Nastaven´ı souˇradnicov´e s´ıtˇe. Pro poledn´ıky a rovnobˇeˇzky je moˇzn´e definovat: – Poˇcet ˇcar. – Poˇc´ ateˇcn´ı a koncov´ y bod deklinace, mezi kter´ ymi se maj´ı ˇc´ary vykreslovat.
Konfigurace vstupu • Libovoln´ y poˇcet vstupn´ıch soubor˚ u, rozliˇsen´ ych dle form´atu a obsahu. • Pro kaˇzd´ y objekt ze vstupn´ıho souboru je moˇzn´e definovat r˚ uzn´e atributy. • Definice promˇenn´e, vypoˇc´ıtan´e z ostatn´ıch promˇenn´ ych nebo atribut˚ u. • Definice podm´ınky, kterou kdyˇz objekt spln´ı, nebude naˇcten.
´ ˇ SEN ˇ ´I KAPITOLA 5. NAVRH RE
34
Konfigurace v´ ystupu • Volba v´ ystupn´ıho grafick´eho form´ atu. • Cesta k v´ ystupn´ımu souboru. • Definice hlaviˇcky a patiˇcky SVG dokumentu. • Definice glob´ aln´ıch promˇenn´ ych. • Definice libovoln´eho mnoˇzstv´ı v´ ystupn´ıch objekt˚ u. Pro kaˇzd´ y je moˇzn´e definovat: – Omezuj´ıc´ı podm´ınku. – Lok´ aln´ı promˇenn´e. – Zp˚ usob vykreslen´ı pomoc´ı XML, nebo rozˇsiˇruj´ıc´ıch modul˚ u.
Kapitola 6
Implementace V t´eto kapitole se budu vˇenovat implementaci programu dle n´avrhu. Jak jiˇz bylo ˇreˇceno v kapitole o v´ ybˇeru technologi´ı, implementace bude prob´ıhat v programovac´ım jazyce Python. Nebude pops´ ano vˇse, ale pokus´ım se vybrat jen zaj´ımav´e fragmenty. Jazyk Python obˇcas nab´ız´ı, pro program´atory zvykl´e na styl Javy nebo C++, neotˇrel´e zp˚ usoby ˇreˇsen´ı probl´em˚ u, na takov´e situace se pokus´ım upozornit a vysvˇetlit je. Aˇckoliv nen´ı u ´ˇcelem t´eto pr´ ace dokumentovat jazyk Python, sezn´am´ım ˇcten´aˇre i s neobvykl´ ymi specifiky jazyka, na kter´e jsem narazil. Dobr´ ym pr˚ uvodcem pˇri programov´an´ı v jazyce Python mˇe byl ˇcl´anek nazvan´ y Code Like a Pythonista [7], kter´ y vˇrele doporuˇcuji k pˇreˇcten´ı.
6.1
Konvence
Pro programov´ an´ı v jazyce Python jsou stejnˇe jako v jin´ ych jazyc´ıch zaveden´e konvence form´atov´ an´ı k´ odu. Tyto konvence jsou vyps´any v tzv. Python Enhancement Proposals, dokumentech, kter´e jsou veˇrejnˇe pˇr´ıstupn´e program´atorsk´e komunitˇe. Syst´em tˇechto dokument˚ u je hlavn´ım mechanismem pˇrij´ım´ an´ı nov´ ych funkc´ı, proces˚ u nebo konvenc´ı do programovac´ıho jazyka. Kaˇzd´ y PEP je oznaˇcen´ y ˇc´ıslem, a proch´az´ı ˇzivotn´ım cyklem podobn´ ym bugu v trackovac´ıch syst´emech. Od n´ avrhu aˇz po pˇrijet´ı, nebo zam´ıtnut´ı. Definice PEPs je pops´ana v PEP 1 [2]. Pˇri programov´ an´ı jsem se ˇr´ıdil konvencemi form´atov´an´ı k´odu, popsan´ ymi v PEP 8 [9] a konvencemi pro psan´ı docstring˚ u1 , popsan´ ymi v PEP 257 [6]. V tomto programu jsem si vystaˇcil s jednoduch´ ymi docstringy, pro pokroˇcilejˇs´ı form´atov´an´ı a pro generov´an´ı dokumentace doporuˇcuji reStructuredText, jeho pouˇzit´ı v r´amci docstring˚ u je pops´ano v PEP 287 [8]. Pro logov´ an´ı a informov´ an´ı uˇzivatele je pouˇzit modul logging [34], kter´ y aˇckolv nab´ız´ı ˇsirok´e mnoˇzstv´ı konfigurace, je zde pouˇz´ıv´an v z´akladn´ım nastaven´ı. 1
Koment´ aˇre ve zdrojov´em k´ odu, kter´e dokumentuj´ı jednotliv´e tˇr´ıdy a metody.
35
36
KAPITOLA 6. IMPLEMENTACE
6.2
Postup
Nejprve budou implementov´ any spoleˇcn´e ˇc´asti syst´emu. Pokraˇcovat se bude vstupn´ım subsyst´emem a na z´ avˇer implementuji projekˇcn´ı a v´ ystupn´ı subsyst´emy. Tento postup umoˇzn´ı, ˇze v kaˇzd´e iteraci z´ısk´ ame funkˇcn´ı celek, kter´ y je moˇzn´e testovat.
6.3 6.3.1
Z´ akladn´ı datov´ e struktury Tˇ r´ıda Angle
Internˇe je hodnota velikosti u ´hlu uloˇzena v radi´anech, bylo tedy nutn´e implementovat ’ mechanismus, kter´ y bude zajiˇst ovat konverzi z r˚ uzn´ ych jednotek. Protoˇze je v´ yhodn´e zachovat vˇsechny moˇznosti pr´ ace s touto tˇr´ıdou jako s desetinn´ ym ˇc´ıslem, je vytvoˇrena jako potomek tˇr´ıdy float. Pˇrevody mezi jednotkami jsou vyˇreˇseny ve statick´e metodˇe toRad, kter´a pro rozpozn´an´ı jednotek pouˇz´ıv´ a podp˚ urnou tˇr´ıdu Units. N´asleduje uk´azka zdrojov´eho k´odu tˇr´ıdy Angle. class Angle(float): def __new__(cls, value=0.0, unit=Units.RAD): value = cls.toRad(value, unit) return float.__new__(cls, value) def __nonzero__(self): return True @classmethod def toRad(cls, value, unit=Units.RAD): if unit == Units.RAD: return value elif unit == Units.DEG: return value * pi / 180. elif unit == Units.AMIN: return value * pi / 10800. elif unit == Units.ASEC: return value * pi / 648000. else: raise AttributeError Float je tzv. immutable class2 , a proto je nutn´e data pˇredat instanci v dobˇe vytv´aˇren´ı (statick´a metoda new ), a ne aˇz po vytvoˇren´ı v dobˇe inicializace (metoda init ) [48]. Specifikem je tak´e to, ˇze pokud m´ a float nulovou hodnotu, je jeho logick´a hodnota false. Jelikoˇz je logick´a hodnota ˇcasto pouˇz´ıv´ ana pˇri testov´an´ı zda objekt existuje, bylo nutn´e chov´an´ı metody upravit. Metoda nonzero je vol´ana, pokud je poˇzadov´ana logick´a hodnota objektu - kdyˇz je argumentem metody bool nebo souˇc´ast´ı logick´eho v´ yrazu. 2
Objekty takov´e tˇr´ıdy nelze zmˇenit - zmˇena m´ a totiˇz za n´ asledek vytvoˇren´ı jin´eho objektu.
´ ´I DATOVE ´ STRUKTURY 6.3. ZAKLADN
6.3.2
37
Tˇ r´ıda CelestialAbstract
Za zm´ınku stoj´ı implementeace CelestialAbstract tˇr´ıdy, tedy tˇr´ıdy jej´ıˇz objekty drˇz´ı informace o vˇsech vstupn´ıch objektech. Pˇripomenu, ˇze bylo nutn´e tˇr´ıdu implementovat tak, aby bylo moˇzn´e pˇridat libovoln´ y poˇcet atribut˚ u identifikovan´ ych textov´ ym ˇretˇezcem. V´ yvoj proˇsel dvˇema f´ azemi. Nejprve jsem toto chov´ an´ı implementoval tak, ˇze jsem do slovn´ıku objektu pˇridal objekt typu dict3 . Pˇrid´ av´ an´ı a pˇr´ıstup k atribut˚ um bylo vyˇreˇseno dalˇs´ımi metodami. Uk´ azalo se, ˇze tato implementace je zbyteˇcnˇe n´aroˇcn´a na pamˇet’, a dalˇs´ım pr˚ uzkumem jsem zjistil, ˇze datov´ y slovn´ık kaˇzd´eho objektu je v Pythonu implementovan´ y jako slovn´ık [32]. Proto jsem pˇristoupil k elegantnˇejˇs´ımu a v´ıce ”pythonistick´emu” ˇreˇsen´ı. D˚ uvod, proˇc CelestialAbstract nedˇed´ı pˇr´ımo z tˇr´ıdy dict, je pr´avˇe pˇr´ıtomnost pouze jednoho datov´eho slovn´ıku. N´ asleduj´ıc´ı uk´ azka zdrojov´eho k´odu obsahuje kompletn´ı implementaci tˇr´ıdy CelestialAbstract. class CelestialAbstract(object): def __getitem__(self, key): return self.__dict__[key] def __setitem__(self, key, value): self.__dict__[key] = value
6.3.3
Uˇ zivatelsk´ e promˇ enn´ e
Tˇeˇziˇstˇe konfigurovatelnosti vstupu a pˇredevˇs´ım v´ ystupu je v uˇzivatelsk´ ych promˇenn´ ych. Tato datov´ a struktura je implementov´ana jako kombinace Template engine a eval funkce. Postup zpracov´ an´ı je n´ asleduj´ıc´ı. Pˇri inicializaci je ze vzoru zadan´eho v konfiguraci pomoc´ı tˇr´ıdy ConditionTemplate, vytvoˇren textov´ y ˇretˇezec vhodn´ y ke zpracov´an´ı funkc´ı eval. Tˇr´ıda ConditionTemplate je upraven´a tˇr´ıda Template, pˇrevzat´a z modulu string [35]. Zpracov´ an´ı pak prob´ıh´ a ve funkci nazvan´e doEval, kter´a nejprve zkus´ı textov´ y ˇretˇezec zpracovat funkc´ı eval. Pokud zpracov´an´ı selˇze, je zˇrejm´e, ˇze v´ ysledkem bude textov´ y ˇretˇezec a provede se substituce p˚ uvodn´ıho textov´eho ˇretˇezce z konfigurace pomoc´ı neupraven´e tˇr´ıdy Template. Aby nedoch´ azelo ke zbyteˇcn´ ym substituc´ım, prov´adˇej´ı se pouze tehdy, kdyˇz byla u ´spˇeˇsn´ a substituce pˇri inicializaci, nebo-li kdyˇz je co nahrazovat. N´asleduje uk´azka zdrojov´eho k´ odu tˇr´ıdy Volatile. Z t´eto tˇr´ıdy dˇed´ı tˇr´ıdy uˇzivatelsk´ ych promˇenn´ ych a uˇzivatelsk´ ych podm´ınek. Vnoˇren´ a tˇr´ıda ConditionTemplate je pro zjednoduˇsen´ı vynech´ana. class Volatile(object): class ConditionTemplate(object): ... def _doEval(self, tuple, object): 3
Implementace slovn´ıku pˇr´ıtomn´ a v z´ akladn´ı knihovnˇe jazyka Python.
38
KAPITOLA 6. IMPLEMENTACE
try: return eval(tuple[1][0]) except: if tuple[1][1] > 0: return Template(tuple[0]).substitute(object) else: return tuple[1][0] def _processString(self, string): return self.ConditionTemplate(string).substitute() Metoda doEval zpracov´ av´ a komplikovanˇejˇs´ı atribut nazvan´ y tuple. Jeho obsah bude nejl´epe pochopiteln´ y n´ asleduj´ıc´ım sch´ematem: (p˚ uvodn´ı textov y´ rˇetˇ ezec, (substituovan´ y textov y´ rˇetˇ ezec, poˇ cet substituc´ı))
6.4
Vstupn´ı kolekce
O t´eto struktuˇre jsem se zat´ım zmiˇ noval jen mlhavˇe. Nyn´ı se pod´ıv´ame jak tato konstrukce vypad´a. Z´aklad tvoˇr´ı fronta, nebo-li tˇr´ıda nazvan´a Queue. Nepouˇzil jsem implementaci fronty ze z´akladn´ı knihovny jazyka Python a to z toho d˚ uvodu, ˇze fronta nanab´ız´ı pˇr´ıstup pˇres iter´ator nebo index. Objekt, kter´ y by byl vyjmut, by se tak musel opˇet vr´atit do fronty, a bylo by nutn´e hl´ıdat, zda nedoch´ az´ı ke zdvojen´emu zpracov´an´ı. Modul vstupn´ıch kolekc´ı se skl´ ad´ a ze dvou ˇc´ast´ı. M´enˇe zaj´ımav´a je ˇc´ast samotn´e fronty, ta je implementov´ ana jako tˇr´ıda dˇed´ıc´ı z typu list4 , kter´a nav´ıc udrˇzuje informaci o tom, kolik procedur bude do kolekce zapisovat. class Queues(object): __shared_state = {} def __init__(self): self.__dict__ = self.__shared_state try: bool(self.queues) except AttributeError: self.queues = {} Zaj´ımavˇejˇs´ı z hlediska implementace, je struktura, kter´a se star´a o vytv´aˇren´ı vstupn´ıch kolekc´ı. Je implementov´ ana pouˇzit´ım tzv. Borg n´avrhov´eho vzoru [11], kter´ y je n´ahradou Singleton n´avrhov´eho vzoru [41]. Na rozd´ıl od Singletonu nen´ı d˚ uleˇzit´a stejn´a identita objekt˚ u tˇr´ıdy, ale jejich shodn´ y stav. [11] Toto chov´an´ı je implementov´ano pomoc´ı tˇr´ıdn´ı promˇenn´e shared state, kter´ a je spoleˇcn´ ym slovn´ıkem pro vˇsechny novˇe vytv´aˇren´e objekty. 4
Implementace seznamu pˇr´ıtomn´ a v z´ akladn´ı knihovnˇe jazyka Python
´ ´I DAT 6.5. ZPRACOVAN
39
def getOne(self, priority): try: queue = self.queues[priority] except KeyError: queue = Queue() self.queues[priority] = queue return queue def __getitem__(self, key): return self.getOne(key) Z´ısk´ av´ an´ı fronty dle zadan´e priority je ˇreˇseno pˇr´ıstupem pˇres hranat´e z´avorky, nebo metodou getOne. Metoda se pokus´ı z´ıskat frontu z existuj´ıc´ıho slovn´ıku front, pokud tam nen´ı, je vytvoˇrena nov´ a. def getAll(self): return self.queues.items() def getAllSorted(self): return sorted(self.queues.items(), key=lambda x: x[0]) Pr´ ace s prioritou vyˇzaduje moˇznost z´ıskat nejen urˇcitou frontu dle priority, ale i vˇsechny fronty seˇrazen´e. Protoˇze build-in typ dict nepodporuje ˇrazen´ı, je stejn´eho v´ ysledku dosaˇzeno jednoduchou metodou getAllSorted. Tato funkce je implementov´ana pomoc´ı build-in funkce sorted. Prvn´ım parametrem je seznam tvoˇren´ y dvojic´ı kl´ıˇc - hodnota, nebo-li priorita - fronta. Druh´ y parametr je v tomto pˇr´ıpadˇe pojmenovan´ y a ud´av´a jak´ ym zp˚ usobem z´ıskat z dat kl´ıˇc, dle kter´eho maj´ı b´ yt seˇrazena.
6.5 6.5.1
Zpracov´ an´ı dat Generov´ an´ı kˇ rivek
N´avrh poˇc´ıt´ a s vytv´ aˇren´ım kˇrivek jako mnoˇziny na sebe navazuj´ıc´ıch u ´seˇcek. Abych doc´ılil realistick´eho a pˇekn´eho vykreslen´ı implementoval, jsem algoritmus pro ”napasov´ an´ı” kubick´e kˇrivky na s´erii bod˚ u. Kubick´a kˇrivka je definov´ana ˇctyˇrmi body. A0 a A3 jsou body koncov´e a A1 a A2 jsou body ˇr´ıd´ıc´ı. Probl´em tedy je, jak pˇrev´est body B1 a B2, kter´e leˇz´ı na kˇrivce, na body ˇr´ıd´ıc´ı. Odpovˇed´ı na tento probl´em je algorimus Dona Lancastera popsan´ y v [10]. Opakovan´ ym pouˇzit´ım tohoto algoritmu m˚ uˇzeme sloˇzit sloˇzitou kˇrivku z v´ıce takto vypoˇc´ıtan´ ych segment˚ u. Algoritmus byl pˇreps´an do jazyka Python z jazyka PostScript. V´ıcen´ asobnˇe pouˇzit´e jednoduch´e matematick´e v´ ypoˇcty byly pro zjednoduˇsen´ı k´odu definov´ any jako anonymn´ı funkce. Vygenerovan´e kˇrivky jsou sloˇzen´e z v´ıce segment˚ u a jsou proto pomˇernˇe sloˇzitˇe definovan´e. Zaj´ımav´ ym rozˇs´ıˇren´ım, kter´e by zkvalitnilo generovan´ y XML dokument, by byl algoritmus implementuj´ıc´ı zjednoduˇsen´ı kˇrivky na nejnutnˇejˇs´ı poˇcet bod˚ u. Tento algoritmus je napˇr´ıklad implementov´ an v editoru Inkscape [4]. V tomto programu tato funkce prozat´ım nen´ı.
40
6.5.2
KAPITOLA 6. IMPLEMENTACE
Naˇ cten´ı konfigurace symbolu a jeho zpracov´ an´ı
Jiˇz v n´avrhu bylo zm´ınˇeno, ˇze tˇeˇziˇstˇem v´ ystupn´ıho subsyst´emu je tˇr´ıda symbolu. V t´eto ˇc´asti se pod´ıv´ ame jak´ ym zp˚ usobem je ˇreˇsena implementace. Zamˇeˇr´ıme se na implementaci symbolu XML elementu. Naˇcten´ı prob´ıh´ a jednoduchou metodou, kter´a vytv´aˇr´ı objekt typu ElementBuilder. Ten je, jak v´ıme z n´ avrhu, potomkem abstraktn´ı tˇr´ıdy TokenBuilder. Kaˇzd´ y atribut se ukl´ad´a do seznamu atribut˚ u jako vrtkav´ a promˇenn´a Variable. Pokud m´a element potomky, vol´a se obecnˇejˇs´ı metoda parsePaintNode, kter´a dovoluje pˇr´ıtomnost jin´ ych symbol˚ u. N´asleduj´ıc´ı fragment konfiguraˇcn´ıho souboru obsahuje jeden symbol, tvoˇren´ y dvˇema dalˇs´ımi symboly. <svg:g id="SAO${sao}"> <svg:circle cx="${x}" cy="${y}" r="${r}" class="star"/> <svg:line x1="${x} - ${r} - 1.5" y1="${y}" x2="${x} + ${r} + 1.5" y2="${y}" class="mstar"/> Vytvoˇren´ y symbol je souˇc´ ast´ı celku, kter´ y v pr˚ ubˇehu zpracov´an´ı kontroluje pˇr´ısluˇsnost k jednotliv´ ym objekt˚ um. V pˇr´ıpadˇe, ˇze je nalezen objekt, kter´ y splˇ nuje podm´ınku celku, doch´az´ı ke zpracov´ an´ı symbol˚ u. Na zpracov´an´ı lze pohl´ednout jako na proces naˇc´ıt´an´ı obr´acen´ y naruby. Proto je zde znaˇcn´ a podobnost obou metod. Nejprve je zkonstruov´an nov´ y element. Tomu jsou n´aslednˇe pˇriˇrazeny atributy s hodnotami odpov´ıdaj´ıc´ımi zpracov´avan´emu objektu a v pˇr´ıpadˇe, ˇze m´ a element potomky, dojde k jejich rekurzivn´ımu zpracov´an´ı. Na z´avˇer uv´ad´ım fragment v´ ystupn´ıho souboru, kter´ y je zpracovan´ ym symbolem uveden´ ym dˇr´ıve. <svg:g id="SAO258280"> <svg:circle class="star" cx="912.559070971" cy="1588.27087945" r="0.9"/> <svg:line class="mstar" x1="910.159070971" x2="914.959070971" y1="1588.27087945" y2="1588.27087945"/>
Kapitola 7
Testov´ an´ı Jazyk Python nab´ız´ı dnes jiˇz standartnˇe pouˇz´ıvan´e prostˇred´ı pro testov´an´ı pomoc´ı tzv. jednotkov´ ych test˚ u1 . Je dostupn´e ve standartn´ı knihovnˇe jazyka Python v modulu nazvan´em unittest [36]. Pro testov´ an´ı programu, kter´ y zde popisuji, bylo pouˇzito pr´avˇe toto rozhran´ı.
7.1
Testov´ an´ı vstupn´ıho subsyst´ emu
Pˇri testov´ an´ı vstupn´ıho subsyst´emu, byla nejvyˇsˇs´ı prioritou spr´avnost naˇcten´ ych dat. Proto jsem vytvoˇril jednoduch´e testy, kter´e braly pˇredem zn´am´ y vstup a naˇcten´e hodnoty porovn´ avaly s hodnotami ovˇeˇren´ ymi. Vstupem do tohoto testu byl fragment z jednoho katalogu od kaˇzd´eho form´ atu. Druh´ ym d˚ uleˇzit´ ym prvkem k otestov´an´ı bylo spr´avn´e vyhodnocen´ı vrtkav´ ych promˇenn´ ych a podm´ınek. Testy prob´ıhaly podobnˇe jako v pˇredchoz´ım pˇr´ıpadˇe. Naˇc´ıtala se zn´am´a data a naˇcten´e hodnoty byly srovn´ any s potvrzen´ ymi.
7.2
Testov´ an´ı mapov´ ych zobrazen´ı
Nejlepˇs´ım zp˚ usobem testov´ an´ı spr´avnosti algoritm˚ u mapov´ ych zobrazen´ı byla vizu´ aln´ı kontrola v´ ystupu. Ovˇsem v nˇekter´ ych pˇr´ıpadech se rozd´ıly sm´ yvaj´ı a proto jsem pouˇzil rovnice pro zpˇetn´ y v´ ypoˇcet rektascenze a deklinace ze souˇradnic na mapˇe. Tyto rovnice jsou dostupn´e pro kaˇzd´e zobrazen´ı a byly pˇrevzaty z publikace [14]. Testov´an´ı tedy prob´ıhalo tak, ˇze se vloˇzen´ a souˇradnice zobrazila pomoc´ı vybran´eho zobrazen´ı a n´aslednˇe se transformovala zpˇet pomoc´ı rovnice pro zpˇetn´ y v´ ypoˇcet. Pokud se vstupn´ı souˇradnice a souˇradnice z´ıskan´ a z rovnice pro zpˇetn´ y v´ ypoˇcet rovnaly, bylo zˇrejm´e, ˇze algoritmus funguje spr´avnˇe. Tento zp˚ usob testov´ an´ı nevyˇzaduje pˇredpˇripraven´a data, vstupem tedy mohou b´ yt souˇradnice n´ahodnˇe vybran´e z definovan´eho intervalu. Pro vˇetˇs´ı vˇerohodnost v´ ysledk˚ u jsem pak testov´ an´ı opakoval. 1
Unit testing
41
´ ´I KAPITOLA 7. TESTOVAN
42
7.3
Testov´ an´ı v´ ystupn´ıho subsyst´ emu
U v´ ystupn´ıho subsyst´emu bylo nutn´e otestovat spr´avn´ y v´ ybˇer celku symbol˚ u, kter´ y se prov´ad´ı pomoc´ı vrtkav´ ych podm´ınek. Spr´avnost jejich vyhodnocen´ı byla testov´ana jiˇz ve f´azi implementace vstupn´ıho subsyst´emu, na spr´avn´e zpracov´an´ı jsem se tedy mohl spolenout. D´ale bylo nutn´e otestovat spr´ avn´e vyhodnocen´ı jednotliv´ ych symbol˚ u. I toto lze otestovat jednoduch´ ym zp˚ usobem, pro vybran´ y vstup se v´ ysledek porovn´a s potvrzen´ ym v´ ystupem. Valn´a vˇetˇsina testov´ an´ı v´ ystupn´ıho syst´emu vˇsak byla provedena vizu´alnˇe, bylo by problematick´e a pˇr´ıliˇs sloˇzit´e kontrolovat napˇr´ıklad spr´avnost vykreslen´ı kˇrivek souˇradnicov´e s´ıtˇe pomoc´ı jednotkov´eho testu.
Kapitola 8
Z´ avˇ er Pˇri n´ avrhu jsem se snaˇzil ˇreˇsit probl´emy elegantn´ım zp˚ usobem, v tomto mˇe hodnˇe napomohly popsan´e probl´emy ˇreˇsen´e pomoc´ı n´avrhov´ ych vzor˚ u. Jejich pouˇzit´ı v programu a pˇredevˇs´ım v´ ybˇer ze ˇsirok´e skupiny vzor˚ u, rozˇs´ıˇrilo m´e znalosti t´eto problematiky. Nejvˇetˇs´ım pˇr´ınosem pro mne ale bylo sezn´ amen´ı se s programovac´ım jazykem Python, kter´ y mnohdy nab´ız´ı neˇcekan´ a a zaj´ımav´ a ˇreˇsen´ı probl´em˚ u. Povaˇzuji ho za mocn´ y n´astroj, schopn´ y ˇreˇsit i sloˇzitˇejˇs´ı probl´emy, a neb´ al bych se jeho pouˇzit´ı i ve vˇetˇs´ım projektu. Pˇri n´ avrhu aplikace jsem byl okouzlen jednotliv´ ymi mapov´ ymi projekcemi. Algoritmy pro jejich pouˇzit´ı mˇe zaujaly svou jednoduchost´ı a povaˇzuji za obdivuhodn´e, ˇze v´ ypoˇcet mapov´eho zobrazen´ı je jednoduˇsˇs´ı neˇz v´ ypoˇcet bod˚ u na obvodu elipsy. Zat´ım jsem program nepouˇzil k tvorbˇe velk´e n´astˇen´e mapy, kterou zmiˇ nuji v u ´vodu. Vˇeˇr´ım ale, ˇze by s menˇs´ım u ´sil´ım pˇri retuˇsov´an´ı a pˇredevˇs´ım dod´av´an´ım prvk˚ u, kter´e mapu dotv´aˇrej´ı, jako je legenda, vysvˇetlivky aj., byl schopen vygenerovat i ji.
8.1
Srovn´ an´ı s existuj´ıc´ımi programy
Na rozd´ıl od vˇetˇsiny souˇcasn´ ych program˚ u pro tvorbu map hvˇezdn´e oblohy, nab´ız´ı tento projekt volnost v pouˇzit´ı vstupn´ıch dat - uˇzivatel m˚ uˇze dodat astronomick´ y katalog z vlastn´ıch zdroj˚ u. V podobn´em duchu se nese i generov´an´ı v´ ystupu. Uˇzivatel nen´ı svazov´an n´apady tv˚ urce a m˚ uˇze si definovat vzhled jednotliv´ ych symbol˚ u dle sv´e libosti. Pouˇz´ıvan´ ym jazykem pro konfiguraci tˇechto symbol˚ u je otevˇren´ y form´at a nastupuj´ıc´ı de facto standart na poli vektorov´e grafiky - form´ at SVG. Aˇckoliv projekty jako PP3 nebo XEphem vytv´aˇrej´ı mapy ve vektorov´em form´ atu, rozhodnˇe to mezi ostatn´ımi nen´ı pravidlem. Souˇcasnˇe program nab´ız´ı i v´ ystup do jin´ ych bˇeˇznˇe pouˇz´ıvan´ ych form´at˚ u. Uˇzivatel, kter´ y nem´a form´at SVG v oblibˇe, m˚ uˇze pouˇz´ıt pˇreddefinovan´e symboly a jen upravit podm´ınky sv´ ym potˇreb´am. Nˇekter´e existuj´ıc´ı projekty, nikoliv vˇsak z ˇrady tzv. filtr˚ u, maj´ı moˇznost vykreslen´ı objekt˚ u hvˇezdn´e soustavy. Pozice planet jsou promˇenlivˇejˇs´ı neˇz pozice jin´ ych tˇeles, a proto m˚ uˇze b´ yt touha po zmapov´ an´ı pozic tˇechto objekt˚ u hlavn´ım podnˇetem k vytv´aˇren´ı map. Mnou implementovan´e ˇreˇsen´ı tuto funkci nenab´ız´ı, ale moˇznost jej´ıho pˇrid´an´ı diskutuji v dalˇs´ı sekci. N´avrh nebyl proveden s ohledem na to, ˇze by se v budoucnu dalo implementovat grafick´e rozhran´ı jako n´ astavba programu. Pro tento u ´ˇcel by se jistˇe naˇslo vhodnˇejˇs´ı ˇreˇsen´ı vnitˇrn´ıch
43
´ ER ˇ KAPITOLA 8. ZAV
44
datov´ ych struktur a n´ asledn´eho zpracov´an´ı vykreslen´ı. Ovˇsem d´ıky sv´e jednoduchosti by se program mohl st´ at souˇc´ ast´ı webov´e aplikace, jako je napˇr´ıklad projekt Your Sky (v´ıce v kapitole 2), kde by mohla b´ yt ˇc´ ast konfigurace pˇreddefinovan´a, tˇreba i ve v´ıce podob´ach, a uˇzivatel by specifikoval jen podrobnosti nastaven´ı modulu zobrazen´ı.
8.2
Moˇ znosti dalˇ s´ıho rozˇ s´ıˇ ren´ı projektu
Zaj´ımav´e funkce by pˇridalo zaˇclenˇen´ı existuj´ıc´ı knihovny pro astronomick´e v´ ypoˇcty PyEphem [55], kter´a vych´ az´ı ze zdrojov´ ych k´ od˚ u programu XEphem (zmiˇ nuji se o nˇem v kapitole 3). Nab´ız´ı funkce pro pˇrepoˇcet mezi r˚ uzn´ ymi ekvinokcii, kter´e by rozˇs´ıˇrily moˇznosti programu o schopnost generovat mapy vztaˇzen´e k historick´emu okamˇziku dle v´ ybˇeru uˇzivatele. D´ale obsahuje funkce pro v´ ypoˇcet pˇresn´ ych pozic planet sluneˇcn´ı soustavy a jejich mˇes´ıc˚ u. Nem´enˇe zaj´ımavou funkc´ı by pro ˇradu uˇzivatel˚ u byla i moˇznost definovat um´ıstˇen´ı pozorovatele na Zemi a generovat mapy pro zadan´ y okamˇzik dne. Zaj´ımavou funkc´ı, kter´ a by zv´ yˇsila uˇzivatelsk´ y komfort, by bylo rozpozn´av´an´ı form´atu vstupn´ıch dat dle hlaviˇcky datov´eho souboru. Hlaviˇcka je pops´ana ve standartu pro astronomick´e katalogy [43].
Literatura [1] M. Baranov´ a. Multimedi´ aln´ı texty Matematick´e kartografie. http://www.gis.zcu.cz/studium/mk2/multimedialni_texty/, stav z 6. 5. 2010. [2] D. G. Barry Warsaw, Jeremy Hylton. Python Enhancement Proposal Purpose and Guidelines. http://www.python.org/dev/peps/pep-0001/, stav z 6. 5. 2010. [3] T. Bronger. PP3 – Celestial Chart Generation. http://pp3.sourceforge.net/, stav z 21. 5. 2010. [4] J. A. Bulia Byak. Inkscape tutorial: Advanced. http://www.inkscape.org/doc/advanced/tutorial-advanced.html, 12. 5. 2010.
stav
z
[5] E. C. Cannon, Annie J.; Pickering. The Henry Draper catalogue 0h, 1h, 2h, and 3h, 1918. http://adsabs.harvard.edu/abs/1918AnHar..91....1C, stav z 18. 5. 2010. [6] G. v. R. David Goodger. Python Enhancement Proposal Docstring Conventions. http://www.python.org/dev/peps/pep-0257/, stav z 6. 5. 2010. [7] D. Goodger. Code Like a Pythonista. http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html, stav z 6. 5. 2010. [8] D. Goodger. Python Enhancement Proposal reStructuredtext docstring format. http://www.python.org/dev/peps/pep-0287/, stav z 6. 5. 2010. [9] B. W. Guido van Rossum. Python Enhancement Proposal Style Guide for Python Code. http://www.python.org/dev/peps/pep-0008/, stav z 6. 5. 2010. [10] D. Lancaster. Drawing a Bezier Cubic Spline Through Four Data Points. http://www.tinaja.com/glib/nubz4pts1.pdf, stav z 8. 5. 2010. [11] A. Martelli. Singleton? We don’t need no stinkin’ singleton: the Borg design pattern (Python), 2001. http://code.activestate.com/recipes/66531, stav z 18. 5. 2010.
45
46
LITERATURA
[12] A. Mellinger. A Color All-Sky Panorama Image of the Milky Way, 2009. http://home.arcor-online.de/axel.mellinger/, stav z 18. 5. 2010. [13] P. Neave. Neave Planetarium. http://www.neave.com/planetarium/, stav z 6. 5. 2010. [14] J. P. Snyder. Map Projections: A Working Manual. Geological Survey (U.S.), 1987. http://pubs.er.usgs.gov/usgspubs/pp/pp1395, stav z 6. 5. 2010. [15] S. Soma, M.; Aoki. Transformation from FK4 system to FK5 system, 1990. http://adsabs.harvard.edu/abs/1990A%26A...240..150S, stav z 16. 5. 2010. [16] J. Standish, E. M. Conversion of positions and proper motions from B1950.0 to the IAU system at J2000.0, 1982. http://adsabs.harvard.edu/abs/1982A%26A...115...20S, stav z 16. 5. 2010. [17] T. Taki. Taki’s Home Page. http://www.asahi-net.or.jp/~zs3t-tk/index.htm, stav z 21. 5. 2010. [18] Autotrace. http://autotrace.sourceforge.net/, stav z 6. 5. 2010. [19] Batik. http://xmlgraphics.apache.org/batik/, stav z 6. 5. 2010. [20] BeanShell Manual. http://www.beanshell.org/manual/bshmanual.html, stav z 6. 5. 2010. [21] Builder Design Pattern. http://sourcemaking.com/design_patterns/builder, stav z 13. 5. 2010. [22] Cairo rsvg and python in windows. http://cairographics.org/cairo_rsvg_and_python_in_windows/, stav z 6. 5. 2010. [23] Cartes du Ciel Sky Charts. http://www.stargazing.net/astropc/, stav z 21. 5. 2010. [24] Decorator Design Pattern. http://sourcemaking.com/design_patterns/decorator, stav z 13. 5. 2010. [25] ISO 32000-1:2008 - Portable document format PDF 1.7. http://www.iso.org/iso/catalogue_detail.htm?csnumber=51502, stav z 8. 5. 2010. [26] Java Expression Parser. http://www.singularsys.com/jep/, stav z 6. 5. 2010. [27] JAXP. https://jaxp.dev.java.net/, stav z 6. 5. 2010. [28] JFormula. http://www.japisoft.com/formula/, stav z 6. 5. 2010.
LITERATURA
47
[29] PostScript vs. Portable Document Format. http://www.adobe.com/print/features/psvspdf/index.html, stav z 8. 5. 2010. [30] PyCairo Documentation. http://cairographics.org/documentation/pycairo/index.html, stav z 14. 5. 2010. [31] pyrsvg. http://cairographics.org/pyrsvg/, stav z 20. 5. 2010. [32] The Python Language Reference - Built-in types - Modules. http://docs.python.org/library/stdtypes.html#modules, stav z 8. 5. 2010. [33] The Python Language Reference - Data model - Special Method Names. http://docs.python.org/reference/datamodel.html#special-method-names, stav z 9. 5. 2010. [34] The Python Language Reference - logging. http://docs.python.org/library/logging.html, stav z 6. 5. 2010. [35] The Python Language Reference - string - Template strings. http://docs.python.org/library/string.html#template-strings, 6. 5. 2010.
stav
[36] The Python Language Reference - unittest. http://docs.python.org/library/unittest.html, stav z 20. 5. 2010. [37] The Python Language Reference - xml.dom.minidom. http://docs.python.org/library/xml.dom.minidom.html, stav z 6. 5. 2010. [38] Saguaro Astronomy Club. http://www.saguaroastro.org/default.htm, stav z 6. 5. 2010. [39] Samples at SVG-Whiz! - Scripting. http://svg-whiz.com/samples.html#tooltip, stav z 21. 5. 2010. [40] SAO Star Catalog. http://tdc-www.harvard.edu/catalogs/sao.html, stav z 18. 5. 2010. [41] Singleton Design Pattern. http://sourcemaking.com/design_patterns/singleton, stav z 18. 5. 2010. [42] Site Linker API for WIKISKY. http://server1.wikisky.org/SiteLinker_V1.0.html, stav z 6. 5. 2010. [43] Standards for Astronomical Catalogues. http://cds.u-strasbg.fr/doc/catstd-2.htx, stav z 6. 5. 2010. [44] Starchart. http://starchart.sourceforge.net/, stav z 21. 5. 2010. [45] StringTemplate. http://www.stringtemplate.org/, stav z 6. 5. 2010.
z
48
LITERATURA
[46] Svg Coordinate Systems, Transformations and Units. http://www.w3.org/TR/SVG/coords.html, stav z 13. 5. 2010. [47] SVG Print W3C Working Draft. http://www.w3.org/TR/SVGPrint/, stav z 8. 5. 2010. [48] Unifying types and classes in Python 2.2, Overriding the new method. http://www.python.org/download/releases/2.2.3/descrintro/#__new__, stav z 8. 5. 2010. [49] Velocity Project. http://velocity.apache.org/, stav z 6. 5. 2010. [50] Wikipedia: Scalable Vector Graphics. http://en.wikipedia.org/wiki/Scalable_Vector_Graphics, stav z 8. 5. 2010. [51] XEphem. http://www.clearskyinstitute.com/xephem/, stav z 21. 5. 2010. [52] Xerces. http://xerces.apache.org/xerces2-j/, stav z 6. 5. 2010. [53] XML API for WIKISKY. http://server1.wikisky.org/XML_API_V1.0.html, stav z 6. 5. 2010. [54] Your Sky. http://www.fourmilab.ch/yoursky/, stav z 21. 5. 2010. [55] PyEphem, Scientific-grade astronomy routines, 2001. http://rhodesmill.org/pyephem/, stav z 19. 5. 2010. [56] P. Weingartner. A First Guide to PostScript. http://autotrace.sourceforge.net/, stav z 8. 5. 2010.
Dodatek A
Seznam pouˇ zit´ ych zkratek API Application programming interface ASCII American Standard Code for Information Interchange CD Compact disc CCD Charge-coupled device CSS Cascading Style Sheets CSV Comma-separated Value DSV Delimiter-separated values EPS Encapsulated PostScript GIF Graphics Interchange Format GPL GNU General Public License JPEG Joint Photographic Experts Group ISO International Organization for Standardization MIT Massachusetts Institute of Technology PDF Portable Document Format PEP Python Enhancement Proposal PNG Portable Network Graphics SAO Smithsonian Astrophysical Observatory SVG Scalable Vector Graphics URL Uniform Resource Locator UTC Coordinated Universal Time
49
50
W3C World Wide Web Consortium XML Extensible Markup Language
ˇ YCH ´ DODATEK A. SEZNAM POUZIT ZKRATEK
Dodatek B
Uˇ zivatelsk´ a pˇ r´ıruˇ cka B.1
Softwarov´ e z´ avislosti
Ke spuˇstˇen´ı programu je potˇreba interpret programovac´ıho jazyka Python. Program byl vyv´ yjen a testov´ an ve verzi 2.6.5. J´adro programu nen´ı z´ avisl´e na ˇz´adn´ ych dalˇs´ıch knihovn´ach. Pokud je pouˇzit modul pro umist’ov´ an´ı popisk˚ u, je nutn´e m´ıt nainstalovanou knihovnu Cairo [30]. Testov´an byl s verz´ı 1.8.8. Pokud je pouˇzit modul konverz´ı, je potˇrebn´a zmiˇ novan´a knihovna Cairo a nav´ıc knihovna rSVG [31]. Testov´ an byl s verz´ı 2.30.0. Pro platformu Microsoft Windows jsou pˇr´ısluˇsn´e knihovny na pˇriloˇzen´em CD, nebo volnˇe dostupn´e ke staˇzen´ı na internetu. Pro Linux jsou knihovny bˇeˇznˇe dostupn´e v repozit´ aˇr´ıch distribuc´ı. Naˇc´ıt´ an´ı modul˚ u nen´ı moˇzn´e ovlivnit z konfiguraˇcn´ıho souboru nebo parametrem programu. Je nutn´e editovat zdrojov´ y soubor core.py a upravit hodnoty v tˇr´ıdˇe Configuration.Modules.
B.2
Konfigurace
Konfigurace prob´ıh´ a v jedin´em XML souboru. Komentovan´ y konfiguraˇcn´ı soubor je pˇr´ıtomn´ y na pˇriloˇzen´em CD.
B.3
Spuˇ stˇ en´ı
Program je spouˇstˇen s jedin´ ym parametrem, kter´ ym je cesta ke konfiguraˇcn´ımu souboru. N´azev ˇr´ıd´ıciho souboru, kter´ y m´ a b´ yt spuˇstˇen, je pysky.py.
- konfiguraˇ cn´ ı soubory map z textu - vygenerovan´ e mapy pro dodan´ e konfigurace -
knihovny pro platformu win32 zdrojov´ e k´ ody programu konfiguraˇ cn´ ı soubory komentovan´ y konfiguraˇ cn´ ı soubor astronomick´ e katalogy, kter´ e byly pouˇ zity pro tvorbu map v textu
-
moduly pro naˇ c´ ıt´ an´ ı konfigurace moduly pro zpracov´ an´ ı vstupu moduly pro zpracov´ an´ ı v´ ystupu rozˇ s´ ıˇ ren´ ı v´ ystupu moduly mapov´ ych zobrazen´ ı hlavn´ ı modul, kter´ ym se program spouˇ st´ ı zdrojov´ e k´ ody textu obr´ azky pouˇ zit´ e v textu text ve form´ atu PDF
53
54
ˇ ˇ EHO ´ DODATEK C. OBSAH PRILO ZEN CD
Dodatek D
Uk´ azka v´ ystupu programu V t´eto kapitole je pˇriloˇzena uk´azka moˇzn´ ych v´ ystup˚ u programu. Ke vˇsem tˇemto map´ am je pˇriloˇzen konfiguraˇcn´ı soubor na CD. Vzhledem k urˇcen´ı tˇechto map pro tisk, nejsou tyto mapy prezentac´ı ˇsirok´ ych moˇznost´ı nastaven´ı vzhledu. Pro objekty hvˇezdn´e oblohy jsou pouˇzit´e podobn´e symboly inspirovan´e atlasem od Toshimiho Takiho [17].
D.1
Vstupn´ı data
Pro tvorbu uk´ azkov´ ych v´ ystup˚ u byly pouˇzity n´asleduj´ıc´ı vstupn´ı data: • SAO Star Catalogue [40]. • Saguaro Astronomy Club Database version 8.1 [38]. • Catalogue of Constellation Boundary Data [40]. – Tyto data byla zjednoduˇsena na nutn´e minimum. • Data ml´eˇcn´e dr´ ahy pˇrevzat´e z [3] a [12]. • Uk´ azkov´ y soubor ˇcar souhvˇezd´ı, vytvoˇren´ y pro testov´an´ı. – Data o spojnic´ıch jednotliv´ ych souhvˇezd´ı se mnˇe nepodaˇrilo z´ıskat z ciz´ıch zdroj˚ u. – Obsahuje pouze souhvˇezd´ı Mal´e medvˇedice a Orionu. Pro tvorbu interaktivn´ı mapy s tooltipy1 byl pouˇzit skript pˇrevzat´ y z [39].
1
Tooltip je bˇeˇznˇe pouˇz´ıvan´ a souˇca ´st grafick´eho rozhran´ı. Zpravidla je ve formˇe obd´eln´ıku, kter´ y se objev´ı pod kurzorem. Obvykle obsahuje informace o objektu, na kter´ y kurzor ukazuje.
55
´ ´ DODATEK D. UKAZKA VYSTUPU PROGRAMU
56
UGC 3522 NGC 2276 NGC 2268 NGC 2300
NGC 6412
NGC 2146A
NGC 2146
NGC 6252
NGC 6331
NGC 6251 NGC 2336
NGC 6324 NGC 6217
UGC 10054 NGC 2314 UGC 4173
NGC 6068A
NGC 2336A
NGC 6068
NGC 2591 NGC 5640 NGC 2908 NGC 5712 NGC 5547
NGC 5909
NGC 5295
NGC 2760
NGC 3197
NGC 2938
NGC 5323
NGC 5808
NGC 3329 NGC 3901
NGC 5819 NGC 5832
NGC 5344 NGC 5412 NGC 5607
NGC 5262 NGC 4972
NGC 5415
NGC 3061
NGC 5144A
NGC 2977
NGC 4127 NGC 4331 NGC 4159 NGC 4319 NGC 4386
NGC 4749 NGC 5034 NGC 5144B
NGC 2634A NGC 2634 NGC 2633 NGC 2614 NGC 2636 NGC 2646 UGC 4841
NGC 3397
NGC 3516 NGC 3364 NGC 5314
NGC 2523B NGC 2523 NGC 2523C NGC 2551
NGC 3465 NGC 3144 NGC 2957B NGC 2963 NGC 2810B NGC 2810A NGC 3174 NGC 2957A NGC 3523 NGC 3500 NGC 4133 NGC 4291 NGC 2985 NGC 4363 NGC 3747 NGC 3147 NGC 3027 NGC 3252 NGC 3752 NGC 4572 UGC 5139 NGC 4648 NGC 3066 NGC 3343 NGC 3065 NGC 4589 NGC 3939 NGC 3890 NGC 3403 NGC 3348 NGC 2787 NGC 3736 NGC 4750 NGC 3562
NGC 4954
NGC 5340
NGC 2523A
MCG +13-07-007 NGC 2748
NGC 3215 UGC 6456
NGC 5836
NGC 5671 NGC 5620
NGC 2655 NGC 2715
NGC 3057 NGC 3212
NGC 5452
NGC 5912
UGC 4238
NGC 2732
NGC 4693
UGC 5423 UGC 5612
NGC 3034 NGC 2961
UGC 5688 NGC 3077
ˇ Obr´azek D.1: Mapa galaxi´ı v souhvˇezd´ıch Mal´e medvˇedice, Draka a Zirafy.
Obr´ azek D.2: Orion˚ uv p´as v souhvˇezd´ı Oriona.
UGC 5028
NGC 2959 NGC 3031 NGC 2892 NGC 2976
D.1. VSTUPN´I DATA
Obr´ azek D.3: Interaktivn´ı mapa s odkazy. Pohled na souhvˇezd´ı Velk´eho psa.
Obr´ azek D.4: Interaktivn´ı mapa s tooltipy. Pohled na souhvˇezd´ı Velk´eho psa.