JeuxOnLineForumsPlusConnectés : 706 (sites) | 1369 (forums)Créer un compte
Forums divers
La Taverne
Répondre
Partager Outils Rechercher
Avatar de Saturnin
Saturnin
Alpha & Oméga
 
Avatar de Saturnin
 
Question

[JAVA] Tracer une courbe

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 ?

Lien direct vers le message - Vieux
Avatar de Eowin Da Evil
Eowin Da Evil
Alpha & Oméga
 
Avatar de Eowin Da Evil
 
- a tu regardé la bible : http://java.sun.com/j2se/1.4.2/docs/api/
http://java.sun.com/docs/books/tutorial/2d/index.html
- peut etre un indice : http://www-igm.univ-mlv.fr/~berstel/...a/8-Dessin.pdf

autrement, moi meme je sais pas trop
Lien direct vers le message - Vieux
déjà vu
Roi
 
ba moi non plus ...
Lien direct vers le message - Vieux
Avatar de Actarus78
Actarus78
Alpha & Oméga
 
Avatar de Actarus78
 
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...
Lien direct vers le message - Vieux
Avatar de Ormus
Ormus
Roi
 
Avatar de Ormus
 
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.
Lien direct vers le message - Vieux
Avatar de Selenn
Selenn
Reine
 
Avatar de Selenn
 
Merci saturnin, au nom de toute la promo pour avoir posté cette question sur JOL
Lien direct vers le message - Vieux
Avatar de Saturnin
Saturnin
Alpha & Oméga
 
Avatar de Saturnin
 
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
Lien direct vers le message - Vieux
Avatar de Saturnin
Saturnin
Alpha & Oméga
 
Avatar de Saturnin
 
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
Lien direct vers le message - Vieux
Avatar de Actarus78
Actarus78
Alpha & Oméga
 
Avatar de Actarus78
 
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(); }


}
Lien direct vers le message - Vieux
Répondre

Connectés sur ce fil

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

Outils Rechercher
Rechercher:

Recherche avancée

Thème visuel : Fuseau horaire GMT +2. Il est actuellement 19h08.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite