- •Лабораторный практикум по информатике для проведения занятий во втором семестре
- •Лабораторная работа №1
- •1.Процедурные и функциональные типы данных.
- •Var p: SwapProc;
- •2. Пример программной реализации функционального типа.
- •X,y : integer;
- •3. Практическая часть
- •3.2. Приближенное интегрирование функций
- •4. Задание.
- •Лабораторная работа №2 Тема занятия: «Модули»
- •1. Назначение модуля и его структура.
- •2. Структура модуля
- •Interface
- •{ Глобальные описания констант, типов, переменных, заголовки процедур и функций}
- •Implementation
- •3. Интерфейсная секция
- •4. Секция инициализации
- •5. Практическая часть
- •Interface
- •Implementation
- •I: Integer;
- •Задание на лабораторную работу
- •Лабораторная работа №3 Тема занятия: «Разработка оконного интерфейса» Задание на лабораторную работу
- •Interface
- •Image2: tImage;
- •Image1: tImage;
- •Image3: tImage;
- •Var Form1: tForm1;
- •Лабораторная работа №4 Тема занятия: «Разработка дополнительной оконной формы для рисования графика функции» Задание на лабораторную работу
- •1.Алгоритм построения графика функции
- •Interface
Лабораторная работа №4 Тема занятия: «Разработка дополнительной оконной формы для рисования графика функции» Задание на лабораторную работу
Требуется дополнить оконный интерфейс, разработанный на лабораторной работе №3, кнопкой вызова окна графики.
Модуль второй оконной формы Unit 7 создаётся, как новое приложение Form
( File New Form).
Вызов второй оконной формы осуществляется посредством дополнительной кнопки Button1 «Вывести график функции?», размещенной на панели главного интерфейса Рис.1.
Процедуру открытия окна графики (кнопка Button1) необходимо дополнить следующими операторами:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form7.Visible:=True;
Form7.Show;
end;
Следует также, в предложении использования Uses в главной форме добавить Unit7(вторая оконная форма), а в Unit7 добавить в предложение использования соответственно Unit2 и Unit3(модули уравнений и методов).
Для рисования графика функции в оконной форме 2 следует создать процеду-ру обработки события OnActivate или OnPaint, используя инспектор объектов, закладку events. После двойного нажатия левой клавиши мышки в окне напротив события OnActivate или OnPaint автоматически создаётся код процедуры с именем TForm7.FormActivate, внутри которой дописываются операторы рисования графика.
На поле окна графика должна быть нанесена масштабная сетка, а оси графика должны быть оцифрованы Рис.2. Выбор функции, выбор метода, выбор диапазона интервала должен осуществляться через соответствующие диалоговые окна и кнопки первой оконной формы Рис.1.
Рис.2
1.Алгоритм построения графика функции
Для построения графика функции необходимо получить набор значений аргумента (массив x) и набор соответствующих значений функции (массив y). Каждой паре таких чисел соответствует точка на графике. Высветив эти точки на экране дисплея, получим совокупность точек — точечный график. Соединив полученные точки отрезками прямых или кривых, будем иметь непрерывную кривую (для непрерывной функции).
Отдельные точки на графике можно соединять, пользуясь различными методами аппроксимации. В данном случае будем пользоваться кусочно-линейной аппроксимацией, при которой отдельные точки графика соединяются отрезками прямых. При малом шаге изменения аргумента кусочно-линейная аппроксимация дает хорошее приближение к форме кривой. Шаг изменения аргумента не следует выбирать слишком малым, так как при отображении на экране две соседние точки могут слиться в одну, что приведёт к лишним вычислениям.
Для отображения точек графика на экране дисплея необходимо перейти от мировой системы координат (MCК), в которой задаются значения аргумента и функции, к системе координат устройства (СКУ) - (экрана), т. е. сопоставить каждой точке в МСК точку в СКУ. Эту операцию называют масштабированием.
Масштаб показывает, какому количеству точек растра на экране соответствует единица физической величины.
Масштабные коэффициенты для координатных осей вычисляются с помощью следующих выражений:
cx = (Xk-Xn)/(Xmax-Xmin); |
(1) |
cy = (Yk-Yn)/(Ymax-Ymin), |
(2) |
Где
cx – масштабный коэффициент по оси абсцисс X;
cy – масштабный коэффициент по оси ординат Y;
Хn, Yn — координаты верхнего левого угла поля вывода графика ( в пикселах);
Xk, Yk — координаты нижнего правого угла поля вывода графика ( в пикселах);
Хmin, Хmax — минимальное и максимальное значения аргумента;
Ymin, Ymax – минимальное и максимальное значения функции.
Для определения положения (позиции) очередной точки графика на экране монитора ( в пикселах) следует воспользоваться следующими формулами:
а) для оси абсцисс
КХ = Е[(X - Хmin) сх] + Хn, |
(3) |
где
КХ — номер позиции (номер пиксела) от левой границы поля вывода графика вдоль оси абсцисс ;
X —текущее значение аргумента функции;
Е — операция округления до ближайшего целого;
б) для оси ординат;
KY= E[(Ymах – Y) су]+ Yn, |
(4) |
где KY — номер позиции (номер пиксела) от верхней границы поля вывода графика вдоль оси ординат.
Соотношение (3) получено из очевидной пропорции: всему диапазону Xmax – Xmin соответствует диапазон экране Xk – Хn. К полученному интервалу координат устройства необходимо прибавить координату точки начала отсчета (Хn), т.е. координату начала поля вывода графика.
Соотношение (4) получено по аналогии с (3), но во внимание принято, что точке начала поля вывода графика с минимальной ординатой соответствует максимальное значение функции.
Таким образом, выражения (3) и (4) позволяют определять координаты точек, соединив которые отрезками прямых можно получить кривую (точнее ломаную линию) графика. Из этих выражений видно, что кроме набора значений аргумента и функции, необходимо знать и их максимальные и минимальные значения.
При Xmin = Хmax в выражении (3) возникает деление на нуль. Такой случай можно рассматривать как некорректные исходные данные (фактически кривая графика отсутствует) или высветить эту единственную точку графика в центре поля вывода.
При Ymin - Ymах в выражении (4) возникает деление а нуль. Это означает, что график функции представляет собой горизонтальную прямую. В этом случае горизонтальную прямую можно провести на любом расстоянии от нижней (верхней) границы поля вывода.
При построении нескольких графиков в одном поле можно их выводить в одном масштабе (по обеим осям или по одной из осей) или в разных масштабах (по одной или по обеим осям) – каждый в своем масштабе.
При построении графиков в своем индивидуальном масштабе следует воспользоваться без изменений выражениями (3) и (4). При построении графиков в общем масштабе необходимо в выражения (1) и (2) вместо Хmах, Xmin, Ymin, Ymах подставить следующие значения:
Xmin = min(Xmin i), |
Xmax = max(Xmax i), |
Ymin = min(Ymin i), |
Ymax = max(Ymax i), |
i = 1, n
где n – количество графиков.
Помимо собственно кривой обычно на поле вывода наносят координатную сетку, представляющую собой вертикальные и горизонтальные линии, проводимые с определенным шагом. Координатные оси оцифровывают, причем числа наносят рядом с каждой линией сетки.
Если ndx и ndy – количество интервалов, на которые разбиваются оси Х и Y соответственно для нанесения сетки, то изменение аргумента (dx) и функции (dy) при переходе на один шаг сетки (в МСК) равно:
dx = (Хmax .-Xmin)/ndx;
dy = (Ymax-Ymin)/ndy.
Те же значения, выраженные в СКУ, равны:
lх = E((Xk - Xn)/ndx),
ly = E((Yk - Yn)/ndy),
где lх — расстояние между вертикальными линиями сетки; ly — расстояние между горизонтальными линиями сетки.
Для определения начальных координат вывода надписей можно воспользоваться следующими выражениями. Абсцисса первого пиксела поля вывода надписи, условного прямоугольника в который можно вписать выводимое число при оцифровке оси абсцисс
Хнад х = xn + lx(i-1)-(n-m)·8+4, |
(5) |
где Хнад х – абсцисса левого пиксела при выводе надписи по оси X;
n – общее количество позиций в записи числа;
m – количество позиций в дробной части числа;
i — номер выводимой надписи.
В этом случае точка в записи числа оказывается напротив линии сетки. Ордината верхнего пиксела(условного прямоугольника) поля вывода записи числа:
Yнад х = Yk + ras_y, |
(6) |
где ras_y — расстояние между концом поля вывода графика и началом вывода надписи (между сторонами условного прямоугольника).
Здесь учитывается, что каждый символ при выводе на экран занимает прямоугольник размером 8х8 точек.
Надписи вдоль оси ординат заходят за левую границы поля вывода графика, поэтому абсциссу начальной точки поля вывода надписи смещают и определяют по выражению
Хнад y = Xn -n x 8 – ras_x, |
(7) |
где ras_x — расстояние между надписью и полем вывода.
Ордината начальной точки поля вывода надписи определяется выражением
Yнад y = Yn + ly x (i - 1) - 4, |
(8) |
где i — номер надписи; 4 — смещение, равное 4 пикселам, введенное для того, чтобы линия сетки оказалась посередине надписи, образа цифры.
Можно самостоятельно не проводить вычисления начальных координат надписей, а использовать процедуры выравнивания текста (центрирование, правое, левое выравнивание и т.д.).
Для перехода от действительной формы представления констант к их строковому представлению используют стандартную процедуру Str.
Модуль второй оконной формы Unit 7 имеет следующий вид:
unit Unit7;
