Partage
  • Partager sur Facebook
  • Partager sur Twitter

Définir un repère a partir d'un vecteur

Deux vecteur a calculer...

Sujet résolu
    6 décembre 2010 à 19:35:59

    Bonjour a tous !

    Je travaille actuellement sur un jeu en 3 dimensions dans l'espace, et ça fait maintenant 2 jours que je reste bloqué sur un problème.
    Le principe est le suivant : le vaisseau avance seul, et pour le diriger, le joueur peut lui appliquer une rotation (grâce aux touches fléchées) droite/gauche ou bien haut/bas.

    Le principe que j'avais imaginé est le suivant : le vaisseau a un vecteur déplacement, initialisé a (0, 0, -1). Ce vecteur est connu, et je veux m'en servir pour créer un repère propre au vaisseau ; ainsi, le vaisseau peut pivoter autour des deux autres axes.

    Mon problème est : comment définir les deux autres vecteurs formant le repère a partir de mon seul vecteur déplacement ?

    J'avais pensé a utiliser le produit vectoriel (en utilisant le principe (Ox ^ Oy = Oz , Oy ^ Oz = Ox , Oz ^ Ox = Oy), mais j'aboutis a un système de 9 équations a 6 inconnues impossible a résoudre (au sens propre, j'ai essayé 36 solveurs, une résolution a la main, etc).

    Je débute vraiment dans ce domaine la, et j'ignore probablement beaucoup de choses qui me seraient utiles. Je n'attend pas forcément une solution concrète, mais au moins une piste fiable dans laquelle je suis sur d'arriver a la solution.

    Merci d'avance :)

    Smil
    • Partager sur Facebook
    • Partager sur Twitter
      6 décembre 2010 à 19:42:04

      Je n'ai pas l'impression que ce soit possible. Les deux autres vecteurs peuvent "pivoter" autour de l'axe du vecteur donné.
      • Partager sur Facebook
      • Partager sur Twitter
        6 décembre 2010 à 19:47:07

        Ca m'étonne que ce ne soit pas possible. Mais merci pour ta proposition, j'ai presque honte de ne pas y avoir pensé :-°
        Je vais essayer ça.
        • Partager sur Facebook
        • Partager sur Twitter
          6 décembre 2010 à 19:51:45

          Bonsoir,
          As-tu pris en compte que des vecteurs unitaires suffiraient à former ton repère (cela serait même plus pratique). Si ce n'est pas le cas, cela devrait te rajouter au moins deux équations. Ensuite, le mieux est aussi que tu utilises un repère orthonormal (les vecteurs sont orthogonaux deux à deux), ce critère te rajoutera des équations également.
          Mais concrètement, plutôt que de passer par des équations, comme ton vecteur de base comporte seulement une composante selon z, tu peux former un repère orthogonal en prenant un vecteur ayant seulement une composante selon x, et un vecteur ayant une composante selon y. Ensuite, si tu veux que ces derniers vecteurs soient normés, la composante de chacun d'entre eux ne peut être que -1 ou 1.

          En espérant avoir bien compris ton problème et t'avoir aidé.
          Damneth.
          • Partager sur Facebook
          • Partager sur Twitter
            6 décembre 2010 à 19:55:08

            Je pense que, si on prend un autre repère comme base, le trio <math>\(\left(\frac{\sqrt{2}}{2}, \frac{\sqrt{2}}{2}, 0\right), \left(-\frac{\sqrt{2}}{2}, \frac{\sqrt{2}}{2}, 0\right), (0,0,1)\)</math> formerait un repère aussi bien que <math>\((1,0,0),(0,1,0),(0,0,1)\)</math>, si ton vecteur donné est (0,0,1).

            (Si je dis des conneries, arrêtez-moi !)
            • Partager sur Facebook
            • Partager sur Twitter
              6 décembre 2010 à 19:58:16

              Citation : Smil

              Bonjour a tous !

              Je travaille actuellement sur un jeu en 3 dimensions dans l'espace, et ça fait maintenant 2 jours que je reste bloqué sur un problème.
              Le principe est le suivant : le vaisseau avance seul, et pour le diriger, le joueur peut lui appliquer une rotation (grâce aux touches fléchées) droite/gauche ou bien haut/bas.

              Le principe que j'avais imaginé est le suivant : le vaisseau a un vecteur déplacement, initialisé a (0, 0, -1). Ce vecteur est connu, et je veux m'en servir pour créer un repère propre au vaisseau ; ainsi, le vaisseau peut pivoter autour des deux autres axes.

              Mon problème est : comment définir les deux autres vecteurs formant le repère a partir de mon seul vecteur déplacement ?

              J'avais pensé a utiliser le produit vectoriel (en utilisant le principe (Ox ^ Oy = Oz , Oy ^ Oz = Ox , Oz ^ Ox = Oy), mais j'aboutis a un système de 9 équations a 6 inconnues impossible a résoudre (au sens propre, j'ai essayé 36 solveurs, une résolution a la main, etc).

              Je débute vraiment dans ce domaine la, et j'ignore probablement beaucoup de choses qui me seraient utiles. Je n'attend pas forcément une solution concrète, mais au moins une piste fiable dans laquelle je suis sur d'arriver a la solution.

              Merci d'avance :)

              Smil


              Le système ne se résout pas, c'est normal, tu as une infinité de choix !
              • Partager sur Facebook
              • Partager sur Twitter
                6 décembre 2010 à 20:02:29

                Oui c'est ce que j'évoquais en fait implicitement dans mon message.

                On a donc un vecteur <math>\(\vec{a}\)</math> fixé. Si on veut se répérer dans le plan, il suffit d'un autre vecteur <math>\(\vec{b}\)</math> qui ne soit pas colinéaire à <math>\(\vec{a}\)</math>, ce qui laisse donc ... une infinité de possibilités ! Or il se trouve qu'il est plus pratique de prendre <math>\(\vec{b}\)</math> orthogonal à <math>\(\vec{a}\)</math> et unitaire (c'est-à-dire de "longueur" 1).
                Pour se repérer dans l'espace, le problème est le même, tu l'auras compris. On a besoin d'un vecteur <math>\(\vec{c}\)</math> qui vérifie pour seule condition de ne pas être dans le plan déjà formé par <math>\(\vec{a}\)</math> et <math>\(\vec{b}\)</math>. On le prend donc orthogonal à <math>\(\vec{a}\)</math> et <math>\(\vec{b}\)</math>, de norme 1 : c'est beaucoup plus simple !

                Le seule critère sur lequel on a encore une influence dont je n'ai pas parlé est le choix de la direction des vecteurs <math>\(\vec{b}\)</math> et <math>\(\vec{c}\)</math>. En fait, selon la manière dont on les prendra, on obtiendra une base directe ou indirecte, mais ça c'est une autre histoire.
                • Partager sur Facebook
                • Partager sur Twitter
                  6 décembre 2010 à 21:03:31

                  Bon,

                  Je n'avais effectivement pas réalisé qu'il existait une infinité de solutions au système u_u

                  Finalement, j'ai essayé la méthode suivante : je définis au début les 3 vecteurs propres au vaisseau, qui constitueront le repère mobile. Je les initialise respectivement a (1,0,0) (0,1,0) (0,0,1), c'est-a-dire sur le repère absolu. Quand le vaisseau fait une rotation sur l'axe Y par exemple, je fait pivoter les deux vecteurs X et Z du repère mobile.

                  Il me reste encore quelques petites choses avant de pouvoir tester pour de bon, mais je vous tiens au courant :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 décembre 2010 à 22:58:43

                    Tout à fait, ton vaisseau doit au moins etre défini par un point et 2 vecteurs (le 3e se calculant a coup de produit vectoriel)
                    Tout déplacement par la suite gerera ces 2 vecteurs (ou 3 si tu ne le recalcules pas à chaque fois)

                    Mon jeu "Klostro Laby" dans mes projets dans ma signature se base la dessus : 6 degrés de liberté, attention au mal de mer...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                      9 décembre 2010 à 13:45:47

                      Bon, j'ai finalement résolu le problème en utilisant la première suggestion de VictorJavAdor, c'est-a-dire que j'ai créé 3 vecteurs de bases, que je fait pivoter en même temps que le vaisseau au lieu de les recalculer a chaque fois. Cette méthode m'a d'ailleurs permis de résoudre d'autre soucis.

                      Sujet résolu, merci a tous pour vos réponse :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Définir un repère a partir d'un vecteur

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown