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 :

representer un repere 2D


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut representer un repere 2D
    bonjour

    je voudrais representer quelques points sur un repere (x, y), mais je ne sais pas comment m'y prendre, pouvez vous m'aider ou m'indiquer un tutorial.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    Il te faut lire un didacticiel et faire quelques excercices sur Java 2D. Un livre interressant (quoiqu'ancien mais toujours d'actu a 90%) pour commencer est Java 2D Graphics chez O'Reilly dont les exemples devraient etre sur leur site FTP et d'exemples y compris celui qui dessine un simple repere a l'ecran (mais je n'arrive pas a joindre ces deux sites actuellement)...
    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

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut
    merci pour ta reponse, mais est ce que quelqu'un peut m'aider ^^pour representer un repere, je n'arrive pas a demarrer.
    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    C'est a dire ? Tu ne sais pas comment afficher une fenetre a l'ecran ? Comment dessiner dans un panel ? Ou comment tracer des traits ?
    Ta question est trop vague.

    Dans tous les cas cherche des didacticiels sur Java2D sur ce site ou sur Google.
    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

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut
    Justement j'ai effectué des recherches avec Google mais sans espoire, le truc c'est que je n'arrive pas a tracer mettre des pointou des traits, j'ai creer un JPanel mais ensuite je ne sais pas ce que je dois mettre dedans.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    Bienvenue dans le monde de la 2D.
    Il te faut surcharger la methode paintComponent(Graphics g) pour peindre dans ton panel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /** {@inheritDoc}
     */
    @Override protected void paintComponent(Graphics g) {
      super.paintComponent(g);
    L'appel a super.paintComponent(g) permet de faire que le fond du panel sera dessiner. Ce n'est pas obligatoire si comme dans l'exemple tu vas recouvrir toute la surface du panel d'une couche de blanc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Dimension size = getSize();
       g.setColor(Color.WHITE);
       g.fillRect(0, 0, size.width, size.height);
    Note qu'ici nous faisons une surcharge simple, sans tenir compte de la bordure optionnelle que peut avoir tout composant Swing.

    Ensuite nous allons changer le repere pour le mettre au milieu du panel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       g.translate(size.width/2, size.height/2);
    A partir de cet appel le point (0, 0) est en fait le point situe au beau milieu du panel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      g.setColor(Color.BLACK);
      g.drawLine(0, 0, 10, 0);
      g.setColor(Color.GRAY);
      g.drawLine(0, 0, 0, 10);
    Nous venons de dessiner les deux axes du repere. Comme tu peux le voir l'axe des Y va VERS LE BAS. C'est normal car sur un ecran d'ordi le point (0, 0) est le coin superieur gauche et l'axe des Y est dirige vers le bas de l'ecran. Donc si tu veux dessiner des courbes mathematiques ou des figures "comme sur papier" il faut toujours songer a utiliser les opposees des valeurs sur les ordonnees (en mettant un - devant la seconde coordonnee). Par exemple utiliser g.drawLine(0, 0, 0, -10) dessinera la ligne "dans le sens normal". Il faut s'en souvenir car ca influe entre autre sur le sens du cercles trigonometrique (et donc l'orientation des angles).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      g.setColor(Color.RED);
      g.fillRect(-1, -1, 2, 2);
    Nous venons de peindre un carre autour du point (0, 0) (qui est il faut le rappeler le centre du panel). Tu as plusieurs methodes pour dessiner des points : afficher un petit carre, afficher un petit cercle, dessiner une croix, .... a toi de voir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       g.translate(-size.width/2, -size.height/2);
    }
    Pourquoi cet appel ? Simplement pour restaurer l'origine du repere a sa position initiale. C'est TRES IMPORTANT surtout si Swing fait d'autre operations de dessin par la suite. En restaurant TOUTES tes transformations tu seras sur que ton dessin s'affichera correctement a l'ecran.

    Voila c'est un moyen simple de dessiner sur l'ecran. Par la suite il te faut voir les didacticiels, les livres et faire des exemples ou encore lire les doc de java.awt.Graphics, java.awt.Graphics2D et de plusieurs objets (mais pas tous) des packages java.awt.image et java.awt.geom.

    Les autres trucs a savoir :

    - drawXXX signifier dessiner : on trace des traits du contour d'une figure avec une peinture/couleur.

    - fillXXX signifie remplir : on remplir l'interieur d'une figure avec une peinture/couleur.

    - la classe Graphics2D offre bien plus de methodes et de facilites que la classe Graphics. En AWT/Swing il est toujours possible de faire si g est un Graphics :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Graphics2D g2d = (Graphics2D)g
    - les composants Swing peuvent avoir une bordure optionnel dont il faut tenir compte si on veut un dessin correct quand cette bordure est mise en place.

    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
    /** {@inheritDoc}
     */
    @Override protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      Dimension size = getSize();
      Insets insets = getInsets();
      int width = size.width - (insets.left + insets.right);
      int height = size.height - (insets.top + insets.bottom);
      try {
        Graphics2D g2d = g.create(insets.left, insets.top, width, height);
        ..........
      }
      finally {
         g2d.dispose();
      }
    }
    Note : l'appel a g2d.dispose() annule toutes les transformations affines en cours. Il ne faut SURTOUT pas appeler dispose() sur le Graphics passe en parametre de paintComponent(). Mais tu peux tres bien te proteger en creant une "vue" sur ce Graphics en appelant tout simplement g.create() (sans parametre ce qui cree une vue a l'identique). Tu peux disposer de cette vue sans probleme.

    - il est possible de definir une zone d'affichage (pas forcement rectangulaire) avec g.setClip(). Rien de ce qui sera dessine en dehors de la zone n'apparaitra. Il faut penser a sauvegarder (et restorer a la fin) la zone de clip d'origine cependant.

    - on peut controler la forme ET l'epaisseur d'un trait avec des objets de type Stroke et BasicStroke et en faisant g.setStroke() avant de peindre un trait ou une figure.

    - outre les couleurs unies (qui peuvent etre transparentes), on peut utiliser des gradients et des textures avec les objets GradientPaint (et egalement LinearGradientPaint, MultipleGradientPaint, RadialGradientPaint dans Java 6), TexturePaint en faisant g.setPaint() avant de remplir une figure. Ca marche aussi pour les traits.

    - les objets de types Font controlent bien sur la forme des caracteres d'une ligne de texte ecrite avec g.drawString() en faisant... g.setFont().

    - il est possible de specifier des indices de rendu qui permettent d'activer ou pas des fonctionalites et des optimisation du rendu, par exemple l'antialiasing sur les textes ou sur les formes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    Il existe d'autre indices nottament RenderingHints.KEY_INTERPOLATION qui controle l'algorithme utilise lors de transformations sur les images (ce qui permet d'avoir un resultat pixelise ou au contraire lisse mais au detriment de plus long temps de calculs).
    ...........
    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

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

Discussions similaires

  1. [VB.NET] Objet représentant des onglets
    Par cosmos38240 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 14/03/2005, 16h33
  2. repérer le navigateur du client
    Par ¤dinky¤ dans le forum Autres langages pour le Web
    Réponses: 2
    Dernier message: 11/02/2005, 13h25
  3. Representation volumes pleins
    Par J P dans le forum OpenGL
    Réponses: 5
    Dernier message: 05/11/2004, 14h09
  4. Dessiner un repere avec GDI ?
    Par djiwalloo dans le forum MFC
    Réponses: 19
    Dernier message: 12/10/2004, 11h57
  5. [LG]representation arbre bianire
    Par brahim dina dans le forum Langage
    Réponses: 5
    Dernier message: 13/04/2004, 18h07

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