Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Physique] Vitesse, gravitation et inertie

petit calcul

Sujet résolu
    27 juillet 2011 à 9:29:50

    Bonjour à vous,

    En général, j'aide sur le SdZ informatique mais aujourd'hui j'ai besoin de votre aide. ;)

    J'ai fait une petite simulation avec des planètes qui bougent et s'attirent entre elles.
    Pour ce qui est des calculs de gravitation je m'en suis sortit. Mais pour l'instant je ne prend pas en compte l'inertie de mes objets (du coup une petite planète à autant d'effet sur une grosse que vice versa).

    Il est évident que je connais 1/2 mv² mais je voudrais savoir avec précision comment l'appliquer.

    Merci d'avance
    Noseborn :soleil:


    ps : mes calculs actuels à chaque itération (simplifié évidemment):
    postion_x = position_x + vitesse_x
    postion_y = position_y + vitesse_y

    gravitation = constante_g * masse1 * masse2 / distance²

    vitesse_x = vitesse_x + Somme(gravitation_x)
    vitesse_y = vitesse_y + Somme(gravitation_y)
    • Partager sur Facebook
    • Partager sur Twitter
      27 juillet 2011 à 10:23:53

      Pardon, mais pourquoi la vitesse serait-elle homogène à la gravitation ?

      Pour faire intervenir la masse des planètes, tu dois utiliser le théorème de la résultante cinétique (en fait c'est ce que tu dois faire tout court) :

      <math>\(m\vec{a} = \sum \vec{F}\)</math>

      avec <math>\(\vec{F}\)</math> les forces appliquées à ta planète (attirance par les autres planètes), m sa masse et <math>\vec{a}<\math> son accélération, soit la dérivée seconde de sa position.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        27 juillet 2011 à 12:07:44

        Bonjour,

        Citation

        Pour ce qui est des calculs de gravitation je m'en suis sorti. Mais pour l'instant je ne prends pas en compte l'inertie de mes objets (du coup une petite planète à autant d'effet sur une grosse que vice versa).

        (?)
        Pour écrire cela, est tu sûr de bien prendre en compte la loi d'attraction universelle donnée ( en module) par

        <math>\(\[ F=\dfrac{GMm}{r^{2}} \]\)</math> associée à un champ de force centrale

        les masses des deux objets en interaction y interviennent comme tu peux le voir
        On applique donc la loi de Newton pour un champ de forces centrales

        Mais la seule situation simple à caculer pour le mouvement des planètes est celle de deux corps en présence ( on aboutit aux lois de Kepler)
        C'est une assez bonne approximation pour les planètes du système solaire

        Je ne sais pas ce que tu simules exactement mais je peux donner les précisions suivantes:

        Dés qu'il y a trois corps d'égale importance , ce n'est pas résoluble analytiquement et le traitement numérique des équations est trés complexes si on veut de la précision .
        (ex: le tout bête système soleil - terre - lune conduit si on veut une validité à long terme à des développements en série avec des milliers de termes! Si on veut se faire un petit éphéméride lunaire pas trop faux sur quelques mois, il faudra bien quand même une petite dizaine de termes; on les trouve dans la littérature spécialisée)

        On peut utiliser d'autres méthodes simplificatrices lorsque un mouvement est dû à une force dominante perturbée par des actions plus faibles.
        Ce sont des méthodes employées pour affiner la trajectoire képlérienne des planétes du système solaire.
        On calcule les perturbations induites sur la trajectoire de base imposée par le soleil en traitant les actions des autres planétes comme des éléments d'ordre 1 ou plus.

        espérant avoir apporté un éclairage,
        • Partager sur Facebook
        • Partager sur Twitter
          27 juillet 2011 à 12:57:30

          Mon but est de faire quelque chose de simple mais qui reprends au maximum les lois physiques.
          Pour l'instant, chaque planète à une vitesse qui modifie la position. Je pensais pouvoir calculer la somme des accélérations et l'appliquer à la vitesse.

          J'ai pris ta formule en compte Freud. Je dois faire plus de test mais en effet ça me semble beaucoup mieux.
          Du coup j'ai :
          a = G * m / d²
          ou m est la masse de l'autre planète.
          Après coup, pour avoir un accélération plus visible, j'ai mis la masse au carré.

          Par contre Nabucos, j'ai jusqu'à 100 planètes, donc on va prendre une version light de tout ça ^^


          Merci pour vos précisions, je vous tiens au courant.
          • Partager sur Facebook
          • Partager sur Twitter
            27 juillet 2011 à 13:32:10

            Citation : NoseborN


            Du coup j'ai :
            a = G * m / d²
            ou m est la masse de l'autre planète.
            Après coup, pour avoir un accélération plus visible, j'ai mis la masse au carré.


            A première vue, avec la masse au carré, tu risques d'avoir des comportements bizarres au niveau de l'inertie. Si tu veux un comportement physique mais avec des valeurs adaptées à ta simulation, joue plutot sur la valeur de G (je pense qu'on s'en fiche que la valeur soit vraiment exacte) ou sur le temps (ton pas de calcul)

            Citation : NoseborN


            Par contre Nabucos, j'ai jusqu'à 100 planètes, donc on va prendre une version light de tout ça ^^


            Tu as 100 planetes qui s'influencent les uns les autres ou qui tournent autour du meme soleil? Dans le dernier cas, prendre en compte juste l'accélération due au soleil serait peut-etre suffisant.
            Après je me pose des questions sur les conditions initiales pour avoir un système stable. Sinon tu risques de te retrouver avec un jeu de billiard plutôt qu'un système planétaire...
            • Partager sur Facebook
            • Partager sur Twitter
            Mon tuto de physique | L'algèbre linéaire | Mon tuto sur les complexesZeste de Savoir | Dieu ne joue pas aux dés, il saute à la corde
              27 juillet 2011 à 13:34:19

              Citation : NoseborN

              Mon but est de faire quelque chose de simple mais qui reprends au maximum les lois physiques.
              Pour l'instant, chaque planète à une vitesse qui modifie la position. Je pensais pouvoir calculer la somme des accélérations et l'appliquer à la vitesse.

              J'ai pris ta formule en compte Freud. Je dois faire plus de test mais en effet ça me semble beaucoup mieux.
              Du coup j'ai :
              a = G * m / d²
              ou m est la masse de l'autre planète.
              Après coup, pour avoir un accélération plus visible, j'ai mis la masse au carré.

              Par contre Nabucos, j'ai jusqu'à 100 planètes, donc on va prendre une version light de tout ça ^^


              Merci pour vos précisions, je vous tiens au courant.


              Non non non, tu dois bien prendre <math>\(\vec{a} = G*m* \sum \frac{\vec{u_i}*m_i}{d_i^2}\)</math>
              ou les mi, ui et di sont les masses des autres planètes, le vecteur directeur du segment reliant les planètes et la distance de chaque autres planètes.
              • Partager sur Facebook
              • Partager sur Twitter
                27 juillet 2011 à 14:28:47

                hazdrubal, elles s'attirent les-unes-les-autres.

                J'ai réussit à prendre en compte ta formule Freud.
                Néanmoins, pour le vecteur directeur je suis pas sur duquel prendre. Pour l'instant c'est <math>\(\vec{u_i}:(distance_x, distance_y)\)</math> mais je re-multiplie par la distance dans ce cas.


                Si un aperçu du résultat vous interesse : http://little.guigui.free.fr/perso/system/
                Ce que je trouve dommage c'est que la distance à trop d'effet, dès qu'elle s'éloigne les forces deviennent ridicules.
                Je trouve bizarre aussi que les grosses planètes soient autant attirées par les petites.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  27 juillet 2011 à 17:53:10

                  Bonjour,

                  Citation

                  Mon but est de faire quelque chose de simple mais qui reprends au maximum les lois physiques.


                  ce que tu ici est assez contradictoire avec la simulation de 100 planétes.
                  Mais informatiquement, avec des lois fausses , on peut simuler des jeux trés intéressants!

                  La question est donc de savoir si tu cherches à programmer un jeu visuellement attractif ou à faire de la physique.
                  . Dans le second cas , à partir de 3 planétes rien de simple comme déjà expliqué .
                  . Avec 100, tu es obligatoirement dans le premier cas et la physique n'a plus rien à proposer...sauf à faire des hypothèses te ramenant au cas simple).

                  A ce moment là, simule plutôt un mouvement brownien avec des marches aléatoires si ton objectif est d'avoir 100 objets qui se meuvent ( ceci n'est pas une simple boutade ;on peut faire des choses assez sophistiquées en jouant sur la définition probabiliste de la marche d'un objet et tu pourrais sans doute obtenir plus facilement un mouvement apparent satisfaisant qu'en utilisant une physique fausse)

                  Edit
                  je n'arrive pas à accéder à ton lien, mais ce que tu dis dans ton commentaire sur les anomalies de comportement confirmerait plutôt ce que je viens de dire. A priori pour que ça marche, tu seras obligé de plus ou moins "bidouiller" tes lois pour que ça colle
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 juillet 2011 à 18:43:31

                    Citation : NoseborN

                    hazdrubal, elles s'attirent les-unes-les-autres.

                    J'ai réussit à prendre en compte ta formule Freud.
                    Néanmoins, pour le vecteur directeur je suis pas sur duquel prendre. Pour l'instant c'est <math>\(\vec{u_i}:(distance_x, distance_y)\)</math> mais je re-multiplie par la distance dans ce cas.


                    Si un aperçu du résultat vous interesse : http://little.guigui.free.fr/perso/system/
                    Ce que je trouve dommage c'est que la distance à trop d'effet, dès qu'elle s'éloigne les forces deviennent ridicules.
                    Je trouve bizarre aussi que les grosses planètes soient autant attirées par les petites.


                    Tu n'as pas pris en compte ce que je t'ai dit si les petites planètes subissent plus l'effet des petites… Montre ton système d'équation et ton algorithme, et je pourrais peut être t'aider ou te conseiller… Là j'ai vraiment du mal à comprendre ce que tu fais.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 juillet 2011 à 19:16:43

                      En gros ce qu'il faudrait faire (c'est peut-être d'ailleurs ce que tu fais déjà), c'est un genre de double méthode d'Euler soit :

                      Si on indice les planètes par <math>\(i\)</math>, on appelle <math>\(m_i\)</math> la masse de la planète <math>\(i\)</math> et <math>\((x_i,y_i)\)</math> ses coordonnées dans ton repère.
                      Tu as alors :
                      distance entre les planètes <math>\(i\)</math> et <math>\(j\)</math> : <math>\(d_{ij} = \sqrt{(x_j-x_i)^2+(y_j-y_i)^2}\)</math>
                      vecteur unitaire allant de la planète <math>\(i\)</math> à la planète <math>\(j\)</math> : <math>\(\vec{u}_{ij} = \left(\frac{x_j-x_i}{d_{ij}} ; \frac{y_j-y_i}{d_{ij}}\right)\)</math>

                      Si on prend des pas de temps de longueur <math>\(dt\)</math>, on fait donc à chaque pas :
                      Pour chaque planète <math>\(i\)</math> :
                      calculer l'accélération <math>\(\vec{a} = G\times\sum_{j\neq i}\frac{m_j}{d_{ij}^2}\vec{u_{ij}}\)</math>
                      En déduire la nouvelle vitesse <math>\(\vec{v}_i(t) = \vec{v}_i(t-dt) + dt\times\vec{a}\)</math>
                      une fois cela fait pour chaque planète (et seulement après), on calcule les nouvelles coordonnées :
                      Pour chaque planète <math>\(i\)</math> :
                      <math>\((x_i(t), y_i(t)) = (x_i(t-dt),y_i(t-dt)) + dt\times\vec{v}_i(t)\)</math>

                      et on recommence pour le pas suivant.

                      Je viens de regarder ton lien et ça semble plutôt pas mal.

                      Si tes grosses planètes sont encore pas mal influencées par les plus petites, c'est parce qu'il faut vraiment une différence importante pour ne presque plus ressentir l'effet des autres planètes. Ici, si à chaque fois qu'une planète en "mange" une autre tu additionnes leur masse, la plus grosse planète que tu puisses obtenir en laçant 100 planètes et en gardant deux a une masse 99 fois supérieure à la plus petite. Je suis arrivé dans un cas comme celui-ci et la grosse n'était déjà plus si influencée que ça.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        27 juillet 2011 à 21:33:06


                        Bonsoir,

                        en regardant ce qu' a écrit Rushia, je prends conscience sauf erreur d'interprétation que la simulation est un exercice en 2D auquel cas le traitement numérique de la question doit devenir effectivement un (petit) peu plus accessible. Mais enfin on reste quand même dans desinteractions inter planètes completes sans simplification.

                        Formellement il n'y a rien à redire aux équations de Rushia
                        Mais pour 100 planétes, on a quand même un système différentiel de 200 équations du second ordre, a priori non linéaires!

                        On peut toujours programmer la méthode d'Euler , fût elle double.
                        J'ai quelques sérieux doutes, si telle est bien l'ampleur du système à résoudre, sur la stabilité numérique des solutions obtenues ( cela ne veut pas dire que l'ordinateur ne crachera pas de solutions permettant une belle simulation )
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 juillet 2011 à 10:14:57

                          Bon si vraiment il n'est pas possible de faire quelque chose de correcte et simple je vais pas chercher plus loin. On va donc dire que je voudrais un comportement approximatif qui rappel la physique des planètes.

                          Pour ce qui est du code, j'ai comparé avec les équations de rushia et (à part le vecteur unitaire [que je viens de corrigé]) tout est bon.

                          function gravite(planet){ // calcul de gravité pour une planete
                          	var dist = 0;
                          	var accel = {x:0, y:0};
                          	for(var g=0;g<planets.length;g++){ // parcours de toutes les planetes
                          		if(g != planet.id){ // si c'est pas elle-même
                          			dist = distance(planet, planets[g]); // calcul de distance
                          			if(dist > planet.masse + planets[g].masse){ // si elles ne se touchent pas
                          				accel.x += (planets[g].posx - planet.posx)/dist * planets[g].masse / carre(dist);
                          				accel.y += (planets[g].posy - planet.posy)/dist * planets[g].masse / carre(dist);
                          			}
                          			else{ // sinon
                          				if(planet != null && planets[g] != null){
                          					collide(planet, planets[g]);
                          					break;
                          				}
                          			}
                          		}
                          	}
                          	/* G = 0.3
                          	** vitx : vitesse en x
                          	** vity :vitesse en y
                          	** masse : équivalente au rayon pour simplifier
                          	*/
                          	planet.vitx += G * planet.masse * accel.x;
                          	planet.vity += G * planet.masse * accel.y;
                          }
                          

                          Et ces opérations sont répété à chaque pas. (60ms)

                          Merci de votre patience. =)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 juillet 2011 à 10:27:36

                            Je comprends vraiment pas ce que tu veux faire. Tu mélanges tout, vitesse, masse, accélération, c'est n'importe quoi. En fait, c'est les 2 derniers lignes, je ne vois pas d'où elles sortent.

                            Rushia t'a donné la méthode qui marche bien, et elle n'est pas si dure que ça à coder. Pourquoi tu ne l'appliques pas ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              28 juillet 2011 à 10:43:39

                              Citation : rushia


                              l'accélération <math>\(\vec{a} = G\times\sum_{j\neq i}\frac{m_j}{d_{ij}^2}\vec{u_{ij}}\)</math>


                              Citation : freudqo


                              Non non non, tu dois bien prendre <math>\(\vec{a} = G*m* \sum \frac{\vec{u_i}*m_i}{d_i^2}\)</math>



                              Honnêtement, je fais ce que je peu pour vous suivre mais c'est pas évident.
                              Maintenant, je comprend pas pourquoi tu dis ça freud car je fais exactement les même calculs que rushia. Le résultat est très bien et je sais grâce à vous que j'ai pas d'erreur de calcul.
                              Je passe donc le sujet en résolu.

                              Bonne journée

                              • Partager sur Facebook
                              • Partager sur Twitter
                                28 juillet 2011 à 11:01:44

                                J'ai oublié un m dans ma formule. C'est celui que rushia a simplifié. Au temps pour moi.

                                Je ne vois pas où dans la formule de rushia il est dit qu'il suffit de multiplier l'accélération d'une planète par sa masse pour avoir sa vitesse. Là tu t'y prends comme si vitesse et accélération étaient proportionnelles…
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  28 juillet 2011 à 11:24:54

                                  "vitesse += accel"
                                  veut dire :
                                  "vitesse = vitesse + accel"

                                  Je suis d'accord par contre que j'aurais pas du l'appeler "accel" mais "somme".

                                  Ainsi :
                                  for(all){
                                  somme += u * m / d²
                                  }
                                  accel = G * somme
                                  vitesse += accel
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    29 juillet 2011 à 1:36:43

                                    Le code est bon, mais comme tu l'as toi-même reconnu, les noms de variables ne sont pas homogènes aux grandeurs qu'ils représentent, d'où dépit des physiciens ici présents.

                                    Au fait, c'est vitesse += accélération x pas
                                    Dans ton code, le pas n'apparaît pas, mais ça n'est pas très grave vu que tu l’intègre en quelque sorte dans ta constante G (qui n'est alors plus homogène à la constante G).

                                    Bref, je vais arrêter d'ergoter et aller me coucher :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    [Physique] Vitesse, gravitation et inertie

                                    × 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