Vježbe 3
Animacije u Javi -
Matrična reprezentacija geometrijskih transformacija u 3D -
Ortogonalno projiciranje
Primjer indirektnog crtanja (blisko metodi dvostrukog spremnika
-
double buffering) s ciljem da se smanji treperenje:
applet
source
3.1. Upotrijebite klasu matričnih transformacija u 2D
MT2D
(zadatak 2.3.) i klasu
GKS
(zadatak 2.1.), te rutinu za crtanje
elipsi (zadatak 2.2.) da bi isprogramirali animirani ventilator:
applet
3.2. Implementirajte klasu
MT3D
matričnih reprezentacija geometrijskih
transformacija u 3D: rotacija oko osi
x,
y i
z, translacije i
skaliranja, te njihovu kompoziciju putem matričnog produkta (proširenje zadataka
2.3. i 2.5. na 3D).
pomakni(double px, double py, double pz)
– translacija za pomak (px, py, pz);
skaliraj(double sx, double sy, double sz)
– skaliranje s faktorima sx, sy i sz;
rotirajX(double kut)
– rotacija oko osi x za kut u stupnjevima;
rotirajY(double kut)
– rotacija oko osi y za kut u stupnjevima;
rotirajZ(double kut)
– rotacija oko osi z za kut u stupnjevima;
identitet()
– postavlja matricu transformacije na jediničnu;
mult(MT3D m)
- matrica m množi matricu već sadržanu u klasi MT3D s desna.
Napomena: nešto složenija, ali elegantnija implementacija gornjih metoda je da one u sebi
već sadrže implicitno množenje, tj. kompoziciju transformacija. Dakle, poziv metode ne znači
punjenje same matrice, nego kompoziciju već sadržane transformacije u objektu klase
MT3D
s transformacijom opisanom pozvanom metodom (u tom slučaju treba
paziti da se matrica transformacije na početku inicijalizira kao jedinična).
3.3. Implementirajte klasu
Ortho
koja omogućava ortogonalnu projekciju
linija definiranih u 3D globalnom koordinatnom sustavu na
xy-ravninu sa sljedećim
metodama (modificirajte klasu
GKS
!):
postaviNa(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 - po defaultu postaviti
identitet, tj. jediničnu matricu);
postaviBoju(Color c)
– postavlja boju linije;
- Konstruktorom
Ortho(Graphics g, double xmin, double xmax,
double ymin, double ymax, int xsize, int ysize)
zadaje se raspon
projiciranih koordinata koje će biti prikazane u prozoru (appletu)
veličine xsize, ysize
(podatak o veličini prozora nužan je da bi se mogle izračunati odgovarajuće
transformacije iz projiciranih koordinata u koordinate prozora).
3.4. Radi testiranja klasa iz zadataka 3.2. i 3.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
3.5. Animirajte rotaciju kocke i to tako da se kocka istovremeno okreće oko sve tri
koordinatne osi:
applet