Начало » Конспекты школьника » Часть 2 » [Учимся программировать!][Моделирование физических процессов]
Учимся программировать!
Конспекты школьника.
www.klyaksa.net
Моделирование физических процессов.
На этом занятии займемся исследование физических моделей.
Рассмотрим процесс решения задачи на конкретном примере:
Тело брошено с некоторой высоты с начальной скоростью, направленной под углом
к горизонту. Определить угол при котором дальность полета будет максимальной.
На первом этапе обычно строится описательная информационная модель объекта
или процесса. В нашем случае с использованием физических понятий создается
идеализированная модель движения объекта. Из условия задачи можно сформулировать
следующие основные предположения:
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 |
Caption |
Движение тела |
Frame |
Caption |
Начальные данные: |
Frame |
Caption |
Масштаб: |
Label (надпись) |
Caption |
Высота (м): |
Label (надпись) |
Caption |
Скорость (м/с): |
Label (надпись) |
Caption |
Угол (град): |
Label (надпись) |
Caption |
Макс. дальность достигается при угле: |
Label (надпись) |
Caption |
Максимальная дальность: |
Label (надпись) |
Caption |
Минимальное значение X: |
Label (надпись) |
Caption |
Минимальное значение Y: |
Label (надпись) |
Caption |
Максимальное значение X: |
Label (надпись) |
Caption |
Максимальное значение Y: |
Текстовое поле |
имя |
txtH0 |
Text |
0 |
Текстовое поле |
имя |
txtV0 |
Text |
0 |
Текстовое поле |
имя |
txtA0 |
Text |
0 |
Текстовое поле |
имя |
txtMinX |
Text |
(пустая строка) |
Текстовое поле |
имя |
txtMaxX |
Text |
(пустая строка) |
Текстовое поле |
имя |
txtMinY |
Text |
(пустая строка) |
Текстовое поле |
имя |
txtMaxY |
Text |
(пустая строка) |
Кнопка |
имя |
cmdCalculate |
Caption |
Вычислить угол |
Кнопка |
имя |
cmdPaint |
Caption |
Построить график |
Кнопка |
имя |
cmdClear |
Caption |
Очистить |
Кнопка |
имя |
cmdNewScale |
Caption |
Задать масштаб |
Графическом поле (PictureBox) |
имя |
picGrafic |
Appearance |
0-плоская |
AutoRedraw |
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
Все. Приложение готово.
Четвертый этап исследования информационной модели состоит в проведении
компьютерного эксперимента. Если компьютерная модель существует в виде программы
на одном из языков программирования, ее нужно запустить на выполнение и получить
результаты. Если компьютерная модель исследуется в приложении, например в
электронных таблицах, можно провести сортировку или поиск данных, построить
диаграмму или график и т. д.
На пятом этапе выполняется анализ полученных результатов и при необходимости
корректировка исследуемой модели. Например, в нашей модели необходимо учесть,
что не имеет физического смысла вычисление координаты тела после его падения на
поверхность Земли.
Таким образом, технология решения задач с помощью компьютера состоит из
следующих этапов: построение описательной модели — формализация — построение
компьютерной модели — компьютерный эксперимент — анализ результатов и
корректировка модели.
предыдущий урок
:: содержание :: следующий
урок
|