русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Приклад № 1 Малювання лінійчатих фігур


Дата додавання: 2014-11-28; переглядів: 788.


Найбільш універсальним в графіці BGI при побудові лінійчатих образів є викоритсання процедур Line, LineTo и LineRel. Причем процедуры LineTo( x, y) та LineRel( dX, dY). Іноді вигидніше викоритсовувати процедури DrawPoly и FillPoly.

Приклад програми, з процедурами побудови праивильних багатокутників та зіркоподібних фігур.

 

uses Graph, Crt;

var Gd,Gm, i: Integer;

{ Процедура малювання зірки з центром Xc,Yc, радіусамі описаного ( r1 ) та вписаного ( r2 ) кола, з кількістю промінів N і кольором color. При r1=r2 маємо правильний багатокутник.}

PROCEDURE Star1( Xc,Yc, r1,r2, N, color: integer);

var ugol: real;

r,i: integer; { кут і радіус для поточної вершини }

x,y: array[1..1000] of integer; { масиви координат вершин фігури }

begin

if n>500 then Exit; { ограничение по кількісті вершин зірки }

setColor(color); { кольор фігури}

for i:=1 to 2*N do begin { перебор вершин зірки }

ugol:= i*pi/N; { кут для поточної вершини }

if i mod 2 =0 then R:=r1

else R:=r2; { чередування радіусу

для поточної вершини }

x[i]:= Xc + round( R*cos(ugol)); { масиви координат }

y[i]:= Yc + round( R*sin(ugol)) end; { для вершин фігури }

MoveTo( x[2*N], y[2*N]); { перехід к останньої вершині }

{послідовний обхід вершин }

for i:=1 to 2*N do LineTo( x[i], y[i])

end;

 

{Процедура малювання зірки з центром Xc,Yc, радіусом R описаного кола, числом вершин N та кольором color зсамоперетином сторін.}

PROCEDURE Star2( Xc,Yc, R, N, color: integer);

var i,j: integer;

ugol: real; { кут для поточної вершини}

x,y: array[1..500] of integer; { масиви координат

вершин фігури }

begin

if n>500 then exit; { ограничение по кількісті вершин зірки }

setColor(color); { кольор фігури }

for i:=1 to N do begin { перебір вершин зірки}

ugol:= i*2*pi/N; { кут для поточної вершини }

x[i]:= Xc + round( R*cos(ugol)); { масиви координат }

y[i]:= Yc + round( R*sin(ugol)) end; { вершин фігури }

MoveTo( x[N], y[N]); { перехід к останньої вершині }

for i:=1 to N do begin { обхід вершин с перескоками }

 

if N mod 2 =0 then

j:=(3*i-1)mod N +1 { якщо N парне, токрок через дві вершини }

else

j:=(2*i-1)mod N +1; { якщо непарне, то крок через одну вершину }

 

if( n<5)or( n=6) then j:=i; { вирождені випадки}

LineTo( x[j], y[j]) end; {малювання при обході вершин }

end;

begin

Gd:=0; InitGraph(Gd, Gm, 'c:\tp7\bgi');

{ демонстація роботи програми зірки}

for i:=1 to 7 do Star1(i*80, i*60, 50,20, i+3, i+8);

ReadKey; Cleardevice;

for i:=1 to 7 do Star2(i*80, i*60, 50, i+4, i+8);

ReadKey; CloseGraph end.

Приклад № 2Графічна заставка: рух фігури довільної форми з лівого нижнього кута екрана в правий верхній) з появою в іншої стороні екрану

 

Program move_ graf;

Uses graph, crt;

Var Driver, Mode, ErrCode, i, j: integer;

P: pointer;{ Указатель для хранения картинки}

Size: word;{ Количество памяти для картинки}

Begin

Driver:= Detect; { Авт. определение типа адаптера}

InitGraph ( Driver, Mode, 'C:\TP7\BGI');

ErrCode:= GraphResult;

if ErrCode = 0 then { Если нет ошибки при открытии}

begin { графического режима}

SetBkColor (11); SetColor (4);{ Цвета}

PieSlice ( 21, GetMaxy-21, 0, 360, 20);

Size:= ImageSize (1, GetMaxy, 41, GetMaxy-40 );

GetMem ( P, Size); { Запрос на выделение памяти}

{ Сохранение битового образа изображения}

GetImage (1, GetMaxy, 41, GetMaxy-40, p^ );

ClearDevice; { Очистка экрана}

repeat

for i:= 1 to GetMaxX do

begin { NormalPut-для норм. изображения}

PutImage ( i, GetMaxy-i, p^, NormalPut );

delay(1); { XorPut-для очистки изображения}

PutImage ( i, GetMaxy-i, p^, XorPut );

end;

until keypressed;

CloseGraph;

end; { if }

End.

 

 

СКЛАД ЗВІТУ:

1. Тема, ціль роботи.

2. Текст завдань для виконання .

3. Порядок виконання роботи.

4. Хід виконання роботи - текст програми, результат роботи програми на дискеті

5. Вивід по роботі

 

КОНТРОЛЬНІ ПИТАННЯ:

1. Яким чином в мові Паскаль здійснюється прехід в графічний режим?

2. Чи можна визначити драйвер автоматично?

3. Яки типи процедур та функцій для роботи з графікою існують?

4. Перелічите основні процедури та функції керування кольором та стилем

5. Перелічите основні процедури та функції малювання примітивів

6. Як організувати малювання лінійчатих фігур?

7. Яким чином можна замалювати замкнену фігуру?

8. Яким чином організується рух фігури на екрані?

 


<== попередня лекція | наступна лекція ==>
ЗМІСТ, ПОСЛІДОВНІСТЬ, МЕТОДИКА ВИКОНАННЯ РОБОТИ | Индивидуальные задания для СРС


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн