Задача Кеплера

 

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