Système_solaire_et_gravitation

Description

c code et l'application directe de la théorie de Newton sur la force gravitationnelle F=-GmM/d², c facille mais pratique

Source / Exemple :


ds la Form:
Private Sub Form_Load()
' Centre la feuille horizontalement.
 Form1.Left = (Screen.Width - Form1.Width) / 2
' Centre la feuille verticalement.
 Form1.Top = (Screen.Height - Form1.Height) / 2
 cmdStop.Enabled = False
 Timer1.Interval = 10
 HScrBarVitesse(4).Value = 2709 'Vitesse initiale Mars
 HScrBarVitesse(3).Value = 3486 'Vitesse initiale Terre
 HScrBarVitesse(2).Value = 3860 'Vitesse initiale Vénus
 HScrBarVitesse(1).Value = 4709 'Vitesse initiale Mercure
'Parametrage de la fenetre servant à afficher planète  (Univers)...
  Univers.Left = 0
  Univers.Top = 0
  Univers.Width = Form1.Width
  Univers.Height = Form1.Width * 0.7
'Nombre de pixels pour la longueur et la largeur
  Univers.Scale (-28000, 39600)-(28000, -39600)
'Parametrage du Soleil
'La taille...
  Soleil.Width = 2500
  Soleil.Height = 5000
'La position dans la picture box (l'Univers)
  Soleil.Left = 0 - (Soleil.Width / 2)
  Soleil.Top = Soleil.Height / 2
'Parametrage de  planète
'La taille ...
  Planet(5).Width = 375
  Planet(5).Height = 750
  Planet(4).Width = 1100
  Planet(4).Height = 2200
  Planet(3).Width = 1400
  Planet(3).Height = 2800
  Planet(2).Width = 1300
  Planet(2).Height = 2600
  Planet(1).Width = 900
  Planet(1).Height = 1800
'La position des planètes dans l'Univers
  Planet(5).Left = 8880 - (Planet(5).Width / 2)
  Planet(5).Top = Planet(5).Height / 2
  Planet(4).Left = 11396 - (Planet(4).Width / 2)
  Planet(4).Top = Planet(4).Height / 2
  Planet(3).Left = 7480 - (Planet(3).Width / 2)
  Planet(3).Top = Planet(3).Height / 2
  Planet(2).Left = 5410 - (Planet(2).Width / 2)
  Planet(2).Top = Planet(2).Height / 2
  Planet(1).Left = 2895 - (Planet(1).Width / 2)
  Planet(1).Top = Planet(1).Height / 2
'Créations des axes...
'Ligne des abcisses
  LineX.X1 = -28000
  LineX.Y1 = 0
  LineX.X2 = 28000
  LineX.Y2 = 0
'Ligne des ordonnées
  LineY.X1 = 0
  LineY.Y1 = 39600
  LineY.X2 = 0
  LineY.Y2 = -39600
  Distance_Initiale(4) = 11396
  Distance_Initiale(3) = 7480
  Distance_Initiale(2) = 5410
  Distance_Initiale(1) = 2895
'Declaration de toutes les variables servant aux calculs
  Ms = 1.989E+30  'masse du Soleil
  Mp(5) = 7.3589E+22  'masse du Lune
  Mp(4) = 6.4185E+23  'masse du Mars
  Mp(3) = 5.9742E+24  'masse du Terre
  Mp(2) = 4.8689E+24  'masse du Vénus
  Mp(1) = 3.3019E+23  'masse du Mercure
'Declaration de la variable Temps
  T(5) = 13986400
  T(4) = 26400
  T(3) = 26400
  T(2) = 26400
  T(1) = 26400
'Declaration de G
  G = 0.0000000000667
    TxtMSoleil.Text = Ms
End Sub
Private Sub Timer1_Timer()
proc 4, Ms, 0, 0: proc 3, Ms, 0, 0: proc 2, Ms, 0, 0: proc 1, Ms, 0, 0
proc 5, Mp(3), XCentrer(3), YCentrer(3)
End Sub

Private Sub proc(I As Integer, M As Double, dx As Double, dy As Double)
'Faire ...
'Distance entre le Soleil et planète  = d_SM
  d_SM2(I) = (PosX(I) * PosX(I)) + (PosY(I) * PosY(I))
  d_SM(I) = Sqr(d_SM2(I))
 'Force gravitationnelle
  F(I) = -G * M * Mp(I) / d_SM2(I)
  Fx(I) = -(F(I) * (PosX(I) / d_SM(I)))
  Fy(I) = -(F(I) * (PosY(I) / d_SM(I)))
'Accélérations
  a(I) = -(F(I) / Mp(I))
  ax(I) = -(Fx(I) / Mp(I))
  ay(I) = -(Fy(I) / Mp(I))
'les variations des vitesses( au cours du temps)
  VxT(I) = ax(I) * T(I)
  VyT(I) = ay(I) * T(I)
