IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Tracer une courbe


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Par défaut Tracer une courbe
    Bonjour,
    J'ai cherché mais j'ai pas trouvé de solution simple pour afficher une courbe dans un JPanel.
    Ma fonction est du genre "y=ax+b" (en plus compliqué mais ça change rien au problème) et je ne sais pas comment dessiner la courbe.
    J'ai vu qu'il fallait utiliser des drawLine il me semble, mais à chaque exemple que j'ai trouvé il y avait 5 pages de code, du coup je voulais savoir s'il y avait moyen d'afficher la courbe très simplement.
    Merci

    PS: J'espère que je me suis pas trompé de catégorie pour mon post...

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Il existe plusieurs bibliothèques qui peuvent répondre à ton besoin, voici une liste : http://java.developpez.com/outils/api/#charts (par exemple JFreeChart)

  3. #3
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Sinon, j'avais fait un petit truc... je te le file, si ça peut t'aider...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.Set;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
     
    public class CurveExemple implements ActionListener {
     
    	private JPanel p;
    	private final int width = 400;
    	private final int height = 400;
    	private final int echelle = 2;
     
     
    	public static void main(final String[] args) {
    		new CurveExemple();
    	}
     
     
    	public CurveExemple() {
    		JFrame f = new JFrame();
    		p = new JPanel();
    		JButton b = new JButton("draw");
     
    		b.addActionListener(this);
     
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		f.getContentPane().add(p, BorderLayout.CENTER);
    		f.getContentPane().add(b, BorderLayout.SOUTH);
     
    		p.setPreferredSize(new Dimension(width, height));
     
    		f.pack();
    		f.setLocationRelativeTo(null);
    		f.setVisible(true);
    	}
     
     
    	private double getPoint(final double x) {
    		double y = x * x;
    		return y;
    	}
     
     
    	private Map<Double, Double> getCurve(final double begin, final double end, final double step) {
    		Map<Double, Double> map = new LinkedHashMap<Double, Double>();
    		for (double x = begin; x <= end; x = x + step) {
    			double y = getPoint(x);
    			map.put(x, y);
    		}
    		return map;
    	}
     
    	private void drawCurve(final Map<Double, Double> map, final Graphics g) {
    		int ox = width / 2;
    		int oy = height / 2;
    		g.translate(ox, oy);
     
    		g.setColor(Color.BLACK);
    		g.drawLine(-ox, 0, ox, 0);
    		g.drawLine(0, -oy, 0, oy);
     
    		g.setColor(Color.BLUE);
     
    		Set<Double> keys = map.keySet();
    		Double lastX = null;
    		Double lastY = null;
    		for (Double key : keys) {
    			Double value = map.get(key);
    			if (lastX != null && lastY != null) {
    				g.drawLine(lastX.intValue() * echelle, lastY.intValue() * -1 * echelle, 
    						   key.intValue() * echelle, value.intValue() * -1 * echelle);
    			}
    			lastX = key;
    			lastY = value;
    		}
    	}
     
     
    	private final void showPoints(final Map<Double, Double> map) {
    		Set<Double> keys = map.keySet();
    		for (Double key : keys) {
    			Double value = map.get(key);
    			System.out.println("x=" + key + ", y=" + value);
    		}
    	}
     
     
    	@Override
    	public void actionPerformed(final ActionEvent e) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				Graphics g = p.getGraphics();
    				Map<Double, Double> map = getCurve(-8, 8, 1);
    				showPoints(map);
    				drawCurve(map, g);
    			}
    		});
     
    	}
     
    }

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Par défaut
    OK merci, j'ai pris JFreeChart, je vais regarder ça! Merci...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/09/2014, 23h08
  2. Tracer une courbe dans un formulaire ?
    Par jessy212 dans le forum Access
    Réponses: 5
    Dernier message: 04/09/2006, 16h46
  3. Tracer une courbe avec 2 tableau de points
    Par babarpapa dans le forum 2D
    Réponses: 3
    Dernier message: 19/04/2006, 15h24
  4. [Images] [Librairie] Tracer une courbe ???
    Par cedre22 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 20/02/2006, 14h53
  5. Tracer une courbe théorique sur un TChart
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/09/2005, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo