Моделирование физических процессов.
Рассмотрим процесс решения задачи на конкретном примере:
Тело брошено с некоторой высоты с начальной скоростью, направленной под углом к горизонту.
Определить угол при котором дальность полета будет максимальной.
На первом этапе обычно строится описательная информационная модель объекта или процесса.
В нашем случае с использованием физических понятий создается идеализированная модель
движения объекта. Из условия задачи можно сформулировать следующие основные
предположения:
1) тело мало по сравнению с Землей, поэтому его можно считать материальной точкой;
2) скорость бросания тела мала, поэтому:
— ускорение свободного падения считать постоянной величиной;
— сопротивлением воздуха можно пренебречь.
На втором этапе создается формализованная модель, т. е. описательная информационная модель
записывается с помощью какого-либо формального языка.
Из курса физики известно, что описанное выше движение является равноускоренным. При
заданных начальной скорости (v0), начальной высоте (h0), угле бросания зависимость дальности
полета (L) можно описать следующими математическими формулами:
Зависимость координат от времени:
отсюда:
Получаем квадратное уравнение:
Решаем это уравнение:
Дальность полета найдем по формуле:
На третьем этапе необходимо формализованную информационную модель преобразовать в
компьютерную на понятном для компьютера языке. Существуют два принципиально различных
пути построения компьютерной модели:


создание алгоритма решения задачи и его кодирование на одном из языков
программирования;
формирование компьютерной модели с использованием одного из приложений
(электронных таблиц, СУБД и т. д.).
Для реализации первого пути надо построить алгоритм и закодировать его на одном из языков
программирования, например на языке Visual Basic.
В программе используются две константы:
Const PI = 3.14159265
Const g = 9.8
Дальность полета, если известны начальные данные, можно определить так:
D = (2 * v0 * Sin(a * (PI / 180))) ^ 2 + 4 * g * 2 * h0
t1 = (2 * v0 * Sin(a * (PI / 180)) + Sqr(D)) / (2 * g)
t2 = (2 * v0 * Sin(a * (PI / 180)) - Sqr(D)) / (2 * g)
Корень t2 не удовлетворяет нашей задаче. Значит время полета - это t1.
L = v0 * Cos(a * (PI / 180)) * t1
Определить искомый угол можно используя следующий алгоритм:
aa = 0 'искомый угол
maxL = 0 'максимальная дальность полета
For a = 0 To 90
D = (2 * v0 * Sin(a * (PI / 180))) ^ 2 + 4 * g * 2 * h0
t1 = (2 * v0 * Sin(a * (PI / 180)) + Sqr(D)) / (2 * g)
L = v0 * Cos(a * (PI / 180)) * t1
If L >= maxL Then
maxL = L
aa = a
End If
Next
Теперь создадим проект, позволяющий не только определить искомый угол, но и построить
график движения тела.
Создайте новый стандартный проект и разместите на форме все необходимые компоненты,
установите их свойства.
Объект
Форма
Свойство
имя
frmFlight
Значение
Frame
Frame
Label (надпись)
Label (надпись)
Label (надпись)
Label (надпись)
Label (надпись)
Label (надпись)
Label (надпись)
Label (надпись)
Label (надпись)
Текстовое поле
Текстовое поле
Текстовое поле
Текстовое поле
Текстовое поле
Текстовое поле
Текстовое поле
Кнопка
Кнопка
Кнопка
Кнопка
Графическом поле (PictureBox)
Caption
Caption
Caption
Caption
Caption
Caption
Caption
Caption
Caption
Caption
Caption
Caption
имя
Text
имя
Text
имя
Text
имя
Text
имя
Text
имя
Text
имя
Text
имя
Caption
имя
Caption
имя
Caption
имя
Caption
имя
Appearance
AutoRedraw
Движение тела
Начальные данные:
Масштаб:
Высота (м):
Скорость (м/с):
Угол (град):
Макс. дальность достигается при угле:
Максимальная дальность:
Минимальное значение X:
Минимальное значение Y:
Максимальное значение X:
Максимальное значение Y:
txtH0
0
txtV0
0
txtA0
0
txtMinX
(пустая строка)
txtMaxX
(пустая строка)
txtMinY
(пустая строка)
txtMaxY
(пустая строка)
cmdCalculate
Вычислить угол
cmdPaint
Построить график
cmdClear
Очистить
cmdNewScale
Задать масштаб
picGrafic
0-плоская
true
Напишем код проекта.
В разделе "General" опишем некоторые переменные и константы:
Dim v0, h0, D, a, L As Double
Dim XMin, YMin, YMax, XMax As Integer
Const PI = 3.14159265
Const g = 9.8
Координатную сетку нарисуем так же как на предыдущем занятии.
Dim v0, h0, D, a, L As Double
Dim XMin, YMin, YMax, XMax As Integer
Const PI = 3.14159265
Const g = 9.8
Private Sub cmdNewScale_Click()
XMin = txtMinX
YMin = txtMinY
XMax = txtMaxX
YMax = txtMaxY
picGrafic.Cls
SetScale
End Sub
Private Sub Form_Load()
XMin = -1
YMin = -1
YMax = 10
XMax = 10
txtMinX = XMin
txtMinY = YMin
txtMaxX = XMax
txtMaxY = YMax
SetScale
End Sub
Private Sub SetScale()
picGrafic.Scale (XMin, YMax)-(XMax, YMin)
'координатная сетка
For x = XMin To XMax
picGrafic.Line (x, YMax)-(x, YMin), RGB(240, 240, 240)
Next x
For y = YMin To YMax
picGrafic.Line (XMin, y)-(XMax, y), RGB(240, 240, 240)
Next y
'оси координат
picGrafic.Line (0, YMin)-(0, YMax), RGB(150, 150, 150)
picGrafic.Line (XMin, 0)-(XMax, 0), RGB(150, 150, 150)
'подпись осей
picGrafic.ForeColor = RGB(150, 150, 150)
For x = XMix To XMax 'Step Int((XMax - XMin) / 5)
picGrafic.CurrentX = x
picGrafic.CurrentY = 0
picGrafic.Print x
Next x
For y = YMix To YMax 'Step Int((YMax - YMin) / 5)
picGrafic.CurrentX = 0
picGrafic.CurrentY = y
picGrafic.Print y
Next y
picGrafic.ForeColor = RGB(100, 0, 0)
picGrafic.CurrentX = XMax - picGrafic.TextWidth("X, м")
picGrafic.CurrentY = 0 - picGrafic.TextHeight("X, м")
picGrafic.Print "X, м"
picGrafic.CurrentX = 0 - picGrafic.TextWidth("Y, м")
picGrafic.CurrentY = YMax
picGrafic.Print "Y, м"
End Sub
Вычисление угла и дальности полета проведем по рассмотренным выше формулам.
Private Sub cmdCalculate_Click()
h0 = Val(txtH0)
v0 = Val(txtV0)
aa = 0 'искомый угол
maxL = 0 'максимальная дальность полета
For a = 0 To 90
D = (2 * v0 * Sin(a * (PI / 180))) ^ 2 + 4 * g * 2 * h0
t1 = (2 * v0 * Sin(a * (PI / 180)) + Sqr(D)) / (2 * g)
L = v0 * Cos(a * (PI / 180)) * t1
If L >= maxL Then
maxL = L
aa = a
End If
Next
lblResultA.Caption = aa
lblResultL.Caption = maxL
End Sub
Напишем код рисования графика движения тела.
Private Sub cmdPaint_Click()
h0 = Val(txtH0)
v0 = Val(txtV0)
a = Val(txtA0)
D = (2 * v0 * Sin(a * (PI / 180))) ^ 2 + 4 * g * 2 * h0
t1 = (2 * v0 * Sin(a * (PI / 180)) + Sqr(D)) / (2 * g)
For t = 0 To t1 Step 0.001
x = v0 * Cos(a * (PI / 180)) * t
y = h0 + v0 * Sin(a * (PI / 180)) * t - g * t * t / 2
picGrafic.PSet (x, y), RGB(0, 0, 200)
Next t
End Sub
Private Sub cmdClear_Click()
picGrafic.Cls
SetScale
End Sub
Все. Приложение готово.
Четвертый этап исследования информационной модели состоит в проведении компьютерного
эксперимента. Если компьютерная модель существует в виде программы на одном из языков
программирования, ее нужно запустить на выполнение и получить результаты. Если
компьютерная модель исследуется в приложении, например в электронных таблицах, можно
провести сортировку или поиск данных, построить диаграмму или график и т. д.
На пятом этапе выполняется анализ полученных результатов и при необходимости
корректировка исследуемой модели. Например, в нашей модели необходимо учесть, что не имеет
физического смысла вычисление координаты тела после его падения на поверхность Земли.
Таким образом, технология решения задач с помощью компьютера состоит из следующих этапов:
построение описательной модели — формализация — построение компьютерной модели —
компьютерный эксперимент — анализ результатов и корректировка модели.
http://www.klyaksa.net/