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