Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум. Информатика.doc
Скачиваний:
11
Добавлен:
06.11.2018
Размер:
2.13 Mб
Скачать

Разбор контрольного варианта № 32 Задание

Построить график кривой, заданной параметрически: X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t) для интервала t от 0 до 2π, нанести на график размеченные оси координат и сделать подпись.

Дополнительные требования: график изобразить тонкой сплошной линией красного цвета на белом фоне, координатные оси (толстая линия) и разметка (тонкая линия) – черного (темно-серого) цвета, подпись – синего цвета под графиком посередине.

Программу составить для EGA и VGA адаптеров (универсальную). Драйвер графического адаптера (с именем EGAVGA.BGI) находится в каталоге D:\TP6\BGI.

Условия, принятые из соображений дизайна:

График будет занимать 60% ширины и высоты экрана. Разметку проводим через 0.5 по Х и Y. График рисуем процедурой LineTo, для 400 точек.

Program Graph_work2;

{ Программа Лабораторной работы N 8

Вариант N 32.

Построение кривой, заданной параметрически.

А.Я.Умненькая, ст. гр. Я-007 }

Uses Graph,Crt; { Print - только при наличии принтера для печати графика с экрана на бумагу }

TYPE

mas=array[0..400] of real;

Var

X,y:mas; { текущие значения переменных х и y }

Xmin,Xmax,t,tmin,tmax, { минимальное и максимальное значения х на графике }

Ymin,Ymax, { минимальное и максимальное значения Y на графике }

DeltaX,DeltaY, { диапазоны изменения X и Y в пределах рисунка }

Dt,R, { шаг построения графика по t }

Xj,Yi,

Dxs,Dys, { Шаги разметки осей по Х и по Y }

Part,Pole, { Доля экрана, занятая рисунком и доля чистого поля с каждой стороны }

Mx,My {Коэффициенты пересчета Х в J и Y в I}

: real;

Imin,Imax, { координаты экрана, соответствующие Ymin и Ymax }

Jmin,Jmax, { координаты экрана, соответствующие Xmin и Xmax }

J,I,N,k, { текущие значения переменных координат экрана }

JAll,IAll, {Максимальные размеры экрана (в пикселях) по X и Y}

J0,I0, {Координаты на экране точки пересечения осей графика }

DeltaJ,DeltaI { Экранные размеры рисунка по Х и Y в пикселях}

: integer;

Riska : String[5]; { Строка для вывода чисел у рисок осей }

GraphDrv, { Тип графического драйвера }

GraphMode: integer;{ Устанавливаемый графический режим }

Code: word; { Код завершения инициализации графики }

BEGIN { Начало программы }

{1.Задание констант, стандартных значений }

tmin:=0; tmax:=2.0*Pi;

Dxs:=0.5; Dys:=0.5;

Part:=0.6; N:=401;

{4.Расчет характеристик функций }

Dt:=(tmax-tmin)/(N-1);

Xmax:=-100;

Xmin:=100;

Ymax:=-100;

Ymin:=100;

For k:=0 to N-1 do

begin

t:=tmin+Dt*k;

R:=2.0+0.5*cos(8.0*t);

X[k]:=R*cos(t);

Y[k]:=R*sin(t);

if X[k]>Xmax then Xmax:=X[k];

if X[k]<Xmin then Xmin:=X[k];

if Y[k]>Ymax then Ymax:=Y[k];

if Y[k]<Ymin then Ymin:=Y[k];

end;

DeltaX:=Xmax-Xmin;

DeltaY:=Ymax-Ymin;

{5.Открытие графики с проверкой правильности срабатывания}

GraphDrv:=0; {пусть определяет режим сам }

InitGraph(GraphDrv,GraphMode,'C:\voronov\STUD\TP\BGI');

Code:=GraphResult;

if Code<>0 then {если завершение с кодом не 0 - закончить программу}

Begin

writeln('Ошибка открытия графики с кодом: ',Code);

Halt; { Останов программы }

End;

{6.Настройка фона}

SetBkColor(15); {Фон белый }

ClearDevice; {Очистка экрана}

{7.Расчет параметров графика на экране}

JAll:=GetMaxX;

IAll:=GetMaxY;

Pole:=(1.0-Part)/2.0;

Jmin:=Round(Pole*JAll);

Jmax:=Round((1.0-Pole)*JAll);

Imin:=Round((1.0-Pole)*IAll);

Imax:=Round(Pole*IAll); { Imin > Imax !!! }

DeltaJ:=Jmax-Jmin;

DeltaI:=Imax-Imin;

{8.Расчет масштабных коэффициентов перехода от X к J и от Y к I}

Mx:=DeltaJ/DeltaX;

My:=DeltaI/DeltaY;

{9.Построение графика функции}

{9.1.Задание характеристик линии}

SetColor(4); { цвет красный }

SetLineStyle(0,0,2);

{9.2.Начальная точка графика}

J:=Jmin+Round((X[0]-Xmin)*Mx);

I:=Imin+Round((Y[0]-Ymin)*My);

MoveTo (J,I);

{9.3.Цикл расчета экранных координат графика (X->J, Y->I) и проведения отрезков}

for k:=1 to N-1 do

Begin

J:=Jmin+Round((X[k]-Xmin)*Mx);

I:=Imin+Round((Y[k]-Ymin)*My);

LineTo(J,I);

End;

{10.Построение осей координат }

SetColor(8); { цвет темно-серый }

SetLineStyle(0,0,3); { сплошная толстая }

J0:=Jmin+Round((0-Xmin)*Mx);

I0:=Imin+Round((0-Ymin)*My);

Line(J0,Imin,J0,Imax); {Построение оси Y (где X=0)}

Line(Jmin,I0,Jmax,I0); {Построение оси Х (где Y=0)}

{11.Разметка осей}

SetLineStyle(0,0,0); { сплошная тонкая }

SetTextStyle(0,0,0); { шрифт стандартный, подпись горизонтальна }

SetTextJustify(1,2); {Размещение текста симметрично, относительно заданной

точки по горизонтали и ниже точки по вертикали}

J:=J0;

Xj:=0;

while J<=Jmax+1 do {от начала координат - вправо }

begin

Line(J,Imin,J,Imax);

Str(Xj:3:1,Riska);

OutTextXY(J,I0+5,Riska);

Xj:=Xj+Dxs;

J:=Jmin+Round((Xj-Xmin)*Mx);

end;

J:=J0;

Xj:=0;

while J>=Jmin do {от начала координат - влево }

begin

Line(J,Imin,J,Imax);

Str(Xj:3:1,Riska);

OutTextXY(J,I0+5,Riska);

Xj:=Xj-Dxs;

J:=Jmin+Round((Xj-Xmin)*Mx);

end;

SetTextJustify(2,1); {Размещение текста симметрично, относительно заданной

точки по вертикали и левее точки по горизонтали }

I:=I0;

Yi:=0;

while I>=Imax-1 do {от начала координат - вверх }

begin

Line(Jmin,I,Jmax,I);

Str(Yi:3:1,Riska);

OutTextXY(J0-10,I,Riska);

Yi:=Yi+Dxs;

I:=Imin+Round((Yi-Ymin)*My);

end;

I:=I0;

Yi:=0;

while I<=Imin do {от начала координат - вниз }

begin

Line(Jmin,I,Jmax,I);

Str(Yi:3:1,Riska);

OutTextXY(J0-10,I,Riska);

Yi:=Yi-Dxs;

I:=Imin+Round((Yi-Ymin)*My);

end;

{12.Подпись графика}

SetColor(1); { цвет синий }

SetTextJustify(1,1); {Размещение текста симметрично, относительно заданной

точки по горизонтали и по вертикали}

I:=Round(IAll*(1-Pole/2)); {середина нижнего поля}

OutTextXY(JAll div 2,I,'X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t)');

{13.Задержка графика на экране }

while Not KeyPressed do;

{14. Вывод графика на печать (на принтер) - только если он подключен }

{Pr;}

{14.Закрытие графического режима }

CloseGraph;

END.

Рисунок 11. Результат работы программы 32-го варианта