Качественный анализ модели

Одна звезда.

Уравнение движения планеты.

Угловая скорость.

Начальные условия.

 

 

 

Две звезды

а) неинерциальная система отсчета.

Уравнение движения планеты.

 

где

 

Начальные условия.

 

б) инерциальная система отсчета.

Уравнение движения планеты.

Закон движения звезд.

 

где ;

- координаты планеты;

- координаты первой и второй звезд.

 

Начальные условия.

Качественный анализ модели.

В одномерном движении качественный характер движения легко представим, как движение шарика под действием силы тяжести по желобу, профиль которого совпадает с потенциальной кривой. При движении с двумя степенями свободы, потенциальная энергия зависит от двух координат, следовательно, потенциальная кривая превращается в потенциальную поверхность. И в этом случае характер движения системы можно представить как движение шарика под действием силы тяжести по поверхности, рельеф которой совпадает с потенциальной поверхностью.

Так в рассматриваемой задаче потенциальная энергия («настоящая», а не «эффективная»), определяется функцией

 

.

Поверхность этой функции показана на рис. 13.9, мысленно опускайте в эту «воронку» маленький шарик, предварительно сообщив ему горизонтальную скорость, и наблюдайте сверху движение шарика как модель движения планеты. Если шарик имеет горизонтальную компоненту скорости, то он никогда не сможет опуститься на большую глубину в эту бесконечно глубокую яму, потому, что с увеличением глубины, радиус ямы уменьшается, поэтому «во имя» сохранения момента импульса скорость шарика должна возрастать до бесконечности, что запрещает закон сохранения энергии.

Рис. 13.9

 

Предельные точки орбиты планеты можно найти, полагая в уравнении закона сохранения энергии . Итак, для определения точек возврата имеем уравнение

 

,

 

корнями которого являются: (это начальное положение) и

 

.

Кратко повторим возможные виды движений, в зависимости от значения начальной скорости:

а) при , то есть планета начинает приближаться к звезде;

б) при , то есть орбита является круговой;

в) при , то есть планета начинает удаляться от звезды, но не удаляется на бесконечно большое расстояние;

г) при , кинетической энергии планеты хватает, чтобы преодолеть притяжение звезды, поэтому планета удаляется на бесконечно большое расстояние.

Движение планеты в системе двух звезд тривиально, если расстояние между звездами много меньше расстояний от звезд до планеты, либо расстояние между планетой и одной звездой много меньше расстояния между звездами. Такие задачи сводится к выше рассмотренной – движение планеты около одной звезды. Любые другие варианты порождают очень сложные траектории, трудно поддающиеся качественному анализу. Давайте доверимся модели, раз уж мы ее разрабатываем.

Алгоритм решения.

Одна звезда.

1. Задаем параметры вычислений:

временной шаг ;

база координат BaseXY.

2. Задаем начальные параметры:

время ;

начальный угол ;

начальную скорость ;

номер узла .

3. Определяем текущее время:

4. Вычисляем ускорение:

или “если Ньютон не прав”

 

 

5. Для момента времени определяем скорости и координаты:

6. Отображаем на экране точки графиков.

7. Переопределяем начальные данные:

8. Если принудительно не останавливаются вычисления (кнопка ”Стоп”), то переходим к п.3.

9. Завершаем вычисления.

 

 

Две звезды.

а) неинерциальная система отсчета.

1. Задаем параметры вычислений:

базовый временной шаг ;

база координат BaseXY.

2. Задаем начальные параметры:

время ;

координаты планеты ;

начальную скорость ;

номер узла .

3. Определяем текущее время:

 

4. Вычисляем ускорение:

 

 

5. Корректируем временной шаг:

6. Для момента времени определяем скорости и координаты:

7. Отображаем на экране положение планеты.

8. Переопределяем начальные данные:

9. Если принудительно не останавливаются вычисления (кнопка ”Стоп”), то переходим к п.3.

10. Завершаем вычисления.

 

а) инерциальная система отсчета.

1. Задаем параметры вычислений:

базовый временной шаг ;

база координат BaseXY.

2. Задаем начальные параметры:

время ;

координаты планеты ;

начальную скорость ;

координаты звезд ;

номер узла .

3. Определяем текущее время:

 

4. Вычисляем ускорение:

 

 

