Informatická propedeutika II

Vzorový příklad v MetaPostu

Následující příklad můžete brát jako inspiraci pro práci s MetaPostem. Jde o ukázku použití jazyka pro rychlé kreslení schémat automatů. Sadu maker si můžete dle libosti upravovat pro kreslení jiných typů schémat.

Pro účely kreslení automatů vytvořil Vilém Vychodil dodatečná makra. Soubor obsahuje definice základních typů per, makra pro vytváření a popis os a makra pro okénkovou transformaci. Další dodatečná makra vytvořil speciálně pro zjednodušení kreslení automatů. Oba uvedené styly lze samozřejmě kombinovat. Pokud při vytváření obrázků potřebujete použít speciální funkce, je možné využít sadu maker grafbase z balíku mfpic. Dokumentace k dodatečným makrům je k nalezení v  archivu elektronické dokumentace.

K přiloženým souborům maker existují rovněž dva ukázkové příklady. První příklad je ukázkou nakreslení jednoduchého grafu funkce, druhý příklad ukazuje, kterak lze jednoduše nakreslit automat. V následujícím textu je rozebrána struktura zdrojového kódu příkladů.

V záhlaví obrázku se definuje měřítko. Do skutečných rozměrů je obrázek transformován pomocí jednoduché okénkové transformace. Hodnoty dx, dy udávají skutečnou velikost kvadrantu. V následující ukázce jsou nastaveny na 4cm a 2cm. Hodnoty ax, bx, ay, by udávají logický souřadný systém v prvním kvadrantu. Tento systém by měl být volen tak, aby bylo nakreslení obrázku co nejjednodušší. Například při použití goniometrických funkcí bude vhodné volit rozsah od 0 po 2pi v x-ové ose a od 0 po 1 v y-ové ose. Posledním krokem v záhlaví je inicialisace okénkové transformace podle definovaných hodnot.

 beginfig (1)
   \input upfigure.mp
   dx := 4cm; dy := 3cm;  % velikost
   ax := 0; bx := 2;      % x-ove meritko
   ay := 0; by := 2;      % y-ove meritko

   transform t;
   t := _mk_transform;    % okenkova transformace

Makrem _draw_axis se vykreslují osy. Posledním argumentem makra je okénková transformace. Předchozí čtyři argumenty určují rozsah os, které se mají vykreslit. V následující ukázce jsou vykresleny osy prvního kvadrantu s mírným přesahem do čtvrtého kvadrantu. Rozsah os je vyjadřován v logických souřadnicích.

   _draw_axis (ax, bx, -0.2by, by, t);

V následujícím bloku by měl být nakreslen obsah obrázku, ovšem bez komentářů, ty by pro přehlednost měly být umístěny až na konci. Další kód ukazuje vytvoření dvou cest representujících protínající se funkce. Pokud jede o přesně zadané funkce, lze je vytvořit jako jednoduché interpolační křivky se zadanými tečnými vektory v počátku a konci. Pokud se jedná o přesně zadané funkce, měly by být interpolovány přes své funkční hodnoty.

   %% nakresli dve funkce
   path p, q;
   p := (0.2, -0.5){dir 70} ... {dir 20}(1.8, 1.8);
   q := (0.2, 1.8){dir -70} ... {dir -10}(1.8, 0.2);

   draw p transformed t;
   draw q transformed t;

Nyní zbývá vyznačit najít průsečík a vyznačit jej na ose x.

   %% najdi prusecik a nakresli usecku
   z1 = p intersectionpoint q;
   draw (z1 -- (x1, 0)) transformed t dashed dotted_line;

Poslední částí zdrojového kódu jsou komentáře. Pokud jsou komentáře uprostřed obrázku, lze je vytvářet makrem label. Vhodným suffixem upravte polohu komentáře, aby obrázek vypadal přirozeně. Pokud chcete popisovat osy, použijte makra _x_label_t_label. Makra berou jako argumenty text, parametr a okénkovou transformaci. S komentářem se na ose automaticky vytvoří i značka. Komentování os by mělo být střídmé. Leckdy stačí jen orientační hodnoty. Komentovány by měly být zejména důležité hodnoty.

   %% vytvor komentare
   label.rt (btex $y=f_1(x)$ etex,
             (point length (p) of p) transformed t);
   label.rt (btex $y=f_2(x)$ etex,
             (point length (q) of q) transformed t);
   %% komentar k ose
   _x_label (btex $\alpha$ etex, x1, t);
 endfig;

Při vytváření obrázku se vyvarujte použití absolutních souřadnic. Jejich použití by znemožnilo jednoduchým způsobem upravovat obrázek. Zároveň dbejte na strukturu celého zdrojového kódu, jde přece o zdrojový kód ve speciálním programovacím jazyku!