yandex rtb 1
ГоловнаЗворотній зв'язок
yande share

Основы программирования

13. ГРАФИКА

1. Графический режим. Графический экран дисплея состоит из точек, которые можно засвечивать определённым цветом или гасить, в результате чего на экране создаётся некоторое изображение. Точки называют пикселями. Количество точек на экране может быть различным. Это зависит от качества монитора. Рассмотрим экран, который имеет 640 точек в горизонтальном (х) направлении и 480 — в вертикальном (у). Начало отсчета точек находится в левом верхнем углу экрана. Каждая точка характеризуется двумя координатами (х, у).

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

Сам модуль может находиться в библиотеке Turbo.tpl или в некотором каталоге на диске. В последнем случае модуль необходимо присоединить командой uses в начале программы. Для работы с графикой необходим также файл egavga.bgi — драйвер для VGA адаптера или файл cga.bgi для соответсвующего CGA адаптера монитора.

Для построения изображений сначала нужно задать графический режим. Это делается так:

<разделы описаний и объявлений конкретной программы>;

{Переменные для определения характеристик дисплея]

var driver, mode : integer;

begin

driver := detect;   {detect - стандартная постоянная}

{(задание графического режима]

initgraph (driver, mode, ‘’);

if graphresult <> 0 then

begin

writeln('Графический режим задать не удалось');

halt

end;

<текст конкретной программы с графическими командами>

end.

2. Процедуры и функции для графических построений. Рассмотрим процедуры модуля Graph, предназначенные для графических построений:

initgraph (driver, mode, <путь к драйверу>) - задаёт графический режим. Путь к файлу-драйверу указывают (в апострофах), если его нет в каталоге, из которого запускается среда программирования;

detectgraph (<драйвер>, <режим>) - возвращает значения характеристик дисплея; ,

setcolor (<цвет>) — задаёт цвет будущего изображения;

setbkcolor (<цвет>) - задаёт цвет фона;

putpixel (х, у, <цвет>) — высвечивает точку (х, у) заданным цветом;

line (xl, yl, х2, у2) — рисует линию между двумя заданными точками;

lineto (х, у) - рисует линию от текущей точки до точки (х, у);

linerel (dx, dy) — рисует линию от текущей точки с заданными приращениями;

rectangle (xl, yl, x2, y2) - рисует прямоугольник с заданными координатами диагонально противоположных вершин (левой верхней и правой нижней);

setviewport (xl, yl, x2, y2, true) - задаёт координаты нового графического окна. Логическая постоянная true задаёт режим отсекания изображения, которое выходит за рамки окна;

bar (xl, yl, x2, y2) - рисует закрашенный прямоугольник;

bar3d (xl, yl, x2, y2, <объёмная глубина>, true) - рисует параллелепипед ;

circle (х, у, R) - рисует окружность радиуса R с центром в точке (х, у);

arc (x, у, <начальный угол>, <конечный угол>, <радиус>) -рисует дугу;

pieslice (x, у, <начальный угол>, <конечный угол>, <радиус>) — рисует закрашенный сектор;

ellipse (х, у, <начальный угол>, <конечный угол>, <горизонт. радиус>, <вертик. радиус) - рисует эллипс или дугу эллипса;

setfillstyle (<заполнение>, <цвет>) - задаёт способ заполнения замкнутой области в зависимости от значения параметра заполнения: 0 — заполнение цветом фона, 1 — сплошное заполнение, 2 — заполнение толстыми горизонтальными линиями, 3 - заполнение наклонными линиями, ..., 10 -заполнение точками, 11 — плотное заполнение точками;

floodfill (x, у, <цвет границы>) — заполняет замкнутую область, в которой находится точка (х, у);

closegraph — закрывает графический режим;

outtext (<текст>) - выводит заданный текст из текущей позиции;

outtextxy (x, у, <текст>) - выводит текст в заданном месте;

settextstyle (<шрифт>, <направление>, <размер>) — задаёт вид символов, направление вывода: 0 — горизонтально, 1 — вертикально, и размеры символов: 1, 2, 3.

Рассмотрим некоторые функции модуля Graph:

graphresult — возвращает код ошибки, если невозможно задать графический режим, и 0 - в случае задания;

getmaxx - возвращает значение размера экрана вдоль горизонтали;

getmaxy - возвращает значение размера экрана вдоль вертикали;

getcolor - возвращает значение текущего цвета;

getcolor(x,y) — возвращает значение цвета точки (х, у);

getx, gety - возвращают координаты текущего пикселя.

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), и описать вокруг них красный прямоугольник.

program CirclelO;

uses Crt, Graph;

var driver, mode, r : integer;

begin

clrscr;

driver := detect;

initgraph(driver, mode, ‘’);

r := 10;        {радиус первой окружности 10 пикселей}

while r <= 100 do

begin

setcolor(r div 10);

circle(320, 240, r);

r := r + 10

end;

setcolor(red);

rectangle(220, 140, 420,340);

readln

end.

Задача 2. Нарисовать эмблему. В верхней левой части графического экрана на чёрном фоне нарисовать голубой квадрат, а в нём — чёрный круг, закрашенный жёлтым цветом. В центре эмблемы чёрными буквами написать слово «Львов».

program Emblema;

uses Crt, Graph;

var         driver, mode, i, xl, yl : integer;

x, у : real;

begin

clrscr;

driver := detect;

initgraph(driver, mode, ‘’);

setbkcolor(0);

setcolor(3);

rectangle(100, 0, 300, 200);

setfillstyle(l, 3);

flobdfill(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.

Задача 3. Написать программу рисования графика функции у = 2sin(2x) + 1 на отрезке

[0; 2л], протабулировав функцию с шагом h=0,l. В результате экспериментов, изменяя значения амплитуды в пикселях (при помощи множителя М), добиться изображения графика на экране наилучшим образом.

program GrafikSin;

uses Crt, Graph;

const      a = 0; b = 2 * pi;

h = 0.1;     hi = 5;

x0 = 60;  y0 = 240; M = 50;

var         driver, mode, xl, yl : integer;

x, у : real;

function f(x : real) : real;

begin

f := 2 * sin(2 * x) + 1

end;

begin

clrscr;

driver := detect;

initgraph(driver, mode, ‘’);

setcolor(14);

setbkcolor(l);

line(20, y0, 600, y0);

line(x0, 440, x0, 20); {Координатные оси}

x := a;

xl:= x0 + trunc(M * x);

{x, у - математические координаты}

y := f(x);

yl := y0 - trunc(M * y);

{xl, yl - графические координаты}

moveto(xl, yl);

setcolor(15);

while x <= b do

begin

y := 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. Изобразить движение солнца на голубом небе в горизонтальном направлении.

program MySun;

uses Crt, Graph;

var driver, mode, і : integer;

begin

clrscr;

driver := detect;

initgraph(driver, mode, ‘’);

i:=0;

while і <= 750 do

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);

floodfill(i, 100, 3);

і := і + 5

end;

    readln

end.

Задание 4. Придумать сюжет с анимацией и составьте программу для его реализации.

 

 

21