5. Корректируем временной шаг:

6. Для момента времени определяем скорости и координаты планеты координаты звезд:

7. Отображаем на экране положение планеты.

8. Переопределяем начальные данные:

9. Если принудительно не останавливаются вычисления (кнопка ”Стоп”), то переходим к п.3.

10. Завершаем вычисления.

 

Разработка программы

Интерфейс

Мы уже привыкли для отображения графики использовать компонент Axis (хочется верить, что это не вредная привычка) рис. 3.10. Обратим внимание только на кнопку “Две звезды”. Ee нажатие закрывает текущую форму “Звезда и планета” и открывает вторую форму “Две звезды” рис. 13.11.

Рис. 13.10

Рис. 13.11

 

Расстояния между звездами и между звездами и планетой изменяются в больших пределах. Использование одного масштаба при разных начальных условиях не позволяет увидеть детали движения. Частично эту проблему можно решить, задавая разную базу координат. Однако при определенных условиях (например, планета в исходном состоянии находится очень близко к одной из планет) невозможно в обычном масштабе отобразить траекторию планеты. Для изменения масштаба отображения движения планеты предусматриваются две кнопки: "Больше" и "Вернуться". Нажатие первой из них увеличивает масштаб в десять раз и смещает начало координат в текущее положение первой звезды. Если планета находится близко к первой звезде, можно увидеть детали ее траектории. Вторая кнопка возвращает исходный масштаб отображения.

В этой модели (форма 2) мы предусматриваем автоматическое изменение временного шага в зависимости от ускорения планеты (см. формулу (13.32)). В качестве исходного шага вводится базовый шаг времени, а текущий - вычисляемый - просто отображается в текстовом окне.

 

Программный код.

Форма 1. Звезда и планета.

Option Explicit On

Imports System.Drawing.Color

Imports System.Math

Public Class Form1

 

'звезда

Dim xStar1 As Single

Dim yStar1 As Single

Dim StarSize As Single = 0.07

'начальные условия

Dim Fi0 As Single 'начальная фаза

Dim v0 As Single

Dim r0 As Single

'планета

Dim xPlanet As Single

Dim yPlanet As Single

Dim xPlanet1 As Single

Dim yPlanet1 As Single

Dim rkPlanet As Single

Dim rk1Planet As Single

Dim akPlanet As Single

Dim ak1Planet As Single

Dim vkPlanet As Single

Dim vk1Planet As Single

Dim omegakPlanet As Single

Dim omegak1Planet As Single

Dim FikPlanet As Single

Dim Fik1Planet As Single

Dim PlanetSize As Single = 0.03

'энергия

Dim En As Single

Dim E0 As Single

Dim Uef As Single

'другие параметры

Dim t As Single 'время

Dim dt As Single 'временной шаг

Dim BaseXY As Single

Dim Delta As Single

 

В процедуре загрузки формы для обеспечения обинакового масштаба по осямxиyделаем равными высоту и ширину элемента управленияAxis1.

Private Sub Form_Load()

Axis1.Width = Axis1.Height

End Sub

 

Процедура обработки события нажатия кнопки“Инициализация” присваивает переменным, значения параметров, введенные в текстовые поля. Предварительно заблокированниые кнопки“Старт”и “Период” становятся доступными. Эти действия необходимы, чтобы вычисления можно было выполнять только после инициализации параметров.

'инициализация данных

Private Sub CommandInit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandInit.Click

v0 = Val(Textv0.Text)

dt = Val(TextDT.Text)

BaseXY = Val(TextBaseXY.Text)

Delta = Val(TextDelta.Text)

r0 = 1

Fi0 = 0

rkPlanet = r0

rk1Planet = r0

vkPlanet = 0

vk1Planet = 0

FikPlanet = Fi0

Fik1Planet = Fi0

t = 0

E0 = v0 ^ 2 / 2 - 1

xPlanet = r0

yPlanet = 0

xStar1 = 0

yStar1 = 0

InitAxis()

PlanetSize = 0.05 * BaseXY

StarSize = 0.08 * BaseXY

Axis1.Pix_Size = StarSize

Axis1.PixDraw(xStar1, yStar1, Red, 1)

Axis1.StatToDin()

Axis1.Pix_Size = PlanetSize

