Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Physique] Un soucis vectoriel bien corsé…

    16 août 2011 à 21:05:55

    Salut à vous les zér0s.


    Je me heurte a un problème de physique assez précis dans le but de programmer un jeu avec des propriétés physiques. J'ai eu besoin de simuler le déplacement d'un collier de perle, ouvert et parfaitement flexible, où les perles sont reliées les unes aux autres à une même distance d, en appliquant un vecteur de déplacement à une des perles. J'ai compris la méthode sur ce site et j'ai adapté le code, j'ai fait un petit schéma pour vous expliquer la méthode en question et que vous compreniez clairement mon problème par la suite :

    Image utilisateur

    Dans mon collier de 6 perles (p0, p1, p2, p3, p4, p5) j'applique le vecteur <math>\(v\)</math> à p0 qui nous donne p'0. Pour calculer la position de p'1 qui est relié p'0, il faut partir de p'0, se mettre dans l'axe de p1, et avancer de d, ainsi, p'1 sera forcément entre p'0 et p1, p'2 entre p'1 et p2 etc…
    Ce qui nous donne :

    p’1.x = p’0.x + cos(a1) * d;
    p’1.y = p’0.y + sin(a1) * d;



    a1 est l'angle que forme p'0 avec p1 par rapport aux abscisses (où p'0 centre du cercle trigo), il est ici négatif, puis de même avec les autres perles :

    p'2.x = p'1.x + cos(a2) * d;
    p'2.y = p'1.y + sin(a2) * d;



    Voili voilou, jusque là, tout roule. Mon problème est que je veux maintenant que ma chaîne soit tenu fixement par les deux bouts, et appliquer un vecteur à une des perles du milieu. Imaginez, par exemple, un jeu en 2D où Indiana Jones doit traverser un de ces ponts en corde et en bois qui plient quand on les traverse. Indiana, au milieu du pont, est mon vecteur qui fait pression et fait plier le pont, mais le pont reste accroché par les deux bouts. Tout ça pour en venir à ma question…

    Pour un collier de 5 perles (p0, p1, p2, p3, p4), p0 et p4 son fixe et j'applique un vecteur <math>\(v\)</math> à p2.
    Comment pensez vous qu'il est possible de calculer les nouvelles positions exactes du collier (p'0, p'1, p'2, p'3, p'4) ?


    Pour ce faire, j'ai tenté, tout d'abord, d'appliquer <math>\(v\)</math> à p2, qui nous donne p'2 et de calculer les positions de p'0, p'1, p'3, p'4 avec la méthode expliquée au-dessus, comme si p'0 et p'4 n'étaient pas accrochées. Hop le piti schéma :

    Image utilisateur

    Maintenant, pour rester immobile, p'0 et p'4 doivent émettre une force de réaction, mais lesquelles ?
    Là est toute ma question…

    Si j'applique le vecteur <math>\(p'0p0\)</math> à p'0, on obtient un nouveau collier de perles jaunes :

    Image utilisateur

    puis le vecteur <math>\(p'4p4\)</math> à p'4 pour obtenir le collier violet :

    Image utilisateur

    Et que j'additionne les vecteurs bleu et les vert en les vecteurs jaune pour simuler le déplacement simultané des deux vecteurs, j'obtiens un nouveau collier :

    Image utilisateur


    Mais en comparant ce collier au premier :

    Image utilisateur

    On remarque que le point p4'4 ne correspond pas à p4 et p4'0 à p0, en effet, si on tire le collier depuis la première perle, on risque de faire bouger la dernière, et si on le tire depuis la dernière, on risque de faire bouger la première, ici j'ai tiré les deux en même temps, donc elles se sont toutes les deux un peu décalées.


    Pour se rapprocher du résultat, de la même manière, il faudrait appliquer en même temps les vecteurs <math>\(p4'4p4\)</math> à p4'4 et <math>\(p4'0p0\)</math> à p4'0 pour obtenir respectivement p5'4 et p5'0, mais il y aurait encore un décalage entre p5'4 et p4 et entre p5'0 et p0, on recommencerait la manœuvre pour obtenir p6'4 et p6'0, à chaque fois, les vecteurs de déplacement que l'on appliquerait tendraient un peu plus vers 0. Si on recommençait l'exercice une infinité de fois et qu'on additionnait tous les vecteurs appliqués à Pn'0 et Pn'4 respectivement en les deux vecteurs <math>\(v0\)</math> et <math>\(v4\)</math>, en théorie, on aurait alors trouvé les deux vecteurs parfaits, infiniment précis, qui déplaceraient chaque perles à la bonne place et inverseraient la force que lui oppose l'autre vecteur.

    Ils devraient ressembler à quelque chose comme ceci :

    Image utilisateur




    Pour finalement, après avoir appliquer ces vecteurs, obtenir LE collier parfait :

    Image utilisateur

    Mais en pratique on ne peut faire qu'une approximation de ces vecteurs avec cette méthode et qu'après de nombreux calcules.


    Je cherche donc un moyen rapide et précis (pour pouvoir faire tourner l'algorithme dans un jeu) de calculer ces vecteurs… peut être que je ne prends pas le problème dans le bon sens mais je suis certain qu'il a une solution mathématique relativement simple, que des créateurs de moteur physique ont déjà du résoudre… J'implore votre aide. :(



    Dites moi ce que vous en pensez, si vous avez des pistes ou quoi que ce soit…
    Et merci à ceux qui auront pris la peine de lire jusqu'au bout ^^
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 août 2011 à 23:00:51

      Bonsoir,
      Pour le collier 5 perles, P0,P1,P2,P3,P4
      je ne sais pas si j'ai bien compris le problème ( ce que tu as écrit en secret est...long) mais si oui il me semble qu'il y a plus simple.
      P0 et P4 sont fixés et la distance <math>\(d\)</math> entre perles constantes , il suffit d'écrire les contraintes qui en découlent.
      P'1 est à l'intersection des cercles de rayon d et de centres P0 et P'2 ;de même P'3 à l'intersection des cercles de rayon d et de centres P'2 et P4
      Pour les deux premiers cela se traduit par
      <math>\(\[ (x'_{1}-x_{0})^{2}+(y'_{1}-y_{0})^{2}=d^{2} \]\)</math>
      <math>\(\[ (x'_{1}-(x_{2}+v_{x}))^{2}+(y'_{1}-(y_{2}+v_{y}))^{2}=d^{2} \]\)</math>
      On a les éléments pour calculer les coordonnées de P'1 puisque toutes les autres coordonnées sont a priori connues.
      On adapte les indices pour P'3.
      On peut remarquer que par soustraction, on obtient une relation linéaire entre les inconnues qui facilitent l'élimination ( ...c'est en fait l'équation de la médiatrice de P0P'2 / resp P4P'2 car géométriquement les deux points cherchés se déplacent obligatoirement sur cette médiatrice!)
      Il y a je pense des conditions de compatibilité à considérer sur v qui ne peut être quelconque puisque P'2 pourra être au plus à une distance 2d de P0 /resp P4.
      Lorsque v est compatible, il y a deux solutions ( deux cercles se coupent en deux points !)

      ( pour un collier 6 perles c'est plus compliqué et ce qui précéde ne s'appliquerait pas, me semble -t-il , il y a une indétermination qui conduit à une "infinité" de positions géométriquement compatibles)
      • Partager sur Facebook
      • Partager sur Twitter
        17 août 2011 à 2:14:58

        Merci tu as raison, je penses qu'il faut plutôt raisonner par "contraintes"… j'en ai donc fais la liste…


        Les deux points fixes :

        xP'0, yP'0, xP'4, yP'4 respectivement égaux à xP0, yP0, xP4, yP4.

        P'1 est dans un rayon d de P'0 :

        (xP'1 - xP'0)² + (yP'1 - yP'0)² = d²;

        P'3 est dans un rayon d de P'4 :

        (xP'3 - xP'4)² + (yP'3 - yP'4)² = d²;

        P'2 est dans un rayon d de P'3 et de P'1 :

        (xP'2 - xP'1)² + (yP'2 - yP'1)² = d²;
        (xP'2 - xP'3)² + (yP'2 - yP'3)² = d²;

        xP'2 = xP2 + Vx - x;
        yP'2 = yP2 + Vy - y;

        Si on lance une balle avec une force énorme mais qu'elle est accrochée par un fils, elle n'ira pas bien loin… c'est pour ça que je soustrais x et y, car le vecteur ne sera peut être pas complètement appliqué puisque la perle risque d'être retenu par ses voisines.
        DOnc :

        (xP2 + Vx - x - xP'1)² + (yP2 + Vy - y - yP'1)² = d²;
        (xP2 + Vx - x - xP'3)² + (yP2 + Vy - y - yP'3)² = d²;

        Je penses (si j'ai pas fais n'importnawake) qu'il y a assez d'éléments pour résoudre tout ça… j'récapitule, en rouge, on cherche, en vert, on connait :

        (xP'1 - xP'0)² + (yP'1 - yP'0)² = d²;
        (xP'3 - xP'4)² + (yP'3 - yP'4)² = d²;
        (xP2 + Vx - x - xP'1)² + (yP2 + Vy - y - yP'1)² = d²;
        (xP2 + Vx - x - xP'3)² + (yP2 + Vy - y - yP'3)² = d²;

        *J'avoue que ça risque de se compliquer si on ajoute des boules et j'ai pas très bien compris comment par soustraction tu trouvais l'équation de la médiatrice ~_~'


        Enfin merci de ton aide, j'm'y remet demain allé dodo
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          17 août 2011 à 11:17:51

          Bonjour,

          1- médiatrice.
          Par soustraction, on obtient que P1 doit vérifier ( avec mes notations pour ne pas réécrire mes équations!):
          <math>\(\[ [(x_{2}+v_{x})-x_{0})][2x_{1}-(x_{2}+v_{x})-x_{0}] +[(y_{2}+v_{y})-y_{0})][2y_{1}-(y_{2}+v_{y})-y_{0}]=0 \]\)</math>
          (Il suffit d'appliquer l'identité remarquable sur la différence de 2 carrés pour arriver à cela )C'est l'équation d'une droite. Ce ne peut être que l'équation de la droite joignant l'intersection des 2 cercles. Comme ils ont même diamètre <math>\(d\)</math>, c'est la médiatrice du segment joignant les centres.
          Ceci étant, j'indique la manipulation essentiellement pour faciliter la résolution numérique.

          2 hypothèses

          Citation

          Si on lance une balle avec une force énorme mais qu'elle est accrochée par un fils, elle n'ira pas bien loin… c'est pour ça que je soustrais x et y, car le vecteur ne sera peut être pas complètement appliqué puisque la perle risque d'être retenu par ses voisines.




          a- la balle pourra aller au moins à la distance du fil ! plus même si le fil est élastique

          b je ne comprends donc pas cette hypothèse (x,y)que l'on retranche , les perles vosines retiendront le mouvement dans la limite de la définition de la liaison
          . liason rigide distance d , c'est le cas envisagé, les équations intégrent la contrainte du mouvement
          . liaison élastique ?...cela devient alors un problème de physique assez compliqué avec oscillations possibles.

          mais une fixation arbitraire d'un freinage de la boule déplacée n'a guère de sens physique.

          • Partager sur Facebook
          • Partager sur Twitter
            17 août 2011 à 21:25:39

            Bon d'accord, j'ai juste fait n'importe quoi avec x y, j'pensais que mettre le vecteur directement dans l'équation n'était pas suffisant pour définir "la limite de la définition de la liaison" enfin bref je me reprends et j'essaye de résoudre les équations :

            Les équations des médianes sont donc :

            Ici les calcules intermédiaires…

            (x1 - x0)² + (y1 - y0)² = d²

            (x1 - x2 - Vx)² + (y1 - y2 - Vy)² = d²

            (x1 - x0)² + (y1 - y0)² - (x1 - x2 - Vx)² - (y1 - y2 - Vy)² = 0

            a² + b² = (a-b)(a+b)

            (x1 - x0 - x1 + x2 + Vx)(x1 - x0 + x1 - x2 - Vx) + (y1 - y0 - y1 + y2 + Vy)(y1 - y0 + y1 - y2 - Vy) = 0


            (x2 + Vx - x0)(2 * x1 - x0 - x2 - Vx) + (y2 + Vy - y0)(2*y1 - y0 - y2 - Vy) = 0




            P3 est dans un rayon d de P4 donc

            (x3 - x4)² + (y3 - y4)² = d²

            (x3 - (x2 + Vx))² + (y3 - (y2 + Vy))² = d²

            hophophop on soustrait

            (x3 - x4)² + (y3 - y4)² - (x3 - x2 - Vx)² - (y3 - y2 - Vy)² = 0

            (x3 - x4 - x3 + x2 + Vx)(x3 - x4 + x3 - x2 - Vx) + (y3 - y4 - y3 + y2 + Vy)(y3 - y4 + y3 - y2 - Vy) = 0


            (x2 + Vx - x4)( 2 * x3 - x4 - x2 - Vx) + (y2 + Vy - y4)(2 * y3 - y4 - y2 - Vy) = 0


            Pour trouver la position de P1 on a donc

            (x1 - x0)² + (y1 - y0)² = d²
            (x2 + Vx - x0)(2 * x1 - x0 - x2 - Vx) + (y2 + Vy - y0)(2*y1 - y0 - y2 - Vy) = 0

            D'où :

            x1 = racine[d² - (y1 - y0)² ] + x0
            x1 = [-(y2 + Vy - y0)(2 * y1 - y0 - y2 - Vy) / (x2 + Vx - x0) + Vx + x2 + x0 ] / 2

            Ce que je ne comprends pas c'est qu'à cause de la racine, x1 et y1 auront deux solutions chacun… o_O
            Seraient-ce les deux points d'intersections entre les cercles de P0 et P'2 ? Si oui, comment dois-je choisir le bon pour trouver la position de P1 ?

            Vu que je suis quand même pas une bête, j'ai demandé à un ami prof de m'aider à résoudre cette équation, c'est long et laborieux et il y a peut être des erreurs…

            J'le met sans les étapes intermédiaires :

            On pose :

            A = x2 + Vx - x
            B = x0 + x2 + VX
            C = y2 + Vy - y0
            D = y0 + y2 + Vy
            X = x1 - x0
            Y = y1 - y0

            α = 1 + (A²) / (C²)
            β = [ A² * (2 * x0 - B) * (2 * y0 - D) ] / C
            δ = [ A * (2 * x0 - B) + C * (2 * y0 - D)² ] / 4 * C² - d²

            On a une équation du second degré :

            [ 1 + A² / (C²) ] * X² + [ A² * (2 * x0 - B) * (2 * y0 - D) ] / C * X + [ A * (2 * x0 - B) + C * (2 * y0 - D)² ] / 4 * C² - d² = 0
            = αX² + βX + δ = 0

            Δ = β² - 4αδ

            normalement, Δ >= 0.

            Les solutions du polynôme sont donc :

            X(1) = [ - β + racine(Δ) ] / (2α)
            X(2) = [ - β - racine(Δ) ] / (2α)

            Sans oublier que :

            X = x1 - x0

            Les solutions sont donc :

            x1(1) = X(1) + x0
            x1(2) = X(2) + x0

            On trouve les y1 sachant que :

            X² + Y² = d²

            Y(1)² = X(1)² - d²

            y1(1) - y0 = racine(X(1)² - d²)

            ET donc finalement :

            y1(1) = racine(X(1)² - d²) + y0
            y1(2) = racine(X(2)² - d²) + y0


            Pfiou, et il faudrait faire la même chose pour P3 puis déduire P2 mais on s'en sort pas… c'est pourtant possible physiquement puisque ça existe en vrai… On peut très bien dans la réalité accrocher une chaîne par les deux bouts et la tirer par le milieu… comment ça se passe en vrai ? Et dans les moteurs physiques, comment est-ce calculé ?
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              17 août 2011 à 21:58:22

              Bonsoir,
              Oui, mathématiquement, le problème peut avoir 0, 1 ou 2 solutions selon la valeur du déplacement V. ( 1 cas limite, lorsque V conduit à une distance 2d entre le point déplacé et les points fixes)

              Dans le cas intéressant, 2 solutions donc, intersection des cercles bien sûr.
              Maintenant lequel choisir,... si V est un simple déplacement imposé à P2 , on peut supposer que P1 (resp. /P3) reste du coté du segment P0P2 (/resp. P4P2) où se trouvait P2/P4 avant leur déplacement.

              Mais bon, ne voyant pas bien la finalité de ton jeu, je ne sais pas trop quoi dire de plus que de simples suggestions mathématiques compatibles avec les hypothèses que tu indiques.
              • Partager sur Facebook
              • Partager sur Twitter
                18 août 2011 à 11:11:50

                En tout cas merci, tu m'as "décoincé", il suffit que je fasse la même manœuvre pour trouver P3 puis j'aurais assez d'éléments pour trouver P2 qui doit se trouver dans un rayon d de P1 et P3. Pour le cas où il y a deux solutions, je ferais comme tu m'as dit, ça me parait être la meilleur chose à faire. J'vais essayer de matérialiser ce collier en programmation avec ces équations et si je bloque encore je reposterais dans la partie mathématique cette fois. Il faudra ensuite que je réfléchisse au cas où il y a un nombre de perles paire… puis, si j'y arrive, commencer à faire varier la distance entre les perles, puis pourquoi pas donner d'autres propriétés physique… enfin plein de boulot quoi ^^
                • Partager sur Facebook
                • Partager sur Twitter

                [Physique] Un soucis vectoriel bien corsé…

                × 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