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

Développement 2D, 3D et Jeux Discussion :

trouver une matrice de rotation a partir de deux points ?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut trouver une matrice de rotation a partir de deux points ?
    Bonjour,
    J'ai un point de départ et un point d'arrivée, comment avec du code puis je trouver la matrice de rotation qui me permet d'aller au point d'arrivée ?

    Je cherche à faire bouger un objet a l'écran grâce a la souris. Si vous avez la solution ou une autre, je suis preneur !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 106
    Points : 153
    Points
    153
    Par défaut
    avec seulement un point d'arrive et un point de depart c'est impossible: il manque une inconnue a l'equation.

    ca serait possible si tu avais un axe de depart et un axe d'arrive.

    peut etre tu peux le faire de maniere un peu plus approximative en prenant juste en compte le deplacement du curseur.

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    comment je pourrais faire ?

  4. #4
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 814
    Points : 7 642
    Points
    7 642
    Par défaut
    Citation Envoyé par unmanos Voir le message
    avec seulement un point d'arrive et un point de depart c'est impossible: il manque une inconnue a l'equation.

    ca serait possible si tu avais un axe de depart et un axe d'arrive.
    Ou si son centre de rotation est connu (auquel ca on peut définir les deux axes dont tu parles).

    Citation Envoyé par blueLight
    comment je pourrais faire ?
    commence par nous donner plus de précisions, unmanos vient de te dire que ce n'était pas possible avec ce que tu as donné comme infos

  5. #5
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    Oui j'ai bien compris, mais est ce qu'il y a un autre moyen ?

  6. #6
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 814
    Points : 7 642
    Points
    7 642
    Par défaut
    Citation Envoyé par blueLight Voir le message
    Oui j'ai bien compris, mais est ce qu'il y a un autre moyen ?
    Un autre moyen que quoi? Pour le moment y'en a aucun!!!

    Explique en détails ce que tu veux faire, on te dira éventuellement comment le faire... Pour l'instant, c'est un peu flou ce que tu souhaites... à part vouloir faire une rotation, on ne sait rien... si tu n'as pas de centre, si tu n'as pas d'axe, tu ne peux pas.

  7. #7
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 276
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 276
    Points : 10 502
    Points
    10 502
    Billets dans le blog
    8
    Par défaut
    tu calcules l'angle entre tes deux points , tu orientes ton objet vers la destination en tenant compte de l'angle calculé précédemment. C'est un truc de ce genre que tu veux faire ? Tu parles d'une souris, j'imagine qu'un simple calcul 2D suffit ?

    tu as besoin d'une fonction atan2 pour calculer ton angle entre ton objet et ton point de destination.

    Je ne sais pas quel langage tu utilises, la fonction est sûrement disponible dans ton langage, avec PureBasic, on utilise l'assembleur et ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Procedure.f atan2f(y.f,x.f)
      !fld dword[p.v_y]
      !fld dword[p.v_x]
      !fpatan
      ProcedureReturn
    EndProcedure
    avec en paramètres
    x = Destination.x - Objet.x
    y = Destination.y - Objet.y

  8. #8
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par comtois Voir le message
    tu calcules l'angle entre tes deux points
    Comme plegat l'a précisé: sans les coordonnées du centre de la rotation, ça ne va pas être facile de calculer l'angle entre les deux points ; il en existe une infinité.

    Ton code (si je l'ai bien compris, je ne connais pas Purebasic) semble partir du principe que le centre de la rotation est l'origine (ie. x==0 && y==0), ce qui n'est finalement qu'un cas particulier parmi tant d'autres.

    Sans plus de précisions de la part de blueLight, on ne peut rien dire.

  9. #9
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 276
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 276
    Points : 10 502
    Points
    10 502
    Billets dans le blog
    8
    Par défaut
    En faisant ce calcul

    avec en paramètres
    x = Destination.x - Objet.x
    y = Destination.y - Objet.y
    tu considères que le centre de ton cercle est la destination, et ça fonctionne très bien. Je l'avais appliqué pour qu'un objet suive les mouvements de la souris également.

    La procédure utilise l'assembleur, fpatan , c'est l'équivalent de atan2 dans d'autres langages je crois ?

  10. #10
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 814
    Points : 7 642
    Points
    7 642
    Par défaut
    Citation Envoyé par comtois Voir le message
    En faisant ce calcul
    [...]
    tu considères que le centre de ton cercle est la destination
    J'ai un peu de difficulté à comprendre l'ergonomie...
    Considérer l'objet comme centre de la rotation, et les deux points comme orientation de départ et orientation d'arrivée, ok...
    Prendre le premier point comme centre, l'objet comme départ et le second point comme arrivée (ou inversement sur les points, quoique), ok...
    Mais là... ça veut dire quoi "le centre de ton cercle est la destination"???

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 106
    Points : 153
    Points
    153
    Par défaut
    Citation Envoyé par blueLight Voir le message
    Je cherche à faire bouger un objet a l'écran grâce a la souris. Si vous avez la solution ou une autre, je suis preneur !
    Si tu veux juste faire ca de maniere simple (le probleme c'est que tu ne decris pas ton probleme de maniere precise), tu peux simplement avoir un angle X et un angle Y que tu fais varier en fonction du mouvement de la souris.

    Avec tes deux angles X et Y (coordonnes spherique donc) pour construire une matrice de vue (ViewMatrix), tu convertis ton vecteur (rho=AngleX, phi=AngleY, theta=1) en coordonnes cartesienne que tu multiplie par la distance souhaitee entre l'objet et la camera, ce qui te donne la position de la camera (eye), la target de la camera etant 0,0,0.

    Tu ajoute ensuite a tes deux points eye et target la position de l'objet si l'objet n'est pas en 0,0,0.

    Ensuite avec les vecteurs eye et target tu peux construire ta ViewMatrix (LookAt, voir D3DXMatrixLookAt si tu es sous DirectX).

    ps: Pour convertir un vecteur en coordonnees cartesienne depuis des coordonnees spheriques tu peux voir ca: http://www.math.montana.edu/frankw/c...rical/body.htm

  12. #12
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 276
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 276
    Points : 10 502
    Points
    10 502
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par plegat Voir le message
    J'ai un peu de difficulté à comprendre l'ergonomie...
    Considérer l'objet comme centre de la rotation, et les deux points comme orientation de départ et orientation d'arrivée, ok...
    Prendre le premier point comme centre, l'objet comme départ et le second point comme arrivée (ou inversement sur les points, quoique), ok...
    Mais là... ça veut dire quoi "le centre de ton cercle est la destination"???
    Plutôt qu'un long discours voici concrètement le résultat, l'archive fait 14 ko et contient un exécutable. Il s'agit d'une petite démo avec un objet qui suit la souris, j'ignore si c'est ce que cherche à faire l'auteur du post.

    http://purebasic.developpez.com/temp/Rotate.zip

    Utilisez la touche [Echap] pour quitter la démo

Discussions similaires

  1. Générer une matrice de rotation à partir d'un axe et d'un angle
    Par IXaMaXI dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 29/07/2009, 14h35
  2. Réponses: 7
    Dernier message: 29/03/2009, 06h07
  3. trouver une matrice
    Par wawa111 dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 16/02/2009, 16h12
  4. Réponses: 3
    Dernier message: 21/09/2007, 16h28
  5. Réponses: 8
    Dernier message: 07/09/2006, 09h08

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