Traceur de graphique a partir d'un fichier texte ascii (tracage direct des points sans stockage)

Description

Ceci est une applet JAVA qui permet à partir d'un fichier texte au format ASCII de tracer un graphique.
Il ne stocke pas les données et les trace en direct car il a ete fait pour gerer des fichier ASCII comportant plus de 500 000 coordonnées.
Donc il est très rapide. De plus il a un repère qui s'adapte automatiquement aux données.

G@BuLe

Source / Exemple :


/**Importation des librairies*/
import java.io.*;
import java.net.*;
import java.util.*;
import java.applet.*;
import java.awt.*;

import javax.swing.*;
import java.lang.*;

/**Applet créant une courbe a partir des coordonnées dans un fichier texte*/
/** @author G@BuLe */

public class graphique extends JApplet
{
	URL             url              = null;
	URLConnection   urlConnexion     = null;
	InputStream     entree           = null;
	BufferedReader  fluxEntree       = null;
	String          valeur2          = new String("");
	String          ligne            = new String("");
	int             indiceSeparateur = 0;
	int            nbreDeLigne      = 0;	
	int			   lignesPassees	 = 0;
	private Vector     tableauValeury = new Vector();//vecteur contenant les y
	private Vector     tableauValeurx     = new Vector();//vecteur contenant les x

	
/**Donnée membre de l'applet - propre au graphique*/	
private	int	nbrePoint	= 0;//nbre total de coordonnée (point) disponible
private	double	valxf ;
		double	valyf ;
		double	maxx ;
		double	maxy ;
		double	minx ;
		double	miny ;
		double amaxy ;
		double aminy ;
		double amaxx ;
		double aminx ;
		
