Графика Turbo Pascal - Доклад

бесплатно 0
4.5 27
Графические процедуры и функции, машинные координаты. Модуль Graph, построение фигур, работа с текстом. Определение адаптера, инициализация и переход между текстом и графикой. Отличия графики Турбо-Паскаля и Турбо-Си. Основные недостатки BGI-графики.


Аннотация к работе
Line (x1,y1,x2,y2: integer); {рисование линии, проходящей через две точки: с координатами (x1,y1) и (x2,y2)} LINETO (x,y: integer); {рисование линии, проходящую через текущую позицию курсора и точку с координатами (x,y)} PUTPIXEL (x,y: integer; c: word); {выводит точку с координатами (х, у) цветом с} Написание программы Program P5; Uses graph; {подключение граф. модуля} Var gd,gm: integer; Begin gd: =detect; {определение граф. драйвера} INITGRAPH (gd,gm,’ ‘); {инициализация графики} Line (0, round (GETMAXY/2), GETMAXX, Round (GETMAXY/2)); {гориз. лин.} Line (round (GETMAXX/2), 0,Round (GETMAXX/2), GETMAXY); {вертик. лин.} Readln; {пустой ввод} CLOSEGRAPH; {закрытие графики} End. По умолчанию размер 4К, что достаточно для построения многоугольника с 650 линиями. function GETMAXMODE: integer; Возвращает номер максимального режима текущего загруженного драйвера. procedure GETMODERANGE (GRAPHDRIVER: integer; var LOMODE, HIMODE: integer); Возвращает минимальный и максимальный графические режимы для данного драйвера. function GETMODENAME (GRAPHMODE: integer): string; Возвращает строку с именем указанного графического режима. procedure SETGRAPHMODE (Mode: integer); Переводит систему в указанный графический режим и очищает экран. function GETGRAPHMODE: integer; Возвращает текущий графический режим. procedure GRAPHDEFAULTS; Устанавливает текущий указатель (CP) в исходную позицию (т.е. точку 0,0) и сбрасывает все устанавливаемые пользователем режимы в исходное состояние, в т. ч. окна, палитру, основной цвет и цвет фона, стиль линий, шрифт, выравнивание текста, размер символов и стиль выводимого текста.

Введение
графика turbo pascal турбо паскаль

Для использования графических возможностей Турбо Паскаля необходимо в блоке описания uses подключить графический модуль Graph. Модуль содержит набор графических функций и процедур, основные из которых рассмотрены ниже.

Графические процедуры

Arc (x,y: integer; St,En,R: word); {рисование дуги, где x,y - коорд. центра дуги, R - радиус, St, En - нач. и конечный углы.}

CLEARDEVICE; {очистка экрана}

Circle (x,y: integer; R: word); {окружность радиуса R сцентром в точке (x,y)}

CLOSEGRAPH; {закрытие графики}

INITGRAPH (gd,gm: integer; Path: string); {инициализация графики, где gd - графический драйвер, gm - графический режим, Path - путь размещения файла с расширением. bgi.}

Line (x1,y1,x2,y2: integer); {рисование линии, проходящей через две точки: с координатами (x1,y1) и (x2,y2)}

LINEREL (dx,dy: integer); {рисование линии: dx, dy - приращения координат к координатам текущей позиции курсора}

LINETO (x,y: integer); {рисование линии, проходящую через текущую позицию курсора и точку с координатами (x,y)}

Moveto (x,y: integer); {задание координат текущей точки}

OUTTEXT (T: string); {вывод текста в текущую точку}

OUTTEXTXY (x,y: integer; T: string); {вывод текста в точку с координатами х, у}

Rectangle (x1,y1,x2,y2: integer); {рисование прямоугольника: (x1,y1) и (x2,y2) - координаты противоположных вершин}

PUTPIXEL (x,y: integer; c: word); {выводит точку с координатами (х, у) цветом с}

Графические функции

GETMAXX - определяет максимальный размер экрана по оси x.

GETMAXY - определяет максимальный размер экрана по оси y.

GETX - координата текущей позиции курсора по оси x.

GETY - координата текущей позиции курсора по оси y.

Машинные координаты

Начало машинной системы координат, направление осей, а также максимальные значения координат монитора показаны на рисунке

На рисунке приведена также машинная (xm, ym) и физическая (x,y) системы координат. Для изображения на экране точки с физическими координатами (x,y) необходимо определить ее машинные координаты (xm, ym). Расчетные формулы имеют следующий вид (попробуйте самостоятельно получить эти формулы): xm=x0 x*Mx, ym=y0-y*My, где Mx, My-масштабы соответственно по осям x и y, которые показывают число пикселей в одной физической единице, x, y - физические координаты точки, xm, ym - машинные координаты точки, x0, y0 - машинные координаты начала физической системы координат.

Пример. Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора.

Этапы разработки программы сведены в таблицу.

Таблица

N Этапы программирования Выполнение

1. Постановка задачи Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора.

2. Математическое описание Изобразим вид экрана с указанием координат требуемых линий

3. Разработка структограммы

4. Написание программы Program P5; Uses graph; {подключение граф. модуля} Var gd,gm: integer; Begin gd: =detect; {определение граф. драйвера} INITGRAPH (gd,gm,’ ‘); {инициализация графики} Line (0, round (GETMAXY/2), GETMAXX, Round (GETMAXY/2)); {гориз. лин.} Line (round (GETMAXX/2), 0,Round (GETMAXX/2), GETMAXY); {вертик. лин.} Readln; {пустой ввод} CLOSEGRAPH; {закрытие графики} End.

5. Отладка и получение результатов Выполнить самостоятельно

Пример. Написать программу построения графика функции y=x2 для x [-1; 1].

Этапы разработки программы сведены в таблицу.

N Этапы программирования Выполнение

1. Постановка задачи Построить график функции y=x2 для x? [-1; 1].

2. Математическое описание Изобразим вид экрана, который мы хотели бы получить после выполнения программы.

3. Разработка структограммы

4. Написание программы Program P6; Uses graph; Var gd,gm: integer; x,y: real; x0,y0,xm,ym,Mx,My: integer; begin gd: =detect; INITGRAPH (gd,gm,’ ‘); Mx: =300; x0: =320; My: =440; y0: =460; {выбраны для монитора 640?480 пикс.} For xm: =20 to 620 do Begin x: = (xm-x0) /Mx; y: =sqr (x); ym: =round (y0-y*My); PUTPIXEL (xm,ym,1); End; Readln; CLOSEGRAPH; End.

5. Отладка и получение результатов Выполнить самостоятельно

Модуль Graph

ТР обладает достаточно разнообразными средствами для работы со стандартным VGA экраном (возможно также использование и и других типов видеоадаптеров).

VGA адаптер имеет разрешение 640х480 пиксел (точка (0,0) в левом верхнем углу экрана), 16 цветов.

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

Общая структура графической программы: Uses crt, graph;

var Gd, Gm: Integer;

begin

Gd: = Detect;

INITGRAPH (Gd, Gm, "c: \bp\bgi");

...

{Здесь построение изображения}

...

READKEY;

CLOSEGRAPH;

end.

Путь c: \bp\bgi указывает расположение файла egavga. bgi (драйвер графического адаптера). На разный компьютерах этот путь может быть разным. Если файл egavga. bgi поместить в каталог с программой, то путь можно не указывать.

Основные графические процедуры и функции. Построение фигур

PUTPIXEL (x,y,c) - отображает на экране точку с координатами (x,y) и цветом c

Line (x1,y1,x2,y2) - рисует линию с началом в точке (x1,y1) и концом - (x2,y2)

Rectangle (x1,y1,x2,y2) - рисует контур прямоугольника с диагональю (x1,y1) - (x2,y2)

Bar (x1,y1,x2,y2) - рисует закрашенный прямоугольник с диагональю (x1,y1) - (x2,y2)

Circle (x,y,r) - рисует окружность с центром (x,y) и радиусом r

Ellipse (x,y,ba,ea,xr,yr) - рисует дугу эллипса с центром в (x,y), горизонтальным и вертикальным радиусом xr и yr, и начальным и конечным углом ba и ea

FILLELLIPSE (x,y,xr,yr) - рисует закрашенный эллипс с центром в (x,y), горизонтальным и вертикальным радиусом xr и yr

Определение цветов и стилей

GETPIXEL (x,y) - возвращает цвет пиксела с координатами (x,y)

SETCOLOR (c) - устанавливает цвет изображения (для линий)

SETFILLSTYLE (p,c) - устанавливает текущий стиль p и цвет c (для "закрашенных" фигур)

FLOODFILL (x,y,b) - закрашивает замкнутую область с внутренней точкой (x,y) и цветом контура b

