[JAVA] Tracer une courbe

Répondre
Partager Rechercher
J'ai besoin de tracer une courbe à partir d'un tableau de points en java et je m'en sors pas.

J'ai tenté avec des CubicCurve2D ou QuadCurve2D mais je sais pas lequel utiliser ni comment faire pour l'afficher ensuite

Y aurait il quelqu'un dans l'assistance qui saurait créer un graphique et l'afficher ?

Au plus simple avec Awt,la classe Panel, sa méthode paint(Graphics g) et la méthode drawLine() de la classe Graphics.
Aprés,il faut projeter le système d'axes de la courbe [xmin..xmax,ymin-ymax] sur celui de l'écran du Panel p,à savoir [0..p.getWidth(),0..p.getHeight()] : il s'agit de bêtes règles de 3 pour transformer les coordonnées de la courbe en coordonnées écran.
Il faut aussi déterminer le "pas" entre chaque coordonnée de la courbe pour avoir la précision souhaitée à l'écran...
J'ai justement ce bout de script sous la main donc autant le mettre ici
Code:
public void paint(Graphics g) {

        float [] list = [ta liste] ;
        int pas = [valeur de ton pas] ;    
        int listdim = [taille de ta liste] ; 

        for (int i=0; i+pas <= listdim; i = i+pas) {         
            g.drawLine(i, list[i], i+pas, list[i+pas]);              
        } 

}
Edit : evidemment c'est simplifié au maximum (ta courbe sera à l'envers voire hors de l'écran si il y a des valeurs négatives), mais c'est juste pour donner une idée.
Citation :
Provient du message de Selenn
Merci saturnin, au nom de toute la promo pour avoir posté cette question sur JOL
Le désespoir a eu raison de moi hier soir ^^

Sinon je vais tenter avec la méthode d'Ormus.

Si vous avez d'autres propositions d'ordre JAVA n'hésitez pas je suis preneur également
Bon j'arrive à créer le graphique avec le code d'ormus ... enfin je suppose que je dois le créer parce que j'arrive pas à l'afficher dans un JPanel, si quelqu'un savait comment faire ça m'aiderait beaucoup, à défaut l'afficher dans une JFrame sans JPanel rien ça irait aussi
je t'écris en vitesse (sans doc donc) un exemple avec un JPanel dans une JFrame avec la technique du double buffering pour éviter le clignotement quand on déplace la JFrame :

MaCourbe.java
MonPanel.java
Le résultat en image
Le résultat dans une applet


MaCourbe.java :
Citation :
import java.awt.event.*;
import java.awt.Dimension;

import javax.swing.JFrame;

public class MaCourbe{

public static void main(String[] args) {

JFrame f = new JFrame("Courbe");

MonPanel p = new MonPanel(new Dimension(640,480));

f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
f.getContentPane().add(p);
f.pack();
f.setSize(640, 480);
f.show();

}

}
Je prends exemple de la courbe y=x*x entre -10 et 10
MonPanel.java :
Citation :
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Color;


public class MonPanel extends JPanel {


private Dimension dimension;

private Image imageBuffer;
private Dimension imageBufferSize;
private Graphics imageBufferGraphics;


public MonPanel(Dimension dimension) {
this.dimension=dimension;
setBackground(Color.white);
}

public void paint(Graphics g) {
update(g);
}

public void update(Graphics g) {

// Création du buffer image dans lequel on dessine
if ((imageBuffer == null) || (getSize().width != imageBufferSize.width) || (getSize().height != imageBufferSize.height)) {
imageBuffer = createImage(getSize().width, getSize().height);
imageBufferSize = getSize();
imageBufferGraphics = imageBuffer.getGraphics();
imageBufferGraphics.setFont(getFont());
}
// On efface le buffer image
imageBufferGraphics.setColor(getBackground());
imageBufferGraphics.fillRect(0, 0, getSize().width, getSize().height);


// Calcul de la courbe
float x;
float y;
float xMin = (float)-10;
float xMax = (float)10;
float yMin = (float)0;;
float yMax = (float)100;


int xEcran;
int yEcran;

int xEcranPrec=Integer.MIN_VALUE ;
int yEcranPrec=Integer.MIN_VALUE;


float fX=(float)getWidth()/(xMax-xMin);
float fY=(float)getHeight()/(yMax-yMin);

imageBufferGraphics.setColor(Color.black);

for (xEcran=0;xEcran<=getWidth();xEcran++){

x = (float)xEcran/fX+xMin;
y = x*x;

yEcran = getHeight()-Math.round(fX*y);

if ( (xEcranPrec!=Integer.MIN_VALUE) && (yEcranPrec!=Integer.MIN_VALUE) ) {
// Dessin de la courbe dans le buffer image
imageBufferGraphics.drawLine(xEcranPrec,yEcranPrec,xEcran,yEcran);
}
xEcranPrec=xEcran;
yEcranPrec=yEcran;
}

// Dessin du buffer image dans le panel
g.drawImage(imageBuffer, 0, 0,getSize().width, getSize().height, null);


}

public Dimension getMinimumSize() { return dimension; }

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


}
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés