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


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

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

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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.