
- •Часть 2
- •Содержание
- •1 Цель работы
- •2 Построение многоугольников.
- •3 Практическое задание
- •4 Построение сложных линейчатых фигур
- •5 Практическое задание
- •6 Стили и режимы вывода линейчатых фигур
- •7 Практическое задание
- •1 Цель работы
- •2 Многократное рисование фигуры с поворотом относительно центра узора
- •3 Практическое задание
- •4 Создание узоров построением зеркальных отображений.
- •5 Практическое задание
- •6 Масштабирование вписыванием фигур
- •7 Практическое задание
- •8 Штриховка углов
- •9 Практическое задание
- •1 Цель работы
- •2 Наборы последовательно выводимых отрезков с изменением их ориентации
- •3 Практическое задание
- •4 Разветвляющиеся наборы отрезков
- •5 Практическое задание
- •6 Лабиринты Гильберта
- •5 Практическое задание
- •1 Цель работы
- •2 Алгоритмы Брезенхейма
- •3 Практическое задание
- •4 Построение кривых второго порядка
- •3 Практическое задание
- •Часть 2
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.