You are on page 1of 4

/* * To change this template, choose Tools | Templates * and open the template in the editor.

*/ package Grafico; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author QUARTAIB1112 */ public class RegCor { public static void main(String[] v) throws IOException{ JFrame f = new JFrame("Grafico f(x)"); Container c = f.getContentPane(); FunctionPanel p = new FunctionPanel(); c.add(p); f.setBounds(100,100,500,400); f.show(); } } class FunctionPanel extends JPanel { int xMin=-50, xMax=50, yMin=-50, yMax=50; // gli intervalli in cui vogliamo graficare int larghezza=500, altezza=400; // corrispondono alla grandezza del Jframe // ERA MEGLIO USARE UN COSTRUTTORE. float fattoreScalaX, fattoreScalaY; @Override public void paintComponent(Graphics g){ System.out.println("Quante coppie di valori vuoi inserire?"); float[] ax; float[] ay; BufferedReader leggi=new BufferedReader(new InputStreamReader(System.in)); int num = 0; try { num = Integer.parseInt(leggi.readLine()); } catch (IOException ex) { Logger.getLogger(FunctionPanel.class.getName()).log(Level.SEVERE, null, ex); } ax = new float[num];

ay = new float[num]; int i,k; //Inserimento valori for(i=0;i<num;i++){ k=i+1; System.out.println("Inserisci x"+k+":"); try { ax[i]=Float.parseFloat(leggi.readLine()); } catch (IOException ex) { Logger.getLogger(FunctionPanel.class.getName()).log(Level.SEVERE, null, ex); } System.out.println("Inserisci y"+k+":"); try { ay[i]=Float.parseFloat(leggi.readLine()); } catch (IOException ex) { Logger.getLogger(FunctionPanel.class.getName()).log(Level.SEVERE, null, ex); } } //Calcolo di ym e xm float X=0,Y=0; for(i=0;i<num;i++){ X=X+ax[i]; Y=Y+ay[i]; } float xm=X/num; float ym=Y/num; //Calcolo di xi e yi float[] axi; float[] ayi; axi = new float[num]; ayi = new float[num]; for(i=0;i<num;i++){ axi[i]=ax[i]-xm; ayi[i]=ay[i]-ym; } //Calcolo di xi*yi float[] axiyi; axiyi = new float[num]; for(i=0;i<num;i++){ axiyi[i]=axi[i]*ayi[i]; } //Calcolo di xi^2 e yi^2 float[] axi2; float[] ayi2; axi2 = new float[num]; ayi2 = new float[num]; for(i=0;i<num;i++){ axi2[i]=axi[i]*axi[i]; ayi2[i]=ayi[i]*ayi[i]; System.out.println(axi2[i]+" "+ayi2[i]);

} //Calcolo di sommatoria xi*yi float Sxiyi=0,Sxi2=0,Syi2=0; for(i=0;i<num;i++){ Sxiyi=Sxiyi+axiyi[i]; Sxi2=Sxi2+axi2[i]; Syi2=Syi2+ayi2[i]; } System.out.println(Sxiyi+" "+Sxi2+" "+Syi2); //Calcolo dei parametri delle due rette di regressione float a1,a2,b1,b2; b1=Sxiyi/Sxi2; a1=ym-(b1*xm); b2=Sxiyi/Syi2; a2=xm-(b2*ym); //Stampa delle equazioni System.out.println("y="+b1+"x+("+a1+")"); System.out.println("x="+b2+"y+("+a2+")"); super.paintComponent(g); // va fatto sempre setBackground(Color.white); // fondo bianco fattoreScalaX=larghezza/((float)xMax-xMin); fattoreScalaY=altezza/((float)yMax-yMin); // dobbiamo fare le proporzioni tra // l'intervallo di valori della finestra // (500*400) e l'intervallo da graficare (14*2) // incornicia il grafico in nero g.setColor(Color.black); g.drawRect(0,0,larghezza-1,altezza-1); // e disegna degli assi cartesiani g.setColor(Color.red); g.drawLine(0,altezza/2, larghezza-1,altezza/2); g.drawLine(larghezza/2,0,larghezza/2,altezza-1); // scrittura valori estremi degli assi g.drawString(""+xMin, 5,altezza/2-5); g.drawString(""+xMax, larghezza-10,altezza/2-5); g.drawString(""+yMax, larghezza/2+5,15); g.drawString(""+yMin, larghezza/2+5,altezza-5); // disegna il grafico della funzione in blu g.setColor(Color.blue); setPixel(g,xMin,f(xMin,a1,b1)); // punto iniziale for (int ix=1; ix<larghezza; ix++){ // per ognuno dei pixel della finestra float x = xMin+((float)ix)/fattoreScalaX; setPixel(g,x,f(x,a1,b1)); } setPixel(g,xMin,f(xMin,a1,b1)); // punto iniziale for (int ix=1; ix<larghezza; ix++){ // per ognuno dei pixel della finestra float x = xMin+((float)ix)/fattoreScalaX; setPixel(g,x,f(x,a2,b2)); }

} // definizione della funzione, // statica, da graficare static float f(float x,float a,float b){ float y=a+b*x; return y; // sin(x) la funzione (statica!) //che decidiamo di graficare: //ovviamente potrebbe essere qualsiasi funzione } // questa serve per riportare i valori della // funzione sui valori della finestra void setPixel(Graphics g, float x, float y){ if (x<xMin || x>xMax || y<yMin || y>yMax ) { return; } int ix = Math.round((x-xMin)*fattoreScalaX); int iy = altezza-Math.round( (y-yMin)*fattoreScalaY); g.drawLine(ix,iy,ix,iy); // disegna in effetti un singolo punto } }

You might also like