Distanza fra due punti

Si scriva un applet che calcola la distanza fra due punti. I due punti vengono indicati con il mouse, in questo modo: il primo punto è quello in cui il mouse è stato premuto, il secondo è quello in cui il pulsante è stato rilasciato. Si tratta quindi di trovare la distanza fra il punto in cui il mouse viene premuto e quello in cui viene rilasciato.

Cominciamo con la funzione mouseUp. Questa funzione deve stampare la distanza fra il punto in cui è stato premuto il pulsante e quello in cui è stato sollevato. Questa funzione ha a disposizione le coordinate del punto di rilascio (nelle variabili x e y), ma non quelle del punto di click.

D'altra parte, le coordinate del punto di pressione sono note quando si esegue mouseDown. È quindi necessario fare in modo che mouseDown memorizzi queste coordinate in modo tale che mouseUp le possa usare. Usiamo quindi delle variabili globali, che si possono accedere sia da mouseDown che da mouseUp.

Riassumendo: mouseDown memorizza le coordinate del punto in cui si è premuto il pulsante in due variabili globali xpressione e ypressione; in mouseUp si calcola la distanza fra i punti (x,y), che è la coordinata del punto in cui il pulsante è stato lasciato, e (xpressione,ypressione). Il valore di questa differenza viene poi stampato.

Il programma finale Distanza.java contiene anche il disegno di una croce nel punto di pressione, croce che viene poi cancellata quando si lascia il pulsante del mouse.

/*
  Distanza fra due punti.
*/

import java.awt.*;

public class Distanza extends java.applet.Applet {
  int xpremuto, ypremuto;

  public boolean mouseDown(Event e, int x, int y) {
    Graphics g=getGraphics();

    g.drawLine(x-10,y,x+10,y);
    g.drawLine(x,y-10,x,y+10);

    xpremuto=x;
    ypremuto=y;

    return true;
  }

  public boolean mouseUp(Event e, int x, int y) {
    Graphics g=getGraphics();
    double d;

    g.clearRect(xpremuto-10,ypremuto-10,21,21);
    g.clearRect(0,0,200,20);

    d=Math.sqrt((double) (x-xpremuto)*(x-xpremuto) + (y-ypremuto)*(y-ypremuto));

    g.drawString(""+d,10,20);

    return true;
  }
}