Votre question

Rotation d'un point par rapport à un centre en java

Tags :
  • Java
  • Programmation
Dernière réponse : dans Programmation
11 Décembre 2010 18:02:05

Bonjour,

Arrivé à la fin d'un projet en Java, il y a quelque chose que j'ai beaucoup de mal à faire ...

Le projet est un réseau phrastique (des phrases, et des relations entre elles), bref.

Je trace des flèches avec Graphics pour relier les relations à leurs phrases. Cependant, je n'arrive pas à dessiner le triangle au bout de la flèche (l'orienter).

J'ai à disposition, le point de départ (x,y), et le point d'arrivée (x,y).

J'ai commencé par faire ça :

(x1, y1), point de départ de la flèche
(x2, y2), point d'arrivée de la flèche où je dois dessiner le triangle.

  1. public void dessinerTriangle(Graphics g, int x1, int y1, int x2, int y2) {
  2. /*int px[] = {0, 15, 7};
  3. int py[] = {15, 15, 0};
  4.  
  5. Graphics2D g2d = (Graphics2D)g.create();
  6. AffineTransform at = g2d.getTransform();
  7.  
  8. double angle = Math.atan2((double)(y2-y1), (double)(x2-x1));
  9.  
  10. at.translate(x2, y2);
  11. at.rotate(angle-(Math.PI/2));
  12. g2d.setTransform(at);
  13.  
  14. g2d.fillPolygon(px, py, 3);
  15. g2d.dispose();
  16.  
  17. while (px[2] != x2) {
  18. px[0]++;
  19. px[1]++;
  20. px[2]++;
  21. }
  22. while (py[2] != y2) {
  23. py[0]++;
  24. py[1]++;
  25. py[2]++;
  26. }*/
  27. [b]int x, y;
  28. x = (int) (0.1*(x2-x1) + x1);
  29. y = (int) (0.1*(y2-y1) + y1);[/b]
  30.  
  31. }


puis ensuite, je voudrais effectuer la rotation du point (x,y), qui, est en fait un point sur la droite reliant (x1,y1) à (x2,y2), éloigné de un dixième de la longueur de cette flèche, du point d'arrivée.

Reste ensuite, à créer les deux points (du triangle), qui seraient une rotation de trente degrés (aiguille d'une montre et sens inverse) du point (x,y), à partir du centre de rotation (x2,y2).. Or , sur internet, je ne trouve que des formules avec des nombres complexes !! et je ne sais pas comment les utiliser à travers l'api java..

J'ai fait d'autres tentatives avant (en commentaire), mais je n'arrivais pas à aller jusqu'ua bout !

Merci de m'aider si vous avez une idée !

Autres pages sur : rotation point rapport centre java

a b L Programmation
11 Décembre 2010 23:38:04

Pour faire ton calcul, il faut composer une rotation et une translation (c'est peut-être mieux d'utiliser un produit de matrice, mais c'est pareil).
Fait une flèche d'angle 0, la position (0, 0) étant la pointe (ou l'autre extrémité), tu commences par faire une rotation, puis la translation.
m
0
l
12 Décembre 2010 16:38:22

Salut,

Effectivement, c'est à peu près ce que je veux faire.

En fait le point (x2, y2) serait le centre de rotation (la pointe du triangle de la flèche).
Et (x1, y1) le point de départ de la flèche.


.-------------------------------------------------------->.
(x1,y1)------------------------------------------------- (x2,y2)

Ensuite, je place mon point (x,y) au milieu des deux autres points du triangle, donc en fait, sur la flèche, à un dixième de la longueur de la flèche de x2,y2.

Maintenant, le problème est que je peine à trouver comment faire la rotation à partir de mon (x,y) par rapport à (x2,y2) de trente degrés à droite et à gauche.

Une fois les points trouvés, il me suffirait de faire un fillpolygon en mettant les trois points.

Connaitrais-tu une méthode permettant de le faire ? J'avais essayé des méthodes affineTransform etc (voir en commentaires dans le code), mais le triangle n'était pas bien orienté et bougeait lorsque je bougeais ma flèche (en bougeant la phrase, ou bien la relation).

Voici le projet si cela vous intéresse (juste pour l'exécuter et pour voir l'affichage).

http://www.sendspace.com/file/g7q5yi

Merci beaucoup pour l'aide apportée !
m
0
l
13 Décembre 2010 17:16:45

Re,

Finalement, j'ai "trouvé" une solution (un collègue qui m'a montré son bout de code ....).

Merci pour l'aide. Cependant, j'ai un souci avec une JTable que je viendrai exposer ici, si je n'arrive pas à trouver la solution.
Merci de m'avoir aidé :) 
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS