Здавалка
Главная | Обратная связь

Константы типов и толщины линий

ЛАБОРАТОРНАЯ РАБОТА №_16

Тема: РАЗРАБОТКА АЛГОРИТМОВ И ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ МОДУЛЯ GRAPH.

Цель работы:формирование и отработка практических умений по созданию и использованию модулей; закрепление теоретических знаний по теме.

Техническое обеспечение: ПЭВМ.

Программное обеспечение: ОС Windows, ИСР Turbo Pascal 7.0.

Постановка задачи:Разработать программы для обработки данных с помощью модуля Graph.

ОБЩИЕ СВЕДЕНИЯ

При работе в графическом режиме весь экран разбивается на отдельные точки - "пикселы". Положение пиксела также задается двумя координатами - X и Y. Координата X увеличивается слева направо, а координата Y - сверху вниз. Количество пикселов на экране зависит от типа графического адаптера и для распространённого адаптера VGA составляет 640 х 480.

Подключение библиотеки GRAPH к программе осуществляется с помощью ключевого слова Uses (англ. uses - использует) : Uses Graph;

Библиотека (модуль) Graph содержит константы, процедуры и функции для управления графическим режимом работы монитора.

Чтобы графические объекты могли выводиться на экран, нужно перевести его в графический режим – инициализировать, запустив соответствующий драйвер. Для использования режима 640*480*16 предназначен стандартный драйвер Turbo Pascal, который имеет имя EgaVga.bgi и находится в подкаталоге BGI.

Инициализация графического режима производится вызовом процедуры InitGraph:

InitGraph(номер драйвера,номер режима,путь к файлу драйвера);

Для закрытия графического режима и возврат в предыдущий текстовый режим используется процедура CloseGraph.

Program Grafika; {заголовок программы}

Uses Graph; {подключение модуля Graph}

Var driver, mode:integer;{описание двух целочисленных переменных}

Begin

Driver:=detect;{автоматическое определение типа графического драйвера}

Mode:=0; {для установления режима 640*480*16 используется номер 0}

Initgraph(driver,mode,’’);{инициализация графического режима с установленными параметрами}

………….

Closegraph; {закрытие графического режима и переход в текстовый}

End.

Константы цвета

Цвета, используемые для вывода информации на экран, и соответствующие им константы модуля CRT,

Цвет Номер Константа модуля CRT Цвет Номер Константа модуля CRT
Черный Black Светло-синий LightBlue
Синий Blue Светло-зеленый LightGteen
Зеленый Green Светлый морской волны LightCyan
Морской волны Cyan Светло-красный LightRed
Красный Red Светло-фиолетовый LightMagenta
Фиолетовый Magenta Желтый Yellow
Коричневый Brown Белый White
Светло-серый LightGray      
Темно-серый DarkGray      

 

Константы типов и толщины линий

Стиль линии Номер Константа
Сплошная SolidLn
Точечная DottedLn
Штрих-пунктирная CenterLn
Пунктирная DashedLn
Стиль, заданный пользователем UserBitLn
Толщина линии Номер Константа
Нормальная толщина NormWidth
Тройная толщина ThickWidth

Стандартные стили заливки и соответствующие им констан­ты модуля Graph

Заливка Номер Константа
Сплошная закраска фоновым цветом EmptyFill
Сплошная закраска текущим цветом обводки SolidFill
Полосы горизонтальные LineFill
Полосы наклонные тонкие LtSlashFill
Полосы наклонные толстые SlashFill
Полосы обратные наклонные очень толстые BkSlashFill  
Полосы обратные наклонные чередующиеся (тонкая-толстая-тонкая) б LtBkSlashFill
Сетка прямая HatchFill
Сетка наклонная крупная XHatchFill
Ячейки (частая сетка) InterleaveFill
Точки редкие WideDotFill
Точки частые CloseDotFill
Программно определяемая заливка UserFill

Примеры заливок представлены на рисунке (каждое число выведено с залив­кой соответствующего номера).

Название шрифта Номер шрифта Константа Имя файла
System (Системный растровый) DefaultFont -
Triplex (Тройной) TriplexFont trip.chr
Small (Мелкий) SmallFont litt.chr
Sans Serif SansSerifFont sans.chr
Gothic (Готический) GothicFont goth.chr
Script (Письменный) - scri.chr
Simple (Прямой) - simp.chr
Triplex Script (Тройной наклонный) - tscr.chr
Lcom (Прямой двойной) - Icom.chr
Euro - euro.chr

