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 !!
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.