Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање на језику Java - колоквијуми
Други колоквијум
Прва група
29. 1. 2006

Задатак | Напомене | Решење

Поставка задатка (решење | садржај)

Саставити на језику Java следећи пакет класа:


Напомене (садржај)


Решење задатка (поставка | садржај)

// Kriva.java

package grafika;

public interface Kriva {
  double x (double p);
  double y (double p);
}

// Spirala.java

package grafika;

public class Spirala implements Kriva {
  private double a;

  public Spirala (double aa) { a = aa; }

  public Spirala () { a = 1; }

  public double x (double p) { return a * p * Math.cos (p); }

  public double y (double p) { return a * p * Math.sin (p); }
}

// Cvet.java

package grafika;

public class Cvet implements Kriva {
  private double a;
  private int n;

  public Cvet (double aa, int nn) { a=aa; n=nn; }

  public Cvet () { a = 5; n = 7; }

  public double x (double p) { return a * (1+Math.sin(n*p)) * Math.cos(p); }

  public double y (double p) { return a * (1+Math.sin(n*p)) * Math.sin(p); }
}

// Grafika.java

package grafika;

import java.awt.*;
import java.awt.event.*;
import grafika.*;

public class Grafika extends Frame {

  private Kriva kriva = new Spirala ();
  private Thread nit;
  private TextField tksPmax = new TextField ("10",  4),
                    tksDp   = new TextField (".1",  4),
                    tksDt   = new TextField ("100", 4),
                    tksA    = new TextField ("1",   4),
                    tksN    = new TextField ("6",   4);
  private Checkbox rdgSpirala, rdgCvet;

  private class Platno extends Canvas implements Runnable {

    public void paint (Graphics g) {
      if (nit != null) nit.interrupt ();
      (nit = new Thread (this)).start ();
    }

    public void run () {
      Graphics g = getGraphics ();
      g.setColor (Color.BLACK);
      double pmax=Double.parseDouble(tksPmax.getText()),
             dp  =Double.parseDouble(tksDp  .getText());
      int dt=Integer.parseInt  (tksDt  .getText());
      int sir = getWidth(), vis = getHeight ();
      int x0 = (int)((kriva.x(0) + 10) / 20 * sir),
          y0 = (int)((10 - kriva.y(0)) / 20 * vis);
      if (rdgSpirala.getState()) {
        kriva = new Spirala ( Double.parseDouble(tksA.getText()));
      } else if (rdgCvet.getState ()) {
        kriva = new Cvet ( Double .parseDouble(tksA.getText()),
                           Integer.parseInt   (tksN.getText())
                         );
      }
      try {
        for (double p=0; p<=pmax && !nit.interrupted(); p+=dp) {
          int x = (int)((kriva.x(p)+10)/20*sir),
              y = (int)((10-kriva.y(p))/20*vis);
          g.drawLine (x0, y0, x, y);
          x0 = x; y0 = y;
          nit.sleep (dt);
        }
      } catch (InterruptedException gr) {}
      nit = null;
    }
  } // class Platno

  private Platno platno = new Platno ();

  private Grafika () {
    super ("Grafika");
    setBounds (100, 100, 400,300);
    addWindowListener (new WindowAdapter () {
      public void windowClosing (WindowEvent d) {
        if (nit != null) nit.interrupt ();
        dispose ();
      }
    });

    add (platno, "Center");
    platno.setBackground (new Color(240,240,240));
    Panel ploca = new Panel (new GridLayout (0,1));
    add (ploca, "South");
    Panel plo = new Panel ();
    ploca.add (plo);
    plo.add (new Label ("pmax:", Label.RIGHT));
    plo.add  (tksPmax);
    plo.add (new Label ("dp:",   Label.RIGHT));
    plo.add  (tksDp);
    plo.add (new Label ("dt:",   Label.RIGHT));
    plo.add  (tksDt);

    ploca.add (plo = new Panel());
    CheckboxGroup grp = new CheckboxGroup ();
    plo.add (rdgSpirala = new Checkbox ("Spirala", grp, true));
    plo.add (rdgCvet    = new Checkbox ("Cvet", grp, false));
    plo.add (new Label ("a:", Label.RIGHT));
    plo.add  (tksA);
    plo.add (new Label ("n:", Label.RIGHT));
    plo.add  (tksN);

    ploca.add (plo = new Panel());
    Button dgm = new Button ("Crtaj");
    plo.add (dgm);
    dgm.addActionListener (new ActionListener () {
      public void actionPerformed (ActionEvent d) { platno.repaint (); }
    });
    plo.add(dgm = new Button ("Prekini"));
    dgm.addActionListener (new ActionListener () {
      public void actionPerformed (ActionEvent d) { if (nit != null) nit.interrupt (); }
    });

    setVisible (true);
  } // Grafika()

  public static void main (String[] varg) {
    new Grafika ();
  }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2010, Laslo Kraus
Последња ревизија: 8.9.2010.