		int	ce;
		//String	source           = "Copie (2) de pib7801;.txt";
		//String	source           = "signalA.txt";
		String	source           = "test.txt";
		String	valx          = new String("");
		String	valy          = new String("");
		

/**Méthode d'initialisation de l'applet - initialise les paramètres du graphique*/
public void init()
{

try
{
showStatus("Initialisation des paramètres...");	
//creation des flux de fichier entrants

//source       = getParameter("source");
url          = new URL(getCodeBase(),source);
//url          = new URL(getCodeBase(),"signalA.txt");
urlConnexion = url.openConnection();
entree       = urlConnexion.getInputStream();
fluxEntree   = new BufferedReader(new InputStreamReader(entree));

//Lecture du fichier
while(fluxEntree.ready())
  {
  	ligne            = fluxEntree.readLine();
  	indiceSeparateur = ligne.indexOf(";");
  	valx          = new String(ligne.substring(0,indiceSeparateur));
  	valy           = new String(ligne.substring(indiceSeparateur + 1,ligne.lastIndexOf(";")));
  	tableauValeurx.addElement(valx);
    tableauValeury.addElement(valy);
  	//on cree les flottants pour pouvoir comparer les valeurs
  	valxf = Double.parseDouble( valx ) ;
  	valyf = Double.parseDouble( valy ) ;
  	//pour la premierre boucle , le valeurs sont les valeurs max
  	if (nbreDeLigne == 0){ minx = valxf ; maxx = valxf; miny = valyf ; maxy = valyf ; }
    if (valxf > maxx){ maxx = valxf;}
    if (valxf < minx){ minx = valxf;}
    if (valyf > maxy){ maxy = valyf;}
    if (valyf < miny){ miny = valyf;}
    nbreDeLigne++;
    ce = nbreDeLigne;
    
  }

//arrondi de min et max pour une meilleure lisibilité si c tres grand
if(((Math.abs(maxx))>1)&&((Math.abs(minx))>1))
{
	if(((Math.abs(maxy))>1)&&((Math.abs(maxy))>1)) // mais si y est tres grand on arrondi
	{
		amaxy = Math.ceil(maxy);
		aminy = Math.floor(miny);		
	
	}
	else // sinon il est tres petit et on arrondi pas
	{
		amaxy = maxy;
		aminy = miny;		
	}

	amaxx = Math.ceil(maxx);
	aminx = Math.floor(minx);
}
else ////on arrondi pas min et max pour pouvoir lire si l'ecart est tres petit
{
	if(((Math.abs(maxy))>1)&&((Math.abs(miny))<1)) // mais si y est tres grand on arrondi
	{
		amaxy = Math.ceil(maxy);
		aminy = Math.floor(miny);		
	
	}
	else // sinon il est tres petit et on arrondi pas
	{
		amaxy = maxy;
		aminy = miny;		
	}
	amaxx = maxx;
	aminx = minx;	
}

//Fermeture du fichier
fluxEntree.close();

//si problèmes de lecture du fichier
} catch (FileNotFoundException fnfe) {
     System.out.println("fichier non trouvé");
   }
   catch (IOException ioe) {
     System.out.println("erreur d'E/S " + ioe.getMessage());
   }

}//Fin de la méthode Init()
public void paint(Graphics g)
{
	Enumeration listex            = null;
	Enumeration listey            = null;
	Float       valeurPointx      = null;
	Float       valeurPointy      = null;
	// tracage des axes 
	g.drawLine(40, 60, 40, 360); 
	g.setFont(new Font("Helvetica", Font.PLAIN, 22)); 
	g.drawLine(40, 360, 1000, 360);
	
	
	// ecriture des informations
	g.setFont(new Font("Helvetica", Font.PLAIN, 12));
	g.setColor(Color.blue);
	g.drawString("Informations sur les bornes :",40,400);
	g.setColor(Color.black);
	g.drawString("X max : "+maxx + "     /    X min : " + minx ,40,420);
	g.drawString("Y max : "+maxy + "     /    Y min : " + miny ,40,440);
	
	
	
	// tracage axe des 0 si le minimum est inférieur à 0 
	/*g.setFont(new Font("Helvetica", Font.PLAIN, 12)); 
	g.setColor(Color.lightGray);
	int yz = 0; 
	if (miny < 0){
	  double d1 =  360 - (- miny * (300 / (maxy - miny)));
	  Double D1 = new Double(d1);
	  yz =  D1.intValue();
	  g.drawLine(40, yz, 1000, yz);
	  g.setColor(Color.black);
	  g.drawString("0.0", 3 , yz);
	  
		}*/

// dessin de l'axe x avec sa graduation
	
	//calcul de l'intervalle des valeurs sur l'axe des x
	double ecar ;
	ecar = (amaxx - aminx)/5;
	
	int ect = (int)ecar;
	
	
	// initialisation de la boucle
	int h = 0;
	double valeurpt = aminx; // variable pour le repere du point tracé
	
	while(h < 6){ //boucle de tracage 
	int x;
	

	
	// tranfert des coordonnées du x en pixels
	x = 40 + ((1000-40)/5 )*h;
	// conversion de la valeur du point en string pour l'affichage
  	String ss;
  	
	ss = Double.toString(valeurpt);
	//inscription de la coordonnée
	g.setFont(new Font("Helvetica", Font.PLAIN, 12)); 
	g.drawString(ss, x , 372);
	// tracage du petit trait sur l'axe
	g.setColor(Color.lightGray);
	g.drawLine(x, 360, x, 60); 
	g.setColor(Color.black);
	// si on a l'axe du 0 tracage du petit trait sur l'axe du 0
	//if (miny < 0) g.drawLine(x, yz + 2, x, yz-2);
	// pour + de lisibilité ....
	
	// incrementation des valeurs
	h++ ;

	valeurpt = valeurpt + ecar ;
	}

	
// dessin de l'axe y avec sa graduation
	
	//calcul de l'intervalle des valeurs sur l'axe des y
	double ecary ;
	ecary = (amaxy - aminy)/4;

	// initialisation de la boucle
	int d = 0;
	double valeurpty = amaxy; // variable pour le repere du point tracé
	
	while(d < 5){ //boucle de tracage 
	int y;
	
	// tranfert des coordonnées du y en pixels
	y = 60 + ((360-60)/4 )*d;
	// conversion de la valeur du point en string pour l'affichage
	String ss;
	ss = Double.toString(valeurpty);	
	//inscription de la coordonnée
	//if ( valeurpty < -1 || valeurpty > 1 ){
	g.setFont(new Font("Helvetica", Font.PLAIN, 12)); 
	g.drawString(ss, 3 , y);
	// tracage du petit trait sur l'axe
	g.setColor(Color.lightGray);
	g.drawLine(40, y, 1000, y); 
	g.setColor(Color.black);
	//}
	// incrementation des valeurs
	d++ ;
	valeurpty = valeurpty - ecary ;
	 
	}

// tracage des points 
	

	try
	{
	showStatus("Tracage du graphique");	
//	creation des flux de fichier entrants
	//source       = getParameter("source");
     url  = new URL(getCodeBase(),source);
	//url          = new URL(getCodeBase(),"signalA.txt");
	urlConnexion = url.openConnection();
	entree       = urlConnexion.getInputStream();
	fluxEntree   = new BufferedReader(new InputStreamReader(entree));

//	Lecture du fichier
	
	nbreDeLigne = 1;
	int ancienX = 0;
	int ancienY = 0;
	double ecarty;
	double ecartx;
	ecartx = amaxx-aminx;
	ecarty = amaxy-aminy;
	double rapporty ;
	double rapportx ;
	listex = tableauValeurx.elements();
	listey = tableauValeury.elements();

	while(listex.hasMoreElements())
	  {
		valxf = new Float((String)listex.nextElement());
		valyf = new Float((String)listey.nextElement());

	  	//on cree les double pour pouvoir comparer les valeurs
	  	//valxf = Double.parseDouble( valx ) ;
	  	rapportx = (valxf-aminx)/ecartx;
	  	//valyf = Double.parseDouble( valy ) ;
	    rapporty = (valyf-aminy)/ecarty;
	  	valxf = (1000-40)*rapportx;
	  	valyf = 300-((360-60)*rapporty);
	  	//les transformer en int pour pouvoir les tracer
	  	int valxint=(int)valxf;
	  	int valyint=(int)valyf;
	  	if(nbreDeLigne==1)
	    {
	    	 
	          ancienX = valxint;
	          ancienY = valyint;
	          nbreDeLigne ++;

	    }	//fin du If sur i
	  	if(nbreDeLigne!=1)
	    {
	    	  
	          //On trace la ligne correspondante correspondant en indiquant la valeur
	          g.setColor(Color.red);
	          //la valeur + la marge
	          g.drawLine(40+ancienX,60+ancienY,40+valxint,60+valyint);
	          //pour mettre des petits points
	          //g.fillOval(40+valxint,60+valyint,5,5);
	          ancienX = valxint;
	          ancienY = valyint;
	          nbreDeLigne ++ ;
	          g.setColor(Color.black);
	        
	         
	    }
	    
	  }

//	Fermeture du fichier
	fluxEntree.close();

//	si problèmes de lecture du fichier
	} catch (FileNotFoundException fnfe) {
	     System.out.println("fichier non trouvé");
	   }
	   catch (IOException ioe) {
	     System.out.println("erreur d'E/S " + ioe.getMessage());
	   }

		
		

		} // fin tracage graph
	
	

	

	

	

}//fin de l'applet

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.