Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_лекций.doc
Скачиваний:
18
Добавлен:
26.04.2019
Размер:
1.11 Mб
Скачать

11.4. Пример построения фрагмента графика функции

Исходные данные:

Функция заданна параметрически:

x=tsin(t)

y=t0.5cos(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=tisin(ti) и yi=ti0.5cos(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.

Р езультат выполнения

программы: