1. Графический режим.Графический экран дисплея состоит из точек, которые можно засвечивать определённым цветом или гасить, в результате чего на экране создаётся некоторое изображение. Точки называют пикселями. Количество точек на экране может быть различным. Это зависит от качества монитора. Рассмотрим экран, который имеет 640 точек в горизонтальном (х) направлении и 480 — в вертикальном (у). Начало отсчета точек находится в левом верхнем углу экрана. Каждая точка характеризуется двумя координатами (х, у). Примеры размещения некоторых точек на экране показаны на рисунке 3.
Программы, которые выполняют графические построения, преимущественно линейные, и состоят из вызовов стандартных графических процедур и функций, собранных в модуле Graph.tpu.
Сам модуль может находиться в библиотеке Turbo.tpl или в некотором каталоге на диске. В последнем случае модуль необходимо присоединить командой usesв начале программы. Для работы с графикой необходим также файл egavga.bgi - драйвер для VGA адаптера или файл cga.bgi для соответсвующего CGA адаптера монитора.
Рис. 3. Координаты точек на графическом экране 640x480.
Для построения изображений сначала нужно задать графический режим. Это делается так:
<разделы описаний и объявлений конкретной программы>;
{Переменные для определения характеристик дисплея]
<текст конкретной программы с графическими командами>
End.
2. Процедуры и функции для графических построений.Рассмотрим процедуры модуля Graph,предназначенные для графических построений:
initgraph(driver, mode, <путь к драйверу>) - задаёт графический режим. Путь к файлу-драйверу указывают (в апострофах), если его нет в каталоге, из которого запускается среда программирования;
detectgraph(<драйвер>, <режим>) - возвращает значения характеристик дисплея;
setcolor(<цвет>) - задаёт цвет будущего изображения;
line(xl, yl, х2, у2) — рисует линию между двумя заданными точками;
lineto(х, у) — рисует линию от текущей точки до точки (х, у);
linerel(dx, dy) — рисует линию от текущей точки с заданными приращениями;
rectangle(xl, yl, x2, y2) - рисует прямоугольник с заданными координатами диагонально противоположных вершин (левой верхней и правой нижней);
setviewport(xl, yl, x2, y2, true) - задаёт координаты нового графического окна. Логическая постоянная true задаёт режим отсекания изображения, которое выходит за рамки окна;
3. Цвета.Цвета задают числами или английскими названиями:
black=0
- черный;
blue=l
- синий;
green=2
- зеленый;
cyan=3
- голубой;
red=4
- красный;
magenta=5
— фиолетовый;
brown=6
— коричневый;
lightgray=7
— светло-серый;
darkgray=8
— темно-серый;
lightblue=9
— ярко-синий;
lightgreen=10
— ярко-зеленый;
lightcyan=ll
— ярко-голубой;
lightred=12
— ярко-красный;
lightmagenta= 13
— ярко-фиолетовый;
yellow=14
— жёлтый;
white=15
— белый.
Задача 1. Нарисовать разными цветами десять концентрических окружностей с общим центром посередине экрана, то есть в точке с графическими координатами (320; 240), и описать вокруг них красный прямоугольник.
programCirclelO;
usesCrt, Graph;
var driver, mode, r : integer;
Begin
clrscr;
driver := detect;
initgraph(driver, mode, ");
r := 10; {радиус первой окружности 10 пикселей]
whiler <= 100do
Begin
setcolor(r div 10);
circle(320, 240, r);
r := r + 10
end;
setcolor(red);
rectangle(220, 140, 420,340);
readln
End.
Задача 2.Нарисовать эмблему. В верхней левой части графического экрана на черном фоне нарисовать голубой квадрат, а в нем - черный круг, закрашенный желтым цветом. В центре эмблемы черными буквами написать слово «Киев».
programEmblema;
usesCrt, Graph;
vardriver, mode, i, xl, yl : integer;
x, у : real;
Begin
clrscr;
driver := detect;
imtgraph(driver, mode, ");
setbkcolor(0),
setcolor(3);
rectangl(100, 0, 300, 200);
setfillstyle(l, 3);
floodfill(200, 100, 3);
setcolor(14);
circle(200, 100, 100),
setfillstyle(l, 14);
floodfill(200, 100, 14);
setcolor(0);
circle(200, 100, 100);
settextstyle(0, 0, 3);
outtextxy(135, 100, 'Киев');
readln
End.
Задача З. Написать программу рисования графика функции у = 2sin(2x)+1 на отрезке [0; 2p], протабулировав функцию с шагом h=0,1. В результате экспериментов, изменяя значения амплитуды в пикселях (при помощи множителя М), добиться изображения графика на экране наилучшим образом.
programGrafikSm;
usesCrt, Graph;
consta = 0; b = 2 * pi;
h=0.1; h1 - 5;
xO = 60; yO = 240;
M = 50;
Vardriver, mode, xl, yl : integer;
x, у : leal;
functionf(x : real) : real;
Begin
f := 2 * sin(2 * x) + 1
end;
Begin
clrscr;
driver := detect;
mitgraph(driver, mode, ");
setcolor(14);
setbkcolor(l);
line(20, yO, 600, yO);
line(xO, 440, xO, 20); {Координатные оси}
x := a;
xl:- xO + trunc(M * x);
{x, у - математические координаты}
У := f(x);
yl := у0 - trunc(M * у);
{xl, yl - графические координаты}
moveto(xl, yl);
setcolor(15);
whilex <= bdo
Begin
У := f(x);
yl := yO - trunc(M * y);
lineto(xl, yl);
xl := xl + h1;
x := x + h
end;
settextstyle(0, 0, 1);
outtextxy(60, 245, '0');
outtextxy(360, 245, '6.3');
settextstyle(0, 0, 2);
outtextxy(200, 380, 'Выполнил Панчишин Ю.');
readln
End.
Задание 1-3. Решите задачи 24, 25 и 26 своего варианта.
4. Понятия об анимации.Чередование засвечиваний и гашений изображения используют для имитации движения этого изображения на экране. Перед очередным засвечиванием объект необходимо переместить в направлении его движения. Движение изображения на экране называют анимацией.
Для имитации движения объекта на экране нужно выполнить такой циклический алгоритм:
1. Нарисовать объект в нужной точке, сделать паузу.
2. Удалить объект, закрасив его цветом фона.
3. Изменить координаты объекта.
4. Возвратиться к пункту 1.
Задача 4. Изобразить движение солнца на голубом небе в горизонтальном направлении.
programMySun;
usesCrt, Graph;
vardriver, mode, i : integer;
Begin
clrscr;
driver :=- detect;
initgraph(driver, mode, ");
i:=0;
whilei <= 750do
Begin
setcolor(14);
setbkcolor(3);
setfillstyle(l, 14);
circle(i, 100, 50);
floodfill(i, 100, 14);
delay(200);
setfillstyle(l, 3);
setcolor (3);
circle(i, 100, 50);
floodfilld, 100, 3);
i := i + 5
end;
readln
End.
Задание 4. Придумать сюжет с анимацией и составить программу для его реализации.