Константы типов и толщины линий
ЛАБОРАТОРНАЯ РАБОТА №_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,
Константы типов и толщины линий
Стандартные стили заливки и соответствующие им константы модуля Graph
Примеры заливок представлены на рисунке (каждое число выведено с заливкой соответствующего номера).
Предустановленные векторные шрифты и соответствующие им константы модуля 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 - координаты левого верхнего угла прямоугольника, 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; {подключение к программе
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.
Контрольные вопросы:
Отчет содержит: Тему, цели, коды (фрагменты) программ, выводы. Отчет сдать преподавателю. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|