Пример построения фрагмента графика функции
Исходные данные:
Функция заданна параметрически:
x=t´sin(t)
y=t0.5´cos(t),
Диапазон изменения свободного параметра t: ta £ t£ tb ,
Размеры и местоположение прямоугольного фрагмента экрана (окна), в котором следует разместить график функции (задаются в пикселях):
Lx - ширина (горизонтальный размер окна),
Ly – высота (вертикальный размер окна),
X0, Y0 – координаты верхнего левого угла окна,
График выполняется в виде ломанной линии состоящей из (n-1)–ого отрезка. Цвет графика – красный, линия тонкая. Фон рабочего окна ветло-серый.
Алгоритм (блок-схема) программы.
1. Исходные данные (ta , tb , Lx , Ly , X0, Y0 , n) задаем программно, т.е. путем присваивания соответствующим идентификаторам явных констант.
2. Область задания графика, т.е. интервал изменения свободного параметра ta £ t£ tb покрываем равномерной сеткой точек { ti }, i=1, 2,…n: ti=ta+h(i-1), где h=( tb - ta )/(n-1) –шаг сетки.
3. Для каждого значения параметра ti вычисляем значения xi=ti´sin(ti) и yi=ti0.5´cos(ti) и находим из них минимальные и максимальные Xmin, Xmax, Ymin, Ymax.
4. Вычисляем коэффициенты пересчета физических координат в пиксельные для каждой из декартовых координат kX=Lx/( Xmax- Xmax) и kY=Ly/(Yma- Ymin) и выбираем из них меньший K=min(kX, kY ), который и будем использовать для последующих вычислений. Параметрический способ описания траекторий обычно подразумевает равнозначность обеих пространственных (декартовых) координат (x, y), а значит их масштабирование следует брать одинаковым kX= kY =K=min(kX, kY).
5. Назначаем (инициализируем) графический режим экрана монитора.
6. Рисуем прямоугольник светло-серого цвета, расположение которого полностью совпадает с выделенным для работы окном экрана.
7. Последовательно (в цикле) вычисляем координаты двух соседних точек на траектории, переводим их в пиксельные аналоги и используя стандартную процедуру строим очередной отрезок ломанной линии.
8. Переводим процессор в режим ожидания: команда READLN; ничего не читает, но ожидает нажатия клавиши ENTER.
9. Отключаем графический режим, т.е. переводим экран монитора в алфавитно-цифровой режим отображения информации.
Program N22;
Uses GRAPH; {подключить к программе библиотечный модуль GRAPH.TPU}
Var t, h, ta, tb, x1, x2, y1, y2, Xmin, Xmax, Ymin, Ymax, kx, ky, k: real;
N, I, Lx, Ly, x0, y0, ga, gb, xp1, yp1, xp2, yp2: integer;
Begin
{программное присвоение исходных данных}
ta:=2.3; tb:=16.9;
Lx:=300; Ly:=400; x0:=25; x0:=30;
N:=120;
{вычисление коэффициента пересчета из физических в пиксельные координаты}
h:=(tb-ta)/(n-1);
Xmin:=1e20; Xmax:=-1e20; {изначально задаемся заведомо невозможными
значениями искомых характеристик}
Ymin:=1e20; Ymax:=-1e20;
For i:=1 to n do
begin
t:=ta+h*(i-1); {t-значение параметра в i-ой точке сетки}
x1:=t*sin(t); y1:=sqrt(t)*cos(t);
if Xmin>x1 then Xmin:=x1; if Xmax<x1 then Xmax:=x1;
if Ymin>y1 then Ymin:=y1; if Ymax<y1 then Ymax:=y1;
end;
kx:=Lx/(Xmax-Xmin); ky:=Ly/(Ymax-Ymin);
if kx<ky then k:=kx else k:=ky;
{включаем грфический режим и строим изображения}
Ga:=0; InitGraph(ga, gb,’EGAVGA.BGI’);
SetFillStyle(0, LightGrey); Bar(x0, y0, x0+Lx, y0+Ly); {выделяем окно}
SetColor(red);
For i:=1 to n-1 do
begin
t:=ta+h*(i-1); {t-значение параметра в i-ой точке сетки}
x1:=t*sin(t); y1:=sqrt(t)*cos(t); {физические координаты точки}
xp1:=Round((x1-Xmin)*k); {пиксельные координаты этой же точки}
yp1:=Round((Ymax-y1)*k);
t:=ta+h*i; {t-значение параметра в (i+1)-ой точке сетки}
x2:=t*sin(t); y2:=sqrt(t)*cos(t);
xp2:=Round((x2-Xmin)*k); {пиксельные координаты этой же точки}
yp2:=Round((Ymax-y2)*k);
Line(x0+xp1, y0+yp1, x0+xp2, y0+yp2);
end;
READLN;
CloseGraph;
End.
Результат выполнения
программы:
Дата добавления: 2021-12-14; просмотров: 271;