Предустановленные векторные шрифты и соответствующие им константы модуля Graph

Процедуры

Arc(X, Y: Integer; U1, U2, R: Word)- Строит дугу окружности текущим цветом с текущими параметрами линии. X, Y - координаты центра дуги, U1 - угол до начальной точки дуги, отсчитываемый против часовой стрелки от горизонтальной оси, направленной слева направо, U2 - угол до конечной точки дуги, отсчитываемый так же, как U1, R - радиус дуги.

Bar(X1, Y1, X2, Y2: Integer)- Строит прямоугольник, закрашенный текущим цветом с использованием текущего стиля (орнамента, штриховки). X1, Y1, X2, Y2 - координаты левого верхнего и правого нижнего углов прямоугольника.

Bar3D(X1, Y1, X2, Y2: Integer; Glubina: Word; Top: Boolean)- Строит параллелепипед, используя текущий стиль и цвет. X1, Y1, X2, Y2 - координаты левого верхнего и правого нижнего углов передней грани; Glubina - ширина боковой грани (отсчитывается по горизонтали), Top - признак включения верхней грани (если True - верхняя грань вычерчивается, False - не вычерчивается).

Circle(X, Y: Integer; R: Word)- Рисует текущим цветом окружность радиуса R c центром в точке (X,Y).

ClearDevice - Очищает графический экран, закрашивает его в цвет фона.

ClearViewPort - Очищает выделенное графическое окно, закрашивает его в цвет фона.

CloseGraph - Закрывает графический режим, т.е. освобождает память, распределенную под драйверы графики и файлы шрифтов, и восстанавливает текстовый режим работы экрана.

Ellipse(X, Y: Integer; U1, U2, XR, YR: Word)- Рисует дугу эллипса текущим цветом; X, Y - координаты центра эллипса; U1, U2 - углы до начальной и конечной точек дуги эллипса (см. процедуру Arc); XR, YR - горизонтальная и вертикальная полуоси эллипса.

FillEllipse(X, Y: Integer; XR, YR: Word) - Рисует заштрихованный эллипс, используя X,Y как центр и XR,YR как горизонтальную и вертикальную полуоси эллипса.

FillPoly(N: Word; Var PolyPoints)- Рисует и штрихует многоугольник, содержащий N вершин с координатами в PolyPoints.

InitGraph(Var Driver, Mode: Integer; Path: String)- Организует переход в графический режим. Переменные Driver и Mode содержат тип графического драйвера и его режим работы. Третий параметр определяет маршрут поиска графического драйвера. Если строка пустая (т.е. равна ''), считается, что драйвер находится в текущем каталоге.

Line(X1, Y1, X2, Y2: Integer)- Рисует линию от точки X1, Y1 до точки X2,Y2.

LineTo(X, Y: Integer) - Рисует линию от текущего указателя к точке X,Y.

MoveTo(X, Y: Integer)- Смещает текущий указатель к точке X,Y.

OutTextXY(X, Y: Integer; TextString: String) - Выводит текст в заданное место экрана.

PieSlice(X, Y: Integer; U1, U2, Radius: Word)- Строит сектор круга, закрашенный текущей штриховкой и цветом заполнения. X, Y - координаты центра сектора круга; U1 и U2 - начальный и конечный углы сектора, отсчитываемые против часовой стрелки от горизонтальной оси, направленной вправо; Radius - радиус сектора.

PutPixel(X, Y: Integer; Color: Word)- Выводит точку цветом Color с координатами X, Y.

Rectangle(X1, Y1, X2, Y2)- Рисует контур прямоугольника, используя текущий цвет и тип линии. X1, Y1 - координаты левого верхнего угла прямоугольника,
X2, Y2 - координаты правого нижнего угла прямоугольника.

Sector(X, Y: Integer; U1, U2, XR, YR: Word)- Рисует и штрихует сектор эллипса радиусами XR, YR с центром в X, Y от начального угла U1 к конечному углу U2.

SetBkColor(Соlor: Word)- Устанавливает цвет фона.

