TURBO PASCAL

Новости       

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности 

Гостевая книга

Спонсор

От автора

 

                   Практическое задание N.  1. 60

            1.  С использованием процедуры OTREZOK построить (при alfa= 90o) прямоугольный и ромбический спиралевидные лабиринты из отрезков разного цвета.

            2.  Построить прямоугольник со сторонами разного цвета и основанием,  движущимся согласно процедуре OTREZOK.

            Следующий пример показывает использование рекурсии при построении узоров,  напоминающих кружева.  Задается размер "стежка" - короткой линии длиной dl,  функция варьирования угла перемещения ugol в зависимости от номера шага n.

uses Graph;

var gD, gM, n, x, y, x1, y1, k: integer;  dl, ugol, ugol_0, s, i: real;

{-----------------------------------------------------------------}

PROCEDURE ANGLE(x, y: integer);

begin n:= n+1;

 ugol:=2*pi*n/s; ugol_0:=ugol;{ равномерное увеличение угла по параметру n }

  ugol:= ugol_0 + i*sin(k*ugol);            { периодическое отклонение угла:

                                              параметр  i  определяет амплитуду,  k - частоту отклонений }

   x1:= x + round(dl*cos(ugol));    { (x1, y1) - координаты следующей точки }

   y1:= y + round(dl*sin(ugol));

    Line(x, y, x1, y1);                                   { рисуем "стежок" }

   if n<s then  ANGLE(x1, y1)                                   { рекурсивный вызов } 

end;

begin  gD:= Detect;  InitGraph(gD,  gM, 'z:\tp7\bgi');

   ugol_0:= 0;                                  { начальное значение угла }

        n:= -1;                   { начальное значение счетчика изменения угла }

          x:= 300;  y:= 70;                           { координаты начала рисования }

         dl:= 4;                                           { размер линии ("стежка") }

          k:= 8;                      { количество циклических изменений угла }

          s:= 500;                                       {  количество "стежков" узора }

          i:= 2. ;                     { амплитуда циклических изменений угла }

ANGLE(x, y);   readln;   CloseGraph  end.

            Вид функции "ugol_0" определяет базовую форму узора.  В приведенном варианте "ugol_0" равномерно изменяется от 0 до 2*PI и базовой линией является окружность (многоугольник).  Слагаемое i*sin(k*ugol) определяет отклонение от базовой формы узора - циклические пульсации угла и заставляет узор "завиваться" вокруг базовой линии.  Коэффициент "k" определяет количество "лепестков" узора,  от параметров "i" и "dl"  зависит их форма и размер.  Параметр "s" определяет количество "стежков" в узоре и следовательно общий размер узора.

            Меняя форму базовой линии,  функцию пульсации угла,  а также размер стежка "dl" в зависимости от номера шага "n",   можно получать самые разнообразные узоры.  Например,  если убрать оператор ugol_0:= ugol;,  то базовой линией узора будет прямая,  наклоненная к оси "Х" под углом ugil_0.  Варьированием i, k, s можно менять периодичность,  форму и размер деталей узора.

 

На первую страницу

Rambler's Top100 PROext: Top 1000
Rambler's Top100

(с) Все права защищены.

По всем интересующим вопросам прошу писать электронный адрес

Hosted by uCoz