Učimo vas kako izraditi web stranicu i programirati
 



HTML5 Canvas

Transformacije

Pod transformacijama canvasa smatramo promjenu grida canvasa, odnosno promjenu koordinatnog sistema. To može biti translacija kord. sistema, rotacija, promjena skale, posmak, itd. Naravno ovo se odražava i na promjenu oblika geometrijkog lika koji će biti nacrtan unutar canvasa.
Važno je napomenuti da se promjena oblika odnosi na ona geom. tijela koja su nacrtana nakon upotrebe transformacijske metode (translate, rotate,...). Na geom. tijela nacrtana prije upotrebe transf. metode neće uticati.



Translacija

Translacija je pomak canvasa iz ishodišta 0,0 na koordinate x,y pri čemu se koristi metoda
translate(x,y).
Ova metoda djeluje tako da se translatira sve nacrtano nakon ove metode, a na ono ispred se ne odnosi. U donjem primjeru prvo je nacrtan crveni kvadrat sa početnim kordinatama 0,0. Zatim je pozvana translate(100,100) metoda koja translatira zeleni kvadrat nacrtan nakon poziva ove metode. Može se primjetiti kako je crveni kvadrat ostao na poziciji 0,0 dok je zeleni translatiran (jer je nacrtan nakon translate() metode)

Primjer - translacija kvadrata: vidi primjer » vidi code



Rotacija

oko ishodišta CANVASa

Za rotaciju canvasa (oko ishodišta canvasa) potrebna je metoda
rotate(rad).
Kut je u radijanima, a centar rotacije je ishodište CANVASa.

HTML5 Canvas Rotate

Isto kao kod translate ova metoda djeluje samo na crteže koji su nacrtani nakon ove metode

Primjer - rotacija pravokutnika: vidi primjer » vidi code


oko neke točke CANVASa

Za rotaciju canvasa oko određene točke (x,y) unutar canvasa koristit ćemo uzastopno tri metode:

Ako želimo da se prvokutnik zarotira oko svoje rubne točke upotrijebit će se prvo translate(100,50), zatim rotate(Math.PI/6) te nakon toga vratiti nazad sa translate(-100,-50): vidi primjer » vidi code



Scaling (promjena veličine)

Za promjenu veličine jedinice canvas grida koristi se metoda
scale(ratioX, ratioY)
gdje ratioX i ratioY mogu biti između 0.0 i beskonačno. Ako je manje od 1 onda je to smanjenje, a ako je veće od 1 onda je povećanje.
Slično kao kod translate i rotate ova metoda djeluje samo na crteže nacrtane nakon ove metode.

Primjer - povećanje i smanjenje: vidi primjer » vidi code

Iz gornjeg primjera može se primjetiti da zbog promjene mjerila canvas grida dolazi i do translatornog pomaka pravokutnika. Da bi se ovo izbjeglo potrebno je ishodište canvasa pomaknuti u centar pravokutnika sa translate(x,y), a nakon scale() metode ponovo vratiti ishodište nazada sa translate(-x,-y).

Primjer: vidi primjer » vidi code



Matrix Transformacija

Osim zasebnih metoda postoji jedinstvena metoda koja obavlja sve transformacije koordinatnog sistema unutar canvasa. To su metode:
setTransform(a,b,c,d,e,f)
i metoda
transform(a,b,c,d,e,f)
gdje je
a = scaleX , b = skewY , c = skewX , d = scaleY , e = translateX i f = translateY

Teorija objašnjenja spada u matematiku množenja matrica što ovdje neće biti objašnjeno. O matricama pogledati ovdje, a kako primjeniti na canvas pogledati na w3.org!





Ukoliko transform() primjenimo uzastopno više puta onda će svaki naredni transform početi gdje je prethodni završio. To međutim nije slučaj sa setTransform() jer on svaki puta resetira canvas grid na početno predefinirano stanje. Pogledati donja dva primjera!

Primjer za transform(): vidi primjer » vidi code

Primjer za setTransform(): vidi primjer » vidi code

- translacija primjenom transform() metode

HTML5 canvas transform translate

Primjer : vidi primjer » vidi code

- scaling primjenom transform() metode

HTML5 canvas transform scale

Primjer : vidi primjer » vidi code

- rotate primjenom transform() metode

HTML5 canvas transform rotate gdje je a = kut rotacije u radijanima

Primjer : vidi primjer » vidi code

- skew (posmak) primjenom transform() metode

Sa skew se dobiva kosokutni koordinatni sustav, tj, kut između x i y ose nije pravi kut. Prva slika dolje prikazuje skew duž X ose, dok druga pokazuje skew duž Y ose.

HTML5 canvas transform skew X HTML5 canvas transform skew Y

Primjer - skew duž x-ose: vidi primjer » vidi code

Primjer - skew duž y-ose: vidi primjer » vidi code

Primjer - skew duž x i y ose: vidi primjer » vidi code

- složeniji primjeri

Kako zarotirati pravokutnik oko jedne njegove točke:
vidi primjer » vidi code

Što se dešava ako u jednoj transform() metodi napišemo svih 6 parametara:
vidi primjer » vidi code




| Uvjeti Korištenja | Zaštita Privatnosti | Kontakt |