SetColor(Соlor: Word)- Устанавливает основной цвет из системной палитры, которым будет осуществляться рисование.

SetRGBPallete(номер цвета, Красная цветовая составляющая, Зеленая цветовая составляющая, Синяя цветовая составляющая) – установка цвета, не входящего в системную палитру. Изменить цветовые составляющие можно только для цветов с номерами 0, 1, 2, 3, 4, 5, 6, 7. Параметры Красная, Зеленая и Синяя цветовая составляющая определяют интенсивность соответствующих составляющих и являются целочисленными константами , имеющие значения от 0 до 63.

SetFillStyle(Pattern, Color: Word)- Устанавливает образец штриховки и цвет.

SetLineStyle(LineStile, Pattern, Thickness: Word)- Устанавливает толщину и стиль линии.

SetTextStyle(Font, Direction, CharSize: Word)- Устанавливает текущий шрифт, направление (горизонтальное или вертикальное) и размер текста.

SetViewPort(X1, Y1, X2, Y2: Integer; ClipOn: Boolean)- Устанавливает прямоугольное окно на графическом экране. Параметр ClipOn определяет "отсечку" элементов изображения, не умещающихся в окне.

Функции

GetMaxX и GetMaxY- Возвращает значения максимальных координат экрана в текущем режиме работы, соответственно, по горизонтали и вертикали.

GraphResult - Возвращает значение GrOk, соответствующее коду 0, если все графические операции программы выполнились без ошибок, или возвращает числовой код ошибки (от -1 до -14).

InstallUserFont(имя файла с bgi-шрифтом) – функция подключения нестандартного шрифта к программе, возвращающая номер шрифта, по которому подключенный шрифт можно использовать. Имя файла указывается без расширения, при этом расширение должно быть chr. Сам файл должен находится в текущем каталоге программы, как и все остальные шрифты.

Задача 1. Программа демонстрирует получение эффекта движения изображения прицела под управлением клавишей-стрелок клавиатуры с выводом координат центра прицела.

Program Sight;

Uses Crt, Graph; {подключение к программе

библиотек Crt и Graph}

Const Step = 5; {шаг изменения координат центра прицела }

Instr = 'УПРАВЛЕНИЕ ДВИЖЕНИЕМ ПРИЦЕЛА - СТРЕЛКИ, ВЫХОД - ESC';

Var

GrDriver, GrMode : Integer; {тип и режим работы графического драйвера}

X, Y : Integer; {координаты центра прицела}

XStr, YStr : String;

Ch : Char;

{-----------------------------------------------------------}

Procedure MakeSight(X, Y : Integer); {процедура рисования прицела}

Begin SetColor(White);

Circle(X, Y, 80);

SetColor(LightGreen);

Line(X-80, Y, X+80, Y); Line(X, Y-63, X, Y+63); {вывод осей прицела}

SetColor(LightRed); Circle(X, Y, 2); {окружность в центре прицела}

Str(X, XStr); Str(Y, YStr); {перевод координат в строковый тип}

SetColor(Yellow);

OutTextXY(X+5, Y-35, 'x=' + XStr); {вывод координат центра прицела }

OutTextXY(X+5, Y-20, 'y=' + YStr)

End;

{-----------------------------------------------------------}

BEGIN

GrDriver := Detect;

InitGraph(GrDriver, GrMode, 'C:\TP\BGI');

SetColor(LightGray);

X := GetMaxX div 2; Y := GetMaxY div 2; {координаты центра экрана}

Rectangle(50, 425, 600, 460); {рисование рамки }

OutTextXY(120, 440, Instr);

MakeSight(X, Y); {рисование прицела в центре экрана}

While TRUE do {цикл работы программы до прерывания по клавише ESC}

begin

Ch := ReadKey;

Case Ch of

#27: begin CloseGraph; Halt(1) end; {выход по клавише ESC}

#75: X: = X-Step; {изменение координат x, y нажатием стрелок}

#77: X: = X+Step; {"влево", "вправо", "вверх", "вниз" }

#72: Y: = Y-Step;

#80: Y: = Y+Step

end;

ClearViewPort; { очистка графического экрана }

SetColor(LightGray); {восстановление рамки с надписью}

Rectangle(50, 425, 600, 460);

OutTextXY(120, 440, Instr);

