Задача Кеплера
Dim Vx, Vy, Vxx, Vyy, Vx1, Vy1, Dt, Dtt, G, G1, R, R1, Rr1, Rrrr, Dvx, Dvy as Double
‘ Прекции ускорения всех тел
Public Function Ax(x)
Ax = G * x / (R * R * R)
End Function
Public Function Ay(y)
Ay = G * y / (R * R * R)
End Function
Public Function Ax1(x)
Ax1 = G1 * x / (R1 * R1 * R1)
End Function
Public Function Ay1(y)
Ay1 = G1 * y / (R1 * R1 * R1)
End Function
Public Function Ax2(x)
Ax2 = G * x / (Rr1 * Rr1 * Rr1)
End Function
Public Static Function Ay2(y)
Ay2 = G * y / (Rr1 * Rr1 * Rr1)
End Function
Private Sub Command12_Click()
Dtt = 0
Command12.Visible = False
Command11.Visible = True
End Sub
Private Sub Command13_Click()
Text1.Text = 0
End Sub
Private Sub Command4_Click()
End
End Sub
‘ Возмущение движения спутника
Private Sub Command5_Click()
Dvx = Text4.Text
Dvy = Text3.Text
Vx1 = Vx1 + Dvx
Vy1 = Vy1 + Dvy
End Sub
‘ Начальные значения параметров
Private Sub Command6_Click()
Shape2.Left = 3500
Shape2.Top = 500
Shape3.Left = 3500
Shape3.Top = 100
Vx1 = 220
Vy1 = -0
Vx = 95
Vy = 0
End Sub
Private Sub Form_Activate()
Dt = 1
Dt1 = 0.3
G = 10000000 ‘ константа для планет
G1 = 4000000 ‘ константа для спутника
Vx1 = 220
Vy1 = -0
Vx = 95
Vy = 0
Vxx = 150
Vyy = 0
For i = 0 To 1000
‘ рисование линейки
Picture1.Line (140 + Line1.X1 + 69 * i, Line1.Y1)-(140 + Line1.X1 + 69 * i, Line1.Y1 - 80)
Next i
End Sub
Private Sub Timer1_Timer()
Static axx, ayy, axs, ays, axx1, ayy1
‘ пересчёт координат движущихся тел
Shape2.Left = Shape2.Left + Vx * Dt + axx * Dt * Dt / 2
Shape2.Top = Shape2.Top + Vy * Dt + ayy * Dt * Dt / 2
Shape4.Left = Shape4.Left + Vxx * Dt + axs * Dt * Dt / 2
Shape4.Top = Shape4.Top + Vyy * Dt + ays * Dt * Dt / 2
Shape3.Left = Shape3.Left + Vx1 * Dt + axx1 * Dt * Dt / 2
Shape3.Top = Shape3.Top + Vy1 * Dt + ayy1 * Dt * Dt / 2
x = Shape1.Left - Shape2.Left
y = Shape1.Top - Shape2.Top
R = Sqr(x * x + y * y)
axxx = Ax(x)
ayyy = Ay(y)
xxxx = Shape1.Left - Shape4.Left
yyyy = Shape1.Top - Shape4.Top
R = Sqr(xxxx * xxxx + yyyy * yyyy)
axss = Ax(xxxx)
ayss = Ay(yyyy)
xx = Shape2.Left - Shape3.Left
Yy = Shape2.Top - Shape3.Top
R1 = Sqr(xx * xx + Yy * Yy)
xxx = Shape1.Left - Shape3.Left
yYy = Shape1.Top - Shape3.Top
Rr1 = Sqr(xxx * xxx + yYy * yYy)
axxx1 = Ax1(xx) + Ax2(xxx)
ayyy1 = Ay1(Yy) + Ay2(yYy)
‘ пересчёт скоростей тел
Vx = Vx + axxx * Dt + (axx + axxx) * Dt / 2
Vy = Vy + ayyy * Dt + (ayy + ayyy) * Dt / 2
Vxx = Vxx + axss * Dt + (axs + axss) * Dt / 2
Vyy = Vyy + ayss * Dt + (ays + ayss) * Dt / 2
Vx1 = Vx1 + axxx1 * Dt + (axx1 + axxx1) * Dt / 2
Vy1 = Vy1 + ayyy1 * Dt + (ayy1 + ayyy1) * Dt / 2
axx = axxx
ayy = ayyy
axx1 = axxx1
ayy1 = ayyy1
axs = axss
ays = ayss
Text1.Text = Text1.Text + Dtt
End Sub