Java tracer une courbe

Fermé
fasco - 27 août 2006 à 17:52
 amindream - 21 janv. 2012 à 10:15
Bonjour j'ai crée un repere de R2 pour me permettre d'avoir les tarcés de mes coubes avec soit un applet soit un swing, mais mon grand probleme est que je n'arrive pas à tracer la la fonction f(x)=x² telle qu'elle passe à l'origine de mpon repere comment devrait-je utiliser la methode drawLine pour que cela marche?
ou bien devrait-je modifier ma fonction en lui imposant une translation une rotation...mais je sais vraiment pas comment m'y prendre aider moi.
A voir également:

5 réponses

hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
29 août 2006 à 21:59
Salam,

si je comprend bien, vous voulez tracer la courbe de la fonction f(x)=x², et le pb qui se pose est que l'origine du repère pour drawLine(...) et en haut à gauche de l'écran, et vous vous voulez que l'origine soit au centre de l'écran (par exp) , si c'est ça ce que vous cherchez alors je vous propose ce qui suit:

1- pour dessiner un point selon le repère par defaut on utilisez drawLine(x,y,x,y) .
2-Le nouveau centre du repère est le point (x0,y0)
3- pour dessiner un point selon le nouveau repère utilisez drawLine(x0+x,y0+y,x0+x,y0+y)



Allah mo3ine
4
Bonjour
je veux tracer la courbe de la fonction sinus x à partir du du langage java mais j'arrive pas.Je remercie toute personne pouvant maider.
merci
1
hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
29 mai 2008 à 22:58
je sais pas vraiment où elle est la difficulté nono, mais comme même je te propose ceci:

int x, y; // n'utilise pas des doubles un pixel est repéré par deux entiers

for(x=100; x<300;x++)
{
y=(int)Math.sinus(x);
g.drawLine(x,y);

}
0
hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54 > hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013
29 mai 2008 à 23:00
en fait c'est : Math.sin est non pas sinus et g.drawLine(x,y,x,y);
0
fifida Messages postés 1 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 20 juin 2008
20 juin 2008 à 13:15
package grahee;



public class fonction {

public fonction() {}

public double ValeurY( double X )
{
return (Math.sin(X));
}

}
------------------------------------------------------------------------------------------------------------------------------------------------------------------
package grahee;


import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.*;
import java.lang.String.*;