MakeSight(X, Y) {рисование прицела в текущих координатах}

end; CloseGraph;

END.

Program Sight;

Uses Crt, Graph; {подключение к программе


библиотек Crt и Graph}

Const Step = 5; {шаг изменения координат центра прицела }

Instr = 'УПРАВЛЕНИЕ ДВИЖЕНИЕМ ПРИЦЕЛА - СТРЕЛКИ, ВЫХОД - ESC';

Var

GrDriver, GrMode : Integer; {тип и режим работы графического драйвера}

X, Y : Integer; {координаты центра прицела}

XStr, YStr : String;

Ch : Char;

{-----------------------------------------------------------}

Procedure MakeSight(X, Y : Integer); {процедура рисования прицела}

Begin SetColor(White);

Circle(X, Y, 80);

SetColor(LightGreen);

Line(X-80, Y, X+80, Y); Line(X, Y-63, X, Y+63); {вывод осей прицела}

SetColor(LightRed); Circle(X, Y, 2); {окружность в центре прицела}

Str(X, XStr); Str(Y, YStr); {перевод координат в строковый тип}

SetColor(Yellow);

OutTextXY(X+5, Y-35, 'x=' + XStr); {вывод координат центра прицела }

OutTextXY(X+5, Y-20, 'y=' + YStr)

End;

{-----------------------------------------------------------}

BEGIN

GrDriver := Detect;

InitGraph(GrDriver, GrMode, 'C:\TP\BGI');

SetColor(LightGray);

X := GetMaxX div 2; Y := GetMaxY div 2; {координаты центра экрана}

Rectangle(50, 425, 600, 460); {рисование рамки }

OutTextXY(120, 440, Instr);

MakeSight(X, Y); {рисование прицела в центре экрана}

While TRUE do {цикл работы программы до прерывания по клавише ESC}

begin

Ch := ReadKey;

Case Ch of

#27: begin CloseGraph; Halt(1) end; {выход по клавише ESC}

#75: X: = X-Step; {изменение координат x, y нажатием стрелок}

#77: X: = X+Step; {"влево", "вправо", "вверх", "вниз" }

#72: Y: = Y-Step;

#80: Y: = Y+Step

end;

ClearViewPort; { очистка графического экрана }

SetColor(LightGray); {восстановление рамки с надписью}

Rectangle(50, 425, 600, 460);

OutTextXY(120, 440, Instr);

MakeSight(X, Y) {рисование прицела в текущих координатах}

end; CloseGraph;

END.

ЗАДАНИЯ ДЛЯ ВЫПОЛНЕНИЯ:

ЗАДАНИЕ 1.

1. Нарисовать на экране разноцветные прямоугольники, круги, квадраты, линии и точки случайным образом появляющиеся на экране. Размеры фигур должны быть также разные. Вывести на экране ваши фамилии и имя разными шрифтами и цветами.

ЗАДАНИЕ 2.

1. Составить программу, которая выводит на экран следующие рисунки.

 

ЗАДАНИЕ 3.

1. С использованием оператора цикла нарисовать на экране 12 одинаковых заполненных различными стандартными орнаментами фигур ( в 3 ряда по 4 фигуры). По нажатию клавиши должен меняться вариант фигуры: 1.1 Прямоугольник, 2.1 Эллипс, 1.2 Параллелепипед, 2.2 Круг.

Выполнить задание с использованием процедур рисования фигур без автоматического заполнения, а затем заполнить их.

2. Нарисовать 5 вложенных прямоугольников с увеличением размера на 20 пикселов в каждом направлении. Стиль заполнения для каждой фигуры определить буквами Вашего имени.

3. Нарисовать 5 соосных кругов разного цвета с уменьшением радиуса на 10 пикселов. Стиль заполнения для каждого круга определить его номером, т. е. цифрами 1, 2, 3, 4, 5.

 

Контрольные вопросы:

  1. Что такое модуль? Для каких целей предназначен модуль Graph?
  2. Перечислите основные процедуры рисования геометрических модуля Graph.
  3. Перечислите основные процедуры работы с текстом?
  4. Опишите принципы построения заполненных фигур.
  5. Как изменить цвет выводимых символов?

Отчет содержит: Тему, цели, коды (фрагменты) программ, выводы. Отчет сдать преподавателю.





©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.