Želvja grafika

Iz MaFiRaWiki

Ta članek ali del članka je v delu. Veseli bomo, če ga boste dopolnili in popravili.

Kaj pomeni to opozorilo?

Želvja grafika je način risanja, ki je bil uveden s programskim jezikom logo. Želvjo grafiko seveda lahko reliziramo tudi v drugih programskih jezikih. Ena od možnosti je, da uporabimo programski jezik java.

Za uporabo želvje grafike potrebujemo razred Turtle, oziroma datoteko Turtle.class in dokumentacijo (opis lastnosti in metod razreda Turtle), ko to imamo lahko uporabljamo objekte tega razreda.

Objekt razreda Turtle predstavlja želvo, ki je postavljena na grafično površino in se zna po njej premikati. Pri premikanju lahko za seboj pušča sled oziroma riše. Poleg tega pa zna tudi na svoj trenutni položaj narisati nekaj osnovnih likov.

Želva je objekt, ki se giblje v 2D prostoru. Zna spreminjati smer in položaj (naprej, nazaj, levo, desno) in pri svojem premikanju lahko za seboj pušča sled.

Vsebina

METODE razreda Turtle.class:

  • void barva(Color danaBarva): nastavi barvo za izris na danaBarva
  • void spi (int cakaj): počaka nekaj milisekund oz spi nekaj milisekund
  • void napisi (String sporocilo): na mestu želve izpiše sporočilo
  • void krog (double radij): nariše krog z radijem radij s središčem v trenutnem položaju želve
  • Turtle premakniSe(double levo, double naprej): obrne se v levo za levo stopinj in se premakne za naprej točk naprej.
  • Turtle narisi (double levo, double naprej): obrne se v levo za levo stopinj in se premakne za naprej točk naprej. pri premikanju za seboj pušča sled (riše)
  • void polnKrog (double radij): nariše poln poln krog z radijem radij
  • void polnPravokotnik (double sirina, double visina): nariše poln pravokotnik s širino sirina in višino visina, želva se nahaja v sredini pravokotnika

NAREDIMO KONKRETNO ŽELVO:

Z ukazom Turtle zelvak;

Povemo, da se bo v spremenljivki zelvak nahajala referenca (naslov) nekega objekta iz razreda Turtle.

Z ukazom new Turtle();

se ustvari nov objekt, ki pripada razredu Turtle. Ta objekt ima lastnosti, ki so za njega predpisane v razredu Turtle.class.

Z ukazom Zelvak = new Turtle();

spremenljivka zelvak kaze na objekt tipa Turtle v spremenljivki zelvak je naslov objekta tipa Turtle

LASTNOSTI VSAKE ŽELVE:

Vsaka želva ima: smer, položaj (x koordinata, y koordinata)

V trenutku ko ustvarimo konkretno želvo je ta obrnjena v desno in se nahaja na sredini zaslona (točka 380,300).

KAKO ŽELVAM UKAZUJEMO:

Z ukazom imeObjekta.metoda(parametri);povemo objektom kaj naj počnejo.

PRIMER:

  1.  
  2. zelvak.barva(modra); //spremeni barvo v modro
  3. zelvak.spi(2000) //zaspi za dve sekundi
  4. zelvak.narisi(90, 30); //obrni se za 90 v levo in pojdi naprej za 30
  5. //če želimo imeti dve želvi ustvarimo dva objekta tipa Turtle.
  6. Turtle zelvak = new Turtle();
  7. Turtle zelvica = new Turtle();

Recimo da z želvo zelo pogosto izvajamo določen postopek, naprimer risanje kvadrata. Metoda za risanje kvadrata je:

  1.  
  2. public static void kvadrat(int a, Turtle zelvak){
  3. zelvak.narisi(90, a);
  4. zelvak.narisi(90, a);
  5. zelvak.narisi(90, a);
  6. zelvak.narisi(90, a);
  7. }

Taksno delo je lahko zamudno, zato uporabimo dedovanje. Naredimo razred pametnih želv, ki je razširitev razreda Turtle:

  1.  
  2. public class PametnaZelva extends Turtle{
  3. public static void kvadrat(int a){
  4. zelvak.narisi(90, a);
  5. zelvak.narisi(90, a);
  6. zelvak.narisi(90, a);
  7. zelvak.narisi(90, a);
  8. }
  9. }

Metoda kvadrat ima le en parameter. Metoda nariši se bo izvedla nad objektom, ki ga bomo šele ustvarili (objekt vrste PametnaZelva).

  1.  
  2. PametnaZelva zelvak = new PametnaZelva();
  3. zelvak.kvadrat(29); //narise kvadrat z dolžino stranice 29

Razred PametnaZelva moramo seveda najprej prevesti, da dobimo .class datoteko, šele potem lahko ustvarimo objekt te vrste.

LOGO ŽELVA

Na osnovi razreda Turtle pa lahko z dedovanjem naredimo LOGO želvo. V programskem jeziku LOGO so ukazi za premikanje želv naslednji:

  • left n ali (lt n): obrne želvo za n stopinj v desno
  • right n ali (rt n): obrne želvo za n stopinj v levo
  • forward n ali (fd n): želva se premakne n korakov naprej
  • back n ali (bk n): želva se premakne za n korakov nazaj
  • HOME: želvo postavi nazaj v izhodišče (po poti do izhodišča seveda riše črto).
  • CLEAN: na zaslonu pobriše vse kar je narisano (želvo pusti kot je bila).
  • CLEARSCREEN (ali CS): je enako kot CLEAN. Pobriše zaslon in postavi želvo v izhodišče.
  • SETPOS [0 0]: postavi želvo v izhodišče in za seboj riše črto (enako kot HOME).
  • SETX n: pomakne želvo po osi x na koordinato x=n.
  • SETY n: pomakne želvo po osi y na koordinato y=n.
  • SETPOS [m n]: želva nariše črto do točke, ki ustreza koordinati (m,n).
  • PENUP (ali PU): dvignemo pero. Želva ob premikanju ne riše črte!
  • PENDOWN (ali PD): spustimo pero. Želva ob premikanju ponovno riše črto!
  • SHOWTURTLE (ali ST): želvo ponovno pokaže.
  • HIDETURTLE (ali HT): skrije želvo!


PRIMER UPORABE:

Slika predstavlja Kochove snežinke velikosti: 1, 2, 3, 4
Slika predstavlja Kochove snežinke velikosti: 1, 2, 3, 4


program v katerem želva nariše Kochovo snežinko velikosti 3

  1.  
  2. ublic class Koch {
  3. public static void main(String[] args) {
  4. //ustvarimo novo zelvo
  5. Turtle zelva = new Turtle();
  6. //zelvo pomaknemo bolj levo
  7. zelva.premakniSe(180, 150);
  8. zelva.premakniSe(180, 0);
  9. //poklicemo metodo za izris Kochove snezinke
  10. koch(3, 100, zelva);
  11. zelva.premakniSe(-120, 0);
  12. koch(3, 100, zelva);
  13. zelva.premakniSe(-120, 0);
  14. koch(3, 100, zelva);
  15. }
  16.  
  17. //metoda za izris Kochove krivulje
  18. public static void koch(int stopnja, int dolzina, Turtle zelva) {
  19. if(stopnja == 1) { //narisemo samo osnovno crto
  20. zelva.narisi(0, dolzina);
  21. }
  22. else {
  23. koch(stopnja-1, dolzina/4, zelva); //poklicemo metodo z za 1 manjso st.
  24. zelva.premakniSe(60, 0);
  25. koch(stopnja-1, dolzina/4, zelva);
  26. zelva.premakniSe(240, 0);
  27. koch(stopnja-1, dolzina/4, zelva);
  28. zelva.premakniSe(60, 0);
  29. koch(stopnja-1, dolzina/4, zelva);
  30. }
  31. }
  32. }

GLEJ TUDI:

Objekt

Osebna orodja