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.2.) i klasu GKS (zadatak 1.4.), te rutinu za crtanje elipsi (zadatak 2.1.) 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.2. i 2.4. 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, umjesto da se kod poziva metode prebriše sadržaj matrice, postojeća matrice se množi s desna s matricom željene transformacije, što znači kompoziciju već sadržane transformacije u objektu klase MT3D s transformacijom koja odgovara pozvanoj metodi (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).
Radi testiranja klasa MT3D i Ortho 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.4. Animirajte rotaciju kocke i to tako da se kocka istovremeno okreće oko sve tri koordinatne osi:   applet
3.5. Klasi MT3D matričnih reprezentacija geometrijskih transformacija u 3D (zadatak 3.2) dodajte rotaciju oko proizvoljne osi koja se zadaje dvjema točkama: rotiraj(double x1, double y1, double z1, double x2, double y2, double z2, double kut). Animirajte rotaciju kocke oko osi zadane točkama P1 = (2, -5, 2) i P2 = (-3, 5, -3). U početnom položaju, lijevi donji vrh kocke je u ishodištu, a stranice duljine a = 2 su na koordinatnim osima.   applet