- •Порядок выполнения работы
- •Задание на расчетно-графическую работу
- •Задание для вариантов 1-11
- •Задание для вариантов 12-20
- •Задание для вариантов 21-40
- •Пример исходных данных для вариантов 12-16
- •Задание для вариантов 41-60
- •Необходимая информация
- •Общая характеристика базовых графических средств языка Pascal.
- •Инициализация графического режима.
- •Вариант 1:
- •Вариант 2:
- •Вывод основных графических примитивов.
- •Задание области вывода
- •Работа с графикой на языке C и модуль graphics.h
- •Типы видео мониторов и их режимы
- •Инициализация графики
- •Система координат
- •Основные графические функции
- •Функции рисования
- •Функции изменения параметров рисования
- •Шаблоны линий
- •Шаблоны закраски
- •Варианты индивидуальных заданий
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Вариант 16
- •Вариант 17
- •Вариант 18
- •Вариант 19
- •Вариант 20
- •Вариант 21
- •Вариант 22
- •Вариант 23
- •Вариант 24
- •Вариант 25
- •Вариант 26
- •Вариант 27
- •Вариант 28
- •Вариант 29
- •Вариант 30
- •Вариант 31
- •Вариант 32
- •Вариант33
- •Вариант 34
- •Вариант 35
- •Вариант 36
- •Вариант 37
- •Вариант 38
- •Вариант 39
- •Вариант 40
- •Вариант 41
- •Вариант 42
- •Вариант 43
- •Вариант 44
- •Вариант 45
- •Вариант 46
- •Вариант 47
- •Вариант 48
- •Вариант 49
- •Вариант 50
- •Вариант 51
- •Вариант 52
- •Вариант 53
- •Вариант 54
- •Вариант 55
- •Вариант 56
- •Вариант 57
- •Вариант 58
- •Вариант 59
- •Вариант 60
- •Введение
- •1. Постановка задачи
- •2. Теоретические сведения
- •2.1 Используемые алгоритмы
- •2.2 Работа с графикой на языке Pascal (С)
- •3 Реализация программы
- •Заключение
- •Список литературы
- •Приложение. Листинг программы.
Detect = 0.
Константа Detect используется для указания необходимости автоматического распознавания, имеющегося в наличии графического адаптера.
После задания драйвера для указания соответствующего режима можно воспользоваться следующими константами:
EgaHi = 1 - экран 640 на 350 точек с 16 цветами VgaHi = 2 - экран 640 на 480 точек с 16 цветами
Инициализация графического режима производится вызовом процедуры
InitGraph (var GrDr:integer; PathDr: string), где параметры переменные GrDr и GrMod определяют используемый драйвер и режим, а параметр PathDr определяет путь к графическому драйверу в соответствии с правилами MS/DOS. В простейшем случае параметр PathDr можно задать как пустую строку, что соответствует ситуации, когда графический драйвер находится в текущем каталоге. Теперь можно привести два варианта инициализации графического режима - с явным и автоматическим заданием драйвера и режима:
Вариант 1:
var GrDr,GrMod: integer;
begin
GrDr:=Vga; {используется драйвер VGA}
GrMod:=VgaHi;
InitGraph(GrDr,GrMod,’’);
Вариант 2:
var GrDr,GrMod: integer;
begin
GrDr:= Detect; {требуется автоопределение}
InitGraph(GrDr,GrMod,’’);
7
Для завершения работы в графическом режиме надо вызвать процедуру CloseGraph, которая выгружает драйвер и восстанавливает исходное состояние экрана.
Вывод основных графических примитивов.
Любое сложное изображение, в конечном счете, составляется из набора нескольких простейших геометрических элементов, называемых примитивами. Система Турбо Паскаль предлагает следующий набор графических примитивов: точка, отрезок, окружность, дуга, дуга эллипса, прямоугольник, круговой сектор, сектор эллипса, многоугольник, текст.
Каждый из этих примитивов на экране может выглядеть различным образом, в соответствии со своими атрибутами. Основными атрибутами для всех примитивов, кроме текста, являются: цвет, тип линии, толщина линии, шаблон заполнения области (там, где эта операция имеет смысл).
Установка цвета вывода примитива производится процедурой
− SetColor(цвет: integer),
где 0<=цвет<=15 и цветовая палитра совпадает с текстовым режимом. Установка цвета фона производится процедурой
− SetBkColor(цвет: integer).
Установка типа и толщины линии - процедурой
− SetLineStyle(тип_линии, образец, толщина: integer).
Для задания типа линии предусмотрены следующие константы: SolidLn=0 - непрерывная линия;
DottedLn=1 - точечная линия; CenterLn=2 - штрихпунктирная линия; DoshedLn=3 - пунктирная линия;
UserBitLn=4 - тип линии, определяемый пользователем;
8
в этом случае параметр ‘ образец ’ задает образец линии; во всех остальных случаях следует брать ‘образец’=0.
Замечание: атрибут ‘тип линии’ действует только для прямолинейных примитивов. Для задания толщины линии можно использовать следующие 2 константы:
NormWidth=1 - нормальная толщина; ThickWidth=3 - утолщенная линия.
Установка шаблона и цвета закраски замкнутых областей производится с помощью процедуры
− SetFillStyle(шаблон,цвет: integer).
Для задания шаблона можно использовать следующие константы: EmptyFill=0 - закраска фоновым цветом;
SolidFill=1 - закраска заданным цветом; LineFill=2 - закраска шаблоном вида - - - - - - -; LtSlashFill=3 - закраска шаблоном вида / / / / / /;
SlashFill=4 - закраска шаблоном из толстых линий ////////;
BkSlashFill=5 - закраска шаблоном из толстых линий \\\\\\\;
LtBkSlashFill=6 - закраска шаблоном вида \ \ \ \ \ \; HatchFill=7 - закраска редкой штриховкой; XHatchFill=8 - закраска пересекающейся штриховкой; InterLeaveFill=9 - закраска прерывистой линией; WideDotFill=10 - закраска редкими точками; CloseDotFill=11 - закраска частыми точками.
Пользователь имеет возможность создавать свои собственные шаблоны заполнения с помощью процедуры SetFillPottern.
Для рисования т о ч к и на экране используется процедура
− PutPixel(x,y,цвет: integer).
9
Точка - наименьший адресуемый элемент изображения, который принято называть пикселом. Можно запросить цвет заданной точки экрана, обратившись к функции
− GetPixel(x,y: integer): integer.
Для вывода о т р е з к а прямой линии используются процедуры
− Line(x1,y1,x2,y2: integer) - отрезок от (x1,y1) до
(x2,y2);
−LineTo(x,y: integer)- отрезок от текущей точки до точки (x,y);
−LineRel(dx,dy: integer) - отрезок от текущей точки до точки, определяемой смещением dx, dy.
Для задания текущей точки имеется специальный указатель текущей позиции (УТП), который аналогичен курсору в текстовом режиме, но в отличие от него невидим на экране. Изменение значения УТП отслеживается графическими процедурами. Для перемещения УТП можно использовать следующие процедуры:
−MoveTo(x,y: integer) - перемещение УТП в точку (x,y);
−MoveRel(dx,dy: integer) - смещение УТП на (dx,dy)
относительно его исходного положения.
Можно запросить значения УТП, обратившись к целочисленным функциям GetX и GetY, которые аналогичны функциям WhereX и WhereY для текстового режима.
Вывод прямоугольника с горизонтальными и вертикальными сторонами производится процедурой
− Rectangle(x1,y1,x2,y2: integer),
где (x1, y1) - левый верхний угол, а (x2, y2) - правый нижний угол прямоугольника.
Вывод окружности с центром (x1, y1) и радиусом R производится процедурой
10
− Circle(x,y,R: integer).
Вывод дуги окружности производится процедурой
− Arc(x,y,нач_угол,кон_угол,R: Integer),
где (x, y) - центр образующей окружности радиуса R, а нач_угол и кон_угол задают начальный и конечный угол дуги (в градусах); дуга рисуется против часовой стрелки в соответствии с общепринятыми соглашениями.
Вывод дуги эллипса производится процедурой
− Ellipse(x,y,нач_угол,кон_угол,RX,RY: integer),
где (x, y) - координаты центра, RX и RY - полуоси, а нач_угол и кон_угол задают начальный и конечный углы дуги, аналогично дуге окружности; если нач_угол=0, а кон_угол=359, то будет нарисован полный эллипс.
Вывод контура многоугольника производится процедурой
− DrawPoly(n: integer; var коорд_верш),
где n - число вершин, а параметр-переменная коорд_верш определяет координаты всех вершин многоугольника. Тип этого параметра не задан, поэтому он называется не типизированным, что является н е с т а н д а р т н о й возможностью системы Турбо Паскаль. Соответствующий фактический параметр может быть л ю б о г о типа. Например, удобно этот фактический параметр описать как массив записей вида:
−var коор : array[1..n] of record
−x,y: integer
−end;
При вычерчивании замкнутого многоугольника с m вершинами начальная и конечная вершины рассматриваются как две отдельные вершины, координаты которых одинаковы, поэтому n=m+1.
11
Для построения закрашенного многоугольника можно использовать процедуру
− FillPoly(n: integer; var коорд_верш),
где формальные параметры полностью аналогичны предыдущей процедуре.
Отличие данной процедуры от предыдущей состоит в том, что сначала рисуется контур многоугольника с использованием цвета, типа и толщины линий, заданных процедурами SetColor и SetLineStyle, а затем многоугольник закрашивается в соответствии с шаблоном и цветом, заданными процедурой
SetFillStyle.
Аналогичные действия, но по отношению к произвольной замкнутой области, выполняется процедура
− FloodFill(x,y,цвет_гран: integer).
Она заполняет замкнутую область с границей, определяемой заданным цветом (параметр цвет_гран), в соответствии с заданным шаблоном закраски. Если точка (x, y) находится внутри области, то закрашивается внутренность области, иначе - весь экран за исключением заданной области.
Для вывода закрашенного кругового сектора можно использовать процедуру
− PieSlice(x,y,нач_угол,кон_угол,R: integer),
где формальные параметры полностью аналогичны параметрам процедуры Arc.
Контур сектора вычерчивается в соответствии с заданным цветом, типом и толщиной линии, а потом закрашивается в соответствии с заданным шаблоном и цветом закраски.
Аналогичная процедура для закраски эллиптического сектора имеет
вид
− Sector(x,y,нач_угол,кон_угол,RX,RY: integer).
12
Процедура
− Bar(x1,x2,x2,y2: integer)
выводит прямоугольник , закрашенный в соответствии с установками процедуры SetFillStyle.
Система программирования Турбо Паскаль предусматривает ряд возможностей для вывода текстовой информации в графическом режиме. Прежде всего, имеется возможность выбора одного из типов шрифта. По умолчанию всегда выбирается точечный (растровый) шрифт, который для вывода любого символа использует точечную матрицу размерности 8 на 8.
При желании вместо точечного шрифта можно использовать один из штриховых (векторных) шрифтов, в которых любой символ описывается как набор отрезков (векторов). Штриховые шрифты хранятся в специальных файлах на диске и при необходимости загружаются в оперативную память. Для задания типа шрифта можно использовать следующие константы:
DefaultFont=0 - точечный шрифт;
TriplexFont=1 - основной штриховой шрифт (файл triplex.chr); SmallFont=2 - уменьшенный штриховой шрифт(файл small.chr); SanSeriFont=3 - дополнительный штриховой шрифт(sanserif.chr); GothicFont=4 - готический шрифт (файл gothic.chr).
Для задания горизонтального или вертикального направления вывода текста можно использовать следующие константы:
HorizDir=0 - горизонтальное направление (слева - направо): VertDir=1 - вертикальное направление(снизу-вверх).
Кроме того, имеется возможность управления размером символов. По умолчанию для точечного шрифта выбирается наименьший возможный размер, определяемый целочисленной константой NormSize=1.
Размер символов точечного шрифта можно увеличить в 2,3,...,10 раз. Задание типа шрифта, направления вывода и размеров символов
производится процедурой
13
− SetTextStyle(шрифт,направл,размер: integer).
Изменение высоты и ширины символов для штриховых шрифтов производится процедурой
− SetUserCharSize.
Выводимый текст можно выравнивать в горизонтальном или вертикальном направлениях. Горизонтальное выравнивание определяется следующими константами :
LeftText=0 - текст выводится вправо от заданной точки, т.е. выравнивается по л е в о й границе текста;
CenterText=1 - центрирование текста, т.е. заданная точка соответствует середине выводимого текста;
RightText=2 - текст выводится влево от заданной точки, т.е. выравнивается по правой границе текста.
Аналогично, для вертикального выравнивания определены константы: BottomText=0 - текст выводится н и ж е заданной точки; CenterText=1 - центрирование текста;
TopText=2 - текст выводится в ы ш е заданной точки.
Нулевые значения констант выбираются по умолчанию. Для задания выравнивания текста используется процедура
− SetTextJustify(горизонт,вертик: integer).
Вывод текста производится двумя процедурами:
−OutTextXY(x,y: integer; строка: string);
−OutText(строка: string).
Первая выводит текст относительно заданной точки (x,y), а вторая - относительно имеющего значение УТП (обе - с учетом выравнивания текста).При использовании точечного шрифта (он всегда выбирается по умолчанию) надо знать, что если выводимая строка не помещается полностью на экране, то она просто не выводится!
14