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
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Fonction si et - Guide
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
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.