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