Vježbe 3
Animacija u Javi -
Matrična reprezentacija geometrijskih transformacija u 3D -
Ortogonalna projekcija
Primjer indirektnog crtanja (blisko metodi dvostrukog spremnika
-
double buffering) s ciljem da se smanji titranje:
applet
source
1. Upotrijebite klasu matričnih transformacija u 2D (zadatak 1.3)
i klasu GKS (zadatak 2.2), te rutinu za crtanje elipsi (zadatak
2.4) da bi isprogramirali animirani ventilator:
applet
2. Implementirajte matrične reprezentacije geometrijskih transformacija u 3D:
rotacije oko osi x, y i z, translacije i skaliranja, te
njihovu kompoziciju putem matričnog produkta (proširenje zadatka 1.3 na 3D).
3. Implementirajte klasu
Ortho
koja iscrtava ortogonalnu projekciju
linija definiranih u 3D globalnom koordinatnom sustavu sa slijedećim metodama:
idiNa(double x, double y, double z)
– postavlja početak
linije na poziciju (x, y, z) u 3D globalnim koordinatama
linijaDo(double x, double y, double z)
– povlači liniju
od posljednje zapamćene pozicije do (x, y, z) u 3D globalnim koordinatama
trans(MT3D m)
– zadaje se matrica transformacije koja se
primjenjuje prije crtanja u globalnim koordinatama (to je zapravo
transformacija iz lokalnih u globalne koordinate); MT3D
(ili slično) je klasa 3D transformacija implementiranih u zadatku 2
postaviBoju(Color c)
– postavlja boju linije
- konstruktor:
Ortho(Graphics g, double xmin, double ymin,
double xmax, double ymax, int xsize, int ysize)
– sa (xmin, ymin)
zadaje se donji, a sa (xmax, ymax) gornji ugao pravokutnika u ravnini
projekcije na kojeg se vrši ortogonalna projekcija iz globalnog 3D
koordinatnog sustava; dimenzije zaslona (appleta) xsize i ysize nužne
su da bi se izračunale transformacije iz pravokutnika u ravnini
projekcije u zaslonske koordinate.
4. Radi testiranja klasa iz zadataka 2. i 3. nacrtajte ortogonalne projekcije
kocke zarotirane oko različitih osi u različitim bojama:
- Rotacija oko osi x za 30° - crveno
- Rotacija oko osi y za 30° - zeleno
- Rotacija oko osi z za 30° - plavo
- Rotacija najprije oko osi x, pa y, pa z, svaki put za 30° - crno
applet
5. Animirajte rotaciju kocke i to tako da se kocka istovremeno okreće oko sve tri
koordinatne osi:
applet