Порядок выполнения работы
Алгоритмические языки и программирование
Работа со стандартным графическим модулем
Методические указания
к выполнению лабораторной работы №8
для студентов очной формы обучения
специальности 230201 – "Информационные системы
и технологии"
Брянск 2007
УДК 004.43
Алгоритмические языки и программирование. Работа со стандартным графическим модулем: методические указания к выполнению лабораторной работы №8 для студентов очной формы обучения специальности 230201 – "Информационные системы и технологии". – Брянск: БГТУ, 2007. – 12 с.
Разработали: С.М. Рощин, к.т.н., доц.
Ю.А. Леонов, асс.
Научный редактор Ю.М. Казаков
Редактор издательства Л.И. Афонина
Компьютерный набор С.М. Рощин
Рекомендовано кафедрой «Компьютерные технологии и системы» БГТУ (протокол № от )
Темплан 2007г., п. 462
Подписано в печать Формат 60х84 1/16. Бумага офсетная.
Офсетная печать.
Усл. печ. л. 0,7 Уч. – изд. л. 0,7 Тираж 50 экз. Заказ Бесплатно
|
Издательство брянского государственного технического университета, 241035, Брянск, бульвар 50-летия Октября, 7, БГТУ. 58-82-49
Лаборатория оперативной полиграфии БГТУ, ул. Харьковская, 9
ЦЕЛЬ РАБОТЫ
Целью работы является изучение основных процедур и функций стандартного графического модуля Graph, а также овладение навыками перевода координат из декартовой системы в полярную систему.
Продолжительность работы – 4ч.
Теоретическая часть
Отображение информации в графическом режиме
После запуска среды программирования Borland Pascal 7.0 инициализируется текстовый режим. Для того чтобы использовать графические средства, предусмотренные в языке Pascal, программист должен определенным образом инициализировать режим работы графического адаптера. В графическом режиме работой графического адаптера управляет графический драйвер. Для всех существующих типов адаптеров фирма Borland разработала графические драйверы (они имеют расширение *.bgi и находятся на диске в одноименном подкаталоге).
Любая информация при работе в графическом режиме на экране монитора представлена совокупностью светящихся точек – пикселей, которые определяются цветом, и координатами – положением относительно левого верхнего угла экрана с координатами (0,0).
Графический адаптер может работать в нескольких графических режимах, каждому из которых соответствует свой формат изображения, т. е. разрешающая способность (количество пикселей по горизонтали и вертикали) экрана и набор используемых цветов. Для стандартного графического режима VGA разрешающая способность экрана равна 640x480 точек (ширина х высота), количество цветов – 16.
Инициализация графического режима
Необходимые процедуры и функции для работы с графикой собраны в стандартном модуле Graph.
Инициализация графики производится с помощью процедуры InitGraph, которая имеет вид:
InitGraph(драйвер, режим, путь);
Драйвер – переменная целого типа, определяющая тип драйвера. Процедура загружает драйвер в оперативную память и переводит адаптер в графический режим работы. Тип драйвера должен соответствовать типу графического адаптера. Для указания типа драйвера в модуле предопределены следующие константы: Detect, CGA, EGA, VGA и др.
Режим – переменная целого типа, задающая режим работы графического адаптера. Многие адаптеры могут работать в нескольких режимах. Если переменной драйвер присвоено значение Detect, процедура InitGraph сама определит необходимый драйвер и подберет наилучший режим (т.е. задавать номер режима в данном случае не требуется).
Путь – путь к каталогу, в котором находится файл драйвера графического режима. Если путь неуказан, то файл драйвера ищется в текущем каталоге (каталог, в котором находится исполняемый файл). Для графического режима VGA, являющегося режимом по умолчанию для большинства систем, стандартным драйвером является файл egavga.bgi, который находится в каталоге BGI корневого каталога среды программирования.
Пример процедуры инициализации графического режима:
Procedure Init;
Var
GrDriver, GrMode: Integer;
Begin
GrDriver:=Detect;
InitGraph(GrDriver, GrMode, ‘’);
If (GraphResult<>GrOk) Then begin
Writeln(‘При переходе в графический возникла ошибка’, GraphErrorMsg(GraphResult));
Halt(1);
End;
End;
GraphResult – функция, находящаяся в модуле Graph. Возвращает код ошибки последней графической операции.
GrOk – константа, значение которой возвращается функцией GraphResult при успешном выполнении последней графической операции.
GraphErrorMsg (код_ошибки) – функция, которая возвращает строку с полным названием ошибки по её коду.
После окончания работы с графикой необходимо закрыть графический режим. Делается это с помощью процедуры CloseGraph();
Подпрограммы графического режима
Представим список основных процедур и функций модуля Graph.
Procedure PutPixel(X, Y: Integer; Pixel: Word);
Рисует точку с координатами X, Y с определенным цветом Pixel.
Procedure Rectangle(X1, Y1, X2, Y2: Integer);
Рисует прямоугольник, который задается координатами двух точек, образующих углы прямоугольника по диагонали.
Procedure Bar(X1, Y1, X2, Y2: Integer);
Рисует закрашенный прямоугольник, который задается координатами двух точек, образующих углы прямоугольника по диагонали.
Procedure Circle(X, Y: Integer; Radius: Word);
Рисует окружность с центром в координатах X, Y и радиусом Radius.
Procedure Arc (X, Y; Integer; StAngle, EndAngle, Radius; Word);
Рисует дугу окружности. Центр окружности – X,Y, радиус – Radius, начальный и конечный углы дуги – StAngle, EndAngle.
Procedure Ellipse(X, Y: Integer; StAngle, EndAngle: Word; XRadius, YRadius: Word);
Рисует эллипс с центром X, Y. StAngle, EndAngle начальный и конечный углы эллипса соответственно. XRadius, YRadius – радиусы эллипса в соответствующих направлениях.
Procedure Line(X1, Y1, X2, Y2: Integer);
Рисует линию от точки с координатами X1, Y1 в точку X2, Y2.
Procedure LineTo(X, Y: Integer);
Рисует линию от текущей точки в точку с координатами X, Y.
Procedure MoveTo(X, Y: Integer);
Устанавливает текущую позицию точки, но не изображает ее.
Function GetPixel(X, Y: Integer): Word;
Получение текущего цвета точки X, Y экрана.
Function GetX: Integer;
Получение значения координаты X.
Function GetY: Integer;
Получение значения координаты Y.
Function GetMaxX: integer;
Функция, возвращающая максимальный X для установленного графического режима.
Function GetMaxY: integer;
Функция, возвращающая максимальный Y для установленного графического режима.
Procedure ClearDevice;
Очистка экрана.
Procedure SetColor(Color: Word);
Устанавливает текущий цвет пера.
Procedure SetBkColor(ColorNum: Word);
Устанавливает цвет заднего фона.
Procedure FloodFill(X, Y: Integer; Border: Word);
Заливка замкнутого контура выбранным типом и цветом. Точка с координатами X, Y должна находиться внутри контура. Border – цвет границы контура.
Procedure SetFillStyle(Pattern: Word; Color: Word);
Установка нового шаблона и цвета заполнения.
Procedure OutText(TextString: string);
Вывод текста в текущую позицию на экране.
Procedure OutTextXY(X,Y: Integer; TextString: string);
Вывод текста в позицию X,Y на экране.
Для задания цвета можно использовать как слово на английском языке (стандартную константу), так и цифру из табл. 1.
Таблица 1
Основные цвета
Константа
| Цвет
| Код
| Black
| черный
|
| Blue
| синий
|
| Green
| зеленый
|
| Cyan
| бирюзовый
|
| Red
| красный
|
| Magenta
| малиновый
|
| Brown
| коричневый
|
| LightGray
| светло-серый
|
| White
| белый
|
|
Примеры
Пример 1. Изображение на экране прямоугольного треугольника с вершинами (320,10), (120,210), (520,210).
PROGRAM Primer_1;
Uses Graph; {Подключение стандартного графического модуля}
Var
Gd, {Переменная графического драйвера}
Gm: Integer; {Переменная графического режима}
BEGIN
Gd:=Detect; {Графический драйвер: VGA}
InitGraph(Gd, Gm,''); {Инициализация графического режима.}
{В апострофы '' помещается путь к файлу EGAVGA.BGI}
If GraphResult=grOk Then {Если графический режим включился успешно, то нарисовать отрезки прямых}
Begin
Line(120,210,520,210); {Горизонтальный отрезок}
Line(120,210,320,10); {Левый катет треугольника}
Line(320,10,520,210); {Правый катет треугольника}
ReadLn;
CloseGraph;
End;
END.
Пример 2. Изображение разноцветных лучей одинаковой длины.
PROGRAM Primer_2;
Uses Graph;
Const CenterX=320; CenterY=240; Radius=200;
Var
Gd,Gm: Integer;
i : Integer; dx,dy: Integer;
BEGIN
Gd:=VGA;
Gm:=VGAHi;
InitGraph(Gd,Gm,'');
If GraphResult=grOk Then
Begin
for i:=0 to 160 do
begin
dx:=Round(Radius*Sin(i*PI/80));
dy:=Round(Radius*Cos(i*PI/80));
SetColor(i MOD 16);
Line(CenterX, CenterY, CenterX+dx, CenterY+dy)
end;
ReadLn;
CloseGraph;
End;
END.
Пример 3. Построение графика функции, заданного функцией Func.
PROGRAM Primer_3;
Uses Graph;
Var
x, y, a, b, h: Real;
x0, y0, xg, yg,
xmax, ymax, mx, my,
grd, grm: Integer;
{ ----------------------------------------------------- }
Function Func(x: Real): Real;
Begin
Func:=x*Sin(x/12+4)/2;
End;
{ ----------------------------------------------------- }
BEGIN
x0:=60;
y0:=300; {Координаты центра}
mx:=2;
my:=1; {Масштабные коэффициенты по x и y}
a:=0; b:=200; h:=0.1; {Область задания функции по x и шаг}
grd:=Detect;
InitGraph(grd, grm, '');
If GraphResult=grOk Then
Begin
SetColor(15);
xmax:=GetMaxx;
ymax:=GetMaxy;
Line(10, y0, xmax-100, y0); {Ось OX}
Line(x0, 10, x0, ymax-100); {Ось OY}
x:=a;
While x<=b Do
Begin
xg:=x0+Trunc(mx*x);
yg:=y0-Trunc(my*Func(x));
If (xg>=0) AND (xg<=xmax) AND (yg>=0) AND (yg<=ymax) then PutPixel(xg, yg, 10);
x:=x+h;
End;
ReadLn;
CloseGraph;
End;
END.
2.5. Перевод координат из декартовой координатной системы в полярную и наоборот
Как видно из рисунков 1 и 2, точка М в декартовой системе координат задается двумя координатами: абсциссой и ординатой, а в полярной системе координат – радиус-вектором и углом j. Формулы перевода значений из одной системы в другую:
из декартовой системы в полярную
из полярной системы в декартовую
Порядок выполнения работы
Работа выполняется студентом самостоятельно и состоит из этапов:
1) изучение методических указаний по выполнению лабораторной работы и получение индивидуального задания;
2) составление алгоритма и программы на алгоритмическом языке Pascal;
3) составление контрольного примера;
4) отладка программы;
5) защита лабораторной работы.
Конечным результатом выполнения лабораторной работы является работоспособная программа. Текст программы представляется в электронном виде и должен включать постановку задачи, сведения об авторе и подробные комментарии.
После выполнения лабораторной работы преподаватель проверяет качество оформления текста и правильность функционирования программы. Все используемые обозначения должны быть расшифрованы.
Текст программы должен включать подробные комментарии, поясняющие назначения процедур, их параметры, использование переменных, смысл и особенности реализации отдельных программных блоков.
Список заданий
Для выполнения данной работы необходимо написать программу в среде Borland Pascal 7.0, которая вычерчивает математическую кривую с помощью графических функций, доступных в модуле Graph. Функция кривой дана в полярной системе координат F(r, j).
Программа состоит из следующих шагов:
1. Инициализация графического режима.
2. Организация цикла, в котором при изменении угла j вычисляется значение радиус-вектора r по предложенной функции.
3. Внутри цикла производится перевод полярной координаты в декартову (координату экрана).
4. Также в цикле рисуется точка, полученная по данной формуле, затем она соединяется с предыдущей точкой.
5. Вычерчивание асимптот и осей координат.
6. Выход из графического режима.
Варианты заданий указаны в табл. 2.
Таблица 2
№ варианта
|
|
|
|
| | Функция
|
|
|
|
| | № варианта
|
|
|
|
| Функция
|
|
|
|
| № варианта
|
|
|
|
| Функция
|
|
|
|
| № варианта
|
|
|
|
| Функция
|
|
|
|
| № варианта
|
|
|
|
| Функция
|
|
|
|
| № варианта
|
|
|
|
| Функция
|
|
|
|
| № варианта
|
|
|
|
| Функция
|
|
|
|
| № варианта
|
|
| | Функция
|
|
| | | | | | | | | 5. Контрольные вопросы
1. Что значит инициализировать графический режим? Что для этого нужно сделать?
2. Что значит присвоить переменной типа драйвера значение Detect? Как в этом случае будет происходить инициализация графики?
3. Где находятся стандартные графические функции и процедуры? Что нужно сделать, чтобы ими воспользоваться?
4. Какие есть графические процедуры вывода текста на экран?
5. С помощью какой процедуры можно поменять цвет рисования линии?
6. Какие параметры нужно задать, чтобы нарисовать прямоугольник?
7. Как перейти из полярной системы координат в декартовую?
Список рекомендуемой литературы
1. Немнюгин, С.А. Turbo Pascal: программирование на языке высокого уровня / С.А. Немнюгин. – 2-е изд. – СПб.: Питер, 2006. – 544с.
2. Немнюгин, С.А. Turbo Pascal: практикум / С.А. Немнюгин. – 2-е изд. – СПб.: Питер, 2006. – 272с.
3. Фаронов, В.В. TurboPascal: учебное пособие / В.В. Фаронов. – М.: Изд.: ОМД Групп, 2007. – 368с.
4. Иванова, Г.С. Основы программирования: учебник для вузов / Г.С. Иванова. – 3-е изд., испр. – М.: МГТУ им. Н.Э. Баумана, 2004. – 416с.
5. Марченко, А.И. Программирование в среде Turbo Pascal 7.0. / А.И. Марченко, Л.А. Марченко. – М.: Бином Универсал, К.: ЮНИОР, 1997. – 496с.
6. Культин, Н.Б. Turbo Pascal в задачах и примерах / Н.Б. Культин. – СПб.: БХВ-Петербург, 2007. – 256с.
7. Коффман, Э.М. Turbo Pascal / Э.М. Коффман. – 5-е изд. – М.: Вильямс, 2005. – 896с.
8. Рапаков Г.Г. Программирование на языке Pascal: учебное пособие / Г.Г. Рапаков, С.Ю. Ржеуцкая – СПб.: БХВ-Петербург, 2004. – 480с.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|