Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petit simulateur 2D de la gravité avec deux corps

    5 juillet 2021 à 15:05:48

    Bonjour,

    j'utilise ce code pour simuler la gravité avec 2 corps :

            //calcule acceleration un
            h = hypot(un.x - deux.x, un.y - deux.y);
    
            un.vx += (un.x - deux.x) / (h*h*h) * 10000;
            un.vy += (un.y - deux.y) / (h*h*h) * 10000;
    
            un.x -= un.vx;
            un.y -= un.vy;
    
            //calcule acceleration deux
            deux.vx += (deux.x - un.x) / (h*h*h) * 10000;
            deux.vy += (deux.y - un.y) / (h*h*h) * 10000;
    
            deux.x -= deux.vx;
            deux.y -= deux.vy;

    Donc avec un et deux les corps, x et y leur position, vx et vy leur vitesse sur chaque direction, et h la distance qui sépare les corps.

    Le code marche quelque secondes mais les corps semblent perdre de l'énergie se rapproche de plus en plus puis se collent et partent dans une direction quelconque tout droit. Je comprends pas trop où l'énergie est perdue.

    Est ce que l'algo est correct ?

    Comment puis je corriger ces pertes ?

    EDIT

    Bon j'ai trouvé je devais ajouter les accelerations après les avoir calculé pour tous les corps pour pas induire un décalage de position qui ferait perdre de l'énergie. Mais j'ai un autre problème, lorsque je fais s'entrechoquer 2 corps ils finissent par être éjecté du champ à très grande vitesse, est ce qu'arrivé aux même coordonnées les point prennent une vitesse infini ? C'est un probleme fréquent de simulation de gravité ? Faut il y pallier ?

    -
    Edité par Blocked 5 juillet 2021 à 15:20:33

    • Partager sur Facebook
    • Partager sur Twitter
      7 juillet 2021 à 11:54:49

      Bonjour,

      c'est plutôt l'accélération qui est infinie lorsque les deux corps se rapprochent, ce qui pourrait expliquer l'instabilité constatée. Pour ce qui est du problème de collision, il va falloir prendre en compte leur volume afin de déterminer à partir de quelle distance on considère que les deux corps s'entrechoquent.

      • Partager sur Facebook
      • Partager sur Twitter

      Avez-vous entendu parler de Julia ? Laissez-vous tenter ...

        14 juillet 2021 à 9:32:57

        Petite remarque niveau code : tu peux précalculer 10000/h^3, histoire de ne pas le calculer 3x ;)

        double factor = 10000 / (h*h*h);
        
        // calcule acceleration un
        h = hypot(un.x - deux.x, un.y - deux.y);
         
        un.vx += (un.x - deux.x) ;
        un.vy += (un.y - deux.y) * factor;
         
        un.x -= un.vx;
        un.y -= un.vy;
         
        //calcule acceleration deux
        deux.vx += (deux.x - un.x) * factor;
        deux.vy += (deux.y - un.y) * factor;
         
        deux.x -= deux.vx;
        deux.y -= deux.vy;
        • Partager sur Facebook
        • Partager sur Twitter

        Petit simulateur 2D de la gravité avec deux corps

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown