Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник ЛР ТР.docx
Скачиваний:
22
Добавлен:
08.05.2015
Размер:
95.87 Кб
Скачать

Лабораторная работа № 3 «Графический режим»

Цель работы: получить навыки по работе с графическим режимом в среде Turbo Pascal.

Теоретическая часть:

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

Драйвер - это специальная программа, которая управляет техническими средствами компьютера.

Необходимые процедуры и функции для работы с графикой собраны стандартном модуле - Graph.

Инициализация графики производится с помощью процедуры InitGraph, которая имеет вид:

InitGraph (GraphDriver, GraphMode, Path);

где переменные GraphDriver и GraphMode имеют тип Integer, а переменная Path имеет тип String.

Любая информация при работе в графическом режиме на экране монитора представлена совокупностью светящихся точек - пикселей, которые определяются цветом и координатами - положением относительно левого верхнего угла экрана с координатами (0,0).

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

Чтобы точно строить изображение на экране, нужно сначала нарисовать, как это должно выглядеть на бумаге. Для этого начертите систему координат графического режима.

Отсчет начинается с верхнего левого угла с координатами (0;0), значение Х - столбец, отсчет слева направо; значение Y - строка, отсчет сверху вниз.

После инициализации графического режима указатель стоит в точке (0;0). Чтобы переместить его в нужное место используют следующие процедуры:

Процедура

Значение

MoveTo (X, Y)

перемещает текущий указатель в точку с координатами (X,Y)

MoveRel (dX, dY)

перемещает текущий указатель по горизонтали на расстояние, равное dX пикселям, а по вертикали на расстояние, равное dY пикселям

PutPixel(X, Y, Color)

процедура выводит точку заданного цвета Color в точку с координатами (X, Y)

Line (X1, Y1, X2, Y2)

рисуется линия от точки (X1, Y1)

до точки (X2, Y2)

LineTo (X, Y)

рисуется линия из точки, где находится в данный момент курсор в точку (X, Y)

LineRel (dX,dY)

рисуется линия из точки, где находится в данный момент курсор

(X, Y) в точку (X+dX,Y+dY)

SetColor (Color)

устанавливает текущий цвет для выводимых линий и символов

Circle (X, Y, R)

Рисуется окружность в центре (X, Y) c радиусом R

Arc (X, Y, BegA, EndA, R)

Рисуется дуга (часть окружности) с координатами центра (X, Y), с радиусом R, которая начинается от угла BegA до угла EndA в полярной системе координат

Ellipse

(X, Y, BegA, EndA , хR, yR)

рисуется дуга эллипса, у которого центр находится в точке (X, Y), BegA - начальный угол, EndA - конечный угол, хR - радиус по горизонтальной оси, yR - радиус по вертикальной оси

Rectangle (X1, Y1, X2, Y2)

рисуется прямоугольник, X1, Y1 - координаты верхнего левого угла, X2, Y2 - координаты нижнего угла

SetLineStyle

(Type, Pattern, Thick)

устанавливает стиль линий.

Type - тип линии, Тип линии может быть задан с помощью одной из следующих констант:

0 - непрерывная линия; 1 - линия из точек; 2 - линия из точек и тире; 3 - пунктирная линия; 4 – линия, определяемая пользователем.

Pattern - образец линии. Учитывается только для линий, вид которых определяет пользователь. Таким образом можно задать линии в виде отрезков длиной до 16 пиксель.

Thick - толщина линии.

1 - толщина в один пиксель; 3 - толщина в три пикселя

FloodFill(X, Y, ColorBorder)

процедура, которая позволяет заполнить замкнутую область выбранным стилем и цветом закраски.

(X, Y) являются координатами точки, лежащей обязательно внутри закрашиваемой области;

ColorBorder - параметр, обозначающий цвет, которым нарисована закрашиваемая фигура (так называемый цвет “бордюрчика”);

фигура должна быть начерчена одним цветом;

фигура должна быть замкнута.

Процедура

Значение

SetFillStyle (Pattern, Color)

определяет стиль заполнения и цвет заполнения.

Значения Pattern можно взять из следующей таблицы:

Константа

Маска-заполнение

EmptyFill

0

цветом фона

SolidFill

1

текущим цветом

LineFill

2

символами - -, цвет - Color

LtSlashFill

3

символами //норм. толщины, цвет - Color

SlashFill

4

символами //удвоенной толщины, цвет - Color

BkSlashFill

5

символами \\удвоенной толщины, цвет - Color

LtBkSlashFill

6

символами \\норм. толщины, цвет - Color

HatchFill

7

вертикально-горизонтальная штриховка тонкими линиями, цвет - Color

XhatchFill

8

штриховка крест-накрест по диагонали “редкими” тонкими линиями, цвет - Color

InterLeaveFill

9

штриховка крест-накрест по диагонали “частыми” тонкими линиями, цвет - Color

WideDotFill

10

“редкие” точки

CloseDotFill

11

“частые” точки

SetBkColor(Color)

процедура, устанавливающая цвет фона

ClеarDeviсe

очищает экран и устанавливает курсор в позицию (0,0)

GraphDefaults

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

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

Цвет

Цвет

Код

Цвет

Цвет

Код

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

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

1. Подключить модуль GRAPH - библиотеку графических процедур:

Uses Graph;

2. Установить графический режим с помощью двух переменных:

Var

GraphDriver, GraphMode: integer;

Begin

GraphDriver:=detect;

InitGraph(GraphDriver, GraphMode, 'C:\Programs\TP7.1\BGI');

{С этого момента все графические средства доступны пользователю}

{тело программы}

CloseGraph;

End.

Ход работы:

  1. Запустить Turbo Pascal.

  2. Набрать текст программы, рисующей корабль.

Program ship;

Uses Graph;

Var GD,GM,x:integer;

Begin

GD:=Detect;

InitGraph (GD,GM, 'C:\Programs\TP7.1\BGI');

ClearDevice;

Setfillstyle (1,cyan);

Floodfill (1,1,cyan);

Setcolor (brown);

Arc (400,250,270,0,50);

Moveto (200,300);

Linerel (-50,-50);

Linerel (300,0);

Moveto (200,300);

Linerel (200,0);

Moveto (350,250);

Linerel (0,-200);

Linerel (3,0);

Linerel (0,200);

Setcolor (black);

Ellipse (349,140,90,270,95,90);

Ellipse (349,140,90,270,30,90);

Setfillstyle (9,brown);

Floodfill (300,260,brown);

x:=0;

Setcolor (blue);

repeat

Ellipse (x,294,180,0,10,7);

x:=x+20;

until x=680;

x:=0;

Setcolor (black);

repeat

Ellipse (x,310,180,0,10,7);

x:=x+20;

until x=680;

Setfillstyle (1,blue);

Floodfill (1,400,blue);

x:=0;

repeat

Ellipse (x,310,180,0,10,7);

x:=x+20;

until x=680;

x:=0;

repeat

Ellipse (x,335,180,0,10,7);

x:=x+20;

until x=680;

x:=0;

repeat

Ellipse (x,365,180,0,10,7);

x:=x+20;

until x=680;

x:=0;

repeat

Ellipse (x,400,180,0,10,7);

x:=x+20;

until x=680;

x:=0;

repeat

Ellipse (x,440,180,0,10,7);

x:=x+20;

until x=680;

Setfillstyle (1,lightgray);

Floodfill (300,200,black);

Setfillstyle (1,brown);

Floodfill (351,245,brown);

Setcolor (yellow);

Circle (50,50,20);

Setfillstyle (1,yellow);

Floodfill (50,50,yellow);

Setcolor (white);

Settextstyle (gothicfont,0,3);

Outtextxy (360,250,'Shark');

Setcolor (darkgray);

Arc (500,70,30,150,10);

Arc (518,70,30,150,10);

Arc (530,85,30,150,10);

Arc (548,85,30,150,10);

Arc (505,100,30,150,10);

Arc (523,100,30,150,10);

Setcolor (red);

Ellipse (280,120,190,350,10,3);

Moveto (290,120);

Linerel (-5,20);

Linerel (20,-5);

Ellipse (305,145,100,260,3,10);

Moverel (0,20);

Linerel (-20,-5);

Linerel (5,20);

Ellipse (280,170,10,170,10,3);

Moverel (-20,0);

Linerel (5,-20);

Linerel (-13,5);

Ellipse (262,145,280,80,3,10);

Moverel (0,-20);

Linerel (13,5);

Linerel (-5,-20);

Setfillstyle (1,red);

Floodfill (275,125,red);

Readln;

CloseGraph;

End.

Вопросы:

  1. Что такое драйвер? Где он находится?

  2. Что значит инициализировать графический режим? Что для этого нужно сделать?

  3. Где находятся стандартные графические функции и процедуры? Что нужно сделать, чтобы ими воспользоваться?

  4. Какие основные ошибки Вы допускали при инициализации графики?

  5. Назовите процедуры очистки экрана в текстовом и графическом режиме.

  6. С помощью какой процедуры можно поменять цвет рисования линии?

  7. С помощью какой процедуры можно поменять стиль закраски? Что обозначают параметры этой процедуры?

  8. Каким требованиям должна соответствовать фигура, чтобы она закрасилась без ошибок?