Afficher fonction polynomiale en JAVA
varfendell
Messages postés
3259
Date d'inscription
Statut
Membre
Dernière intervention
-
varfendell Messages postés 3259 Date d'inscription Statut Membre Dernière intervention -
varfendell Messages postés 3259 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai effectuer hier soir un algorithme permettant d'effectuer un lissage polynomiale à partir de point rentré par l'utilisateur.
J'ai pour résultat, les coefficient A0, A1, A2, ..., Ap de la fonction f(x) = A0 + A1 x + A2 x^2 + ... + Ap x^p.
Je cherche donc maintenant a représenter graphiquement cette fonction...et je ne sait comment faire.
J'avais trouvé hier soir un code qui m'avait intéressé sur CCM, mais je ne le retrouve plus :(
Merci de bien vouloir m'éclairer :)
J'ai effectuer hier soir un algorithme permettant d'effectuer un lissage polynomiale à partir de point rentré par l'utilisateur.
J'ai pour résultat, les coefficient A0, A1, A2, ..., Ap de la fonction f(x) = A0 + A1 x + A2 x^2 + ... + Ap x^p.
Je cherche donc maintenant a représenter graphiquement cette fonction...et je ne sait comment faire.
J'avais trouvé hier soir un code qui m'avait intéressé sur CCM, mais je ne le retrouve plus :(
Merci de bien vouloir m'éclairer :)
A voir également:
- Afficher fonction polynomiale en JAVA
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Fonction si et - Guide
- Eclipse java - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
Salut,
Tu trouveras ci-dessous le code qui te permet d'afficher la fonction.
Je te laisse le soin d'implémenter toi-même le calcul des facteurs (générés aléatoirement dans le code ci-dessous) grâce à ton algorithme
;-)
HackTrack
Tu trouveras ci-dessous le code qui te permet d'afficher la fonction.
Je te laisse le soin d'implémenter toi-même le calcul des facteurs (générés aléatoirement dans le code ci-dessous) grâce à ton algorithme
;-)
HackTrack
package be.ccm.polynomial;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class Polynomial extends JFrame {
private static final long serialVersionUID = 1L;
private Container c;
private InputPanel inputPanel;
private PolynomialViewPanel view;
public Polynomial() {
super("Polynomial view - HackTrack 2010");
this.initialize();
}
private void initialize() {
c = this.getContentPane();
c.setLayout(new BorderLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
inputPanel = new InputPanel();
view = new PolynomialViewPanel();
c.add(inputPanel, BorderLayout.NORTH);
c.add(view, BorderLayout.CENTER);
}
class InputPanel extends JPanel implements ActionListener {
private static final long serialVersionUID = 1L;
private JTextField pointX;
private JTextField pointY;
private JTextField factorCount;
private JTextField xMin;
private JTextField xMax;
private JList factors;
private JButton okButton;
private JButton cancelButton;
public InputPanel() {
super();
this.initialize();
}
private void initialize() {
pointX = new JTextField(3);
pointY = new JTextField(3);
factorCount = new JTextField(2);
xMin = new JTextField(5);
xMax = new JTextField(5);
factors = new JList(new DefaultListModel());
factors.setPreferredSize(new Dimension(200,480));
okButton = new ActionButton("Ok", this);
cancelButton = new ActionButton("Cancel", new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
this.add(new JLabel("x:"));
this.add(pointX);
this.add(new JLabel("y:"));
this.add(pointY);
this.add(new JLabel("Nombre de facteurs:"));
this.add(factorCount);
this.add(new JLabel("xMin:"));
this.add(xMin);
this.add(new JLabel("xMax:"));
this.add(xMax);
this.add(okButton);
this.add(cancelButton);
JPanel factorListPanel = new JPanel();
factorListPanel.setLayout(new BorderLayout());
factorListPanel.setBorder(BorderFactory.createTitledBorder("Liste des facteurs"));
factorListPanel.add(new JScrollPane(factors));
c.add(factorListPanel,BorderLayout.EAST);
}
public void actionPerformed(ActionEvent e) {
int x = Integer.parseInt(pointX.getText());
int y = Integer.parseInt(pointX.getText());
double[] factorsValue = calculateFactors(x,y);
DefaultListModel listModel = new DefaultListModel();
for (int i = 0; i < factorsValue.length; i++) {
listModel.add(i, "A"+i+"="+factorsValue[i]);
}
factors.setModel(listModel);
double xMinDouble = Double.parseDouble(xMin.getText());
double xMaxDouble = Double.parseDouble(xMax.getText());
view.drawPoly(factorsValue, xMinDouble, xMaxDouble);
}
/*
* Tu dois modifier l'implémentation de cette méthode pour effectuer le
* calcul des facteurs sur base de ton algorithme et en fonction du point (x,y).
*
* J'ai supposé que x et y sont des entiers. Si ce n'est pas le cas,
* adapte la signature de la méthode.
*/
private double[] calculateFactors(int x, int y) {
int factorsCount = Integer.parseInt(this.factorCount.getText());
double[] factorsValue = new double[factorsCount];
for (int i = 0; i < factorsCount; i++) {
factorsValue[i] = Math.random() * 10;
}
return factorsValue;
}
}
class PolynomialViewPanel extends JPanel {
private double[] factorsValue;
private double xMin;
private double xMax;
private double yMin;
private double yMax;
public PolynomialViewPanel() {
super();
this.initialize();
}
private void initialize() {
setPreferredSize(new Dimension(640, 480));
}
public void drawPoly(double[] factorsValue, double xMin, double xMax) {
this.xMin = xMin;
this.xMax = xMax;
yMin = Double.MAX_VALUE;
yMax = Double.MIN_VALUE;
this.factorsValue = factorsValue;
// Premier passage pour calculer yMin et yMax
for (double x = xMin; x < xMax; x += (xMax - xMin)
/ this.getWidth()) {
double fx = 0;
double factor = 1;
for (int fi = 0; fi < factorsValue.length; fi++) {
for (int exp = 0; exp < factorsValue[fi]; exp++) {
factor *= x;
}
fx += factor;
if (fx < yMin) {
yMin = fx;
}
if (fx > yMax) {
yMax = fx;
}
}
}
this.repaint();
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.WHITE);
g.fillRect(0,0, this.getWidth(), this.getHeight());
g.setColor(Color.RED);
// Second passage pour dessiner le graphique
System.out.println("(xMin,yMin)-(xMax,yMax)=(" + xMin + "," + yMin
+ "),(" + xMax + "," + yMax + ")");
double fx;
int[] previousCoordinate = new int[2];
for (double x = xMin; x < xMax; x += (xMax - xMin)
/ this.getWidth()) {
fx = 0;
double factor = 1;
for (int fi = 0; fi < factorsValue.length; fi++) {
for (int exp = 0; exp < factorsValue[fi]; exp++) {
factor *= x;
}
fx += factor;
}
int intX = (int) (this.getWidth() * (x - xMin) / (xMax - xMin));
int intY = (int) (this.getHeight() * (fx - yMin) / (yMax - yMin));
System.out.println("(x,y)=(" + intX + "," + intY + ")");
if (previousCoordinate != null) {
g.drawLine(previousCoordinate[0], previousCoordinate[1],
intX, intY);
}
previousCoordinate[0] = intX;
previousCoordinate[1] = intY;
}
}
}
class ActionButton extends JButton {
public ActionButton(String label, ActionListener al) {
super(label);
this.addActionListener(al);
}
}
public static void main(String[] args) {
Polynomial polyView = new Polynomial();
polyView.pack();
polyView.setVisible(true);
}
}
Bonjour,
Merci a toi pour ton aide tout d'abord.
Il y a juste quelque truc que je n'ai pas compris:
On doit entrer 5 éléments, Nombre de facteur correspond au degré du polynome - 1; et je suppose que Xmin et Xmax correspondent aux borne de l'affichages.
Mais je ne vois pas à quoi correspondent les éléments X et Y.
Je n'arrive pas a comprendre ton code, je ne connais pas très bien les interfaces, mais je pourrais modifier sans trop de problèmes la classe qui donne les coefficients.
Merci a toi pour ton aide tout d'abord.
Il y a juste quelque truc que je n'ai pas compris:
On doit entrer 5 éléments, Nombre de facteur correspond au degré du polynome - 1; et je suppose que Xmin et Xmax correspondent aux borne de l'affichages.
Mais je ne vois pas à quoi correspondent les éléments X et Y.
Je n'arrive pas a comprendre ton code, je ne connais pas très bien les interfaces, mais je pourrais modifier sans trop de problèmes la classe qui donne les coefficients.