2.3.1 Описание класса Form1
В данном классе производится решение задачи построение графика и сетки.
В разделе Public Class Form1 производится объявление глобальных переменных, положение начала системы координат, шаг линий сетки по осям X и Y.
В разделе Sub Grafic() производится объявление переменных используемых в решении задачи и вызывание формы Form2. Решение самой задачи и построение графика.
В разделе Do- Loop производится ввод формул используемых в решении задачи.
В разделе Private Sub Setka() выполняется построение сетки графика.
Листинг 2.1 Программный код класса Form1
Public Class Form1
Dim intX0, intY0, intKX, intKY, intMsh, intMshX As Integer
Dim strOX, strOY As String
Dim blnMsh, blnSK, blnUkz As Boolean
Dim Holst As Graphics
Dim Kist As Brush
Dim Pero As Pen
Dim Shrift As Font
Процедура обработки события "Загрузка формы Form1"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Text = "моделирование движения тела, брошеного под углом к горизонту"
intX0 = 40
intY0 = PB_Ekran.Height - 40 Положение начала СК по оси Y
intKX = 20
intKY = 20
intMsh = 100
intMshX = 10
strOX = "Х, м"
strOY = "Y, м"
blnMsh = False
blnSK = False
blnUkz = False
Holst = PB_Ekran.CreateGraphics
Kist = New SolidBrush(Color.Black)
Pero = New Pen(Color.Black)
Shrift = New Font("Arial", 8, FontStyle.Bold)
TextBox1.Text = "7"
TextBox2.Text = "150"
TextBox3.Text = "350"
CB_Massht.Text = "100x"
CB_NachaloSK.Text = "Внизу по центру"
End Sub
Процедура обработки события "Выбор элемента комбинир. списка CB_Massht"
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_Massht.SelectedIndexChanged
Dim strMsh As String = CB_Massht.Text
Select Case strMsh
Case Is = "100x"
intMsh = 100
intKX = 30
intKY = 30
Case Is = "200x"
intMsh = 200
intKX = 35
intKY = 35
Case Is = "500x"
intMsh = 500
intKX = 40
intKY = 40
Case Is = "1000x"
intMsh = 1000
intKX = 50
intKY = 50
Case Else
intMsh = 100
End Select
blnMsh = True
End Sub
Процедура обработки события "Выбор элемента комбинир. списка CB_NachaloSK"
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_NachaloSK.SelectedIndexChanged
Dim strSK As String = CB_NachaloSK.Text
Select Case strSK
Case Is = "В левом нижнем углу"
intX0 = 40
intY0 = PB_Ekran.Height - 25
blnUkz = False
Case Is = "В центре экрана"
intX0 = PB_Ekran.Width / 2
intY0 = PB_Ekran.HEight / 2
blnUkz = False
Case Is = "Слева по центру"
intX0 = 40
intY0 = PB_Ekran.Height / 2
blnUkz = False
Case Is = "Внизу по центру"
intX0 = PB_Ekran.Width / 2
intY0 = PB_Ekran.Height - 25
blnUkz = False
Case Is = "задать указателем"
blnUkz = True
Case Else
intX0 = 40
intY0 = PB_Ekran.Height - 25
blnUkz = False
End Select
blnSK = True
End Sub
Решение задачи
Sub Grafic()
Dim dblX As Double = 0
Dim dblY As Double = 300
Dim dblA, dbldt, dblFcx, dblFcy, dblFc, dblB, dblm, dblV, dblg, dblFсоп, dblt, dblVx, dblVy As Double объявление переменных
Dim intx1, intx2, inty1, inty2 As Integer
dblm = Double.Parse(TextBox1.Text)
dblVx = Double.Parse(TextBox2.Text)
dblVy = Double.Parse(TextBox3.Text)
dblg = 9.8
dbldt = 0.01
dblA = 0.1
dblB = 0.001
dblX = 0
dblY = 1000
intx1 = intX0 + dblX * intKX / intMshX
inty1 = intY0 - dblY * intKY / intMsh
Pero.Color = Color.Blue
Form2.Show()
Do
Call Form2.ZapolnTablic(dblt, dblFсоп, dblFcx, dblFcy, dblVx, dblVy, dblX, dblY)
If dblVy <= 0 Then
dblA = 0.5
dblB = 0.005
Pero.Color = Color.Red
End If
dblV = Math.Sqrt(dblVx ^ 2 + dblVy ^ 2)
dblFc = -dblA * dblV - dblB * dblV ^ 3
dblFcx = dblFc * dblVx / dblV
dblFcy = dblFc * dblVy / dblV
dblVx += dblFcx * dbldt / dblm
dblVy += (dblFcy - dblm * dblg) * dbldt / dblm
dblX += dblVx * dbldt
dblY += dblVy * dbldt
intx2 = intX0 + dblX * intKX / intMshX
inty2 = intY0 - dblY * intKY / intMsh
Holst.DrawLine(Pero, intx1, inty1, intx2, inty2)
intx1 = intx2
inty1 = inty2
dblt = dblt + dbldt
Loop Until (dblY <= 0) Or (dblt > 60)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call Setka()
Call Grafic()
End Sub
Процедура построения экранной сетки
Private Sub Setka()
Pero.Width = 1
Pero.DashStyle = Drawing2D.DashStyle.Dot
Pero.Color = Color.Black
If (blnMsh Or blnSK) Then Holst.Clear(Color.White)
Dim intI, intJ As Integer
For intI = intY0 To 0 Step -intKY
Holst.DrawLine(Pero, 0, intI, PB_Ekran.Width, intI)
Next intI
For intI = intY0 To PB_Ekran.Height Step intKY
Holst.DrawLine(Pero, 0, intI, PB_Ekran.Width, intI)
Next intI
For intI = intX0 To PB_Ekran.Width Step intKX
Holst.DrawLine(Pero, intI, 0, intI, PB_Ekran.Height)
Next intI
For intI = intX0 To 0 Step -intKX
Holst.DrawLine(Pero, intI, 0, intI, PB_Ekran.Height)
Next intI
Pero.Width = 3
Pero.DashStyle = Drawing2D.DashStyle.Solid
Holst.DrawLine(Pero, 0, intY0, PB_Ekran.Width, intY0)
Holst.DrawLine(Pero, PB_Ekran.Width - 15, intY0 - 3, PB_Ekran.Width - 3, intY0)
Holst.DrawLine(Pero, PB_Ekran.Width - 15, intY0 + 3, PB_Ekran.Width - 3, intY0)
Holst.DrawString(strOX, Shrift, Kist, PB_Ekran.Width - 30, intY0 - 20)
Holst.DrawLine(Pero, intX0, 0, intX0, PB_Ekran.Height)
Holst.DrawLine(Pero, intX0 - 3, 10, intX0, 0)
Holst.DrawLine(Pero, intX0 + 3, 10, intX0, 0)
Holst.DrawString(strOY, Shrift, Kist, intX0 + 6, 0)
Holst.DrawString("0", Shrift, Kist, intX0 - 10, intY0)
intJ = intMsh
For intI = intX0 + intKX / 2 To PB_Ekran.Width Step intKX
Holst.DrawString(intJ.ToString, Shrift, Brushes.Black, intI, intY0 + 5)
intJ += intMsh
Next intI
intJ = -intMsh
For intI = intX0 - 3 * intKX / 2 To 0 Step -intKX
Holst.DrawString(intJ.ToString, Shrift, Brushes.Black, intI, intY0 + 5)
intJ -= intMsh
Next intI
intJ = intMsh
For intI = intY0 - intKY To 0 Step -intKY
Holst.DrawString(intJ.ToString, Shrift, Brushes.Black, intX0 - 35, intI)
intJ += intMsh
Next intI
intJ = -intMsh
For intI = intY0 + intKY To PB_Ekran.Height Step intKY
Holst.DrawString(intJ.ToString, Shrift, Brushes.Black, intX0 - 35, intI)
intJ -= intMsh
Next intI
blnMsh = False
blnSK = False
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Holst.Clear(Color.White)
End Sub
Private Sub DobavStolb()
DataGridView1.Colums.Add("CO", "N")
Data()
End Sub
Процедура обработки события "Щелчок левой кнопки мыши на PB_Ekran"
Private Sub PB_Ekran_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PB_Ekran.MouseClick
If blnUkz = True Then
intX0 = e.X
intY0 = e.Y
Holst.Clear(Color.White)
Pero.DashStyle = Drawing2D.DashStyle.Solid
Pero.Width = 3
Pero.Color = Color.Black
Holst.DrawLine(Pero, e.X, e.Y, e.X - 15, e.Y)
Holst.DrawLine(Pero, e.X, e.Y, e.X, e.Y + 15)
End If
End Sub
Private Sub ОПрограммеToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОПрограммеToolStripMenuItem.Click
Dim strS As String = "Моделирование движения тела, " + vbCrLf _
+ "Брошенного под углом к горизонту" + vbCrLf _
+ vbCrLf + "Автор: Загвозкин И.А., КузГТУ, ММФ, ТСб-121"
MessageBox.Show(strS, "О программе", MessageBoxButtons.OK)
End Sub
Private Sub ТабличныеДанныеToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ТабличныеДанныеToolStripMenuItem.Click
Form2.Show()
End Sub
Private Sub СтиретьТаблицуToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles СтиретьТаблицуToolStripMenuItem.Click
End Sub
End Class
- Введение
- 1. Разработка математической модели системы
- 1.1 Понятие о кинематике
- 1.2 Относительность движения
- 1.3 Траектория движения
- 1.4 Виды движений
- 1.5 Движение тела, брошенного под углом к горизонту
- 2. Разработка компьютерной программы для моделирования
- 2.1 Описание интерфейса программы Form1
- 2.2 Описание Интерфейса программы Form2
- 2.3 Описание программного кода
- 2.3.1 Описание класса Form1
- 2.3.2 Описание класса Form 2
- 3. Описание и анализ результатов моделирования
- 3.1 Инструкция пользования интерфейсом программы
- 3.2 Математическое решение дополнительной задачи
- Заключение
- Движение заряженной частицы в электрическом поле
- Движение заряженных частиц в магнитном и электрическом полях.
- 2.1.1. Постановка целей и задач построения компьютерной модели движения электрического заряда
- 3.2. Движение заряженных частиц в электрических и магнитных полях
- 2_1. Движение заряженной частицы в электрическом поле
- Движение заряженной частицы в электростатическом поле.
- Движение заряженной частицы в электрическом поле
- 2_1. Движение заряженной частицы в электрическом поле