Axis1.PixDraw(xPlanet, yPlanet, Blue, 2)

Axis1.DinToPic()

CommandStart.Enabled = True

CommandUef.Enabled = True

End Sub

Private Sub InitAxis()

If Check3.Checked = False Then Exit Sub

'планета

Axis1.Axis_Type = 1

Axis1.Pix_type = 1

Axis1.x_Base = BaseXY

Axis1.y_Base = BaseXY

Axis1.x_Name = "x"

Axis1.y_Name = "y"

Axis1.AxisDraw()

'потенциальная энергия

Axis2.Axis_Type = 2

Axis2.Pix_type = 1

Axis2.Pix_Size = 0

Axis2.x_Base = 4

Axis2.y_Base = 3

Axis2.y_Name = "Uef"

Axis2.x_Name = "r"

Axis2.AxisDraw()

'погрешность вычисления энергии

Axis3.Axis_Type = 2

Axis3.Pix_type = 1

Axis3.Pix_Size = 0

Axis3.x_Base = 40

Axis3.y_Base = 0.001

Axis3.y_Name = "погрешность E"

Axis3.x_Name = "время"

Axis3.AxisDraw()

End Sub

Private Sub CommandStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandStart.Click

Timer1.Enabled = True

End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

Timer1.Enabled = False

End Sub

 

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

t = t + dt

If Check1.Checked = False Then

akPlanet = (v0 ^ 2 / rkPlanet ^ 3) - (1 / rkPlanet ^ 2)

Else

akPlanet = (v0 ^ 2 / rkPlanet ^ 3) - (1 / rkPlanet ^ (2 + Delta))

End If

vk1Planet = vkPlanet + akPlanet * dt

rk1Planet = rkPlanet + (vkPlanet + vk1Planet) * dt / 2

omegakPlanet = v0 / rkPlanet ^ 2

omegak1Planet = v0 / rk1Planet ^ 2

Fik1Planet = FikPlanet + (omegakPlanet + omegak1Planet) * dt / 2

xPlanet = rkPlanet * Cos(FikPlanet)

yPlanet = rkPlanet * Sin(FikPlanet)

xPlanet1 = rk1Planet * Cos(Fik1Planet)

yPlanet1 = rk1Planet * Sin(Fik1Planet)

'траектория

Axis1.Pix_Size = 0

Axis1.Pix_color = Black

Axis1.Line(xPlanet, yPlanet, xPlanet1, yPlanet1, 1)

'рисуем планету

Axis1.StatToDin()

Axis1.Pix_Size = PlanetSize

Axis1.PixDraw(xPlanet1, yPlanet1, Blue, 2)

Axis1.DinToPic()

'полная энергия

If Check1.Checked = False Then

En = vk1Planet ^ 2 / 2 + (omegak1Planet * rk1Planet) ^ 2 / 2 - 1 / rk1Planet

Uef = v0 ^ 2 / (2 * rk1Planet ^ 2) - (1 / rk1Planet)

Else

'Ньютон не прав

En = vk1Planet ^ 2 / 2 + (omegak1Planet * rk1Planet) ^ 2 / 2 - 1 / ((1 + Delta) * rk1Planet ^ (1 + Delta))

Uef = v0 ^ 2 / (2 * rk1Planet ^ 2) - (1 / ((1 + Delta) * rk1Planet ^ (1 + Delta)))

End If

 

'эффективная потенциальная энергия

Axis2.PixDraw(rk1Planet, Uef, Blue, 0)

'погрешность

Axis3.PixDraw(t, Abs(E0 - En), Red, 0)

vkPlanet = vk1Planet

rkPlanet = rk1Planet

FikPlanet = Fik1Planet

Textt.Text = Str(Round(t, 2))

End Sub

'эффективная потенциальная энергия

Private Sub CommandUef_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandUef.Click

Dim Uef As Single

Dim Uef1 As Single

Dim r As Single

Dim dr As Single

Dim v0 As Single

Dim dv0 As Single

 

r = 0.01

dr = 0.01

v0 = 0.5

dv0 = 0.25

Axis1.Pix_color = Red

Do Until v0 > 2

Do Until r > 4 - dr

Uef = v0 ^ 2 / (2 * r ^ 2) - 1 / r

