Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal / Методические указание / Линейчатые графические образы.DOC
Скачиваний:
22
Добавлен:
15.06.2014
Размер:
878.59 Кб
Скачать

3 Практическое задание

3.1 Составить процедуры рисования многоугольников и звезд с дополнительными отрезками.

3.2 Составить процедуры рисования многоугольников и звезд с растяжкой по горизонтали или вертикали.

3.3 Составить программу заполнения прямоугольных областей орнаментом с использованием процедур рисования правильных многоугольников и звезд.

а б в г

4 Построение сложных линейчатых фигур

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

uses Graph,Crt;

var Gd,Gm, Gx,Gy, i,j, k,n,

xc,yc, r, rx,ry,

nx,ny,nn: integer;

{----------------------------------------------------

Процедура рисования звезды с центром Xc,Yc,

радиусом R описанной окружности, числом вершин N и цветом color с самопересечениями сторон. Отрезками соединяются наиболее удаленные пары вершин, но не диаметрально противоположные.

----------------------------------------------------------------------------------------}

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

var i,j,k, step: 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));

Circle( x[i],y[i], 2) end;

MoveTo( x[N], y[N]); { переход к последней вершине }

step:=(N-1) div 2; { число пропускаемых вершин }

k:=1; { счетчик числа обходов }

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

j:=(step*i-2+k)mod N +1; { номер очередной вершины }

LineTo( x[j], y[j]); { рисование при обходе вершин }

{ если контур обхода замыкается раньше перебора всех точек }

if ( j=N)and( i<N)

then begin MoveTo( x[k], y[k]); { смещение стартовой точки }

inc(k) end { и последовательности нумерации при обходе }

end end;

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

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

Gx:=GetMaxX; Gy:=GetMaxY;

nn:=20; { общее количество рисунков }

nx:=5; { количество рисунков по горизонтали }

ny:=(nn-1) div nx +1; { и по вертикали }

rx:=Gx div nx;

ry:=Gy div ny; { размеры области для одного рисунка }

if rx>ry then r:=ry div 2 -5

else r:=rx div 2 -5; { размер рисунка }

for k:=1 to nn do begin

i:=(k-1) mod nx +1; { позиция рисунка по горизонтали }

j:=(k-1) div nx +1; { позиция рисунка по вертикали }

xc:= rx div 2 +(i-1)*rx; { координаты центров рисунков }

yc:= ry div 2 +(j-1)*ry;

N:=k+2; { число вершин фигуры }

Star3(xc,yc, r, N, 8) end;

ReadKey; CloseGraph end.