Построить график кривой, заданной параметрически: X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t) для интервала t от 0 до 2π, нанести на график размеченные оси координат и сделать подпись.
Дополнительные требования: график изобразить тонкой сплошной линией красного цвета на белом фоне, координатные оси (толстая линия) и разметка (тонкая линия) – черного (темно-серого) цвета, подпись – синего цвета под графиком посередине.
Программу составить для EGA и VGA адаптеров (универсальную). Драйвер графического адаптера (с именем EGAVGA.BGI) находится в каталоге C:\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-го варианта
Варианты заданий
Таблица 29. Варианты заданий лабораторной работы N9
N вар | Функция или параметрическое уравнение | Аргумент и его диапазон | Цвет | |
текста/ фона | графика/ осей координат | |||
Парабола Y=1.3*X2-1.8 | X [-1.2, 1.2] | голубой белый | зеленый голубой | |
Окружность X=0.5+2*cos(t) Y=0.2+2*sin(t) | t [0, 2p] | красный темно-серый | светло-красный коричневый | |
Степенная функция Y=X3-2* X2+X | X [-1, 3] | розовый темно-серый | светло-зеленый светло-серый | |
Эллипс x=3*cos(t), y=15*sin(t) | t [0, 2p] | синий светло-серый | светло-синий темно-серый | |
Конхоида Никомеда X=A+B*cos(f) Y=A*tg(f)+B*sin(f) | f [1.5, 4.5] A=1, B=2 | светло-красный темно-серый | светло-зеленый красный | |
Кардиоида X=4*cos(t)*(1+cos(t)) Y=4*sin(t)*(1+cos (t)) | t [0, 2p] | розовый красный | синий розовый | |
Дробно-рациональная функция Y=(1.5*X+3)/(X-2) | X [-4.2,1.9] | светло-серый розовый | голубой желтый | |
Декартов лист X=3*A*t/(1+t3) Y=3*A*t*t/(1+t3) | t [-0.5,10] A=2 | синий белый | светло-синий светло-зеленый | |
Функция синус Y=2.5*sin(X)+0.5 | X [-2p, 2p] | белый зеленый | желтый коричневый | |
Циссоида X=5*t2/(1+t2), Y=5*t3/(1- t2), t=tg(f) | f [-p/4, p/4] | розовый черный | зеленый белый | |
Тригонометрическая функция Y=сos(X2) | X [-2p, 2p] | светло-зеленый светло-синий | белый розовый | |
Строфоида X=4*(t2-1)/(t2+1), Y=4*t*(t2-1)/(t2+1) t=tg(f) | f [-p/2.5, p/2.5] | темно-серый голубой | белый желтый | |
Тригонометрическая функция Y=tg(X)-2*X | X [-p/2.5, p/2.5] | зеленый синий | фиолетовый черный | |
Астроида X=3.5*cos3(t), Y=3.5*sin3(t) | t [0, 2p] | голубой белый | светло-зеленый зеленый | |
Арксинус Y=arcsin(0.5*X) | X [-2, 2] | темно-серый голубой | светло-зеленый зеленый | |
Эпициклоида X=(a+b)cos(t)-a*cos((a+b)*t/a), Y=(a+b)sin(t)-a*sin((a+b)*t/a) | t [0, 2p] a=6, b=9 | розовый фиолетовый | голубой синий | |
Логарифм Y=ln(X+2) | X [-1.5, 5] | зеленый красный | желтый светло-зеленый | |
Гипоциклоида X=2a*cos(f)+a*cos(2f) Y=2a*sin(f)-a*sin(2f) | f [-p, p] a=1 | белый розовый | темно-серый голубой | |
Арктангенс Y=3*arctg(X) | X [-5, 5] | светло-зеленый голубой | синий светло-синий | |
Эвольвента окружности X=a*cos(f)+a*f*sin(f) Y=a*sin(f)-a*f*cos(f) | f [-9p, 9p] a=1.5 | зеленый синий | голубой черный | |
Дробно-рациональная нелинейная функция Y = A + B/X + C/X2 | X [0.18, 3] A=1, B=2, C=-0.5 | темно-серый белый | фиолетовый красный | |
Леминиската X=r*cos(f) Y=r*sin(f) r=a*sqrt(2*cos(2f)) | f [-p, p] | светло-зеленый фиолетовый | синий белый | |
Локон Аньези Y=A3/(X2 + A2) | X [-5, 5] A=2 | зеленый белый | темно-серый светло-зеленый | |
Архимедова спираль X=r*cos(f) Y=r*sin(f) r=A*f | f [-6p, 6p] A=1.5 | розовый желтый | синий светло-красный | |
Трохоида(удлинненая циклоида) X=A*(f-B*sin(f)) Y=A*(1-B*cos(f)) | f [-2p, 4p] A=1.5, B=1.3 | темно-серый белый | светло-красный фиолетовый | |
Гиперболическая спираль X=(A*cos(f))/f Y=(A*sin(f))/f | f [0.1, 10] A=3 | фиолетовый зеленый | светло-зеленый розовый | |
Удлиненная эпициклоида X=5*cos(f)-2*cos(5f) Y=5*sin(f)-2*sin(5f) | f [-p, p] | светло-серый синий | светло-синий красный | |
Логарифмическая спираль X=r*cos(f) Y=r*sin(f) r=A*exp(B*f) | f [0, 4] A=1.3, B=0.5 | светло-зеленый синий | белый зеленый | |
Удлиненная гипоциклоида X=4*cos(f)+2*cos(4f) Y=4*sin(f)-2*sin(4f) | f [0, 2p] | темно-серый белый | синий зеленый | |
Улитка Паскаля X=2cos2(t)+3cos(t), Y=2*cos(t)sin(t)+3sin t | t [0, 2p] | коричневый желтый | зеленый синий | |
Показательная функция Y=exp(X2) | X [-1,2] | белый красный | красный темно-серый | |
X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t) | t [0 до 2π] | синий белый | красный темно-серый |
|
|