public class AffichageCourbe extends JPanel implements MouseListener, MouseMotionListener
{

public int NombrePoints = 500;
public double PointA = -10.0;
public double PointB = 10.0;
private CourbeMath MaCourbe;
private int PointX[];
private int PointY[];
private int PointCurseur = 0;
private int XMaxRPixel;
private int XMinPixel;
private int YMaxRPixel;
private int YMinPixel;


public AffichageCourbe(int X0 , int Y0 , int Width , int Heigh)
{
addMouseListener(this);
addMouseMotionListener(this);
//initialisation des variables de dimensions
XMinPixel = X0;
YMinPixel = Y0;
XMaxRPixel = Width;
YMaxRPixel = Heigh;

setBorder(new LineBorder(new Color(0, 0, 0)));
setBackground(new Color(200, 200, 200));
setBounds(XMinPixel,YMinPixel,XMaxRPixel+XMinPixel+20,YMaxRPixel+YMinPixel+20);
MaCourbe = new CourbeMath(NombrePoints,PointA,PointB);
MiseEnValeur();
}

@Override
public void paintComponent( Graphics MonGraph )
{
super.paintComponent(MonGraph);
Afficher(MonGraph);
}

private void Afficher(Graphics MonGraph)
{
//m�thodes qui affiche les donn�es sur le panneau
MonGraph.setColor(new Color(51, 0, 255));
MonGraph.drawPolyline(PointX,PointY,NombrePoints);
MonGraph.setColor(new Color(0,150,0));
MonGraph.drawLine(PointX[PointCurseur],YMinPixel-20,PointX[PointCurseur],YMaxRPixel+YMinPixel+20);
MonGraph.drawLine(XMinPixel-20,PointY[PointCurseur],XMaxRPixel+YMinPixel+20,PointY[PointCurseur]);
MonGraph.drawString("("+MaCourbe.MesPointsX[PointCurseur]+";"+ MaCourbe.MesPointsY[PointCurseur]+")",PointX[PointCurseur]+10,PointY[PointCurseur]-11);

}

public void MiseAJour()
{
PointCurseur = 0;
MaCourbe = new CourbeMath(NombrePoints,PointA,PointB);
MiseEnValeur();
repaint();
}

private void MiseEnValeur()
{
PointX = new int[NombrePoints];
PointY = new int[NombrePoints];
for( int i = 0 ; i < NombrePoints ; i++)
{
PointX[i] = (int)(XMinPixel + ((i*XMaxRPixel) / (NombrePoints-1)));
PointY[i] = (int)( ( MaCourbe.YMax() - MaCourbe.MesPointsY[i] ) * YMaxRPixel / ( MaCourbe.YMax() - MaCourbe.YMin() ) ) + YMinPixel;
}
}

public void mousePressed(MouseEvent e)
{
PointCurseur = RecherchePointCurseur(e.getX());
repaint();
}

public void mouseDragged(MouseEvent e)
{
PointCurseur = RecherchePointCurseur(e.getX());
repaint();
}

public void mouseClicked(MouseEvent e){}

public void mouseReleased(MouseEvent e){}

public void mouseEntered(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mouseMoved(MouseEvent e){}



private int RecherchePointCurseur( int MonPointX )
{
for( int i = 0 ; i < NombrePoints ; i++) if( PointX[i] >= MonPointX ) return i;
return NombrePoints-1;
}

---------------------------------------------------------------------------------------------------------------------------------------------
package grahee;


import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.lang.String.*;


public class AffichageResult extends JPanel
{

public JLabel NombrePoints;
public JLabel Bornes;

public AffichageResult(int X0 , int Y0 , int Width , int Heigh)
{
setBorder(new LineBorder(new Color(0, 0, 0)));
setBackground(new Color(200,200, 200));
//initialisation dimension
setBounds(X0,Y0,Width,Heigh);
setLayout(null);
Initialisation();
}

private void Initialisation()
{
//mise en place d'un container
NombrePoints = new JLabel("Nombre de points : <>");
Bornes = new JLabel("Bornes de Simulation : [ <> - <> ]");
add(NombrePoints);
add(Bornes);
NombrePoints.setBounds(10,10,800,20);
NombrePoints.setVisible(true);
Bornes.setBounds(10,40,800,20);
Bornes.setVisible(true);

}



}
------------------------------------------------------------------------------------------------------------------
package grahee;


import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.*;
import java.lang.String.*;


public class Courbe extends JFrame
{

//d�claration du panel d'affichage des courbes
AffichageCourbe MonAffichage;
AffichageResult MonAffichageResult;

public Courbe()
{
this.Initialise();
this.setVisible(true);
}

private void Initialise()
{
//mise en place d'un container
Container Content = this.getContentPane();

//on met la fen�tre en plein �cran
int width = (int)Toolkit.getDefaultToolkit().getScreenSize().width;
int heigh = (int)Toolkit.getDefaultToolkit().getScreenSize().height;
setBounds(0,0,width, heigh);
this.setResizable(false);
//on met en place le menu barre
JMenuBar MenuBar = new JMenuBar();
this.setJMenuBar(MenuBar);
JMenu Menu1 = new JMenu("Fichier");
JMenuItem Fonction = new JMenuItem("Importer une fonction", 2);
JMenuItem Quit = new JMenuItem("Quitter", 2);
MenuBar.add(Menu1);
Menu1.add(Fonction);
Menu1.addSeparator();
Menu1.add(Quit);

JMenu Menu2 = new JMenu("Syst�me");
JMenuItem Nb = new JMenuItem("Param�tres syst�mes", 2);
MenuBar.add(Menu2);
Menu2.add(Nb);

JMenu Menu3 = new JMenu("Param�tres Courbes");
JMenuItem Bornes = new JMenuItem("Bornes", 2);
MenuBar.add(Menu3);
Menu3.add(Bornes);

JMenu Menu4 = new JMenu("Simulation");
JMenuItem Expli = new JMenuItem("M�thode d'Euler explicite", 2);
JMenuItem Impli = new JMenuItem("M�thode d'Euler implicite", 2);
MenuBar.add(Menu4);
Menu4.add(Expli);
Menu4.add(Impli);

//gestion des menu barres
this.addWindowListener( new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e){
setVisible(false);
dispose();
System.exit(0);
}});

Quit.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}});

