Vježbe 2
Matrična reprezentacija geometrijskih transformacija u 2D
2.1. Implementirajte klasu
GKS (globalni koordinatni sustav) koja omogućava crtanje
u globalnim koordinatama sa sljedećim metodama:
postaviNa(double x, double y) – postavlja "olovku" na poziciju x, y
u globalnim koordinatama;
linijaDo(double x, double y) – povlači liniju od posljednje
zapamćene pozicije do x, y u globalnim koordinatama (dakle mora se izvršiti
transformacija iz globalnih koordinata u koordinate prozora i potegnuti linija
uz pomoć Java-rutine drawLine, te zapamtiti nove vrijednosti x i y kao posljednje);
postaviBoju(Color c) – postavlja boju "olovke".
Konstruktorom
GKS(Graphics g, double xmin, double xmax, double ymin, double ymax,
int xsize, int ysize) zadaje se raspon koordinata globalnog koordinatnog sustava
koji će biti prikazan 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 globalnih
koordinata u koordinate prozora.
2.2. Nacrtajte koordinatne osi i elipsu s poluosima a = 4 i b = 2
sa središtem u ishodištu uz pomoć metoda klase
GKS iz prethodnog zadatka.
Raspon vrijednosti x i y koordinata neka bude od -5 do 5. Primjer:
applet
2.3. Implementirajte klasu
MT2D matričnih reprezentacija geometrijskih transformacija
u 2D: rotacije, translacije, skaliranja i zrcaljenja. Sljedeće metode trebaju kreirati
odgovarajuće 3 x 3 matrice transformacije (radimo sa homogenim koordinatama):
pomakni(double px, double py) – translacija za pomak px, py;
skaliraj(double sx, double sy) – skaliranje s faktorima sx, sy;
zrcaliNaX() – zrcaljenje na osi x (dakle mijenja se predznak y koordinate);
zrcaliNaY() – zrcaljenje na osi y (dakle mijenja se predznak x koordinate);
rotiraj(double kut) – rotacija za kut u stupnjevima (ne zaboraviti
preračunavanje u radijane!);
identitet() – postavlja matricu transformacije na jediničnu.
2.4. U klasu
GKS dodajte metodu
trans(MT2D m) kojom se zadaje matrica transformacije koja se primjenjuje
prije crtanja u globalnim koordinatama (to je zapravo transformacija iz lokalnih u
globalne koordinate - po defaultu postaviti na identitet, tj. jediničnu matricu!).
Definirajte koordinatni sustav s donjim lijevim uglom (-10, -5) i gornjim desnim
uglom (10, 5), te uz pomoć metode
trans(MT2D m) i odgovarajućih matrica
transformacije nacrtajte sljedeće elipse:
- Poluosi a = 4, b = 2, a središte elipse je u točki (4, 2);
- Poluosi a = 4, b = 2, velika os elipse je pod kutem od 30°
prema osi x, a središte je u ishodištu.
Primjer:
applet
2.5. U klasu
MT2D dodajte mogućnost kompozicije geometrijskih transformacija
(tj. množenja odgovarajućih matrica transformacija) preko metode
mult(MT2D m) pri ćemu matrica
m množi s desna.
Kombiniranjem odgovarajućih geometrijskih transformacija nacrtajte slijedeće elipse:
- Poluosi a = 6, b = 3, velika os elipse je pod kutem od -30°
prema osi x, a središte je u točki (4, 0) (nacrtajte crvenom bojom);
- Isto kao i gore, ali promijenite poredak transformacija: prvo pomaknite, pa rotirajte
(nacrtajte plavom bojom);
- Poluosi a = 4, b = 1, elipsa je najprije zarotirana za 75°,
potom pomaknuta za 3 u desno, te zrcaljena na osi y (zelena boja).
Primjer:
applet
2.6. Koristeći jednostavne geometrijske likove (pravokutnike, kružnice, elipse, etc.)
nacrtajte lokomotivu (kamion, automobil ili slično) u crnoj boji. Potom crvenom
bojom nacrtajte pravac
y = 3 x + 6, te u plavoj boji nacrtajte
lokomotivu koja se zrcali na tom pravcu (upotrijebite metode klasa
MT2D i
GKS).
Primjer:
applet