<HTML> <HEAD> <TITLE>esempio di Java</TITLE> </HEAD> <BODY> <P ALIGN=CENTER> <applet code="StereoFot" width=650 height=260> <param name=destra Value=immagini/destra.jpg> <name=sinistra Value=immagini/sinistra.jpg> <name=C Value=391.56> <name=b Value=60> </applet> </BODY> </HTML> |
È facile notare che questo documento richiama l'applet di nome "StereoFot" (cui assegna uno spazio di 650x260 pixel), e fornisce i parametri relativi ai fotogrammi (destro e sinistro), alla base (60 cm.) e alla distanza principale ricavata in pixel (391.56).
Lo script del programma nel linguaggio Java, che, una volta compilato, fornisce l'applet, è il seguente:
import java.awt.*; import java.applet.*; import java.util.*; public class fotopiano extends Applet{ Image Destra, Sinistra; String sC,sB; int b; double C,X1S, Z1S, X1D, Z1D, X2S, Z2S, X2D, Z2D, parA, parB, X1, Y1, Z1, X2, Y2, Z2, Dist; public void init(){ Sinistra = getImage(getDocumentBase(), getParameter("sinistra")); Destra = getImage(getDocumentBase(), getParameter("destra")); sC = getParameter("C"); C = Double.valueOf(sC).doubleValue(); sB = getParameter("b"); b = Integer.valueOf(sB).intValue(); } public boolean mouseDown (java.awt.Event evt,int x, int y) { if ( x < 320 ){ X1D = x - 160; Z1D = 120 - y; }else { X1S = x - 490; Z1S = 120 - y; } return true; } public boolean mouseUp (java.awt.Event evt,int x, int y) { if ( x < 320 ) { X2D = x - 160; Z2D = 120 - y; }else{ X2S = x - 490; Z2S = 120 - y; parA = X1S - X1D; parB = X2S - X2D ; X1 = b * X1S / parA; Y1 = b * (C/100) / parA; Z1 = b * Z1S/ parA; X2 = b * X2S / parB; Y2 = b * (C/100) / parB; Z2 = b * Z2S / parB; Dist = (X2 - X1)*(X2 - X1) + (Y2 - Y1)*(Y2 - Y1) + (Z2 - Z1)*(Z2 - Z1); Dist = Math.sqrt(Dist); Dist = Math.round(Dist); repaint(); } return true; } public void paint(Graphics g) { g.drawImage(Sinistra,0,0,this); g.drawImage(Destra,330,0,this); g.setColor(Color.yellow); g.fillRect(0,240,650,20); g.setColor(Color.black); Font f = new Font("TimesRoman", Font.BOLD, 13); g.setFont(f); g.drawString(" Ultima misura: d = cm. " + Dist, 10,255); } } |
Analogamente a quanto si è detto per il programma destinato a rilevare le misure sul fotopiano, c'è da dire che:
- la parte scritta in color magenta provvede a richiamare le risorse di Java e a dichiarare le variabili;
- la parte scritta in rosso, trasforma i parametri in immagini o in valori numerici;
- la parte scritta in azzurro programma i calcoli da effettuarsi al verificarsi degli eventi mouseDown (tasto del mouse abbassato) e mouseUp (tasto del mouse alzato);
- la parte scritta in verde disegna i due fotogrammi e trascrive il valore numerico della distanza.
Da tener presente che le immagini (di dimensioni 320x240 pixel) sono messe affiancate e con il vertice superiore sinistro posizionato rispettivamente nei punti (0,0) e (320,0), di conseguenza l'origine dei due sistemi di riferimento si trova, rispettivamente, nei punti (160,120) e (490,120).
Al verificarsi dei due eventi, il programma distingue i casi in cui la x sia inferiore o superiore a 320, cioè rileva se l'evento si è verificasto sul primo o sul secondo fotogramma.
Per utilizzare il programma, noi dovremo:
- individuare i due punti su entrambi i fotogrammi;
- abbassare il tasto del mouse sul primo punto del fotogramma di sinistra e sollevarlo in corrispondenza del secondo punto dello stesso fotogramma;
- ripetere l'operazione su secondo fotogramma.
Al verificarsi dell'evento mouseUp sul secondo fotogramma, il programma calcola la distanza tra i due punti A(X1,Y1,Z1) e B(X2,Y2,Z2), le cui coordinate sono state ricavate applicando le tre formule del caso normale.
Analogamente a quanto si è detto per l'applet relativo al fotopiano, il programma "StereoFot", nella versione finale, è stato semplicemente integrato con altre istruzioni che consentono di:
- caricare immagini di dimensioni 800x600 pixel e farle scorrere in finenestre di 300x300 pixel;
- utilizzare i tasti (oltre che il mouse) per lo spostamento delle immagini;
- visualizzare uno dei due fotogrammi per individuare la zona interessata dal rilievo;
- registrare, oltre alla distanza tra due punti, le coordinate dei singoli punti rilevati in modo da poterli rappresentare graficamente nei tre piani di riferimento xy,xz e yz;