Vježbe 3

Animacije u Javi - Matrična reprezentacija geometrijskih transformacija u 3D - Ortogonalno projiciranje

Primjer animacije u Java appletu:   applet   source
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: rota­cija 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).
  1. pomakni(double px, double py, double pz) – translacija za pomak (px, py, pz);
  2. skaliraj(double sx, double sy, double sz) – skaliranje s faktorima sx, sy i sz;
  3. rotirajX(double kut) – rotacija oko osi x za kut u stupnjevima;
  4. rotirajY(double kut) – rotacija oko osi y za kut u stupnjevima;
  5. rotirajZ(double kut) – rotacija oko osi z za kut u stupnjevima;
  6. identitet() – postavlja matricu transformacije na jediničnu;
  7. 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!):
  1. postaviNa(double x, double y, double z) – postavlja početak linije na poziciju (x, y, z) u 3D globalnim koordinatama;
  2. linijaDo(double x, double y, double z) – povlači liniju od posljednje zapamćene pozicije do (x, y, z) u 3D globalnim koordinatama;
  3. 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);
  4. postaviBoju(Color c) – postavlja boju linije;
  5. 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:
  1. Rotacija oko osi x za 30° - crveno
  2. Rotacija oko osi y za 30° - zeleno
  3. Rotacija oko osi z za 30° - plavo
  4. 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