Моделирование физических задач в среде Visual Basic

Разделы: Информатика


Описание

1. Движение тела, брошенного горизонтально

Законы движения

Траектории параболы

Движение тела, брошенного под углом к горизонту Законы движения

Траектории параболы

Продолжение описания

Свободное падение тел

Законы движения

Движение по наклонной плоскости

Законы движения

Колебания маятника

Законы движения

Продолжение описания

Полное внутреннее отражение

Закономерности

Колебательный контур

Закономерности

Движение тела, брошенного горизонтально

Private Sub Command1_Click()

Открыть три файла, в которых даны высоты и скорости

Open "g1.txt" For Input As 1

Open "g2.txt" For Input As 2

Open "g3.txt" For Input As 3

В цикле считать из файлов высоты скорость и вывести их в List

For i = 1 To 3

Input #i, h, v0

List1.AddItem h

list2.AddItem v0

Вычислить время и дальность полёта и вывести их в List

t0 = Sqr(2 * h / 9.81)

t0 = Int(t0 * 10) / 10

s = v0 * t0

List3.AddItem t0

List4.AddItem s

Установить в графическом окне масштаб и провести линию горизонта

p1.Scale (0, 400)-(400, 0)

p1.Line (0, 1)-(400, 1), vbRed

В цикле нарисовать траектории движений

For t = 0 To t0 Step 0.001

x = v0 * t

y = h - 9.81 * t ^ 2 / 2

p1.PSet (x, y), vbGreen

Next

Отметить траектории движений

p1.PSet (10, h)

p1.Print i

Next

End Sub

Движение тела, брошенного под углом к горизонту

Private Sub Расчёт_Click()

Открыть три файла, в которых даны скорости и углы

Open "1.txt" For Input As 1

Open "2.txt" For Input As 2

Open "3.txt" For Input As 3

В цикле считать из файлов скорость и угол и вывести их в List

For i = 1 To 3

Input #i, v0, A

List1.AddItem v0

List2.AddItem A

Перевести угол в радианную меру, рассчитать дальность полёта, наибольшую высоту и время полёта. Дальность и наибольшую высоту вывести в List

A = A * 3.14 / 180

S = v0 ^ 2 * Sin(2 * A) / 9.81

\

S = Int(S * 10) / 10

h = v0 ^ 2 * (Sin(A)) ^ 2 / (2 * 9.81)

h = Int(h * 10) / 10

t0 = S / (v0 * Cos(A))

List3.AddItem S

List4.AddItem h

Установить в графическом окне масштаб и нарисовать линию горизонта

P1.Scale (0, 100)-(170, 0)

P1.Line (0, 10)-(170, 10)

В цикле нарисовать траектории движений

For t = 0 To t0 Step 0.001

x = 10 + v0 * Cos(A) * t

y = 10 + v0 * Sin(A) * t - 9.81 * t ^ 2 / 2

P1.PSet (x, y), vbRed

Next

Отметить траектории движений

P1.PSet (85, 10 + h)

P1.Print i

Next

End Sub

Свободное падение тел

Private Sub Command1_Click()

Присвоить значение высоте и вывести ее в окно Text

h = 500

Text1.Text = h

Рассчитать время падения и скорость при падении на землю и вывести их в окна Text

g = 9.8

t0 = Sqr(2 * h / g)

t0 = Int(t0 * 10) / 10

Text2.Text = t0

v = g * t0

v = Int(v * 10) / 10

Text3.Text = v

Установить в графическом окне масштаб, провести линию падения

P1.Scale (0, 0)-(200, 600)

P1.Line (20, 10)-(20, 10 + h), vbRed

P1.Circle (25, 10), 5, vbRed

For q = 0 To 100000000

Next

Отметить положение тела через 1 с

For t = 0 To t0 Step 1

x = 25

y = 10 + g * t ^ 2 / 2

P1.Circle (x, y), 5, vbRed

P1.Print t

For q = 0 To 100000000

Next

P1.Circle (x, y), 5, &H8000000F

Вычислить пути, проходимые в каждую секунду и вывести их в List

a1 = g * (t + 1) ^ 2 / 2

a2 = g * t ^ 2 / 2

a = a1 - a2

List1.AddItem a

Найти отношение путей, пройденных за 1 сек, и вывести их в List

a3 = g / 2

b = a / a3

List2.AddItem b

Next

P1.Circle (25, 10 + h), 5, vbRed

End Sub

Движение по наклонной плоскости

Private Sub Command1_Click()

Ввод с клавиатуры высоты и коэффициента трения и вывод их в окна Text

h = Val(InputBox("Введите высоту наклонной плоскости"))

k = Val(InputBox("Введите коэффициент трения"))

Text1.Text = h

Text2.Text = k

Присваивание значения угла и вычисление основания и длины наклонной плоскости

f = 30

f = f * 3.14 / 180

b = h / Tan(f)

l = h / Sin(f)

Условие, при котором тело движется по наклонной плоскости с ускореним

If k < Tan(f) Then

Вычисление ускорения, времени движения и конечной скорости и вывод их в окна Text и

a = 9.81 * (Sin(f) - k * Cos(f))

a = Int(a * 10) / 10

Text3.Text = a

t0 = Sqr(2 * l / a)

t0 = Int(t0 * 10) / 10

Text4.Text = t0

v = a * t0

v = Int(v * 10) / 10

Text5.Text = v

Установление масштаба в графическом окне и изображение наклонной плоскости

P1.Scale (0, 0)-(100, 100)

P1.Line (10, 20 + h)-(10 + b, 20 + h), vbRed

