Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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 !
Lassé par la pub ? Créez un compte
Expert Programmation

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.

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 !

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é :) 
Lassé par la pub ? Créez un compte
Tom's guide dans le monde