2012-01-10 15 views
6

Vorrei girare un rettangolo attorno al suo punto centrale e dovrebbe rimanere nel posto che si suppone essere disegnato e ruotare in quello spaziojava ruotano rettangolo intorno al centro

questo è il mio codice:

AffineTransform transform = new AffineTransform(); 

    transform.rotate(Math.toRadians(45),rectangle.width/2, rectangle.height/2); 
    Shape transformed = transform.createTransformedShape(rectangle); 
    g2.fill(transformed) 

il rettangolo viene ruotato ma viene disegnato in una parte diversa dello schermo, come posso correggerlo?

risposta

12

Non ho provato questo, ma sembra che non si ottiene il centro corretto del rettangolo. Prova:

AffineTransform transform = new AffineTransform(); 
transform.rotate(Math.toRadians(45), rectangle.getX() + rectangle.width/2, rectangle.getY() + rectangle.height/2); 
g2.fill(transformed); 

La differenza è ora si sta aggiungendo la larghezza fino al punto X partenza e aggiungendo l'altezza al punto Y di partenza, da cui il centro del rettangolo.

Spero che questo aiuti.

+1

Sì, è tutto. +1 –

5
AffineTransform transform = new AffineTransform(); 
transform.rotate(theta, rect.getX() + rect.width/2, rect.getY() + rect.height/2); 
AffineTransform old = g2.getTransform(); 
g2.transform(transform); 

// draw your rectangle here... 

g2.setTransfrom(old); 

Se lo si fa, è possibile disegnare un rettangolo più avanzato. Ad esempio con un riempimento sfumato o testo all'interno del rettangolo. Tutto ruoterà con esso.

Problemi correlati