Créer un système solaire

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Hello,

Je me suis mis en tête de créer un systeme solaire, en 2 dimensions. Pour l'instant, le code fonctionne bien. Je l'ai teste avec les valeurs réelles (Terre, Soleil, Lune, …) et ça marche très bien.

Maintenant, j'aimerais pouvoir générer des systèmes de façon aléatoire. Mais je n'ai aucune idée de comment choisir les valeurs initiales des astres (position et vitesse initiale) pour obtenir un systeme stable et "joli". Par joli, j'entends un systeme avec des caractéristique choisies a l'avance.

Par exemple, comment choisir les vitesses initiales pour que, si la Terre est a 100 1 du soleil, la Lune soit a 10 1 de la Terre ?

Merci d'avance pour vos réponses.


  1. unité arbitraire 

+4 -0

c'est de la simulation physique que tu fais ou tu as juste rentré les vitesses des différents astres ?

Dans tous les cas, tu as juste à appliquer la 3eme loi de kepler pour avoir un truc réaliste (je te laisse chercher ça ;) ).

+3 -0
Staff

Par exemple, comment choisir les vitesses initiales pour que, si la Terre est a 100 1 du soleil, la Lune soit a 10 1 de la Terre ?

Je ne suis pas sûr de comprendre, en quoi ça pose problème ?

Tu cherches à simuler les lois physiques (gravitation… ) ou juste à animer un mouvement avec des caractéristiques déterminées à l'avance ?

+0 -0
Auteur du sujet

c'est de la simulation physique que tu fais ou tu as juste rentré les vitesses des différents astres ?

Les deux. (J'ai pas compris la question je crois :honte: )

Dans tous les cas, tu as juste à appliquer la 3eme loi de kepler pour avoir un truc réaliste (je te laisse chercher ça ;) ).

Je regarde ça.

t'as un bout de code ? une demo quelque part ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# The initial values.

pxcoef = 2.5e-10
G = 7e-11 * pxcoef**3


sun =
  position: Vector.zero()
  speed: Vector.zero()
  acceleration: Vector.zero()
  color: "#f1c40f"
  radius: 20
  mass: 2e+30


earth =
  position: Vector.carthesian x: 1e+11 * pxcoef, y: 0
  speed: Vector.carthesian x: 0, y: 3e+4 * pxcoef
  acceleration: Vector.zero()
  color: "#05b4ee"
  radius: 5
  mass: 6e+24


jupiter =
  position: Vector.carthesian x: 8e+11 * pxcoef, y: 0
  speed: Vector.carthesian x: 0, y: 1e+4 * pxcoef
  acceleration: Vector.zero()
  color: "#d35400"
  radius: 10
  mass: 2e+27


io =
  position: Vector.carthesian x: (8e+11 + 4e+8) * pxcoef, y: 0
  speed: Vector.carthesian x: 0, y: 2e+4 * pxcoef
  acceleration: Vector.zero()
  color: "grey"
  radius: 2
  mass: 9e+22


entities = [sun, earth, jupiter, io]


gravitation = ->
  # Each time interval (20ms usually)
  return (t) ->
      # For all astres in the system.
      entities.map (e) ->
          # The overall acceleration is the sum of all the acceleration vectors.
          e.acceleration = entities.reduce (F, a) ->
              # d is the relative position of the two astres (Vector 2d)
              d = e.position.soustr(a.position).minus()
              # Dont compute the astre attraction against itself.
              return F if d.r is 0
              # Calculate the attraction (scalar) between the two astres.
              f = (G*(e.mass + a.mass) / d.r**2) / e.mass
              # Sum everything.
              return F.add d.toUnit().mult f
          , Vector.zero()

move = ->
  return (t) ->
      entities.map (e) ->
          e.speed = e.speed.add e.acceleration.mult(t)
          e.position = e.position.add e.speed.mult(t)

Il y a pas de démo en ligne pour l'instant.

Par exemple, comment choisir les vitesses initiales pour que, si la Terre est a 100 du soleil, la Lune soit a 10 de la Terre ?

Je ne suis pas sûr de comprendre, en quoi ça pose problème ?

Avec les valeurs que j'ai testé, soit la lune est en orbite du soleil (et pas de la terre). Soit elle sort du systeme, si la vitesse initiale est trop élevée. Pour l'instant, je change les valeurs manuellement et empiriquement.

Tu cherches à simuler les lois physiques (gravitation… ) ou juste à animer un mouvement avec des caractéristiques déterminées à l'avance ?

Je cherche a simuler les lois physiques. Tracer des ellipses c'est pas très dur.

+0 -0
Staff

Le "souci" des lois physiques c'est que certaines situations sont impossibles.

