Моделирование физических процессов. Рассмотрим процесс решения задачи на конкретном примере: Тело брошено с некоторой высоты с начальной скоростью, направленной под углом к горизонту. Определить угол при котором дальность полета будет максимальной. На первом этапе обычно строится описательная информационная модель объекта или процесса. В нашем случае с использованием физических понятий создается идеализированная модель движения объекта. Из условия задачи можно сформулировать следующие основные предположения: 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/