|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[32] (xl, yl), то новое построение отрезка начинается с конца предыдущего. Варьируя alfa и delta можно строить различные спиралевидные узоры. Практическое задание N. 1. 60 1.С использованием процедуры OTREZOK построить (при alfa= 90o) прямоугольный и ромбический спиралевидные лабиринты из отрезков разного цвета. 2.Построить прямоугольник со сторонами разного цвета и основанием, движущимся согласно процедуре OTREZOK. Следующий пример показывает использование рекурсии при построении узоров, напоминающих кружева. Задается размер "стежка" - короткой линии длиной dl, функция варьирования угла перемещения ugol в зависимости от номера шага n. uses Graph; var gD, gM, n, x, y, xl, yl, k: integer; dl, ugol, ugol 0, s, i: real; {----------------------------------------------------------------- } PROCEDURE ANGLE(x, y: integer); begin n:= n+l; 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) - координаты следующей точки } yl:= y + round(dl*sin(ugol)); Line(x, y, xl, yl);{ рисуем "стежок" } if n<s then ANGLE(xl, yl){ рекурсивный вызов } begin gD:= Detect; InitGraph(gD, gM, z:\tp7\bgi); ugol 0:= 0;{ начальное значение угла } n:= -l;{ начальное значение счетчика изменения угла } 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 можно менять периодичность, форму и размер деталей узора. Практическое задание N . 1. 61 1.С использованием процедуры ANGLE построить 14-лепестковый узор без самопересечений с разным цветом для каждого лепестка узора. Построить эллиптический узор, задав вместо dl два различных значения dlx и dly. 2.Построить "кружевную ленту" с базовой линией узора в форме синусоиды: вместо оператора ugol 0:= ugol; подставить ugol 0:= Pi/4*sin(ugol);. 3.Построить "кружевную рамку", задавая поворот базовой линии через определенное число циклических изменений угла: ugol 0:= ugol 0 + pi/2;. 6. Создание узоров построением зеркальных отображений фигуры. Большинство людей впервые знакомятся с некоторыми принципами построения узоров, изучая детский зеркальный калейдоскоп. В калейдоскопе система из трех зеркал создает эффект нескольких шестикратных отражений набора цветных кристаллов. Математически такой принцип построения узора можно описать следующим образом. Имеется "N" выходящих из одной точки лучей - осей симметрии. Угол между лучами равен 2*PI/N. Строится первая (исходная) фигура в секторе между первым и вторым лучами. Затем строится вторая фигура как зеркальное отображение первой фигуры относительно второго луча, третья фигура, как зеркальное отображение второй фигуры относительно третьего луча и так далее. Если N - четно, то исходная фигура будет также зеркальным отражением N-й фигуры и получившийся узор будет симметричным (правильный калейдоскоп). Если нет необходимости моделировать реальные отражения, то исходную фигуру можно строить с пересечением осей симметрии и по любому количеству секторов. Ниже приведен пример программы создания узора построением отражений "m" точек относительно "n" осей отражения (зеркал). Исходная фигура - замкнутая ломаная, состоящая из разноцветных отрезков прямых. Для каждой узловой точки линии определяется расстояние до центра узора (радиус r). Угол (ugol), под которым расположена узловая точка относительно горизонтальной линии, вычисляется как арктангенс отношения ординаты "x" к абсциссе "y" (в системе координат центра узора). Угол, под которым расположена отраженная точка, увеличивается на величину, равную удвоенной разности между углом наклона оси отражения и углом расположения отражаемой точки. {---------------------- "Калейдоскоп": ---------- Строится фигура в виде ломаной линии, состоящей из "m-1" отрезков прямых и "n" зеркальных отражений этой ломаной относительно осей симметрии, проходящих через центр узора. Uses Graph,Crt; type mas = array[1..40, var Gd, Gm,n, m, i, j, Rz, xc, yc, xr, yr:integer; alf:real; 1..20] of integer; { длина зеркала } { координаты центра узора } { координаты концов зеркал } { угол между зеркалом и осью X } x, y: mas;{ координаты узлов фигуры } { ---------------------------------------------------------------- } { процедура построения фигуры в виде ломаной линии с "m" узлами } Procedure UZOR(m, n: integer; x, y: mas); Var i, j : integer; ugol : real; begin for j:= l to n do begin moveto(x[m,j],y[m,j]); { установка курсора в m- ную точку ломаной } for i:= l to m do begin { цикл рисования j- ой ломаной по m точкам } setcolor(i mod 7+9); lineto(x[i, j], y[i, j]) end end {----------------------------------------------------------------- } { процедура расчета координат отражений точки (x, y) относительно центра узора} Procedure MIRROR(n, m: integer; var x, y: mas); var i, j : integer; r, ugol: real;{ координаты точки в полярной системе координат } for i:= l to m do begin if x[i,l]<>0 then ugol:=arctan(y[i,l]/x[i,l]) else ugol:=Pi/2; r:= sqrt(l.*x[i,l]*x[i,l]+y[i,l]*y[i,l]); for j:= l to n do begin ugol:= 4*Pi*j/n - ugol; x[i,j]:=round(r*cos(ugol)); y[i,j]:=round(r*sin(ugol)) end end end; { ---------------------------------------------------------------- } BEGIN Gd:= Detect; InitGraph(Gd, Gm, C:\tp7\bgi); SetWriteMode(l); xc:= GetmaxX div 2; yc:= GetmaxY div 2; { координаты центра узора } n:= l2;{ число зеркал } m:= l0;{ число узловых точек ломаной } Rz:= l50;{ длина линии зеркала } for i:= l to n do begin alf:= 2. *PI*i/n; xr:= xc + round(Rz*cos(alf)); yr:= yc - round(Rz*sin(alf)); setcolor(7); line(xr,yr,xc,yc) { построение линий зеркал } end; Randomize; for i:= l to m do begin { расчет координат точек исходной фигуры } x[i,l]:= Random(200)+l; y[i,l]:= Random(l00) end; MIRROR(n, m, x, y);{ расчет координат отраженных точек в системе координат узора } for i:= l to m do{ расчет координат точек узора} for j:= l to n do begin{ в системе координат экрана } x[i,j]:= x[i,j] + xc; y[i,j]:= y[i,j] + yc end; |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||