PrecedenteAltri AppletSuccessivo



Figure di Lissajous - 2

A differenza di tutti gli applet precedenti, lissajous 2 è animato: anche in assenza di movimenti del mouse l'immagine cambia.

In generale si può usare questa tecnica per illustrare modelli che possiedano un movimento intrinseco (pendoli, ingranaggi, ecc.).

Questo browser non e' abilitato
a visualizzare applet

Istruzioni:

Facendo click&drag con il mouse sulla figura si possono modificare i periodi delle due oscillazioni.
In particolare:
Il movimento orizzontale modifica il periodo dell'oscillazione sull'asse X.
Il movimento verticale modifica il periodo dell'oscillazione sull'asse Y.


Il puntino blu serve per "invogliare" il "lettore" a intervenire con il mouse.

Anche in assenza di interazioni questo applet si aggiorna continuamente modificando la fase delle due oscillazioni.


Codice sorgente: lissajous2.java
import java.applet.Applet;
import java.awt.*;


public class lissajous2 extends Applet implements Runnable {
    int posx=0,posy=0;
    double startAng = 0.0;
    Thread clock;

    public void drawCurve(Graphics g) {
      double ang0=0, ang1=Math.PI*2*3.5; // estremi
      int i, n=500;
      int w = size().width;             // dimensioni dell'applet
      int h = size().height;
      double k1 = 1+0.15*(double)(posx-w/2)/(double)w;
      double k2 = 1+0.15*(double)(posy-h/2)/(double)h;
     
      int x0=0,y0=0,x1=0,y1=0;
      for(i=0;i<n;i++)
          {
           double ang = startAng + ang0+(ang1-ang0)*i/(double)(n-1);
           x1 = (int)(w * (Math.sin(ang*k1)+1.0)*0.5);
           y1 = (int)(h * (Math.sin(ang*k2)+1.0)*0.5);
           if(i>0) g.drawLine(x0,y0,x1,y1);
           x0 = x1;
           y0 = y1;
          }
    }       
    public void paint(Graphics g) {
      g.setColor(Color.black);
      drawCurve(g);
      int lx=4,ly=4;
      g.setColor(Color.blue);
      g.fillOval(posx-lx/2,posy-ly/2,lx,ly);
      g.setColor(Color.black);
      g.drawOval(posx-lx/2,posy-ly/2,lx,ly);
    }
    public void init() { 
      posx = size().width/2;
      posy = size().height/2;
    }
    public boolean mouseDown(Event evt, int x, int y) {
      posx=x;
      posy=y;
      repaint();
      return true;
    }
    public boolean mouseDrag(Event evt, int x, int y) {
      posx=x;
      posy=y;
      repaint();
      return true;
    }

    public void run() {
      while(true) {
        startAng += 0.6;
        repaint();
        try {Thread.sleep(100); }
        catch (InterruptedException e) { break;}
      }
    }

    public void start() {
        clock = new Thread(this);        
	clock.start();
    }

    public void stop() {        
        clock.stop();
        clock = null;
    }


}

  





PrecedenteAltri AppletSuccessivo


Gian Marco Todesco