Объясните код - VB
Формулировка задачи:
короче закомментируйте плз код мне ,чтобы было понятно , что делает каждая строка ( если лень каждую, то хотя бы основные )код очень большой,если так не понятно , то ниже сама программа<3
Option Explicit
Dim X As Single
Dim Y As Single
Dim kol As Integer
Dim I As Integer
Dim T As Single
Const N As Long = 10 'количество шариков
Dim Time As Integer
Dim tikcir(N) As Boolean 'флажки попадания в мишень
Dim CoStop As Long, CoCurr As Long 'Для подсчёта количества частица и контроля над таймером
Dim TiStop As Long, TiCurr As Long 'Для подсчёта времени и контроля над таймером
Dim TiCo As Boolean
Const D As Double = 15 ' размер шариков; переменная для начальных координат стартового шарика
Dim VX(N) As Double, VY(N) As Double, V(N) As Double
Dim a_X(N) As Double, a_Y(N) As Double 'координаты шариков
Dim TN As Double, tik As Long
Dim II As Integer, JJ As Integer
Dim vXij As Double, vYij As Double
Private Sub Command3_Click(Index As Integer) 'Аргумент Index имеет тип Integer и указывает индекс того элемента управления, к которому применяется данная процедура
For I = 0 To N 'цикл,удаляющий шарики
Shape1(I).Visible = False 'шарики становятся невидимыми
Next I
Label4.Caption = "Время: 0 Частиц: 0" 'сброс значений времени и количества частиц
End Sub
Private Sub Form_Load()
Randomize '
Show
Label4.Caption = "Время: 0 Частиц: 0"
Picture1.Scale (0, 0)-(400, 400) 'метод,который задаёт систему координат
Dim I As Integer, J As Integer
Timer1.Enabled = False 'остановка таймера
Me.ScaleWidth = 400 'Область , на которой может происходить движение шариков
Me.ScaleHeight = 400 'Область , на которой может происходить движение шариков
Shape1(0).Height = D 'начальное положение стартового шарика на оси Y
Shape1(0).Width = D ' начальное положение стартового шарика на оси X
Shape1(0).Top = a_X(1) 'X
Shape1(0).Left = a_Y(1) 'Y
VX(0) = 110
VY(0) = 40
For I = 1 To N 'цикл ,выводящий массив объектов в хаотичном положении
Load Shape1(I) 'загрузка экзампляра shape1
With Shape1(I) 'блок для установки свойств объекта shape1(I)
.Visible = True
.Shape = 3
.Width = D
.Height = D
a_X(I) = Int(Rnd * 300 + D) 'a_X(I - 1) + 50
.Top = a_X(I)
a_Y(I) = Int(Rnd * 300 + D)
.Left = a_Y(I)
End With
Next I
For I = 0 To N
'проверка начальной позиции, с условие попадания в мишень при расстановке частиц
Dim cX As Long 'позиция центра частицы на экране
Dim cY As Long 'позиция центра частицы на экране
cX = Shape1(I).Width / 2 + Shape1(I).Left
cY = Shape1(I).Height / 2 + Shape1(I).Top
Dim mX As Long 'позиция центра мишени на экране
Dim mY As Long 'позиция центра мишени на экране
Dim mR As Long 'радиус мишени
mX = Shape2.Width / 2 + Shape2.Left
mY = Shape2.Height / 2 + Shape2.Top
mR = Shape2.Width / 2
If ((cX - mX) * (cX - mX) + (cY - mY) * (cY - mY) <= mR * mR) Then 'стандартное условие попадения в центр окружности (x-a)^2+(y-b)^2=R^2, где a и b - центр окружности
tikcir(I) = True
Else
tikcir(I) = False
End If
Next I
kol = Val(Text1.Text)
Time = Val(Text2.Text)
Text1.SetFocus
End Sub
Sub Timer1_Timer()
Dim I As Long, J As Long
Dim K As Double, dX As Double, dY As Double
Dim VIR As Double, VJR As Double
Dim cX As Long 'позиция центра частицы на экране
Dim cY As Long 'позиция центра частицы на экране
Dim mX As Long 'позиция центра мишени на экране
Dim mY As Long 'позиция центра мишени на экране
Dim mR As Long 'радиус мишени
Dim Work As Boolean
Dim Ghost As Integer 'так как отлов ведётся на выходе из мишени, то в эту переменную будет подсчитыватся сумма в частиц в кругу на данный момент
Work = False
'проверяем на условия окончания
If (CoCurr + Ghost < CoStop) And (TiCurr < TiStop) Then
Work = True
Else
Work = False
End If
If Work Then
tik = tik + 1
If tik > TN Then
K = TN + 1 - tik
For I = 0 To N
'тут распишем условие попадания
cX = Shape1(I).Width / 2 + Shape1(I).Left
cY = Shape1(I).Height / 2 + Shape1(I).Top
mX = Shape2.Width / 2 + Shape2.Left
mY = Shape2.Height / 2 + Shape2.Top
mR = Shape2.Width / 2
If ((cX - mX) * (cX - mX) + (cY - mY) * (cY - mY) <= mR * mR) Then 'стандартное условие попадения в центр окружности (x-a)^2+(y-b)^2=R^2, где a и b - центр окружности
' попадает на данном такте
tikcir(I) = True
Else
If tikcir(I) Then ' был на мишени в прошлом такте
CoCurr = CoCurr + 1
End If
tikcir(I) = False
End If
Label4.Caption = "Время: " + Str(TiStop - TiCurr) + " Частиц: " + Str(CoCurr + Ghost)
a_Y(I) = a_Y(I) + VY(I) * K: Shape1(I).Left = a_Y(I)
a_X(I) = a_X(I) + VX(I) * K: Shape1(I).Top = a_X(I)
Next I
Select Case JJ
Case -1: VX(II) = -VX(II)
Case -2: VY(II) = -VY(II)
Case Else
dX = (a_X(II) - a_X(JJ)) / D
dY = (a_Y(II) - a_Y(JJ)) / D
vXij = VX(JJ) - VX(II)
vYij = VY(JJ) - VY(II)
VIR = (dY * vYij + dX * vXij)
VJR = (dX * vYij - vXij * dY)
VX(JJ) = VX(II) - VJR * dY
VY(JJ) = VY(II) + VJR * dX
VX(II) = VX(II) + VIR * dX
VY(II) = VY(II) + VIR * dY
End Select
near_Bac
Else
For I = 0 To N
'тут распишем условие попадания
cX = Shape1(I).Width / 2 + Shape1(I).Left
cY = Shape1(I).Height / 2 + Shape1(I).Top
mX = Shape2.Width / 2 + Shape2.Left
mY = Shape2.Height / 2 + Shape2.Top
mR = Shape2.Width / 2
If ((cX - mX) * (cX - mX) + (cY - mY) * (cY - mY) <= mR * mR) Then 'стандартное условие попадения в центр окружности (x-a)^2+(y-b)^2=R^2, где a и b - центр окружности
' попадает на данном такте
tikcir(I) = True
Else
If tikcir(I) Then ' был на мишени в прошлом такте
CoCurr = CoCurr + 1
End If
tikcir(I) = False
End If
Label4.Caption = "Время: " + Str(TiStop - TiCurr) + " Частиц: " + Str(CoCurr + Ghost)
a_Y(I) = a_Y(I) + VY(I): Shape1(I).Left = a_Y(I)
a_X(I) = a_X(I) + VX(I): Shape1(I).Top = a_X(I)
Next I
End If
Timer1.Enabled = True
Timer1.Interval = 10
Time = 0
For I = 1 To Time
Time = Time + 1
Label4.Caption = Time
Ghost = 0
For J = 0 To N
If tikcir(J) Then
Ghost = Ghost + 1
End If
Next J
Next I
Else
Ghost = 0
For I = 0 To N
If tikcir(0) Then
Ghost = Ghost + 1
End If
Next I
Timer1.Enabled = False
Label4.Caption = "Время: " + Str(TiStop - TiCurr) + " Частиц: " + Str(CoCurr)
If (CoCurr <= CoStop) And (TiCurr = TiStop) Then
MsgBox "В объектив не попало заданное число частиц", vbInformation
Else
MsgBox "В объектив попало заданное число частиц", vbInformation
End If
End If
End Sub
Private Sub Command1_Click(Index As Integer)
For I = 0 To N
Shape1(I).Visible = True
Next I
CoStop = Val(Text1.Text)
TiCurr = 0
TiStop = Val(Text2.Text)
CoCurr = 0
Timer2.Interval = 1000
Timer2.Enabled = True
Call Timer1_Timer
End Sub
Private Sub Command2_Click(Index As Integer)
Timer1.Enabled = False
Timer2.Enabled = False
End Sub
Sub near_Bac()
Dim I As Integer, J As Integer, T As Double
Dim V As Double, xn As Double, yn As Double
Dim dX As Double, dY As Double
TN = 1.79769313486231E+308
For I = 0 To N - 1
For J = I + 1 To N
vXij = VX(J) - VX(I)
vYij = VY(J) - VY(I)
If vXij <> 0 Or vYij <> 0 Then
T = 1.79769313486231E+308
dX = a_X(I) - a_X(J)
dY = a_Y(I) - a_Y(J)
V = Sqr(vXij * vXij + vYij * vYij)
yn = (dX * vYij - vXij * dY) / V
If Abs(yn) <= D Then
xn = (dX * vXij + vYij * dY) / V
If xn >= 0 Then T = (xn - Sqr(D * D - yn * yn)) / V
End If
If T < TN Then TN = T: II = I: JJ = J
End If
Next J
Next I
For I = 0 To N
If VX(I) > 0 Then
T = (Me.ScaleHeight - a_X(I) - D) / VX(I): If T < TN Then II = I: JJ = -1: TN = T
ElseIf VX(I) < 0 Then
T = -a_X(I) / VX(I): If T < TN Then II = I: JJ = -1: TN = T
End If
If VY(I) > 0 Then
T = (Me.ScaleWidth - a_Y(I) - D) / VY(I): If T < TN Then II = I: JJ = -2: TN = T
ElseIf VY(I) < 0 Then
T = -a_Y(I) / VY(I): If T < TN Then II = I: JJ = -2: TN = T
End If
Next I
tik = 0
End Sub
Sub Timer2_Timer()
TiCurr = TiCurr + 1
I = I + 1
End Sub
Private Sub Timer3_Timer()
If (Text1.Text = "") Or (Text2.Text = "") Then
Frame2.Enabled = False
Else
Frame2.Enabled = True
End If
End SubРешение задачи: «Объясните код»
textual
Листинг программы
Dim X As Single 'объявляем X как урезанную вещественную Dim Y As Single 'объявляем Y как урезанную вещественную и т.д.