Sei sulla pagina 1di 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

}

}