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

8. Transformace

Body, cesty a pera mají jednu základní vlastnost společnou - se všemi můžeme provádět transformace, jako je posunutí, otočení nebo zvětšení. Uživatel jistě uvítá i ten fakt, že transformační příkazy jsou vždy stejné, bez ohledu na to, zda jde o body, pera nebo cesty.

Základní transformace jsou:

posunutí: (x,y) shifted (a,b) (x+a,y+b)
otočení: (x,y) rotated fi (x*cos(fi)-y*sin(fi),x*sin(fi)+y*cos(fi))
zvětšení: (x,y) scaled s (sx,sy)
  (x,y) xscaled s (sx,y)
  (x,y) yscaled s (x,sy)
  (x,y) zscaled (u,v) (ux-vy,vx+uy)
zkosení: (x,y) slanted s (x+sy,y)
 


Kromě těchto základních transformací můžeme ještě body a cesty otočit kolem určitého bodu (rotatedaround) nebo přetočit kolem osy (reflectedabout).


obrazek 20


Transformaci lze v METAFONTu zapsat i následovně,


(x,y) transformed t


kde t je proměnná typu transform, která uchovává informace o změnách. Typ transform je v paměti reprezentován šesti čísly: posunutí x a y, zvětšení x a y, zkosení, otočení. K definici nových transformací se využívá speciální transformační proměnná identity, ta slouží pouze k tomuto účelu a vyjadřuje nulovou změnu.


transform t[];
path p;
p:=(fullcircle scaled 12u) shifted (up*6u);
t1:=identity scaled 1.5;
t2:=t1 slanted 1.4;
draw p;
draw p transformed t1;
draw p transformed t2;

obrazek 21


Ještě je třeba se zmínit o transformační proměnné currenttransform. Pomocí ní lze definovat transformace, které se provedou při každém použití příkazů fill, draw, filldraw a příkazů k nim opačných (unfill, ...).


currenttransform:=identity scaled 10u;
...
currenttransform:=currenttransform rotated 90;



Predchozi
Converted by Selathco 0.85 on 08.06.1999 11:20
Dalsi