Uef1 = v0 ^ 2 / (2 * (r + dr) ^ 2) - 1 / (r + dr)

Axis2.Line(r, Uef, r + dr, Uef1, 0)

r = r + dr

Loop

v0 = v0 + dv0

r = 0.01

Loop

End Sub

Private Sub TextDT_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextDT.TextChanged

If Val(TextDT.Text) > 0.1 Then TextDT.Text = "0.1"

dt = Val(TextDT.Text)

End Sub

 

Private Sub CommandStar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandStar2.Click

Form2.Show()

End Sub

 

End Class

Форма 2. Звезда и две планеты.

Option Explicit On

Imports System.Drawing.Color

Imports System.Math

Public Class Form2

'звезда

Dim xkStar1 As Double

Dim ykStar1 As Double

Dim xkStar2 As Double

Dim ykStar2 As Double

Dim xk1Star1 As Double

Dim yk1Star1 As Double

Dim xk1Star2 As Double

Dim yk1Star2 As Double

'начальные условия

Dim Fi0 As Double 'начальная фаза

Dim v0 As Double

Dim r0 As Double

'планета

Dim xkPlanet As Double

Dim xk1Planet As Double

Dim ykPlanet As Double

Dim yk1Planet As Double

Dim vxkPlanet As Double

Dim vxk1Planet As Double

Dim vykPlanet As Double

Dim vyk1Planet As Double

 

Dim xPlanet As Double

Dim yPlanet As Double

Dim xPlanet1 As Double

Dim yPlanet1 As Double

 

Dim r1Planet As Double

Dim r2Planet As Double

Dim axPlanet As Double

Dim ayPlanet As Double

'энергия

Dim Ek As Double

Dim Ek1 As Double

Dim dE As Double

Dim Uef As Double

Dim A As Double

'другие параметры

Dim t As Double 'время

Dim dt As Double 'временной шаг

Dim dt0 As Double ',базовый временной шаг

Dim BaseXY As Double

Dim Star1Color As Color

Dim Star2Color As Color

Dim RMolPlanet As Double

Dim RMolStar As Double

Dim DispX As Double 'смещение начала координат

Dim DispY As Double 'смещение начала координат

 

Private Sub CommandStar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandStar1.Click

Form1.Show()

End Sub

 

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Star1Color = Red

Star2Color = DarkRed

End Sub

'инициализация данных

Private Sub CommandInit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandInit.Click

Timer1.Enabled = False

xkPlanet = Val(Textx0.Text)

xk1Planet = Val(Textx0.Text)

ykPlanet = Val(Texty0.Text)

yk1Planet = Val(Texty0.Text)

 

vxkPlanet = Val(Textvx0.Text)

vxk1Planet = Val(Textvx0.Text)

vykPlanet = Val(Textvy0.Text)

vyk1Planet = Val(Textvy0.Text)

 

dt0 = Val(TextDT0.Text)

dt = dt0

BaseXY = Val(TextBaseXY.Text)

RMolPlanet = 0.03 * BaseXY

RMolStar = 0.06 * BaseXY

DispX = 0

DispY = 0

t = 0

 

InitAxis()

 

xkStar1 = 1

ykStar1 = 0

xkStar2 = -1

ykStar2 = 0

xk1Star1 = 1

yk1Star1 = 0

xk1Star2 = -1

yk1Star2 = 0

Axis1.StatToDin()

Axis1.Pix_Size = RMolPlanet

Axis1.PixDraw(xkPlanet, ykPlanet, Blue, 2)

Axis1.Pix_Size = RMolStar

If RadioButton1.Checked Then

Axis1.PixDraw(xkStar1, ykStar1, Star1Color, 2)

Axis1.PixDraw(xkStar2, ykStar2, Star2Color, 2)

Else

Axis1.PixDraw(xkStar1, ykStar1, Star1Color, 1)

Axis1.PixDraw(xkStar2, ykStar2, Star2Color, 1)

vxkPlanet = vxkPlanet + ykPlanet / 2

vykPlanet = vykPlanet - xkPlanet / 2

vxk1Planet = vxkPlanet

vyk1Planet = vykPlanet

End If

Axis1.DinToPic()

CommandStart.Enabled = True

End Sub

Private Sub InitAxis()

'планета/звезды

Axis1.Axis_Type = 1

Axis1.Pix_type = 1

