2009-11-26 5 views
1
protected void paintComponent(Graphics g) { 
    Graphics2D gr = (Graphics2D) g.create(); 
    // draw Original image 
    super.paintComponent(gr); 

    // draw 45 degree rotated instance 
    int aci=-45; 
    gr.transform(AffineTransform.getRotateInstance(Math.toRadians(aci))); 
    super.paintComponent(gr); 

    //translate rotated instance from origin to +10 on y axes 
    gr.translate(0,10); 
    super.paintComponent(gr); 
} 

Mais que se passe-t-il si je souhaite dessiner la forme pivotée à l'origine de l'image d'origine.faire pivoter la forme java2d sans perdre son origine

Je veux dire que je veux tourner façonner son origine sans glisser

+0

Je ne comprends pas vraiment ce que vous voulez faire ... Voulez-vous tourner par l'origine de l'axe du plan ou par l'origine de la forme ?? –

Répondre

0

D'abord, une pointe. Au lieu de gr.transform(blablabla); je pense que vous pouvez utiliser gr.rotate(angle);.

Je ne suis pas sûr de ce que vous exactement faire ici, mais la manière habituelle pour accomplir une rotation autour d'un point est:

  • Traduisez par ce point de x et y (pas sûr positif ou négatif. ..try les deux)
  • Rotation
  • retraduire
+0

Je pense qu'ils font le même travail ne pas ils? – soField

+0

oui ils font j'ai testé – soField

+0

S'il veut tourner autour de l'origine de l'objet, il n'a pas besoin de faire les deux traductions, cependant; il a juste besoin de faire cela s'il veut tourner autour d'un point arbitraire (ce qui est encore une bonne information). – jprete

0

Quand vous faites ce genre de chose, vous devez vous rappeler que vous êtes jamais un mouvement tout ce qui a été dessiné. Vous ne déplacez que le pinceau , pour ainsi dire.

Typiquement, vous faire quelque chose le long de ces lignes:

  1. Traduisez l'origine du dessin au point où vous voulez dessiner.
  2. Faites pivoter le pinceau selon l'angle sur lequel vous souhaitez peindre.
  3. Peignez l'objet.
  4. Inversez vos anciennes transformations afin que les objets futurs ne soient pas affectés.

Je ne peux pas, cependant, rappelez-vous le bon ordre de faire la traduisons et faites pivoter dans. (Tout commentaire là-bas?)

1

Pour faire pivoter votre image grâce à une utilisation d'origine spécifique

x2 = cos(angle)*(x1 - x0) -sin(angle)*(y1 - y0) + x0 

y2 = sin(angle)*(x1 - x0) + cos(angle)*(y1 - y0) + y0 

Où (x0, y0) est l'origine souhaitée.

Pour le faire plus facile il suffit d'utiliser la notation de la matrice

[x2 [cos -sin x0 [x1 - x0 
    y2 = sin cos y0 y1 - y0 
    1]  0 0 1]  1 ] 
Questions connexes