.
.
.
.
) .
.
.
) .
.
.
;
- ;
- .
.
.
, , . , , , . , .
(, ),
.
. 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