Là avec ton exemple de Lune à 10UA de la Terre, elle-même à 100UA du soleil, je ne suis pas certain que ce soit stable. Ta lune peut en effet être désorbité de la Terre si l'attraction du soleil sur elle est trop importante.

+0 -0
Auteur du sujet

Le "souci" des lois physiques c'est que certaines situations sont impossibles.

Là avec ton exemple de Lune à 10UA de la Terre, elle-même à 100UA du soleil, je ne suis pas certain que ce soit stable. Ta lune peut en effet être désorbité de la Terre si l'attraction du soleil sur elle est trop importante.

Algue-Rythme

On peux aussi modifier les masses et la constante gravitationnelle, si il faut ;) . Et ce que je cherche c'est, si le système est impossible, de pouvoir le modifier jusqu’à ce qu'il marche.

+0 -0
Staff

Salut,

Et ce que je cherche c'est, si le système est impossible, de pouvoir le modifier jusqu’à ce qu'il marche.

Sauf que là, tu imposes juste des vitesses. Il n'y a rien de physique, c'est juste de la cuisine.

Si je comprends bien, tu veux chercher les conditions de stabilité d'un système à $n$ corps. Sans vouloir te décourager, ça fait partie des problèmes sur lesquels la physique théorique se casse les dents, faute d'outils mathématiques pour résoudre analytiquement le problème, et en raison de la taille de l'espace des paramètres et de la forte non linéarité du problème qui rendent difficile une exploration de cet espace, et surtout de l'évaluation de la stabilité en question. Le caractère chaotique d'un tel système fait qu'il existe un horizon de Lyapunov au-delà duquel un modèle numérique ne sera jamais capable de prédire l'évolution de ton système…

Je ne rentre volontairement pas dans des explications précises, ne connaissant pas ton niveau de mathématiques.

EDIT : je viens de retrouver un vieux sujet en lien avec ton problème. Tu as un exemple simple au début et sur ce post. Un peu en dessous de ce dernier, tu as une tentative de résolution implicite. C'est probablement inutilement compliqué, mais ça peut te donner un aperçu de la richesse du problème.

Édité par adri1

I don't mind that you think slowly, but I do mind that you are publishing faster. – W. Pauli

+3 -0
Staff

C'est très compliqué comme le dit adri1. Le problème de la gravitation de trois corps ou plus est chaotique.

Deux solutions :

  • faire des ellipses. Tu considère que toute objet tourne autour d'un autre en simulant les lois de Kepler. Pas de mécanique (notamment pas de $F = ma$), c'est facile et stable.
  • si tu veux simuler les lois de la gravité (donc $F = ma$), je te renvoies dans un 1er temps vers le sujet que point adri1. Pour trouver des valeurs initiales réalistes, je pense que la méthode suivante peut marcher :
    • tu as N corps qui tournent autour de l'étoile.
    • tu prends N angles et N distances.
    • tu fixes la vitesse d'un corps à l'aide de valeurs réalistes prises dans notre système.
    • tu calcules les autres (avec la bonne direction, connaissant l'angle) à l'aide des lois de Kepler.
    • pour les satellites, tu refais pareil, en les mettant très proches de la planète (la distance Terre-Soleil est 1 UA (unité astronomique), la distance Terre-Lune 0,003 UA) ; un 10 vs 100 ne peut pas marcher.

C'est sans garanties cependant. :-°

Édité par Gabbro

Hier, dans le parc, j'ai vu une petite vieille entourée de dinosaures aviens. Je donne pas cher de sa peau.

+1 -0

Pour connaître les positions stables des planètes les unes par rapport aux autres tu pourrais appliquer une sorte de théoréme de superposition : Tu regardes la résultante de toutes les forces exercées par les autres planètes sur une des planètes ,tu fais varier la distance de cette planète dans le sens de cette résutlante jusqu'à ce qu'elle soit nulle ou proche de 0. Après pour la vitesse tu regardes la planète la plus proche tu te met dans un repére de Frenet et tu appliques Kepler : at=0,an=v2/r de là tu peux sortir v.
En espérant t'avoir aidé :)

+1 -0
Staff

tu fais varier la distance de cette planète dans le sens de cette résutlante jusqu'à ce qu'elle soit nulle ou proche de 0.

Imaginons un système tel que le système solaire. Si on essaye de déplacer les planètes jusqu'à une position d'équilibre où la somme des forces est nulle, on va juste mettre toutes les planètes au même endroit ou à l'infini. Pour qu'une orbite soit stable il faut que la planète subisse une accélération non nulle. Sinon, elle se barre en ligne droite et on n'en parle plus.

I don't mind that you think slowly, but I do mind that you are publishing faster. – W. Pauli

+0 -0

Imaginons un système tel que le système solaire. Si on essaye de déplacer les planètes jusqu'à une position d'équilibre où la somme des forces est nulle, on va juste mettre toutes les planètes au même endroit ou à l'infini. Pour qu'une orbite soit stable il faut que la planète subisse une accélération non nulle. Sinon, elle se barre en ligne droite et on n'en parle plus.

1- un nombre divisé par 0 ça ne fait pas 0 donc non elles ne seront pas au même endroit.
2-J'ai dit 0 ou proche de 0 donc la distance n'est pas forcément infini.
3-Non elle ne part en ligne droite s'il on considére la vitesse initiale égale à 0.
Elles seront certainement très éloignées.
Après comme je l'ai dit s'il on veut avoir des satellite autour des planètes on peut appliquer Kepler (expliqué dans mon post ci-dessus.)

Édité par Octodex

+0 -1
Staff

un nombre divisé par 0 ça ne fait pas 0 donc non elles ne seront pas au même endroit.

$\nabla\cdot\mathbf g=-4\pi\rho\mathcal G$, donc si, en fait, toutes les planètes au même endroit (i.e. ayant le même centre) serait une situation stable (m'enfin, si tu les considères ponctuelles ou à symétrie sphérique).

J'ai 0 ou proche de 0 donc la distance n'est pas forcément infini.

Oui enfin, si tu balances toutes tes planètes à 100 ua, c'est pas mieux. ^^

Non elle ne part en ligne droite s'il on considére la vitesse initiale égale à 0.

Elle resterait immobile alors, ce qui ne change rien au fait qu'elle ne serait pas sur une orbite stable. C'est juste une question de référentiel après.

I don't mind that you think slowly, but I do mind that you are publishing faster. – W. Pauli

+0 -0
Staff

Cela revient tout de même à éloigner les planètes les unes des autres un maximum pour passer sous le seuil défini. Un système comme le système solaire ne passerai pas, car l'influence de Jupiter sur tout le reste est importante (ou alors le seuil est haut et… n'apporte pas la stabilisation voulue). Autrement dit, de très nombreux systèmes réalistes seraient interdits. J'irai même jusqu'à dire que, soit la limite est haute et n'a que peu d'intérêt, soit elle basse et produira un système peu réaliste.

Pour les vitesses, je crois que nous proposons la même chose exprimé différemment. :)