Nb.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
PSysteme();
}});

Bornes.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
PBornes();
}});

//mise en place du panneau principal
JPanel Affichage = new JPanel();
Affichage.setBorder(new LineBorder(new Color(0, 0, 0)));
Affichage.setBackground(new Color(255, 255, 204));
Affichage.setLayout(null);
Content.add(Affichage);

//initialisation des constantes de dimensionnement "affichage"
int X0 = 20;
int Y0 = 20;
int WidthC = width - 4*X0 - 5;
int HeighC = heigh - (int)(2*heigh/5);

//mise en place du panel
MonAffichage = new AffichageCourbe(X0,Y0,WidthC,HeighC);
Affichage.add(MonAffichage);

//initialisation des constantes de dimensionnement "resultat"
X0 = 20;
Y0 = Y0 + 60 + HeighC;
WidthC = width - (int)(width/5);
HeighC = (int)(2*heigh/5) - 145;

//mise en place du panel d'affichage des r�sultats
MonAffichageResult = new AffichageResult(X0,Y0,WidthC,HeighC);
Affichage.add(MonAffichageResult);
MonAffichageResult.NombrePoints.setText("Nombre de points : "+MonAffichage.NombrePoints);
MonAffichageResult.Bornes.setText("Bornes de Simulation : [ "+MonAffichage.PointA+" - "+MonAffichage.PointB+" ]");

}

private void PSysteme()
{
PSys ParamSys = new PSys(this,true,MonAffichage.NombrePoints);
ParamSys.setLocation(200,200);
ParamSys.show();
MonAffichage.NombrePoints = ParamSys.NombrePoints;
MonAffichageResult.NombrePoints.setText("Nombre de points : "+MonAffichage.NombrePoints);
MonAffichage.MiseAJour();
}

private void PBornes()
{
PBorne ParamBorne = new PBorne(this,true,MonAffichage.PointA,MonAffichage.PointB);
ParamBorne.setLocation(200,200);
ParamBorne.show();
MonAffichage.PointA = ParamBorne.PointA;
MonAffichage.PointB = ParamBorne.PointB;
MonAffichageResult.Bornes.setText("Bornes de Simulation : [ "+MonAffichage.PointA+" - "+MonAffichage.PointB+" ]");
MonAffichage.MiseAJour();
}

}




}
-------------------------------------------------------------------------------------------------


package grahee;



public class CourbeMath
{
public double MesPointsY[];
public double MesPointsX[];
public int NombrePoints;
private double Pas;
private double PointA;
private double PointB;
private fonction MaFonction;


public CourbeMath(int Nb , double A , double B)
{
NombrePoints = Nb;
MaFonction = new fonction();
PointA = A;
PointB = B;
Discretisation();
CalculPoints();
}

private void Discretisation()
{
Pas = (PointB - PointA ) / NombrePoints;
}

private void CalculPoints()
{
MesPointsY = new double[NombrePoints];
MesPointsX = new double[NombrePoints];

for(int i = 0 ; i < NombrePoints ; i++)
{
MesPointsX[i] = PointA+(i*Pas);
MesPointsY[i] = MaFonction.ValeurY(PointA+(i*Pas));
}
}

public double YMax()
{
double MonMax = MesPointsY[0];
for(int i = 1 ; i < NombrePoints ; i++) if( MesPointsY[i] > MonMax ) MonMax = MesPointsY[i];
return MonMax;
}

public double YMin()
{
double MonMin = MesPointsY[0];
for(int i = 1 ; i < NombrePoints ; i++) if( MesPointsY[i] < MonMin ) MonMin = MesPointsY[i];
return MonMin;
}

}
----------------------------------------------------------------------------------------------------
package grahee;


import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.JDialog;