Работа с текстом

OUTTEXTXY (x,y,st) - выводит на экран строку st с позиции (x,y)

SETTEXTSTYLE (f,d,s) - устанавливает шрифт f, его направление d и размер

Сообщения об ошибках function GRAPHERRORMSG (ERRORCODE: integer): String; Возвращает строку сообщения об ошибке для заданного кода ERRORCODE. function GRAPHRESULT: integer; Возвращает код ошибки для последней графической операции.

Определение адаптера, инициализация и переход между текстом и графикой procedure DETECTGRAPH (var GRAPHDRIVER, GRAPHMODE: integer); Проверяет аппаратуру и определяет какой графический драйвер и в каком режиме используется (тип адаптера - в GRAPHDRIVER, режим - GRAPHMODE). function GETDRIVERNAME: string; озвращает строку с именем текущего драйвера. procedure INITGRAPH (var GRAPHDRIVER: integer; var GRAPHMODE: integer; PATHTODRIVER: String); Инициализирует графическую систему и устанавливает устройство в графический режим. PATHTODRIVER - полный путь к драйверу. bgi, обычно "c: \tp\bgi". Если путь опущен (""), то драйвер должен находится в текущем каталоге. function REGISTERBGIFONT (Font: pointer): integer; Регистрирует шрифт BGI для графической системы. Зарегистрированный фонт может использоваться в вызове SETTEXTSTYLE. Он может быть загружен с диска в кучу или преобразован в. obj файл (с помощью binobj. exe) и связан в файл. exe. В случае ошибки функция возвращает отрицательное значение. function REGISTERBGIDRIVER (Driver: pointer): integer; Регистрирует драйвер BGI для графической системы. Зарегистрированный драйвер будет использоваться процедурой INITGRAPH. Он может быть загружен с диска в кучу или преобразован в. obj файл (с помощью binobj. exe) и связан в файл. exe. В случае ошибки функция возвращает отрицательное значение. function INSTALLUSERDRIVER (DRIVERFILENAME: string; AUTODETECTPTR: pointer): integer; Устанавливает пользовательский драйвер устройства в BGI таблицу драйверов устройств. function INSTALLUSERFONT (FONTFILENAME: string): integer; Устанавливает новый шрифт, который не встроен в BGI систему. procedure SETGRAPHBUFSIZE (BUFSIZE: word); Позволяет изменить размер буфера для функций заполнения (закрасок). Буфер с размером BUFSIZE байт размещается в куче при обращении к INITGRAPH. По умолчанию размер 4К, что достаточно для построения многоугольника с 650 линиями. function GETMAXMODE: integer; Возвращает номер максимального режима текущего загруженного драйвера. procedure GETMODERANGE (GRAPHDRIVER: integer; var LOMODE, HIMODE: integer); Возвращает минимальный и максимальный графические режимы для данного драйвера. function GETMODENAME (GRAPHMODE: integer): string; Возвращает строку с именем указанного графического режима. procedure SETGRAPHMODE (Mode: integer); Переводит систему в указанный графический режим и очищает экран. function GETGRAPHMODE: integer; Возвращает текущий графический режим. procedure GRAPHDEFAULTS; Устанавливает текущий указатель (CP) в исходную позицию (т.е. точку 0,0) и сбрасывает все устанавливаемые пользователем режимы в исходное состояние, в т. ч. окна, палитру, основной цвет и цвет фона, стиль линий, шрифт, выравнивание текста, размер символов и стиль выводимого текста. Система должна находиться в графическом режиме. procedure RESTORECRTMODE; Восстанавливает текстовый видеорежим, который был до инициализации графики. Не освобождает буфер и не обнуляет установленные переменные. procedure CLOSEGRAPH; Закрывает графическую систему. Восстанавливает текстовый видеорежим, который был до инициализации графики. Освобождает буфер и сбрасывает все графические переменные.

Координаты графического курсора function GETX: integer; Возвращает координату X текущей позиции (CP). function GETY: integer; Возвращает координату Y текущей позиции (СР). function GETMAXX: integer; Возврашает максимальный Х (разрешение по горизонтали) для текущего графического драйвера и режима. function GETMAXY: integer; Возвращает максимальный Y (разрешение по вертикали) для текущего графического драйвера и режима.

Отличия графики Турбо-Паскаля и Турбо-Си

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

Недостатки BGI-графики

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

Размещено на .ru
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?