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 :

rotate() de Graphics2D


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Par défaut rotate() de Graphics2D
    Bonjour, j'ai un problème pour tourner un rectangle. Le problème c'est que je ne sais pas comment lui dire de tourner juste le rectangle. Je dessine le rectangle avec Graphics. Quand j'applique ce qui suit, c'est tout mon panel qui se met à tourner, logique, il ne sait pas que c'est juste le rectangle qui doit tourner.
    Graphics g;
    Graphics2D g2 = (Graphics2D) g;
    g2.rotate();

  2. #2
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Regarde du coté de la classe Area.

    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Par défaut
    Essaye avec un AffineTransform :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AffineTransform saveAT = g2.getTransform();
    g2.rotate();
    g2.setTransform(saveAT);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Par défaut
    J'essaye mais ça marche pas. Tout tourne en même temps autour d'un seul centre.

    Voici un exemple avec deux rectangles. Je voudrais en faire tourner qu'un mais j'arrive pas.

    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
     
        public double a = 0.0;
     
        public void paint(Graphics g)
        {        
            Graphics2D g2 = (Graphics2D) g;
     
            a += 60;
     
            if (a == 360)
            {
                a = 0;
            }
     
            AffineTransform at = new AffineTransform();
            at.rotate(a);
            g2.setTransform(at);
     
            Rectangle rect = new Rectangle(30, 30, 30, 30);
            g2.draw(rect);
     
            at = new AffineTransform();
            at.rotate(0);
            Rectangle rect2 = new Rectangle(40, 40, 40, 40);
            g2.draw(rect2);  // g2.draw(r2);
     
    ...

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    alors :

    1) les angles sont en radians la plupart du temps (avec un tour complet = 2*Math.PI radians donc). Il n'a y a guere que Arc2D et drawArc() qui utilisent des degrees je crois.

    2) Une broutille mais tu peux simplifier ton code en utilisant l'operateur modulo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    a += 60;
    if (a == 360)
    {
      a = 0;
    }
    =>
    3) une fois que tu as fais une rotation, il te faut faire la rotation inverse.

    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
    try {
      AffineTransform at = AffineTransform.getRotateInstance(a);
      g2.setTransform(at);
      Rectangle rect = new Rectangle(30, 30, 30, 30);
      g2.draw(rect);
      g2.setTransform(at.createInverse());
      // ou :
     //g2.setTransform(AffineTransform.getRotateInstance(-a));
     // pour eviter de devoir mettre un try{...} catch {...}
      Rectangle rect2 = new Rectangle(40, 40, 40, 40);
      g2.draw(rect2); 
    }
    catch (Exception e) {
      ...
    }
    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      g2.rotate(a);
      Rectangle rect = new Rectangle(30, 30, 30, 30);
      g2.draw(rect);
      g2.rotate(-a);
      Rectangle rect2 = new Rectangle(40, 40, 40, 40);
      g2.draw(rect2);
    4) mais c'est moins grave, la balise c'est [ code ] pas < code >
    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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Par défaut
    Le rectangle tourne autour du centre (0, 0) (voir code). Alors que je voudrais qu'il tourne juste autour de son centre et j'arrive pas, je sens que je m'y approche.

    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
     
            Graphics2D g2 = (Graphics2D) g;
     
            a += 2;
            a %= 360;
     
            try
            {
                AffineTransform at = new AffineTransform();
                at.rotate(Math.toRadians(a));
                g2.setTransform(at);
     
                //g2.rotate(Math.toRadians(a));
                Rectangle rect = new Rectangle(200, 50, 60, 35);
                g2.draw(rect);
                Thread.sleep(100);
                g2.rotate(Math.toRadians(-a));
                Rectangle rect2 = new Rectangle(40, 40, 40, 40);
                g2.draw(rect2); 
            }
            catch (InterruptedException ex) { }

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

Discussions similaires

  1. [Graphics2D] Rotation d'images
    Par MrEddy dans le forum 2D
    Réponses: 3
    Dernier message: 17/01/2007, 13h29
  2. Rotation de Bitmap -> ScanLine
    Par jujuesteban dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2003, 15h11
  3. Rotation d'un bouton ?
    Par ken_survivant dans le forum Composants
    Réponses: 3
    Dernier message: 01/04/2003, 18h16
  4. matrice et rotation
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 07/12/2002, 17h59
  5. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 22h58

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