import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;

//List<Double> frameList =  new ArrayList<Double>();

// Derivation de la fenetre principale a parir fr JFRame
public class TraceurSuiteMetIt extends JFrame{

MonCanvasf MonCanv;
TraceurSuiteMetIt(String titre, Vector<Double> vv, RegLin RR){
	super(titre);
	
	setLayout(new FlowLayout());
	MonCanv= new MonCanvasf(vv,RR);
	add(MonCanv);
}

public static void main(String[] args)
{ int nn=0;
Vector<Double> MonVect =  new Vector<Double>();	

try { File fichier = new File("Lagrange.txt");
       Scanner entree = new Scanner (fichier);
       entree.useLocale(Locale.US); 
while (entree.hasNextDouble())
{ 
double a=0.0;
 a = entree.nextDouble();
//System.out.println(a);
MonVect.add(a); 
//System.out.println("Ok ");      

}
entree.close();
//System.out.println("a= "+MonVect.elementAt(nn)+" nb= " +nb+"nn= "+nn);

nn++;
         }
     catch(FileNotFoundException e)
      {  System.err.println("Fichier non trouve");
      }


int nb= MonVect.size();
double[] absc = new double[nb-2];
double[] ordo = new double[nb-2];
for (int i=0;i<nb-3;i++){
absc[i]=Math.log(Math.abs(MonVect.lastElement()-MonVect.elementAt(i)));
//System.out.println(absc[i]);
ordo[i]=Math.log(Math.abs(MonVect.lastElement()-MonVect.elementAt(i+1)));}
RegLin MaRegLin= new RegLin(absc,ordo);
MaRegLin.print();
TraceurSuiteMetIt fenetre = new TraceurSuiteMetIt("Vitesses de convergence", MonVect, MaRegLin);
	  fenetre.pack();
	  fenetre.setSize(750,650);
	  fenetre.setResizable(true);
	  fenetre.setVisible(true);
}
}




class MonCanvasf extends Canvas {
	Vector<Double> V;
	RegLin R;
MonCanvasf( Vector<Double> vec,RegLin RR){
	// arriere plan noir
 setBackground(Color.white);
 setForeground(Color.green);
 	V=vec;
 	R=RR;}
 
public void paint (Graphics g) 
{ 
double x,y,a,b;
int xpos, ypos;
// dessin des axes

a=R.geta();
b=R.getb();
g.translate(300,300);
g.setColor(Color.red);
g.drawLine(0,-300,0,300);
g.drawLine(-300,0,300,0);
g.drawString("-3",-290,-5);
g.drawString("3",290,-5);
// couleur de la fonction
g.setColor (new Color(255,255,0)); 
for(x=-3; x<=3;x+=0.01){ 
y=a*x+b;
xpos=(int)((x)*100);
ypos=(int)(-(y)*100);
g.fillOval(xpos,ypos,3,3);
}

g.setColor (new Color(0,0,255));
for(int i=0; i< V.size()-3;i++){ 
xpos=(int)((R.getxi(i))*100);
ypos=(int)((R.getyi(i))*100);
ypos=-ypos;
g.fillOval(xpos,ypos,5,5);
/*try {
Thread.sleep(50);
} 
catch (InterruptedException e) 
{
e.printStackTrace();
}*/
}
}
// Dimension minimale du Canvas
public Dimension getMinimumSize() { 
return new Dimension(600,600);
}

public Dimension getPreferredSize() { 
return getMinimumSize();
}

} 
