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 a _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!