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
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.