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

 Java Discussion :

dessiner un plan cartésien


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Par défaut dessiner un plan cartésien
    Salut,
    j'aimerais savoir comment je fais pour dessiner en java un plan cartésien avec 2 axes X,Y pour pouvoir dessiner des points avec des coordonnées (x,y).

    j'attends vos réponse et merci d'avance.

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    je ne connais pas de librairie pour construire un plan cartésien en deux dimension, mais cela existe surement.

    Autrement, ta construction va dépendre des outils mathématiques que tu souhaite utiliser.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    N'importe quel Graphics avec des primitives de dessin ou un Graphics2D avec Java2D.

    Voici un bout de code pour bien demarrer :

    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
    public MyCanvas extends JComponent {
      /**
      * {@inheritDoc}
      */
      @Override
      protected override paintComponent(Graphics g) {
         Dimension size = getSize();
         Insets insets = getInsets();
         int width = size.width - (insets.left + insets.right);
         int height = size.height - (insets.top + insets.bottom);
         Graphics2D g2d = (Graphics2D)g.create(insets.left, insets.top, width, height);
         try {
             g2d.translate(width/2, height/2); // L'origine du repere est desormais au centre de la zone de dessin.
             // si on dessine un truc en (0, 0) il apparait au centre de la zone.
             g2d.setColor(Color.RED);
             g2d.drawLine(0, -height/2, 0, height/2);
             g2d.setColor(Color.VIOLET);
             g2d.drawLine(-width/2, 0, width/2, 0);
             g2d.setColor(Color.BLACK);
             g2d.setStroke(new BasicStroke(2f));
             g2d.drawLine(0, 0, 20, 0);
             g2d.drawLine(0, 0, 0, -20); // Voir precision ci-dessous.
             [...]
         }
         finally {
            g2d.dispose();
         }
      }
    }
    Petite precision cependant : en Java2D l'axe des Y est oriente vers le bas. Il te faudra donc penser a inverser les ordonnees des points des choses que tu dessines pour avoir un affichage correct.
    Cela influe egalement sur le sens du cercles trigonometrique et donc des angles.

    note : getSize() retourne la taille actuelle du composant. getInsets() retourne les dimensions de sa bordure optionnelle (voir setBorder()) dans laquelle on evite generalement de dessiner.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Par défaut
    Citation Envoyé par bouye Voir le message
    N'importe quel Graphics avec des primitives de dessin ou un Graphics2D avec Java2D.

    Voici un bout de code pour bien demarrer :

    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
    public MyCanvas extends JComponent {
      /**
      * {@inheritDoc}
      */
      @Override
      protected override paintComponent(Graphics g) {
         Dimension size = getSize();
         Insets insets = getInsets();
         int width = size.width - (insets.left + insets.right);
         int height = size.height - (insets.top + insets.bottom);
         Graphics2D g2d = (Graphics2D)g.create(insets.left, insets.top, width, height);
         try {
             g2d.translate(width/2, height/2); // L'origine du repere est desormais au centre de la zone de dessin.
             // si on dessine un truc en (0, 0) il apparait au centre de la zone.
             g2d.setColor(Color.RED);
             g2d.drawLine(0, -height/2, 0, height/2);
             g2d.setColor(Color.VIOLET);
             g2d.drawLine(-width/2, 0, width/2, 0);
             g2d.setColor(Color.BLACK);
             g2d.setStroke(new BasicStroke(2f));
             g2d.drawLine(0, 0, 20, 0);
             g2d.drawLine(0, 0, 0, -20); // Voir precision ci-dessous.
             [...]
         }
         finally {
            g2d.dispose();
         }
      }
    }
    Petite precision cependant : en Java2D l'axe des Y est oriente vers le bas. Il te faudra donc penser a inverser les ordonnees des points des choses que tu dessines pour avoir un affichage correct.
    Cela influe egalement sur le sens du cercles trigonometrique et donc des angles.

    note : getSize() retourne la taille actuelle du composant. getInsets() retourne les dimensions de sa bordure optionnelle (voir setBorder()) dans laquelle on evite generalement de dessiner.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Par défaut
    merci bp pour vos réponses

    c bon j'ai desiginé un plan cartésien avec des coordonnées X et Y. il affiche des ovales et des carrés ce que je voulais faire pour le moment, c'est faire une fonction qui permet de d'entrer les valeurs X et Y et d'une ovale et qui sélectionne ou mieux colorer juste les carrés qui sont à coté.

    par exemple pour une ovale(200,400) il doit juste colorer ou sélectionner les carrées avec coordonnées X entre 150 et 250, et Y entre 300 et 500.

    ou la fonction prend les valeurs X et Y de l'ovale et considère l'ovale comme un centre de cercle avec un rayon R (exemple R=100) et sélectionne ou colore juste les carrées qui se trouve à l'intérieure du cercle.

    voici le code:

    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
    public class Panneau extends JPanel {
     
        public void paintComponent(Graphics g){
     
            int x1 = 200;
            int y1 = 400;
            int x2 = 300;
            int y2 = 90;
            int x3 = 100;
            int y3 = 110;
            int x4 = 266;
            int y4 = 310;
            int x5 = 306;
            int y5 = 70;
            int x6 = 130;
            int y6 = 122;
            int x7 = 90;
            int y7 = 60;
            int x8 = 50;
            int y8 = 330;
            int x9 = 160;
            int y9 = 110;
            int x10 = 16;
            int y10= 133;
            int x11 = 199;
            int y11= 380;
            int x12 = 566;
            int y12= 65;
            System.out.println("largeur = " + this.getWidth() + ",  longueur = " + this.getHeight());
            System.out.println(" coordonnée de début d'affichage x1 = " + x1 + " y1 = " + y1);
     
            g.fillOval(x1, y1, 12, 12);
            g.fillOval(x2, y2, 12, 12);
            g.fillOval(x3, y3, 12, 12);
            g.fillRect(x4, y4, 12, 12);
            g.fillRect(x5, y5, 12, 12);
            g.fillRect(x6, y6, 12, 12);
            g.fillRect(x7, y7, 12, 12);
            g.fillRect(x8, y8, 12, 12);
            g.fillRect(x9, y9, 12, 12);
            g.fillRect(x10, y10, 12, 12);
            g.fillRect(x11, y11, 12, 12);
            g.fillRect(x12, y12, 12, 12);
     
    }               
    }
    j'ai consiederé la classe fenetre avec :this.setSize(400, 500);
    mon plan cartésien.


    j'attands vos réponses et merci d'avance.

  6. #6
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Pourquoi ne pas créer 2 tableaux de int[12] tabX et tabY
    ça ferait plus joli

    et tu pourrais utiliser que 4 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int[] tabX = {200,300,...}
    int[] tabY = {...}
    for(int i=0;i<3;i++){g.fillOval(tabX[i],tabY[i], 12, 12);}
    for(int i=3;i<12;i++){g.fillRect(tabX[i],tabY[i], 12, 12);}

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Personnellement, j'utilise une classe "point" dont la seule fonction est de stocker les abscisses et les ordonnées (plus des couleurs si tu veux...). J'en fais un tableau (dynamique, c'est mieux) que la méthode graphique appelle.

    Là, deux solutions : il faudra des int pour le graphique. Soit ils sont calculés en amont, avant d'être stockés dans le tableau, soit ils le sont après. En général, je multiplie ces valeurs (x, f(x)) par un nombre, puis je conserve sa valeur entière : ce multiplicateur est le "zoom" de la fonction. Puis j'ajoute (ou retranche) quelque chose aux x et y : c'est comment cadrer le dessin. Dans la méthode graphique, je ne fais tracer les points que s'ils rentrent dans la figure avec quelque chose du genre :
    if (0<X && X< largeur de page && y ...) g.draw...

    Ce sont des classes que l'on réemploie ensuite facilement d'un programme à l'autre.

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    C'est marrant il y a deja 1 interface et 3 classes points dans l'API.. Point, Point2D, Point2D.Float et Point2D.Double.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Citation Envoyé par bouye Voir le message
    C'est marrant il y a deja 1 interface et 3 classes points dans l'API.. Point, Point2D, Point2D.Float et Point2D.Double.
    En effet, j'avais pas vu. La classe est dans l'API. Par contre, la méthode graphique reste à surdéfinir je pense.

Discussions similaires

  1. Rotation point dans un plan cartésien
    Par Poisson_Pilote dans le forum Mathématiques
    Réponses: 10
    Dernier message: 04/07/2011, 08h43
  2. Composant dessiner arrière-plan transparent
    Par blinkseb dans le forum Composants VCL
    Réponses: 9
    Dernier message: 18/09/2009, 09h47
  3. [Vie pratique] Dessiner ses plans de maison
    Par DavidDeTroyes dans le forum La taverne du Club : Humour et divers
    Réponses: 42
    Dernier message: 13/07/2007, 11h13
  4. Dessin de plan
    Par maxnad dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 15/11/2005, 21h26
  5. Géométrie : triangle et plan cartésien.
    Par Neitsa dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 24/08/2005, 09h40

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