Axis1.x_Base = BaseXY

Axis1.y_Base = BaseXY

Axis1.x_Name = "x"

Axis1.y_Name = "y"

Axis1.AxisDraw()

'погрешность вычисления энергии

Axis2.Axis_Type = 2

Axis2.Pix_type = 1

Axis2.Pix_Size = 0

Axis2.x_Base = 40

Axis2.y_Base = 0.005

Axis2.y_Name = "погрешность E"

Axis2.x_Name = "время"

Axis2.AxisDraw()

End Sub

Private Sub CommandStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandStart.Click

Timer1.Enabled = True

CommandStop.Enabled = True

CommandMore.Enabled = True

CommandBack.Enabled = False

End Sub

Private Sub CommandStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandStop.Click

Timer1.Enabled = False

CommandMore.Enabled = False

CommandBack.Enabled = False

End Sub

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged

Timer1.Enabled = False

CommandStart.Enabled = False

CommandStop.Enabled = False

CommandMore.Enabled = False

CommandBack.Enabled = False

End Sub

Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged

Timer1.Enabled = False

CommandStart.Enabled = False

CommandStop.Enabled = False

CommandMore.Enabled = False

CommandBack.Enabled = False

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

t = t + dt

If RadioButton2.Checked Then

xk1Star1 = 1

xk1Star2 = -1

yk1Star1 = 0

yk1Star2 = 0

'неинерциальная система отсчета

r1Planet = Sqrt((xkPlanet - xk1Star1) ^ 2 + (ykPlanet - yk1Star1) ^ 2)

r2Planet = Sqrt((xkPlanet - xk1Star2) ^ 2 + (ykPlanet - yk1Star2) ^ 2)

axPlanet = -(xkPlanet - xk1Star1) / r1Planet ^ 3 - (xkPlanet - xk1Star2) / r2Planet ^ 3 + xkPlanet / 4 + vykPlanet

ayPlanet = -ykPlanet / r1Planet ^ 3 - ykPlanet / r2Planet ^ 3 + ykPlanet / 4 - vxkPlanet

Else

'инерциальная система отсчета

xk1Star1 = Cos(t / 2)

yk1Star1 = Sin(t / 2)

xk1Star2 = -Cos(t / 2)

yk1Star2 = -Sin(t / 2)

r1Planet = Sqrt((xkPlanet - xk1Star1) ^ 2 + (ykPlanet - yk1Star1) ^ 2)

r2Planet = Sqrt((xkPlanet - xk1Star2) ^ 2 + (ykPlanet - yk1Star2) ^ 2)

axPlanet = -(xkPlanet - xk1Star1) / r1Planet ^ 3 - (xkPlanet - xk1Star2) / r2Planet ^ 3

ayPlanet = -(ykPlanet - yk1Star1) / r1Planet ^ 3 - (ykPlanet - yk1Star2) / r2Planet ^ 3

End If

vxk1Planet = vxkPlanet + axPlanet * dt

vyk1Planet = vykPlanet + ayPlanet * dt

xk1Planet = xkPlanet + (vxkPlanet + vxk1Planet) / 2 * dt + axPlanet * dt * dt / 2

yk1Planet = ykPlanet + (vykPlanet + vyk1Planet) / 2 * dt +ayPlanet * dt * dt / 2

dt = dt0 / Sqrt(axPlanet ^ 2 + ayPlanet ^ 2)

'траектория

Axis1.Pix_color = Black

Axis1.Line(xkPlanet - DispX, ykPlanet - DispY, xk1Planet - DispX, yk1Planet - DispY, 1)

'рисуем планету

Axis1.StatToDin()

Axis1.Pix_Size = RMolPlanet

Axis1.PixDraw(xk1Planet - DispX, yk1Planet - DispY, Blue, 2)

 

If RadioButton1.Checked Then

'инерциальная система отсчета

Axis1.Pix_Size = RMolStar

Axis1.PixDraw(xk1Star1 - DispX, yk1Star1 - DispY, Star1Color, 2)

Axis1.PixDraw(xk1Star2 - DispX, yk1Star2 - DispY, Star2Color, 2)

xkStar1 = xk1Star1

ykStar1 = yk1Star1

xkStar2 = xk1Star2

ykStar2 = yk1Star2

 

