<HTML> <HEAD> <TITLE>esempio di Java</TITLE> </HEAD> <BODY> <P ALIGN=CENTER> <applet code=fotopiano width=400 height=420> <param name=fotografia Value=immagini/cattedrale.gif> <param name=Xpa Value=203> <param name=Ypa Value=14> <param name=Xpb Value=203> <param name=Ypb Value=339> <param name=Dmetri Value=28> </applet> </BODY> </HTML> |
Non è difficile notare che il documento carica prima l'applet di nome fotopiano (code=fotopiano) e gli assegna un'area di 400 x 420 pixels (width=400 height=420), quindi assegna i valori ai parametri corrispondenti all'immagine da caricare <param name=fotografia Value=immagini/cattedrale.gif>, alle coordinate del punto A(203,14), a quelle del punto B(203,339) e alla distanza (Dmetri=28). Da non dimenticare, infine, che l'origine del sistema di riferimento X,Y delle coordinate (in pixels) trovasi in alto a sinistra del fotogramma.
Lo script del programma nel linguaggio Java, che, una volta compilato, fornisce l'applet, è il seguente:
import java.awt.*; import java.applet.*; public class fotopiano extends Applet{ Image foto; String sXa, sYa, sXb, sYb, sMetri; int xUp, yUp, xDown, yDown,Xa, Ya, Xb, Yb, XA, YA, XB, YB; double Tara, coeff, Dist,Distanza,Metri; public void init(){ sXa = getParameter("Xpa"); Xa = Integer.valueOf(sXa).intValue(); sYa = getParameter("Ypa"); Ya = Integer.valueOf(sYa).intValue(); sXb = getParameter("Xpb"); Xb = Integer.valueOf(sXb).intValue(); sYb = getParameter("Ypb"); Yb = Integer.valueOf(sYb).intValue(); sMetri = getParameter("Dmetri"); Metri = Double.valueOf(sMetri).doubleValue(); foto = getImage(getDocumentBase(), getParameter("fotografia")); } public boolean mouseDown(Event evt, int x, int y) { xDown = x; yDown = y; return true; } public boolean mouseUp(Event evt, int x, int y){ xUp = x; yUp = y; Dist = Math.sqrt((xUp - xDown)*(xUp - xDown) + (yUp - yDown)*(yUp - yDown)); Tara = Math.sqrt((Xa - Xb)*(Xa - Xb) + (Ya - Yb)*(Ya - Yb)); Distanza = (Math.round(Dist * Metri *100/Tara))/100 ; repaint(); return true; } public void paint(Graphics g) { g.drawImage(foto,0,0,this); g.setColor(Color.yellow); g.fillRect(0,401,400,20); g.setColor(Color.black); Font f = new Font("TimesRoman", Font.BOLD, 13); g.setFont(f); g.drawString("Ultima misura: m. " + Distanza, 10,415); } } |
La parte di colore magenta serve a richiamare le risorse (classi) di Java (
import java.awt.*; import java.applet.*;) e a dichiarare le variabili (
Image, String, int, double).
La parte in rosso trasforma i parametri in valori numerici (sXa = getParameter("Xpa"); Xa = Integer.valueOf(sXa).intValue() ecc.) o in immagine (foto = getImage(getDocumentBase(), getParameter("fotografia"))).
La parte in blu effettua il rilievo vero e proprio. Quando si abbassa il tasto del mouse (evento mouseDown) in un punto, ne vengono rilevate le coordinate (xDown, yDown), mentre quando si alza il tasto del mouse in un altro punto (evento mouseUp) vengono rilevate le coordinate (xUp, yUp), calcolata la distanza in pixels dal precedente punto (Math.sqrt((xUp - xDown)*(xUp - xDown) + (yUp - yDown)*(yUp - yDown))), la quale, successivamente, con una semplice proporzione, viene trasformata in metri sulla base della distanza nota ((Math.round(Dist * Metri *100/Tara))/100).
La parte in verde, infine provvede a disegnare sullo schermo:
- la fotografia (foto), con il vertice superiore sinistro posto nel punto (0,0) e con le dimensioni reali 400x400 px (this) (g.drawImage(foto,0,0,this));
- sotto la fotografia, un rettangolo giallo, largo quanto il fotogramma ed alto 20 pixel (g.fillRect(0,401,400,20));
- sul rettangolo una scritta in nero, con carattere TimesRoman grassetto e altezza 13 pixel ( Font ("TimesRoman", Font.BOLD, 13)) la frase "ultima misura: m. " seguita dalla distanza calcolata in metri, a partire da punto di coordinate (10,412) (g.drawString("Ultima misura: m. " + Distanza, 10,415)).
Se proviamo a caricare l'applet, per conoscere la distanza tra due punti giacenti sulla facciata della cattedrale di Bari, sarà sufficiente abbassare il tasto del mouse quanto il cursore si trova sul primo punto, spostare il cursore sul secondo punto e rilasciare il tasto. La distanza comparirà sulla striscia gialla.
Il limite del programma sopra esposto è dato dalle limitate dimensioni del fotogramma, che deve essere visualizzato integralmente sullo schermo. Se si desidera caricare la stessa fotografia, con dimensioni superiori a quelle dello schermo, dovremo poterla spostare e ciò comporta nuove istruzioni e quindi una nuova programmazione.