2012-11-26 3 views
2

Je veux tourner un rectangle dans une méthode, mais ne comprennent pas comment le faire et essayé comme suit:comment faire pivoter un rectangle dans Java2D

private void setBoundaryRotate(Rectangle b, int radio) { 
     AffineTransform transform = new AffineTransform(); 
     transform.rotate(Math.toRadians(45), b.getX() + b.width/2, b.getY() + b.height/2);} 

Merci pour tous.

+0

Vous aimeriez avoir regard sur [ce] (http://stackoverflow.com/questions/11911610/affinetransform-rotate-how-do-i-xlate-rotate-and-scale-at-the-same-time/11911758#11911758) et [ceci] (http: //stackoverflow.com/questions/12824684/change-the-angle-position-of-a-drawing-with-a-algorithm-in-java/12826882#12826882) et [this] (http://stackoverflow.com/questions/11911610/affinetransform-rotate-how-do-i-xlate-rotate-and-scale-at-the-same-time/11911758 # 11911758). Pendant qu'ils travaillent avec des images, ils utilisent AffineTransform pour effectuer leurs rotations. – MadProgrammer

+0

Vous pouvez également consulter [Rectangle # getPathIterator] (http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Rectangle2D.html#getPathIterator (java.awt.geom. AffineTransform)) qui vous permettra de passer directement la transformation – MadProgrammer

Répondre

1

Vous devez appeler la méthode transform() sur votre objet transform, en passant les coordonnées de votre rectangle dans un tableau.

+0

Je ne comprends pas comment appliquer mon rectangle car les images sont des exemples et ne créent pas d'objet Graphics. – user1387989

0

C'est un peu subjectif, tout dépend de ce que vous voulez réaliser.

Le code suivant utilise un AffineTransform pour faire tourner le rectangle, mais pour le faire, je dois obtenir un PathIterator et ajoutez-le à Path2D

public class SpinBox { 

    public static void main(String[] args) { 
     new SpinBox(); 
    } 

    public SpinBox() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new SpinPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class SpinPane extends JPanel { 

     private Rectangle box = new Rectangle(0, 0, 100, 100); 
     private float angle = 0; 

     public SpinPane() { 
      Timer timer = new Timer(1000/60, new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        angle += 1; 
        repaint(); 
       } 
      }); 
      timer.setRepeats(true); 
      timer.start(); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 

      super.paintComponent(g); 

      int width = getWidth() - 1; 
      int height = getHeight() - 1; 

      int x = (width - box.width)/2; 
      int y = (height - box.height)/2; 

      Graphics2D g2d = (Graphics2D) g.create(); 
      AffineTransform at = new AffineTransform(); 
      at.rotate(Math.toRadians(angle), box.x + (box.width/2), box.y + (box.height/2)); 
      PathIterator pi = box.getPathIterator(at); 
      Path2D path = new Path2D.Float(); 
      path.append(pi, true); 
      g2d.translate(x, y); 
      g2d.draw(path); 
      g2d.dispose(); 

     } 

    } 

} 
Questions connexes