End If

Axis1.DinToPic()

'изменение энергии

Ek = (vxkPlanet ^ 2 + vykPlanet ^ 2) / 2 - 1 / Sqrt((xkPlanet - xkStar1) ^ 2 + (ykPlanet - ykStar1) ^ 2) - _

1 / Sqrt((xkPlanet - xkStar2) ^ 2 + (ykPlanet - ykStar2) ^ 2)

Ek1 = (vxk1Planet ^ 2 + vyk1Planet ^ 2) / 2 - 1 / Sqrt((xk1Planet - xk1Star1) ^ 2 + (yk1Planet - yk1Star1) ^ 2) - _

1 / Sqrt((xk1Planet - xk1Star2) ^ 2 + (yk1Planet - yk1Star2) ^ 2)

dE = Ek1 - Ek

'работа

A = axPlanet * (xk1Planet - xkPlanet) + ayPlanet * (yk1Planet - ykPlanet)

'погрешность

Axis2.PixDraw(t, Abs(A - dE), Red, 0)

vxkPlanet = vxk1Planet

vykPlanet = vyk1Planet

xkPlanet = xk1Planet

ykPlanet = yk1Planet

Textt.Text = Str(Round(t, 2))

TextDT.Text = Str(Round(dt, 8))

End Sub

Private Sub TextDT_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextDT.TextChanged

If Val(TextDT.Text) > 0.1 Then TextDT.Text = "0.1"

dt = Val(TextDT.Text)

End Sub

 

Private Sub CommandMore_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandMore.Click

CommandBack.Enabled = True

Timer1.Enabled = False

Axis1.Axis_Type = 1

Axis1.Pix_type = 3

Axis1.x_Base = 0.5

Axis1.y_Base = 0.5

Axis1.x_Name = "x"

Axis1.y_Name = "y"

Axis1.AxisDraw()

DispX = xkStar1

DispY = ykStar1

'рисуем планету

Axis1.Pix_Size = RMolPlanet

Axis1.Pix_type = 1

Axis1.PixDraw(xk1Planet - DispX, yk1Planet - DispY, Blue, 2)

'рисуем 1 звезду

Axis1.Pix_Size = RMolStar

Axis1.PixDraw(xk1Star1 - DispX, yk1Star1 - DispY, Star1Color, 2)

Timer1.Enabled = True

End Sub

 

 

Private Sub CommandBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandBack.Click

 

CommandMore.Enabled = True

CommandBack.Enabled = False

Timer1.Enabled = False

DispX = 0

DispY = 0

InitAxis()

'рисуем планету

Axis1.StatToDin()

Axis1.Pix_Size = RMolPlanet

Axis1.PixDraw(xk1Planet - DispX, yk1Planet - DispY, Blue, 2)

'рисуем 1 звезду

Axis1.Pix_Size = RMolStar

Axis1.PixDraw(xk1Star1 - DispX, yk1Star1 - DispY, Star1Color, 2)

Axis1.PixDraw(xk1Star2 - DispX, yk1Star2 - DispY, Star2Color, 2)

Axis1.DinToPic()

Timer1.Enabled = True

End Sub

 

End Class

Тестирование программы.

Тестирование модели “Планета-звезда” выполним на тривиальном примере. Зададим начальную скорость планеты равной 1, тогда орбитой планеты должна быть окружность. Так и получилось! Хотим напомнить (в который раз), что наше тестирование не обеспечивает получение надежных результатов при других исходных параметрах. Это первичный тест, обеспечивающий возможность начала работы с моделью. В качестве подтверждения сказанного выполним несколько экспериментов, обратив внимание на контроль правильности вычислений. На рис. 13.12 для модели "Планета-двойная звезда" приведены шесть «решений» при одних и тех же начальных условиях, полученных для обеих систем уравнений (а-неинерциальная система отсчета) и (б-инерциальная система отсчета) при различных значениях величины . Какому из них верить? Да никакому, даже оказывается «большим». На всех рисунках совпадают только первая петля вокруг правой звезды и непонятный изгиб траектории в области между звездами, а дальше «траектории» принципиально различаются. Мы специально выбрали такой пример, для которого получить надежное решение не удалось. Причину неудачи при этих начальных условиях выясним чуть позднее.

Рис. 13.12