Vladimír Lukeš: METAFONT - Jak kreslit obrázky
Predchozi (Obsah) Dalsi

6. Cesty

Všechny výrazy za příkazy draw a filldraw v předešlém odstavci jsou typu path, nebo-li cesta. To umožňuje uživateli s křivkami, jakožto s datovým typem, manipulovat (otáčet, posouvat, zvětšovat, ...) a vytvářet nové ze starých.

Ke každému bodu cesty je v METAFONTu přiřazen "čas", který vyjadřuje vzdálenost bodu od počátku cesty. Parametr "čas" je reálné nezáporné číslo, první bod křivky má hodnotu nula, hodnotu jedna má poslední bod první křivky a první bod druhé křivky, hodn. dva poslední bod druhé křivky, atd. Pomocí "času" lze pracovat pouze s určitým úsekem nějaké cesty. k tomu slouží příkaz subpath ... of, který vytvoří novou cestu tak, že ze staré vezme pouze část ležící mezi "časy", jež jsou parametry příkazu.


draw subpath (0.3,1.7) of z1..z2..z3;

obrazek 10



path p;
p:=z1..z2..z3;
draw p;
erase draw subpath(.33,.66) of p;

obrazek 11


Příkaz erase způsobí vymazání cesty a ještě o něm bude v této kapitole řeč.

Libovolný bod cesty získáme příkazem point ... of, jehož parametrem je "čas" bodu a příslušná cesta.


path p;
p:=z1..z2..z3;
z4=point 1.4 of p;
draw p;
draw z1--z4;

obrazek 12


Podobně jako u bodů jsou některé často používané cesty předdefinovány. Jsou to:

quartercircle - čtvrtkružnice o jednotkovém průměru
halfcircle - půlkružnice o jednotkovém průměru
fullcircle - jednotková kružnice
unitsquare - jednotkový čtverec, levý dolní roh v (0,0)
 

Velmi zajímavě řeší METAFONT překreslování a mazání. Každému bodu rastru je přiřazena hodnota udávající počet překreslení bodu. Tato hodnota se zvýší o jednu příkazy draw a fill, sníží pomocí undraw a unfill a vynuluje již dříve zmíněným příkazem erase. k dispozici je ještě příkaz cullit, který nahradí záporné hodnoty nulou a kladné jedničkou, a příkaz cull ... keeping(a,b). Ten vymaže pouze body, které nejsou překresleny ab krát. Při konečném výstupu do bitmapového souboru jsou kresleny pouze body s kladnou nenulovou hodnotou.


fill fullcircle scaled 20u shifted z1;
fill fullcircle scaled 15u shifted z1;
unfill fullcircle scaled 10u shifted z1;
draw z2--z3; cull currentpicture keeping(1,1);

obrazek 13



Predchozi
Converted by Selathco 0.85 on 19.06.1999 11:53
Dalsi