logo
Разработка и исследование компьютерной модели движения заряженной частицы в электрическом поле

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