Задание для вариантов 1-11

Вид материалаДокументы

Содержание


Необходимая информация Общая характеристика базовых графических средств языка Pascal.
Инициализация графического режима.
Вывод основных графических примитивов.
SetColor(цвет: integer)
SetLineStyle(тип_линии, образец, толщина: integer).
SetFillStyle(шаблон,цвет: integer).
PutPixel(x,y,цвет: integer).
MoveTo(x,y: integer) - перемещение УТП в точку (x,y)
Rectangle(x1,y1,x2,y2: integer)
Arc(x,y,нач_угол,кон_угол,R: Integer)
DrawPoly(n: integer; var коорд_верш)
FillPoly(n: integer; var коорд_верш)
FloodFill(x,y,цвет_гран: integer).
PieSlice(x,y,нач_угол,кон_угол,R: integer)
Bar(x1,x2,x2,y2: integer)
Задание области вывода
SetViewPort(x1,y1,x2,y2: integer; режим_отсечения: boolean)
Подобный материал:

Приложение. Образец оформления отчёта о выполнении РГР



Задание


Написать программу в соответствии с индивидуальным заданием.

Общие требования. Изображение должно занимать большую часть экрана, сопровождаться заголовком, содержать наименования и градации осей и масштабироваться в зависимости от исходных данных. При любых допустимых значениях исходных данных изображение должно полностью помещаться на экране. Программа не должна опираться на конкретные значения расширения экрана.

Задание для вариантов 1-11


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

Необходимая информация

Общая характеристика базовых графических средств языка Pascal.


Для реализации графических операций в прикладных программах необходима базовая графическая система (БГС). Эта система может входить в состав системы программирования(Borland Pascal, Borland C) или быть частью операционного окружения (системы класса Windows).В частности, в системе Borland Pascal базовые графические средства представлены набором графических драйверов (файлы типа EGAVGA.BGI) и набором констант, типов, переменных, процедур и функций, собранных в модуле Graph (файл GRAPH.TPU).Аналогичные средства существуют и для языка С.

В целом, все процедуры и функции модуля Graph можно разбить на следующие основные группы:
    1. инициализация и завершение графического режима;
    2. вывод основных графических примитивов;
    3. установка атрибутов графических примитивов;
    4. запрос значений атрибутов;
    5. копирование.
Инициализация графического режима.

Инициализация должна выполняться перед непосредственным использованием процедур модуля Graph для построения изображения. Инициализация заключается в задании используемого графического драйвера и графического режима для этого драйвера. Процедура инициализации загружает указанный драйвер в оперативную память и настраивает систему на работу в графическом режиме.

Для указания используемого драйвера можно воспользоваться следующими константами:

Ega = 3

Vga = 9

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,’’);


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

Любое сложное изображение, в конечном счете, составляется из набора нескольких простейших геометрических элементов, называемых примитивами. Система Турбо Паскаль предлагает следующий набор графических примитивов: точка, отрезок, окружность, дуга, дуга эллипса, прямоугольник, круговой сектор, сектор эллипса, многоугольник, текст.

Каждый из этих примитивов на экране может выглядеть различным образом, в соответствии со своими атрибутами. Основными атрибутами для всех примитивов, кроме текста, являются: цвет, тип линии, толщина линии, шаблон заполнения области (там, где эта операция имеет смысл).

Установка цвета вывода примитива производится процедурой
    • SetColor(цвет: integer),

где 0<=цвет<=15 и цветовая палитра совпадает с текстовым режимом.

Установка цвета фона производится процедурой
    • SetBkColor(цвет: integer).

Установка типа и толщины линии - процедурой
    • SetLineStyle(тип_линии, образец, толщина: integer).

Для задания типа линии предусмотрены следующие константы:

SolidLn=0 - непрерывная линия;

DottedLn=1 - точечная линия;

CenterLn=2 - штрихпунктирная линия;

DoshedLn=3 - пунктирная линия;

UserBitLn=4 - тип линии, определяемый пользователем;

в этом случае параметр ‘ образец ’ задает образец линии; во всех остальных случаях следует брать ‘образец’=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).

Точка - наименьший адресуемый элемент изображения, который принято называть пикселом. Можно запросить цвет заданной точки экрана, обратившись к функции
    • 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 производится процедурой
    • 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.

Для построения закрашенного многоугольника можно использовать процедуру
    • 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).

Процедура
    • 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 раз. Задание типа шрифта, направления вывода и размеров символов производится процедурой
    • 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), а вторая - относительно имеющего значение УТП (обе - с учетом выравнивания текста).При использовании точечного шрифта (он всегда выбирается по умолчанию) надо знать, что если выводимая строка не помещается полностью на экране, то она просто не выводится!

Однако, при использовании штриховых шрифтов не выводится лишь та часть строки, которая выходит за пределы экрана.
Задание области вывода

Область вывода (или область просмотра, поле вывода, графическое окно)- это часть графического экрана, куда направляется весь графический вывод без изменения остальной части экрана. В этом смысли понятие области вывода аналогично понятию окна в текстовом режиме. Область вывода задается процедурой
    • SetViewPort(x1,y1,x2,y2: integer; режим_отсечения: boolean),

где (x1, y1) - координаты левого верхнего угла поля вывода, а (x2, y2) - координаты правого нижнего угла. Булевский параметр ‘режим_отсечения’ определяет, включен или нет для данного поля вывода режим отсечения по границе поля: если включен (константа ClipOn=true), то все выводимые примитивы отсекаются по границе поля, т.е. не выходят за его пределы, в противном случае (константа ClipOff = false) изображение может выходить за границы области. Нормальное состояние области вывода соответствует режиму включения отсечения.

На экране одновременно может существовать несколько областей вывода. Для возврата в исходное состояние, соответствующее ПОЛНОМУ экрану, можно сделать следующий вызов:
    • SetViewPort(0,0,GetMaxX,GetMaxY,True),

где GetMaxX и GetMaxY - функции модуля Graph, возвращающие максимально возможные для данного графического режима значения координат X и Y. Эти функции чрезвычайно полезны при написании программ, работающих с различными адаптерами.

Для очистки области вывода можно использовать процедуру:
    • ClearViewPort.

Варианты индивидуальных заданий




Вариант 1