IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Coordonnées rotation d'un point


Sujet :

2D Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut Coordonnées rotation d'un point
    Bonjour à tous,

    Voici un dessin pour expliquer mon problème:



    Je voudrais connaître les coordonnées d'un point P2 (appartenant à un cercle) issu de la rotation d'un autre point P3 et d'un angle.
    Les coordonnées de P3 et l'angle sont connus.

    2 exemples en rapport avec la figure:

    - Je connais les coordonnées de P3 et l'angle a.
    Je voudrais connaître les coordonnées du point P2 issu de la rotation du point P3 de l'angle a dans le sens trigo.

    - Je connais les coordonnées de P3 et l'angle b.
    Je voudrais connaître les coordonnées du point P4 issu de la rotation du point P3 de l'angle b dans le sens trigo.

    J'ai trouvé les formules suivantes pour trouver les coordonnées x et y de P2 issu de P1:
    xP2 = xP1 * cos a - yP1 * sin a + translation
    YP2 = xP1 * sin a + yP1 * cos a + translation

    translation : déplacement du point d'origine (0,0) au centre du cercle, mais ça ce n'est pas un problème.

    J'ai essayé de l'appliquer mais il doit y avoir des problèmes de signes dans sinus, cosinus, angle car je ne trouve pas toujours les bons résultats :-(

    Ca fait un moment que je cherche mais là
    Pouvez-vous m'aider ?

    Merci d'avance.
    Marc

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Les angles sont exprimés dans quelle unité?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut
    en radian dans les méthodes sinus et cosinus de java.
    as-tu des éclaircissements à m'apporter ?

    merci d'avance.

    Marc

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Je ne vois pas ce qui ne va pas. Peut être que si tu postes ton code ...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut
    merci Sanguko de te pencher un peu sur mon soucis.
    mon code pour la méthode de rotation est la transposition des formules de mon premier post, soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    static Point rotation (Point p, double theta) {
        double x = p.x * Math.cos(theta) - p.y * Math.sin(theta);
        double y = p.x * Math.sin(theta) + p.y * Math.cos(theta);
        return new Point(x, y);
    }
    après j'effectue la translation pour placer le repere au centre du cercle.

    je ne trouve pas toujours les bons résultats ça doit sûrement dépendre dans quel sens se fait la rotation, d'où se trouvent mon point d'origine et mon point de destination donc peut-être des problèmes de signes pour sin et cos.
    tu vois quelque chose?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Je ne vois pas de probleme. J'ai fait le test chez moi, ca a l'air de marcher.

    Comment definis tu la classe Point ?

    As tu un exemple de cas ou ca ne marche pas ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut
    tu réussis donc à trouver les coordonnées de n'importe quel point du cercle issu d'un autre point en connaissant l'angle de rotation ?
    ça m'intéresse

    la classe Point n'est en fait qu'un Point2D.

    tu passes quoi pour les angles ?
    tu as un exemple qui fonctionne ?

    je reteste avec un exemple que je n'avais pas réussi à passer.
    je te redis ça dans peu de temps.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut
    voici Sanguko, un cas qui me pose problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Point2D ptDepart = new Point2D.Double(37,-15);
    double angleDegre = -80;
    double angleRadian = Math.PI*angleDegre/180;
    double sina = Math.sin(angleRadian);
    double cosa = Math.cos(angleRadian);
    double x1 = ptDepart.getX() * cosa - ptDepart.getY() * sina;
    double y1 = ptDepart.getX() * sina + ptDepart.getY() * cosa;
    System.out.println("coordonnées pt tourné sur le cercle");
    System.out.println(x1);
    System.out.println(y1);
    résultat dans la console:

    coordonnées pt tourné sur le cercle
    -8.347133721506696
    -39.04260952645565

    alors que sur le papier, les coordonnées de ce point sont:
    x= 21,5
    y= 33,5

    tu vois ? un cas qui me pose pb....

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Ton exemple papier correspond à un angle de 80°, pas -80°.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut
    effectivement avec +80, ça fonctionne
    mais pourquoi c'est +80 et pas -80 ?
    je suis perdu dans le sens des angles

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    L'orientation des angles, c'est l'orientation trigonométrique, dans le sens inverse des aiguilles d'une montre.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut
    merci Sangoku de ta patience mais il doit encore y avoir un soucis avec l'exemple suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Point2D ptDepart = new Point2D.Double(-29,26);
    double angleDegre = -20;
    double angleRadian = Math.PI*angleDegre/180;
    double sina = Math.sin(angleRadian);
    double cosa = Math.cos(angleRadian);
    double x1 = ptDepart.getX() * cosa - ptDepart.getY() * sina;
    double y1 = ptDepart.getX() * sina + ptDepart.getY() * cosa;
    j'obtiens:
    coordonnées pt tourné sur le cercle
    18.35856227632396
    -34.35059229687801

    alors que sur mon papier, les coordonnées devraient être:
    -36
    15

    tu vois pourquoi ?
    car si je mets +20 pour l'angle, j'ai le bon résultat.
    pourtant l'angle est bien dans le sens inverse des aiguilles d'une montre, non ?

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut
    j'ai un flash soudain....
    ce n'est pas lié au signe du sinus !?
    quand je suis dans le demi cercle haut, je suis en -sin dans la formule et quand je suis dans le demi cercle bas, je suis en +sin, non ?

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Ben moi j'obtiens
    -18.35856227632396
    +34.35059229687801
    qui me parait bon...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut
    oui c'est ce que je te disais à la fin de mon message mais je ne vois pas sur le signe du sinus ou bien le sens des angles.

    tu peux m'éclairer stp ?

    car là à force de regarder ce p..... de cercle trigo et de dessiner des angles partout, j'ai le cerveau un peu ramoli

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 82
    Par défaut
    bon je pense que là c'est plus clair pour moi
    mes problèmes concernaient bien:
    - le signe du sinus (inversé par rapport à la normale sur mon repère)
    - le signe de l'angle
    et forcément à force de mesurer des angles, je prenais des angles dépassant les 180°, ça n'arrangeait rien, pô bon.....
    donc c'est okay pour l'utilisation de ces formules
    un grand merci à toi Sangoku pour son aide et sa patience
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/11/2016, 12h14
  2. Retrouver les coordonnées 3D de 4 points avec contraintes
    Par jobigoud dans le forum Mathématiques
    Réponses: 13
    Dernier message: 22/10/2008, 11h55
  3. Rotation d'un point
    Par clemsye dans le forum C#
    Réponses: 11
    Dernier message: 13/12/2007, 22h14
  4. rotation d'un point dans l'espace
    Par ded jay dans le forum C++
    Réponses: 7
    Dernier message: 16/10/2007, 10h46
  5. Calculer la normale grace a trois angles de rotations plus un point.
    Par parp1 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 02/03/2007, 17h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo