ТЕМА №7: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ
ПРОГРАММНО - ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
ЦЕЛИ И ЗАДАЧИ: Знакомство с операторами графики языка Turbo-Pascal. Выработка навыков работы в Turbo-Pascal. Решение практических задач с использованием операторов графики.
ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
Учащиеся должны знать:
- Что такое графический режим;
- Систему координат графического языка Turbo-Pascal;
- Какие модули содержат графические процедуры (нестандартные операторы);
- Основные операторы графики;
- Как инициализировать и закрывать графический режим.
Учащиеся должны уметь:
- Задавать координаты точек на экране монитора;
- Грамотно инициализировать графический режим;
- Правильно использовать операторы графики;
- Составлять программы с использование операторов графики;
ПЛАН-СОДЕРЖАНИЕ УРОКА
Модули Turbo Pascal. Модуль crt. Модуль graph.
В языке Turbo Pascal основная часть процедур и функций находится в так называемых модулях:
- Модуль crt, содержащий процедуры и функции, организующие связь с консолью компьютера. Консолью компьютера называется его монитор и клавиатура.
- Модуль graph, в котором находятся процедуры и функции, организующие работу в графическом режиме.
- Текстовой экран, в котором могут отображаться только символы (25 строк по 80 символов в каждой).
- Графический экран, в котором изображение представляется в виде точек, именуемых пикселями. Размер этого экрана зависит от типа монитора, чаще всего 640х480 пикселов. Нулевая точка системы координат находится в верхнем левом углу экрана. Это связано с тем, что в процессе создания изображения на экране, электронный луч в кинескопе движется так же, как мы читаем текст – из верхнего левого угла слева направо, и сверху вниз. Координаты точек могут принимать только целые значения.
Работа Turbo Pascal может быть организована в двух режимах (экранах).
Инициализация графического режима.
Для инициализации графического режима необходимо подключение модуля graph, кроме того объявить две целочисленные переменные gd, gm, которы используются при инициализации режима. Собственно инициализация происходит при записи в первую из переменных номер драйвера, соответствующий автоматически определенному типу монитора (gd:=detect;). А так же при выполнении процедуры initgraph(gd,gm,'');. При этом в переменную gm записывается номер графического режима, а '' обозначает, что поиск графического драйвера надо проводить в текущем каталоге. Пример инициализации графического режима:
uses crt, graph; {подключение модулей}
var gd,gm:integer;
begin
clrscr;
gd:=detect; initgraph(gd,gm,'');
. . . . . . . . . . . . . . . . . .
При использовании графического режима, процедуры ввода/вывода текстового режима (write, writeln и read, readln) не работают. Перед их использование сначала производится закрытие графического режима с помощью процедуры closegraph.
Кроме того, для задания графического режима можно использовать технические характеристики, которые можно самим определить. Для определения типа вашего монитора (функция getdrivername), максимальных значений его координат по осям x
(функция getmaxx) и y
(функция getmaxy), а также максимального номера цвета (функция getmaxcolor) можно использовать следующую программу:
program monitor;
uses crt, graph; {подключение модулей}
var gd,gm,xmax,ymax,maxcolor:integer;
begin
clrscr;
gd:=detect; initgraph(gd,gm,'');
{автоматическое определение типа монитора и запись номера драйвера в переменную gd; переменной gm присваивается номер соответствующего графического режима, а два апострофа означают, что поиск графического драйвера надо производить в текущем каталоге}
xmax:=getmaxx; ymax:=getmaxy; maxcolor:=getmaxcolor;
closegraph; {Закрытие графического экрана}
writeln ('xmax=',xmax,' ymax=',ymax,' maxcolor=',maxcolor,' ',getdrivername);
repeat until keypressed; end.
Для монитора типа SVGA программа выдаст строку:
xmax=639 ymax=479 maxcolor=15 EGAVGA
Графические процедуры.
- Процедура setcolor (c) производит установку текущего цвета, процедура setbkcolor (c) производит установку цвета фона. c – номер или наименование цвета.
0 – black |
4 – red |
8 – darkgray |
12 – lightred |
1 – blue |
5 – magenta |
9 – lightblue |
13 – lightmagenta |
2 – green |
6 – brown |
10 – lightgreen |
14 – yellow |
3 – cyan |
7 – lightgray |
11 – lightcyan |
15 – white |
- Процедура floodfill (x, y, c) после установления типа заливки производит заполнение замкнутой фигуры. x, y – координаты какой-либо точки внутри этой фигуры, c – цвет границы заполняемой фигуры.
0 |
emptyfill |
сплошная заливка текущим цветом фона |
1 |
solidfill |
сплошная заливка текущим цветом вывода |
2 |
linefill |
штриховка горизонтальными линиями -------- |
3 |
ltslashfill |
штриховка линиями вида //// |
4 |
slashfill |
штриховка утолщёнными линиями вида //// |
5 |
bkslashfill |
штриховка линиями вида \\\\ |
6 |
ltbkslashfill |
штриховка утолщёнными линиями вида \\\\ |
7 |
hatchfill |
заливка узором вида ++++++ |
8 |
xhatchfill |
заливка узором вида ххххххх |
9 |
interleavefill |
частые пересекающиеся штрихи |
10 |
widedotfill |
заливка узором – редкие точки |
11 |
closedotfill |
заливка узором – частые точки |
12 |
userfill |
шаблон пользователя |
0 |
solidln |
сплошная линия – установлена по умолчанию |
1 |
dottedln |
точечная линия |
2 |
centerln |
штрих-пунктирная линия |
3 |
dashedln |
пунктирная линия |
4 |
userbitln |
Линия, заданная пользователем |
- Процедура line (x1, y1, x2,y2) проводит текущим цветом отрезок прямой между точками с координатами x1, y1 и x2, y2.
- Процедура putpixel (x, y, c) рисует точку (пиксель) с координатами x, y цвета c.
- Процедура getpixel (x, y) позволяет определить цвет точки с координатами x, y.
- Процедура circle (x, y, r) рисует текущим цветом окружность с центром в точке имеющей координаты x, y и радиусом r.
- Процедура arc (x, y, nangl, kangl, r) рисует дугу окружности с радиусом r, с центром в точке имеющей координаты x, y, начальный угол дуги nangl, заданный в градусах, конечный угол дуги kangl, заданный в градусах (с отсчётом против часовой стрелки!!!).
- Процедура pieslice (x, y, nangl, kangl, r) используя те же параметры, что и процедура arc рисует текущим цветом сектор круга, закрашенный в текущем стиле. Чувствительна к масштабированию по осям.
- Процедура ellipse (x, y, nangl, kangl, rx, ry)
рисует текущим цветом дугу эллипса, с центром в точке имеющей координаты x, y. Начальный угол дуги - nangl, заданный в градусах, конечный угол дуги - kangl, заданный в градусах, rx радиус эллипса по оси x, ry радиус - по оси y (если nangl=0, а kangl=360, рисуется эллипс).
- Процедура sector (x, y, nangl, kangl, rx, ry)
используя те же параметры, что и процедура ellipse рисует текущим цветом сектор эллипса, закрашенный в текущем стиле.
- Процедура rectangle (x1, y1, x2, y2) рисует текущим цветом прямоугольник с координатами верхнего левого угла x1, y1 и координатами правого нижнего угла x2, y2, при этом x1<=x2 и y1<=y2.
- Процедура bar (x1, y1, x2, y2) рисует текущим цветом прямоугольник, закрашенным в текущем стиле.
- Процедура bar3d (x1, y1, x2, y2, d, v) рисует текущим цветом параллелепипед, закрашенный в текущем стиле. Координаты задают левый верхний и правый нижний углы передней грани. Ширина боковой d грани исчисляется числом пикселей по горизонтали. Если задают выражение v=true, верхняя грань «видна», иначе она не вычерчивается (случай, когда параллелепипед «накрыт» другим изображением).
- Процедура lineto (x, y) проводит текущим цветом линию из текущей позиции в точку с заданными координатами, перемещая в неё и текущую позицию.
- Процедура moveto (x, y) устанавливает новые координаты текущей позиции.
- Процедуры getx и gety выдают текущее положение курсора по координатам x и y соответственно.
- Процедура linerel (dx, dy) изменяя на величину dx и dy координату x и y текущей позиции, проводит текущим цветом линию между старой и новой позицией.
- Процедура moverel (dx, dy) изменяет координаты x и y текущей позиции на величину dx и dy соответственно.
- Процедура outtextxy (x, y, ‘text’) для вывода текста в графическом режиме, процедура перемещает текущую позицию в точку с координатами x, y и выводит строку text, кроме того, можно вместо текстовойконстанты использовать строковую переменную.
- Процедура settextstyle (sh, n, r) позволяет манипулировать стилем текста. Sh (шрифт) - имеет значения 0..4 (0 – матричный шрифт; 1 – триплекс; 2 – мелкий; 3 – прямой; 4 – готический, 1 – 4 для кириллицы не поставляются!!!). N (направление) - имеет значение 0 – текст идёт слева направо и 1 – текст идёт снизу вверх, по вертикали, символы «положены на бок». R (размер шрифта) - коэффициент увеличения 1..10.
- Задержка изображения на экране на доли секунды delay(5000);
- Очистка графического экрана Cleardevice;
Примеры операторов графики:
- Линия - line(200,200,400,400);
- Круг - circle(500,300,50);
- Прямоугольник rectangle - (100,100,600,400)
- Квадрат - bar(50,50,200,100);
- Куб - bar3d(200,200,250,300,40,topon);
- Эллипс - ellipse(500,100,0,360,10,30);
- Изменение цвета фона - setbkcolor(0);
- Изменение цвета переднего плана - setcolor(5);
- Точка - putpixel(100,100,14);
- Текст в графическом режиме - outtextxy(300,300,'ura');
- Заливка замкнутого контура:
setfillstyle(1,14);
floodfill(500,300,15);
Принципы организации движения графических фигур:
Можно оживить изображение на экране, если воспользоваться принципами анимации: нарисовать, стереть (нарисовать цветом фона), нарисовать в новом месте и т.д.