Édit à ardi1 :

Elle resterait immobile alors, ce qui ne change rien au fait qu'elle ne serait pas sur une orbite stable. C'est juste une question de référentiel après.

Influence des planètes entre elles petite n'affirme rien sur l'influence de l'étoile sur les planètes.

Édité par Gabbro

Hier, dans le parc, j'ai vu une petite vieille entourée de dinosaures aviens. Je donne pas cher de sa peau.

+1 -0
Staff

Influence des planètes entre elles petite n'affirme rien sur l'influence de l'étoile sur les planètes.

Si on ne prend pas en compte l'étoile, je comprends encore moins l'intérêt de la chose, à vrai dire. :-°

I don't mind that you think slowly, but I do mind that you are publishing faster. – W. Pauli

+0 -0

Je reconnais que ce cas de figure n'est pas très intéressant d'un point de vue physique . Si c'est une simulation il vaut mieux utiliser Kepler dans ce cas avec un repère de Frenet.
Il faut juste qu'il compare chacune des masses de ces planète pour savoir qui va être en orbite de qui.Et de sortir la vitesse de an=v2/r. Bon après je ne garantie pas le réalisme ^^.
Ou sinon autre approche ,peut être plus simple passer par l'énergie vu qu'il n'y a pas de frottement :
Si Em<0 la planète est en obrbite.
Si Em>=0 la planète n'est pas en orbite.

Édité par Octodex

+0 -0
Staff

J'avoue ne pas bien comprendre où tu veux en venir avec ton repère de Frenet. Ce ne sera pas plus léger qu'une résolution du PFD dans un repère inertiel, mais ça oblige à faire des hypothèses fortes sur la configuration du système ("qui tourne autour de qui" comme tu le dis toi-même). En plus, si tu veux ajouter des satellites, il va falloir prendre en compte l'accélération de la planète qui sert de centre pour ton repère de Frenet. De quoi bien s'arracher les cheveux, j'ai l'impression.

Si Em<0 la planète est en obrbite. Si Em>=0 la planète n'est pas en orbite.

Que faire des orbites instables ? Le problème n'est pas si simple.

I don't mind that you think slowly, but I do mind that you are publishing faster. – W. Pauli

+1 -0

Euh j'ai une question bête… Pourquoi ne pas prendre les valeurs de vitesses réelles des planètes et satellites du système solaire ? Je pense que tu peux les trouver rapidement sur Wiki. Idem des positions à une certaine date.

Est ce que tu prends en compte les influences gravitationnelles des toutes les planètes les unes sur les autres ?

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte