Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Задание. Построить график кривой, заданной параметрически: X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t) для интервала t от 0 до 2π
Построить график кривой, заданной параметрически: 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-го варианта Варианты заданий Таблица 29. Варианты заданий лабораторной работы N9
|