Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка(Абб).docx
Скачиваний:
90
Добавлен:
09.11.2019
Размер:
505.32 Кб
Скачать

Лабораторная работа №3 Построение графических моделей физических процессов в среде Lazarus Краткие теоретические сведения

Построение графиков функций в среде Lazarus. Для построения графических изображений имеется свойство формы Canvas (канва, холст) и его подсвойство Pen (перо). Перо в свою очередь обдадает свойствами Color (цвет) и Width (толщина). Размеры формы определяются свойствами Height (высота) и Width (ширина). Для перемещения из текущего положения в точку (X,Y) служит метод MoveTo(X,Y), для рисования отрезков- LineTo(X,Y), для вывода текста на холст-, TextOut(X,Y,’текст’)

Алгоритм построения графика функции Y=Y(x), где x изменяется на отрезке [a,b] с шагом h

  1. Расчет расположения графика на форме

  • Отступы от краев формы по горизонтали Hor и вертикали Ver

  • Определение положения начала координат X0=Hor; Y0=Form2.Height-Ver

  • Вычисление масштабов Mx=Form2.width/Xmax; My=Form2.Height/Ymax

  1. Построение координатных осей

  • Горизонтальная MoveTo(X0,Y0); LineTo(Form2.Width-Hor,Y0)

  • Вертикальная MoveTo(X0,Y0); LineTo(X0,Ver)

  1. Преобразование координат из «обычных» в «экранные» X1:=trunc(X*Mx)+X0; Y0:=trunc(Y*My)+Y0

  2. Начальные установки X=a; цвет и толщина пера; помещение пера в начало координат

  3. Цикл построения графика:

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

  • Вычисление Y,

  • Преобразование координат в «экранные»

  • Построение отрезка из текущей точки в точку (X,Y)

  • Увеличение x на шаг

Создание приложения с двумя формами. Вторую форму можно создать, например, выбрав в главном меню File, New, Form. Чтобы осуществить взаимодействие двух форм, необходимо включить модуль второй формы в предложение uses раздела реализации модуля первой формы и модуль первой формы в интерфейсный раздел второй формы:

Unit Unit1;

Interface

Var Form1:TForm1;

Implementation

// ссылка на модуль 2-ой формы

uses Unit2;

Unit Unit2;

Interface

// ссылка на модуль 1-ой формы

uses Unit1;

Var Form2:TForm2;

Implementation

При наступлении определенного события, например, щелчка на кнопке, вторая форма становится видимой и активной, а первая -скрытой:

Procedure Form1Button1Click();

Begin

Form2.Show;

Form1.Hide

End;

Возврат на первую форму происходит при щелчке на кнопке, расположенной на второй форме:

Procedure Form2Button1Click();

Begin

Form1.Show;

Form2.Hide

End;

Пример выполнения задания

Задача. Построить график зависимости скорости от времени для задачи из лабораторной работы №1. Объяснить график. Определить по нему конечное значение скорости.

Мы хотим наблюдать на экране график так, чтобы он занимал всю форму. Поскольку нужно будет еще вводить исходные данные, создадим приложение с двумя формами. На первой форме будут располагаться поля ввода исходных данных, на второй – график. График расположим непосредственно на форме, появляться он будет при наступлении события «Прорисовка формы». Роль аргумента играет время , роль функции – скорость. Поскольку обе величины принимают только неотрицательные значения, расположим начало координат в левом нижнем углу формы. На форме должны быть изображены и подписаны координатные оси.

Текст процедуры- обработчика события OnPaint компонента Form2:

procedure TForm2.FormPaint(Sender: TObject);

var Hor,Ver:integer; // горизонтальный и вертикальный

отступ от краев формы

x0,y0://начало координат

x,y:// текущие координаты точки

Mx,My:real;//горизонтальный и вертикальный масштабы

Begin

// расчет расположения графика на форме

Hor:=10;Ver:=15; x0:=Hor; y0:=Form2.Height-Ver;

Mx:=Form2.Width/16;// ширину формы делим на tmax My:=Form2.Height/63;// высоту формы- на Vmax

with Canvas do begin

Pen.Color:=clBlack; Pen.Width:=2

//горизонтальная ось

MoveTo(X0,Y0);LineTo(Form2.Width-Hor,Y0); TextOut(Form2.Width-Hor,Y0-2,'t');

//вертикальная ось

MoveTo(X0,Y0);LineTo(X0,Ver); TextOut(X0-5,Ver,'v');

//начальные значения

v:=0;t:=0;h:=h0; c:=0.40;S:=pi*r*r;

//коэффициенты силы сопротивления

k1:=6*pi*mu*r; k2:=0.5*S*c*ro;

Pen.Color:=clRed; // цвет пера - красный

MoveTo(x0,y0); // перо- в начало координат

//цикл построения графика до раскрытия парашюта

repeat

h:=h-v*dt;

v:=v+(m*g-k1+v-k2*v*v)/m*dt; // изменение t,h и v

t:=t+dt ;

X:=trunc(t*Mx)+X0;y:=trunc(-v*My)+Y0;//перевод координат

в экранные

LineTo(x,y); //построение очередной точки графика

until h<h1 ;

c:=0.55; S1:=pi*r1*r1; // при раскрытии парашюта меняются

k1:=6*pi*mu*r1; // форма тела, его радиус, площадь

k2:=0.5*S1*c*ro; // и коэффициенты силы сопротивления

//цикл построения графика с момента раскрытия парашюта до приземления

repeat

h:=h-v*dt;v:=v+(m*g-k1+v-k2*v*v)/m*dt;

t:=t+dt ;

X:=trunc(t*Mx)+X0;y:=trunc(-v*My)+Y0;

LineTo(x,y);

until h<0 ;

end;

end;

На рис.4 результат – график изменения скорости парашютиста для исходных данных, введенных на первой форме (рис.3)

Рис 3. Ввод исходных данных на первой форме

Рис 4. График зависимости скорости от времени на второй форме