Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКД-Паскаль-2012.docx
Скачиваний:
38
Добавлен:
01.05.2015
Размер:
561.45 Кб
Скачать

Лабораторная работа 12 графические средства паскаля

Цель работы: Научиться использовать графические средства Паскаля на примере построения графика функции

Краткие сведения из теории

Инициализация графического режима производится с помощью процедуры InitGraph (<драйвер>,<режим>,<путь>),

где <драйвер> - переменная типа INTEGER - указывает тип (номер)

графического драйвера. Например:

0 - Detect (тип установленного драйвера

распознается автоматически компьютером);

1 - CGA;

2 - EGA;

9 - VGA.

<режим> - переменная типа INTEGER - если тип драйвера не

0, то указывается графический режим работы

драйвера, т.е. размер экрана в пикселях, число

цветов и число страниц (экранов).

<путь> - выражение типа STRING - если тип драйвера не 0,

то необходимо указать путь к файлу с графическим

драйвером.

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

Цвет является выражением целого типа со значением из интервала 0..15, в частности, может быть константой из таблицы:

Black = 0 (черный)

Darkgray = 8 (темно-серый)

Blue =1 (синий)

Lightblue = 9 (светло-синий)

Green =2 (зеленый)

Lightgreen =10 (светло-зеленый)

Cyan =3 (голубой)

Lightcyan =11 (светло- голубой)

Red =4 (красный)

Lightred =12 (светло-красный)

Magenta =5 (фиолетовый)

Lightmagenta=13(светло-фиолетовый)

Brown =6 (коричневый)

Yellow =14 (желтый)

Lightgray =7 (светло-серый)

White =15 (белый).

Процедуры setcolor(цвет) и setbkcolor(цвет) устанавливают цвет рисунка и цвет фона. При инициализации графики по умолчанию устанавливается черный фон и белый цвет рисунка.

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

Заголовок процедуры

Геометрический смысл

putpixel(x,y,c)

построить точку (x,y) цветом c

setlinestyle(a,b,t)

установить стиль, образец и толщину линий

line(x1,y1,x2,y2)

соединить две точки отрезком

rectangle(x1,y1,x2,y2)

построить прямоугольник с заданными концами диагонали и сторонами, парал- лельными осям координат

circle(x,y,r)

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

arc(x,y,a,b,r)

построить дугу окружности: a,b -начальный и конечный углы в градусах

ellipse(x,y,a,b,rx,ry)

построить эллиптическую дугу: rx, ry - полуоси эллипса

setfillstyle(t,c)

установить стиль закраски и ее цвет

fillellipse(x,y,rx,ry)

построить закрашенный эллипс, используя цвет рисунка,

floodfill(x,y,cg)

закрасить фигуру до границы с цветом cg; (x,y) - внутренняя точка фигуры

bar(x1,y1,x2,y2)

построить столбец, используя тип и цвет закраски

pieslice(x,y,a,b,r)

построить и закрасить сектор круга: a,b - начальный и конечный углы дуги в градусах

sector(x,y,a,b,rx,ry)

построить и закрасить эллиптический сектор

settextstyle(f,n,d)

установить шрифт, направление вывода и размер символов текста

outtextxy(x,y,st)

вывести строку st, начиная с точки (x,y)

outtext(st)

вывести строку, начиная с точки рас- положения текущего указателя

Первый аргумент процедуры setlinestyle(a,b,t) - стиль линии a - принимает значения из таблицы:

Значение стиля

Смысл

0 solidln

непрерывная линия

1 dotteln

пунктирная линия

2 centerln

штрихпунктирная линия

3 dashedln

штриховая линия

4 userbitln

определенная пользователем

Второй параметр b, "образец", имеет значение 4, если a=4, в оста- льных случаях b=0. Третий параметр t, толщина линии, может иметь значение 1 (нормальная толщина) или 3 (жирная линия).

Первый аргумент процедуры setfillstyle(t,c) - тип закраски t - принимает значения из интервала 0..12. Наиболее употребителен тип t=1 - заполнение фигуры текущим цветом. Другие типы закраски приведены ниже.

Для вывода текста на графический экран сначала выполняется процедура settextstyle(f,n,d), устанавливающая шрифт f, направление вывода n и размер символов (параметр d). При f=0 используется стандартный точечный шрифт, встроенный в систему Турбо- Паскаль.

Направление вывода принимает значения 0 (горизонтальный вывод) и 1 (вертикальный вывод).

Размер букв определяется параметром d, принимающим значения из интервала 1..10. Если d=1 и f=0, то каждый символ занимает квадрат 8*8 точек, при d>1 сторона квадрата умножается на d.

Далее с помощью процедуры outtextxy(x,y,st) строка st выводится на экран, начиная с точки (x,y), например:

  • settextstyle(0,0,2);

  • outtextxy(100,200,'горизонтальная строка');

  • outtextxy(100,230,'размер увеличен вдвое');

Константы модуля GRAPH

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

(коды ошибок при инициализации)

grOk = 0 (нет ошибок);

grNoInitGraph = -1 (графика не инициализирована);

grNotDetected = -2 (графическое устройство не обнаружено);

grFileNotFound = -3 (файл драйвера не найден);

grInvalidDriver = -4 (неправильный файл драйвера);

grNoLoadMem = -5 (нет памяти для драйвера);

grNoScanMem = -6 (нет памяти для просмотра областей);

grNoFloodMem = -7 (нет памяти для закраски областей);

grFontNotFound = -8 (фаты шрифта не найдены);

grNoFontMem = -9 (нет памяти для загрузки шрифта);

grInvalidMode = -10 (недопустимый графический режим);

grError = -11 (общая ошибка);

grIOError = -12 (ошибка ввода/вывода);

grInvalidFont = -13 (неверный файл шрифта);

grinvalidfontnum = - 14 (неверный номер шрифта);

(поддерживаемые графические драйверы)

Detect = 0 (автоматическое распознавание);

CGA = 1;

MCGA = 2;

EGA = 3;

EGA64 = 4;

EGAMono = 5;

IBM8514 = 6 (зарезервировано);

HercMono = 7;

ATT400 = 8;

VGA = 9;

PC3270 = 10;

(стиль и толщина линий)

SolidLn = 0 (сплошная);

DottedLn = 1 (пунктирная);

CenterLn = 2 (осевая);

DashedLn = 3 (штриховая);

UserBitLn = 4 (определенная пользователем)

NormWidth = 1 (нормальная толщина);

ThickWidth = 3 (жирная);

(константы закраски)

EmptyFill = 0 ( нет закраски );

SolidFill = 1 ( сплошная закраска);

LineFill = 2 ( --- штриховка);

LtSlashFill = 3 ( /// штриховка);

SlashFill = 4 ( /// толстая штриховка);

BkSlashFill = 5 ( \\\ толстая штриховка);

LtBkSlashFill = 6 ( \\\ штриховка);

HatchFill = 7 ( +++ штриховка );

XHatchFill = 8 ( xxx штриховка);

InterleaveFill = 9 ( штриховка в клетку);

WideDotFill = 10 ( штриховка редкими точками );

CloseDotFill = 11 ( штриховка частыми точками );

UserFill = 12 ( штриховка пользователя );

(константы для Putimage)

NormalPut = 0 ( MOV );

XORPut = 1 ( XOR );

OrPut = 2 ( OR );

AndPut = 3 ( AND );

NotPut = 4 ( NOT );

ПРИМЕР: Построить график функции

program grafiki_funk;

Uses Graph;

var

a,b,c,d,h,x,y:real;

de,re,n,k,u,v:integer;

const um=639;vm=469;

function f(x:real):real;

begin

f:=SQR(x);

end;

procedure vvod_dan(var a,b,c,d:real;

var n:integer);

begin

writeln('Параметры графика');

write('Слева:a='); readln(a);

write('Справа:b=');readln(b);

write('Снизу:c=');readln(c);

write('Сверху:d=');readln(d);

write('n=');readln(n); {количество точек на графике}

end;

begin

vvod_dan(a,b,c,d,n);

de:=detect;Initgraph(de,re,' ');

h:=(b-a)/n; {шаг}

for k:=0 to n do

begin

x:=a+h*k;

y:=f(x);

u:=round((x-a)*um/(b-a)); {для вывода точки координаты}

v:=round((d-y)*vm/(d-c)); {преобразуются к типу "integer"}

putpixel(u,v,7);

end;

readln {график сохраняется на экране до нажатия клавиши}

end.