'les nouvelles vitesses à l'aide des vitesses initiales a les instants T(I)
  VX(I) = VxT(I) + VX(I)
  VY(I) = VyT(I) + VY(I)
'la variation de la position avec la variation de la vitesse
  XT(I) = VX(I) * T(I)
  YT(I) = VY(I) * T(I)
'les nouvelles positions à l'aide des positions initiales a les instants T(I)
  PosX(I) = PosX(I) + XT(I)
  PosY(I) = PosY(I) + YT(I)
'Transformer l'echelle Solaire a l'echelle de picture box
  XEchelle(I) = PosX(I) / 20000000
  YEchelle(I) = PosY(I) / 10000000
'deplacement pour centrer les planètes
  XCentrer(I) = (XEchelle(I) + (Planet(I).Width / 2))
  YCentrer(I) = (YEchelle(I) + (Planet(I).Width / 2))
'Affichage dans picture box
  Planet(I).Left = XCentrer(I) + dx
  Planet(I).Top = YCentrer(I) + dy
  
'test les Collisions entre soleil et les planètes.
  dist2(I) = (XEchelle(I) ^ 2) + (YEchelle(I) ^ 2)
  dist(I) = Sqr(dist2(I))
 If I <> 5 Then
  If dist(I) <= 2700 Then
    Planet(I).Left = Distance_Initiale(I) - (Planet(I).Width / 2)
    Planet(I).Top = Planet(I).Height / 2
    Planet(I).Visible = False
  End If
 End If
End Sub

Private Sub cmdStart_Click()
  cmdStop.Enabled = True
  Timer1.Enabled = True
  Ms = TxtMSoleil.Text
  For I = 1 To 4
   Planet(I).Visible = True
  Next I
'Initialisons les variables au valeurs initiales
'Pour la position...
  PosX(5) = 35440000000#:    PosY(5) = 0  'Lune
  PosX(4) = 227936637000#:   PosY(4) = 0  'Mars
  PosX(3) = 149597887000#:   PosY(3) = 0  'Terre
  PosX(2) = 108208926000#:   PosY(2) = 0  'Vénus
  PosX(1) = 57909176000#:    PosY(1) = 0  'Mercure
'Pour la Vitesse...
  VitAide(4) = HScrBarVitesse(4).Value
  VitAide(3) = HScrBarVitesse(3).Value
  VitAide(2) = HScrBarVitesse(2).Value
  VitAide(1) = HScrBarVitesse(1).Value
  VX(5) = 0:   VY(5) = 90                 'Lune
  VX(4) = 0:   VY(4) = VitAide(4) * 10    'Mars
  VX(3) = 0:   VY(3) = VitAide(3) * 10    'Terre
  VX(2) = 0:   VY(2) = VitAide(2) * 10    'Vénus
  VX(1) = 0:   VY(1) = VitAide(1) * 10    'Mercure
End Sub
Private Sub cmdStop_Click()
If Vbool = False Then
cmdStop.Caption = "&C&ontinuer"
Timer1.Enabled = False
cmdStart.Enabled = False
Vbool = True
Else
cmdStop.Caption = "&Stop"
Timer1.Enabled = True
cmdStart.Enabled = True
Vbool = False
End If
End Sub
Private Sub HScrBarVitesse_Change(Index As Integer)
' Choix de la vitesse initiale par l'utilisateur
  VitAide(4) = HScrBarVitesse(4).Value
  VitAide(3) = HScrBarVitesse(3).Value
  VitAide(2) = HScrBarVitesse(2).Value
  VitAide(1) = HScrBarVitesse(1).Value
'Affichage de la Vitesse Initiale
  lblVitesse(4).Caption = VitAide(4) * 10
  lblVitesse(3).Caption = VitAide(3) * 10
  lblVitesse(2).Caption = VitAide(2) * 10
  lblVitesse(1).Caption = VitAide(1) * 10
End Sub
Private Sub cmdQuit_Click()
End
End Sub

ds module:
Public Ms As Double
Public Vbool As Boolean
Public Mp(1 To 5) As Double
Public XCentrer(1 To 5) As Double
Public YCentrer(1 To 5) As Double

Public G, F(1 To 5), Fx(1 To 5), Fy(1 To 5), d_SM2(1 To 5), d_SM(1 To 5), _
dist(1 To 5), dist2(1 To 5), VX0(1 To 5), VY0(1 To 5), VitAide(1 To 5), X(1 To 5), _
Y(1 To 5), PosX(1 To 5), PosY(1 To 5), XEchelle(1 To 5), YEchelle(1 To 5), XT(1 To 5), _
YT(1 To 5), VX(1 To 5), VY(1 To 5), T(1 To 5), VxT(1 To 5), _
VyT(1 To 5), a(1 To 5), ax(1 To 5), ay(1 To 5), Distance_Initiale(1 To 4)  As Double

Conclusion :


c code et l'application directe de la théorie de Newton sur la force gravitationnelle F=-GmM/d²
Pour plus d'infos n'hésitez pas à m'écrire à mejrhit@hotmail.com !!

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.