Faire pivoter une Java Graphics2D Rectangle?
J'ai cherché partout et je ne peux pas trouver la réponse.
Comment faire pivoter un Rectangle en java?
Ici est une partie de mon code:
package net.chrypthic.Space;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Space extends JPanel implements ActionListener{
Timer time;
public Space()
{
setVisible(true);
setFocusable(true);
addMouseMotionListener(new ML());
addMouseListener(new ML());
addKeyListener(new AL());
time=new Timer(5, this);
time.start();
}
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.WHITE);
Rectangle rect2 = new Rectangle(100, 100, 20, 20);
g2d.draw(rect2);
g2d.fill(rect2);
}
public void actionPerformed(ActionEvent ae) {
repaint();
}
public class AL extends KeyAdapter
{
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}
public class ML extends MouseAdapter
{
public void mouseMoved(MouseEvent e) {
}
public void mousePressed(MouseEvent e){
}
}
}
J'ai essayé g2d.rotation(mm à 100 jours); mais cela n'a pas fonctionné.
Merci à l'avance.
Voici mon édité code:
package net.chrypthic.Space;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Space extends JPanel implements ActionListener{
Timer time;
public Space()
{
setVisible(true);
setFocusable(true);
setSize(640, 480);
setBackground(Color.BLACK);
time=new Timer(5, this);
time.start();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
Rectangle rect1 = new Rectangle(100, 100, 20, 20);
g2d.setColor(Color.WHITE);
g2d.translate(rect1.x+(rect1.width/2), rect1.y+(rect1.height/2));
g2d.rotate(Math.toRadians(90));
g2d.draw(rect1);
g2d.fill(rect1);
}
public void actionPerformed(ActionEvent e)
{
repaint();
}
}
de cette façon, vous êtes le premier à traduire la rect et le tourner. Il est équivalent à: new Rectangle(110,110,20,20);g2d.tourner(en Mathématiques.toRadians(45));
OriginalL'auteur chrypthic | 2011-09-22
Vous devez vous connecter pour publier un commentaire.
Pour les images, vous devez utiliser drawImage méthode de Graphics2D avec la relative AffineTransform.
Pour la forme, vous pouvez faire pivoter Graphics2D lui-même:
Et btw, vous devez remplacer la méthode paintComponent au lieu de la peinture.
Citant JComponent'API:
Rappelez-vous aussi que lorsque vous effectuez une transformation affine, comme une rotation, l'objet est implicitement mis en rotation autour de l'axe d'origine. Donc, si votre intention est de le faire pivoter autour d'un point arbitraire, vous devriez avant de la traduire à l'origine, la faire pivoter, puis re-traslating au point souhaité.
K, je l'ai essayé. Maintenant, mon rectangle est coincé dans le coin gauche, bien que j'ai défini la position X à 100. Pourquoi est-ce arrivé? (screenie: cl.ly/AM8c)
"Rappelez-vous aussi que lorsque vous effectuez une transformation affine, comme une rotation, l'objet est implicitement mis en rotation autour de l'axe d'origine. Donc, si votre intention est de le faire pivoter autour d'un point arbitraire, vous devriez avant de la traduire à l'origine, la faire pivoter, puis re-traslating au point souhaité." Comment avais-je le faire?
vous dessinez un carré : Rectangle(100, 100, 20, 20); Il est situé à 100,100. Si vous définissez votre rectangle de cette façon: Rectangle(-10, -10, 20, 20); puis effectuer la rotation, puis g2d.traduire(100,100); vous devriez obtenir le résultat souhaité.
Merci. J'ai traduit, maintenant, quand je change le X ou Y, et ma rotation est de 90 (inutile mais un test), il se déplace vers le bas au lieu de droite ou vers le bas. Pourquoi? Est-il un moyen de contourner cela?
OriginalL'auteur Heisenbug
Graphics.create()
etGraphics.dispose()
vous permettre de sauvegarder la transformation actuelle des paramètres (ainsi que la police de caractères courante, accident vasculaire cérébral, la peinture, etc), et de les restaurer plus tard. C'est l'équivalent deglPushMatrix()
etglPopMatrix()
en OpenGL.Vous pouvez également appliquer une rotation inverse une fois que vous avez dessiné le rectangle pour revenir à la matrice de transformation de retour à son état initial. Cependant, la virgule flottante approximations lors de substractions peut conduire à un résultat faux.
Bien sûr, je m'attends à l'op, pour savoir comment dessiner sur un Composite, c'est juste un extrait de code 🙂
+1 pour le
rotate()
.OriginalL'auteur Aurélien Ribon
Une autre façon est d'utiliser
Path2D
, avec elle, vous pouvez faire pivoter le chemin et non la totalité de l'objet graphique:OriginalL'auteur Daniel De León
Le seul problème avec g2d.faites tourner, c'est qu'il ne tourne pas autour d'un point précis. Il sera surtout désordre où vous voulez que votre Image, puis vous forcer à bouger les coordonnées x et y de l'image. Je ne voudrais pas l'utiliser,spécialement pour un jeu. Ce que vous devez rechercher est la rotation d'un point en java.
OriginalL'auteur Devon Ward