P1.Line (10, 20 + h)-(10, 20), vbGreen

P1.Line (10 + b, 20 + h)-(10, 20), vbRed

P1.Circle (14, 16), 5, vbRed

For q = 0 To 10000000

Next

Движение по наклонной плоскости

For t = 0 To t0 Step 1

x = 10 + a * Cos(f) * t ^ 2 / 2

y = 20 + (x - 10) * h / b

P1.Circle (x + 4, y - 4), 5, vbRed

For q = 0 To 100000000

Next

P1.Circle (x + 4, y - 4), 5, &H8000000F

Next

P1.Circle (10 + b, 14 + h), 5, vbRed

Else

P1.Line (10, 20 + h)-(10 + b, 20 + h), vbRed

P1.Line (10, 20 + h)-(10, 20), vbGreen

P1.Line (10 + b, 20 + h)-(10, 20), vbCyan

P1.Circle (14, 16), 5, vbRed

End If

End Sub

Колебания маятника

Private Sub Пуск_Click()

P1.Scale (0, 600)-(600, 0)

l = 400

t = 1

For k = 1 To 2

Движение маятника влево

For f = -3.14 / 6 To 3.14 / 6 Step 0.00005

P1.FillStyle = 0

P1.FillColor = vbRed

x = 300 + l * Sin(f)

y = 500 - l * Cos(f)

P1.Line (300, 500)-(x, y), vbRed

P1.Circle (x, y), 10, vbRed

P1.Line (300, 500)-(x, y), &H8000000F

P1.Circle (x, y), 10, &H8000000F

Построение графика

X1 = 100 + 200 * (t * f / 3.14 + t * f)

Y1 = 500 + 100 * Sin(X1 / 10)

Y4 = 500 + 50 * Sin(X1 / 10 + 3.14)

P1.PSet (X1, Y1), vbRed

P1.PSet (X1, Y4), &HFF0000

Next

t = t + 1

Движение маятника вправо

For f1 = 3.14 / 6 To -3.14 / 6 Step -0.00005

x = 300 + l * Sin(f1)

y = 500 - l * Cos(f1)

P1.Line (300, 500)-(x, y), vbRed

P1.Circle (x, y), 10, vbRed

P1.Line (300, 500)-(x, y), &H8000000F

P1.Circle (x, y), 10, &H8000000F

Построение графика

X2 = 100 * t + 200 * (-t * f1 / 3.14 - t * f1)

Y2 = 500 + 100 * Sin(X2 / 10)

Y3 = 500 + 50 * Sin(X2 / 10 + 3.14)

P1.PSet (X2, Y2), vbRed

P1.PSet (X2, Y3), &HFF0000

Next

t = t + 1

P1.Line (0, 500)-(600, 500)

P1.FillStyle = 0

P1.FillColor = &H8000000F

P1.Circle (x, y), 10, &H8000000F

Next

End Sub

Полное внутреннее отражение

Private Sub Command1_Click()

Установление масштаба и присваивание значений координат и показателя преломлеия

p1.Scale (0, 400)-(400, 0)

X1 = 50

Y1 = 375

X2 = 200

Y2 = 249

x3 = 55

y3 = 101

n = 1.33

Вычерчивание сосуда

p1.Line (50, 300)-(50, 100)

p1.Line (50, 100)-(350, 100)

p1.Line (350, 100)-(350, 300)

Заполнение жидкостью

p1.Line (51, 249)-(349, 101), &HFFFFC0, BF

p1.FillStyle = 0

p1.FillColor = vbGreen

Точка, куда падает луч

p1.Circle (X2, Y2), 4

p1.Print "O"

Присваивание начального угла падения

a = 30

Цикл для изменения угла падения

For t = 1 To 15

Цикл для построения падающего луча по уравнению прямой

For x = X1 To 349

If x <= X2 Then

f = 3.14 * a / 180

s = Sin(f)

c = Cos(f)

k = c / s

y = (x - X2) * k + Y2

p1.PSet (x, y), vbRed

End If Условие для отражения луча

If x > X2 Then

y = (x - X2) * -k + Y2

p1.PSet (x, y), vbRed

Условие для полного отражения

If s > 1 / n Then

p1.PSet (x, y), vbGreen

End If

s1 = s * n

Условие для преломления луча

If s < 1 / n Then

c1 = Sqr(1 - s1 ^ 2)

Колебательный контур

Конденсатор заряжается

Private Sub Command1_Click()

OLE1.CreateLink "d:\llv\модели\контур\контур\контур1.doc"

End Sub

Заряженный конденсатор

Private Sub инф_Click()

OLE1.CreateLink "d:\llv\модели\контур\контур\контур.doc"

End Sub

Разрядка конденсатора на индуктивность (Э-м колебаия)

Private Sub пуск_Click()

P1.Scale (0, 400)-(400, 0)

P1.Line (0, 200)-(400, 200)

a = 100

k = 0

k1 = 400 / 6.28

For f = 0 To 10 * 6.28 Step 0.0001

x = 200 + (a - k) * Sin(f)

k = k + 0.0001

P1.PSet (f * k1 / 10, x)

Next

OLE1.CreateLink "d:\llv\модели\контур\контур\контур2.doc"

End Sub

Приложение 1

Приложение 2

Приложение 3

Приложение 4

Приложение 5

Приложение 6

Приложение 7

Литература:

  1. Н. Угринович “Информатика и информационные технологии”
  2. Тим Андерсен “Visual Basic Шаг за шагом”
  3. Информатика в школе № 3 за 2005 год
  4. Маркус Линке “Visual Basic 5 Справочник”