La rotation d'un rectangle en forme de Polygone autour de son centre. (Java)
J'ai ce code pour dessiner un rectangle (objet Polygone), puis dessinez un autre rectangle qui est l'original, avec une rotation de 90 degrés, à l'aide de la matrice de rotation.
public class DrawingPanel extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Point p1,p2,p3,p4;
p1 = new Point(50,50);
p2 = new Point(200,50);
p3 = new Point(200,100);
p4 = new Point(50,100);
int[] x = {(int) p1.getX(), (int) p2.getX(), (int)p3.getX(), (int) p4.getX()};
int[] y = {(int) p1.getY(), (int) p2.getY(), (int)p3.getY(), (int) p4.getY()};
Polygon poly = new Polygon(x, y, x.length);
g2d.draw(poly);
p1.setLocation(p1.getX() * Math.cos(Math.toRadians(90)) - p1.getY() * Math.sin(Math.toRadians(90)),
p1.getX() * Math.sin(Math.toRadians(90)) + p1.getY() * Math.cos(Math.toRadians(90)));
p2.setLocation(p2.getX() * Math.cos(Math.toRadians(90)) - p2.getY() * Math.sin(Math.toRadians(90)),
p2.getX() * Math.sin(Math.toRadians(90)) + p2.getY() * Math.cos(Math.toRadians(90)));
p3.setLocation(p3.getX() * Math.cos(Math.toRadians(90)) - p3.getY() * Math.sin(Math.toRadians(90)),
p3.getX() * Math.sin(Math.toRadians(90)) + p3.getY() * Math.cos(Math.toRadians(90)));
p4.setLocation(p4.getX() * Math.cos(Math.toRadians(90)) - p4.getY() * Math.sin(Math.toRadians(90)),
p4.getX() * Math.sin(Math.toRadians(90)) + p4.getY() * Math.cos(Math.toRadians(90)));
int[] x2 = {(int) p1.getX(), (int) p2.getX(), (int)p3.getX(), (int) p4.getX()};
int[] y2 = {(int) p1.getY(), (int) p2.getY(), (int)p3.getY(), (int) p4.getY()};
Polygon poly2 = new Polygon(x2, y2, x2.length);
g2d.draw(poly2);
}
}
Actuellement, le deuxième rectangle de ne pas s'afficher. Quand j'ai demandé à ce sujet dans une autre question, quelqu'un a répondu que c'est parce qu'il attire à l'extérieur de l'écran.
J'ai demandé comment faire pivoter le rectangle autour de son centre, de sorte que le nouveau dessin apparaîtra à l'écran, et il a répondu, mais je n'ai pas vraiment compris comment mettre en application ce qu'il a dit dans le code (essayé différentes choses qui ne fonctionnent pas).
Pourriez-vous me montrer exactement dans le code, comment faire pivoter le rectangle autour de son centre?
(Bien sûr, ce n'est pas réel de rotation d'un objet. C'est faire une rotation-une copie d'un objet).
Aide serait appréciée. Grâce
OriginalL'auteur user3150201 | 2014-01-05
Vous devez vous connecter pour publier un commentaire.
Depuis que vous essayez de tourner autour du rectangle au centre, vous devez d'abord traduire le rectangle de la origine, puis appliquer la rotation et enfin traduire en arrière. Voir le code suivant (adapté à votre cas) à partir de cette réponse dans un autre post.
Vous avez à faire cela pour chaque point. Aussi, vous aurez besoin de trouver le centre du rectangle
center.x
etcenter.y
.Explication
Lorsque vous directement appliquer la rotation, vous êtes en rotation autour de l'origine
(0,0)
(vous pouvez facilement le voir, quand vous changez l'angle de rotation dans votre code). Si vous voulez en rotation autour du centre du rectangle, vous devez suivre les étapes décrites ci-dessus.(0,0)
.Edit 1:
Disons que nous avons un Rectangle (Square) qui vertex sont:
Pour point
p2
:Dans première étape:
De le faire pour chaque point:
Puis vous appliquez la rotation...
Edit 2: j'espère que ça devient plus clair avec cette image, désolé si je suis mauvais avec de la Peinture.
Je vais le mettre dans d'autres mots. Voir modifier.
Merci. En général quand les gens disent origine, font-ils toujours dire 0,0?
Il est relatif, mais en général, oui. Ce corrigé le problème que vous aviez?
Ok, je comprends maintenant 🙂 j'ai confondu entre les coordonnées x et y du centre, et la largeur/2, hauteur/2 du rectangle. Merci de faire l'effort d'aide . Vraiment l'apprécier 🙂 Cheers
OriginalL'auteur Christian
Rotations toujours ce qui se passe autour de 0,0.
Afin d'effectuer une rotation autour du centre de l'objet que vous avez besoin de déplacer les points de sorte que le centre de l'objet est à 0,0; puis les faire pivoter; puis, ensuite, de les déplacer une fois de plus:
Donc si
cx
etcy
sont votre centre:Et faire de même pour les autres points aussi.
Je veux dire l'espace de coordonnées.ce que vous devez faire pour déplacer le centre de à 0 0
OriginalL'auteur Tim B