public class PBorne extends JDialog
{

private JTextField TextA;
public double PointA;
private JTextField TextB;
public double PointB;


public PBorne(JFrame parent,boolean modal,double A,double B)
{
super(parent, modal);
PointA = A;
PointB = B;
Container contentPane = this.getContentPane();
JPanel panel1 = new JPanel();
panel1.setLayout(new FlowLayout(FlowLayout.CENTER));
contentPane.add(panel1, BorderLayout.SOUTH);
JPanel panel3 = new JPanel();
panel3.setLayout(new FlowLayout(FlowLayout.CENTER));
contentPane.add(panel3, BorderLayout.CENTER);
TextA = new JTextField(""+PointA,15);
TextB = new JTextField(""+PointB,15);
panel3.add(TextA);
panel3.add(TextB);
JButton okButton = new JButton("OK");
panel1.add(okButton);
JButton cancelButton = new JButton("Cancel");
panel1.add(cancelButton);

setTitle("Gestion des valeurs aux bornes");
pack();


cancelButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{
dispose();
setVisible(false);
}
});

okButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{
PointA = Double.parseDouble(TextA.getText());
PointB = Double.parseDouble(TextB.getText());
if( PointA >= PointB )
{
PointA = -10.0;
PointB = 10.0;
TextA.setText(""+PointA);
TextB.setText(""+PointB);
return;
}
dispose();
setVisible(false);
}
});

}




}
--------------------------------------------------------------
package grahee;


import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.JDialog;

public class PSys extends JDialog
{

private JTextField TextNombrePoints;
public int NombrePoints;


public PSys(JFrame parent,boolean modal,int NbPoints)
{
super(parent, modal);
NombrePoints = NbPoints;
Container contentPane = this.getContentPane();
JPanel panel1 = new JPanel();
panel1.setLayout(new FlowLayout(FlowLayout.CENTER));
contentPane.add(panel1, BorderLayout.SOUTH);
JPanel panel3 = new JPanel();
panel3.setLayout(new FlowLayout(FlowLayout.CENTER));
contentPane.add(panel3, BorderLayout.CENTER);
TextNombrePoints = new JTextField(""+NombrePoints,8);
panel3.add(TextNombrePoints);
JButton okButton = new JButton("OK");
panel1.add(okButton);
JButton cancelButton = new JButton("Cancel");
panel1.add(cancelButton);

setTitle("Gestion des param�tres syst�mes");
pack();


cancelButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{
dispose();
setVisible(false);
}
});

okButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{
NombrePoints = Integer.parseInt(TextNombrePoints.getText());
if( NombrePoints > 1000 || NombrePoints < 5 )
{
TextNombrePoints.setText("500");
return;
}
dispose();
setVisible(false);
}
});

}




}
----------------------------------------------------------------------------------------------
package grahee;


public class principal {

public principal() {}


public static void main(String[] args)
{
Courbe MaCourbe = new Courbe();
}

}

ces programme peuvent vous aider a dessiner sin x
0
merci
0
bonjour. je ne sais pas comment interpreter les données d'un tableau sous forme de courbe sous java.
je remercie toute personne qui pourra m'aider.
0
hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
29 mai 2008 à 22:53
plus de détails stp djamal

LLah m3ine
0
Malgré que ta question est entierement pas claire , je t'offre ce lien qui peux t'être utile:

http://www.javafr.com/codes/TRACER-COURBE-PARTIR-JTABLE_21833.aspx

c'est un exemple d'implementation en lgge java traçant une courbe a partir d'un JTable

esperant que ça répond à ta "question"??!!!
0
Salam,



Voici quelques questions pour l'instant, si j'en ais d'autres je te les enverrais plus tard.

- Quelles sont les instructions qui permettent d'afficher trois boutons : Sin - Echelon - Sinc ?

- Quelles sont les instructions qui permettent de visualiser les graphes des trois fonctions précédentes (sinus, échelon unité et sinus cardinal, avec amplitude et fréquence) ?

- Quel package (bibliothèque) utiliser pour échantillonner (avec fréquence d'échantillonnage)et filtrer (avec fréquence du filtre) ces fonctions ?

- Si on clique sur un des graphe (sinus par exemple) comment faire pour avoir les coordonnées de ce point précis ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
essaye d'utiliser ChartDirector.jar ,il va faciliter ta tache
tu le télécharge d'abord Mr walla Mme
ciao Melle
0
salam
je veux remercie la personne qui m'aidé
0