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

2D Java Discussion :

Dessiner une courbe point par point


Sujet :

2D Java

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Dessiner une courbe point par point
    Bonjour tous le monde,
    j'ai un petit problème : je veux dessiner une courbe point par point, c'est-à-dire chaque fois je donne les coordonnées du point et ça se dessine sur mon panel. Mais j'ai pas pu réaliser ça, comment pourrais-je le faire s'il vous plait ?

    Merci beaucoup.

  2. #2
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Ah bah si c'est urgent, vite vite vite ! Dire que c'est urgent n'apportera rien d'autre qu'énerver les autres posteurs

    Sinon, tu prend une liste de point, à chaque fois que tu donnes un point ca le rajoute dans cette liste. Dans le même temps, à chaque fois qu'un point est rajoutée dans ta liste, ca dessine la courbe allant du point 0 au 1, du point 1 au 2, du point 2 au 3 et ainsi de suite.
    Et ca devrait marcher.

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    bon j'ai avancé un peux, j'ai réussi a tracer une courbe a partir d'un tableau (Jtable) de données, mon problème maintenant est de remplir le tableau automatiquement( X,Y), a partir d'un point initial en utilisant une boucle for, mais j'ai pas pu le faire
    par exemple si le point initial est (0, h1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (i=1,i< d,i++)
    {
    x=i;
    y=f(i);
    }
    je voulais faire ainsi, mais ça n'a pas marché

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Points : 58
    Points
    58
    Par défaut
    Bonjour lestat_2706,

    Voici un petit ensemble de 3 calsses que je viens de t'implementer vite fait... (Il y a surement mieux a faire, mais c'est déja ça!)

    Premiere classe: Point (elle existe dans l'API standard sauf qu'elle ne prend que des int en parametres, du coup, j'en ai fait une qui prend des double)
    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
     
    public class Point {
     
    	private double x;
    	private double y;
     
     
    	public Point(double x, double y){
    		this.x=x;
    		this.y=y;
    	}
     
    	public double getX(){
    		return this.x;
    	}
     
    	public double getY(){
    		return this.y;
    	}
    }
    Deuxieme classe: Courbe , c'est la classe principale de ce que tu cherche. c'est un JPanel dans lequel se dessine ta courbe a chaque ajout de point.
    Deux remarques:
    - Les calculs se font dans la méthode paint() par choix, pour qu'au redimensionnement de la fenetre d'affichage, la courbe s'ajuste! peut etre qu'il y a mieux a faire...
    - Certains calculs pour centrer ta courbe de sorte qu'elle occupe toute l'aire de ta fenetre d'affichage (min/max sur les deux axes + origine au centre de la fenetre et non dans le coins haut-gauche comme par defaut).
    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
     
    public class Courbe extends JPanel{
     
    	private Vector<Point> listePoints=new Vector<Point>();
    	private double xMin=Double.MAX_VALUE;
    	private double yMin=Double.MAX_VALUE;
    	private double xMax=Double.MIN_VALUE;
    	private double yMax=Double.MIN_VALUE;
     
    	private int largeur=0;
    	private int hauteur=0;
    	private int left=10;
    	private int top=10;
     
    	public Courbe(){
     
    	}
     
    	public void ajouterPoint(Point p){
    		if(p.getX()<this.xMin)
    			this.xMin=p.getX();
    		else if(p.getX()>this.xMax)
    			this.xMax=p.getX();
     
    		if(p.getY()<this.yMin)
    			this.yMin=p.getY();
    		else if(p.getY()>this.yMax)
    			this.yMax=p.getY();
     
    		this.listePoints.add(p);
     
    		this.repaint();		
    	}
     
    	public void paint(Graphics g){
    		super.paint(g);
     
    		this.largeur=this.getWidth()-20;
    		this.hauteur=this.getHeight()-20;
    		this.left=10;
    		this.top=10;
     
    		g.setColor(Color.WHITE);
    		g.fillRect(this.left, this.top, this.largeur, this.hauteur);
     
    		g.setColor(Color.RED);
    		if(this.listePoints.size()==1){
    			int x=this.left+(this.largeur/2);
    			int y=this.top+(this.hauteur/2);
    			g.drawLine(x-2, y, x+2, y);
    			g.drawLine(x, y-2, x, y+2);	
    		}
    		else{
    			for(int i=0; i<this.listePoints.size()-1; i++){
    				Point p1=this.convertirPointSurReferenciel(this.listePoints.get(i));
    				Point p2=this.convertirPointSurReferenciel(this.listePoints.get(i+1));
    				int x1=(int)p1.getX();
    				int y1=(int)p1.getY();
    				int x2=(int)p2.getX();
    				int y2=(int)p2.getY();
     
    				g.setColor(Color.BLUE);
    				g.drawLine(x1, y1, x2, y2);
     
    				g.setColor(Color.RED);
    				g.drawLine(x1-4, y1, x1+4, y1);
    				g.drawLine(x1, y1-4, x1, y1+4);
    			}	
     
    			Point p1=this.convertirPointSurReferenciel(this.listePoints.get(this.listePoints.size()-1));
    			int x1=(int)p1.getX();
    			int y1=(int)p1.getY();
    			g.drawLine(x1-4, y1, x1+4, y1);
    			g.drawLine(x1, y1-4, x1, y1+4);
    		}		
    	}
     
    	public Point convertirPointSurReferenciel(Point p){
    		double amplitudeX=this.xMax-this.xMin;
    		double amplitudeY=this.yMax-this.yMin;
     
    		double rapportX=this.largeur/amplitudeX;
    		double rapportY=this.hauteur/amplitudeY;
     
    		double x=(p.getX()-this.xMin)*rapportX;
    		double y=(p.getY()-this.yMin)*rapportY;
     
    		y=this.hauteur-y;
     
    		x=x+this.left;
    		y=y+this.top;
     
    		return new Point(x, y);
    	}	
    }
    Enfin, la troisieme classe, qui n'est rien d'autre qu'une JFrame pour afficher ta courbe, et aussi pour faire un teste en ajoutant des valeurs:
    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
     
    public class TraceurCourbes extends JFrame{
     
    	private Courbe courbe;
     
    	public TraceurCourbes(){
    		super("Courbe");
    		this.setSize(500, 500);
     
    		this.courbe=new Courbe();
     
    		this.courbe.ajouterPoint(new Point(   5, 6681.8929));
    		this.courbe.ajouterPoint(new Point(10, 11834.3456));
    		this.courbe.ajouterPoint(new Point(20, 37059.7267));
    		this.courbe.ajouterPoint(new Point(30, 32249.5167));
    		this.courbe.ajouterPoint(new Point(40, 11503.6712));
    		this.courbe.ajouterPoint(new Point(50, 7485.3936));
    		this.courbe.ajouterPoint(new Point(60, 5720.6952));
    		this.courbe.ajouterPoint(new Point(70, 4762.9483));
    		this.courbe.ajouterPoint(new Point(80, 4207.3249));
    		this.courbe.ajouterPoint(new Point(90, 3880.5546));
     
    		this.getContentPane().add(this.courbe);
     
    		this.setVisible(true);
     
    		this.addWindowListener(new WindowAdapter(){
    			public void windowClosing(WindowEvent we){
    				System.exit(0);
    			}
    		});
    	}
     
    }
    Il ne te reste plus qu'a faire un appel a "new TraceurCourbes();" a partir de ton main() ...
    Biensure, c'est un code implementé vite fait, donc a réamenager selon tes besoins reels, en plus, il y a surement plus facile a faire que certaines choses que j'ai fait, mais si tu as d'autres question, n'hesite pas

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 46
    Points : 52
    Points
    52
    Par défaut
    Bonjour, vouloir faire des courbes c'est bien beau mais ton soft sera plus performant si tu utilise OpenGl.

    D'un autre coté, il existe plein de type de courbes utilisant les points de controles en informatique. Tout dépends si tu veux interpoller tes points de controles ou non. Regarde du côté des courbs de Bezier (Algo de De Casteljau simple à mettre en place ou Algorithme de Chaikin). Si tu veux interpoller tes points de controles, il doit y avoir l'algorithme 4 points qui n'est pas trop dur a mettre en place. tu peux aussi chercher du coté des Splines.

    Bon courrage.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Points : 58
    Points
    58
    Par défaut
    Bonjour --flow--,
    Je ne crois pas que ce soit ce qu'il cherche si j'ai bien compris, mais si je me trompe, il peut aussi voir le polynome de Lagrange qui est trop facile a implementer et qui donne une courbe passant exactement par tout ses points! Sinon, ce que tu as suggéré est tres interessant aussi

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 46
    Points : 52
    Points
    52
    Par défaut
    Désolé si j'ai mal compris la question. Je ne connaissais pas le polynome de Lagrange, comme quoi on en apprends tous les jours

  8. #8
    Candidat au Club
    Femme Profil pro
    ISI
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ISI

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Bonjour

    Je veux savoir comment je peux afficher dans la courbe les axes avec leurs échelles?

Discussions similaires

  1. Tracer une courbe reliant des points
    Par Isabella83 dans le forum R
    Réponses: 1
    Dernier message: 18/05/2012, 17h35
  2. dessiner une ligne avec des point de coordonnées doubles
    Par tanguy.L dans le forum Débuter
    Réponses: 2
    Dernier message: 12/11/2008, 00h16
  3. une courbe avec des points
    Par Lost in dans le forum MATLAB
    Réponses: 3
    Dernier message: 17/03/2008, 18h48
  4. Dessiner une courbe à partir d'un nuage de points
    Par Bil-Prog dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 26/01/2007, 04h06
  5. [VBA-E]Faire apparaitre une courbe point par point...
    Par cipango dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 05/03/2006, 18h13

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