Projekt iz Računalne grafike

Implementacija i modifikacija klasa MT2D i GKS

Implementacija MT2D klase


S obzirom da za razvoj Android aplikacija koristim programski jezik Java, implementacija gotovih klasa koje smo obradili na kolegiju nije bio veliki problem, pošto smo i tamo radili u Javi. Kod implementacije klase MT2D nije bila potrebna nikakva modifikacija, osim što sam dodao nekoliko metoda koje su mi bile potrebne kod iscrtavanja, među kojima su rotirajOkoTocke i skalirajOkoTocke.


Implementacija GKS klase


Kod implementacije GKS klase bilo je potrebno napraviti nekoliko manjih promjena kako bi sve radilo na Androidu. Kao što je već rečeno, iscrtavanje se odvija na Canvasu, što znači da umjesto objekta tipa Graphics, sa kojim smo radili na kolegiju, imamo objekt tipa Canvas. Također, ulogu prijašnje varijable Font preuzima varijabla tipa Paint. No, klasa Paint nije odgovorna samo za font teksta, nego i za boju iscrtavanja, debljinu linije itd. Kako bi linije izgledale ljepše, uključio sam antialiasing pomoću sljedeće naredbe.

 
            paint.setAntiAlias(true);
          

Također, bilo je potrebno izmjeniti dio metode linijaDo, zbog drugačijeg iscrtavanja.

 
            gr.drawLine(x1,y1,x2,y2);
            can.drawLine(x1,y1,x2,y2, paint);
          

U klasu GKS su dodane metode koje koristim pri iscrtavanju svih elemenata, i to metoda za elipsu (ili neki mnogokut), pravokutnik i trokut.


          public void nacrtajElipsu(double a, double b, double dx) {
              postaviNa(a * Math.cos(0), b * Math.sin(0));
              double x;
              double y;
              for (double i=0; i <= 2*Math.PI+0.05; i += dx) {
                  x = a * Math.cos(i);
                  y = b * Math.sin(i);
                  linijaDo(x,y);
              }
          }
          
          public void nacrtajPravokutnik(double w, double h) {
              postaviNa(w/2, h/2);
              linijaDo(w/2, -h/2);
              linijaDo(-w/2, -h/2);
              linijaDo(-w/2, h/2);
              linijaDo(w/2, h/2);
          }
          
          public void nacrtajTrokut(double a, double h) {
              postaviNa(-a/2, 0);
              linijaDo(0, h);
              linijaDo(a/2, 0);
              linijaDo(-a/2, 0);
          }