|
||||||||||||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[31] N:= 7; R:= 170; xc:= GetMaxX div 2; yc:= GetMaxY div 2; for i:= 1 to N do begin alfa:= i*2. *pi/N; x[i]:= xc + round(R*cos(alfa)); y[i]:= yc + round(R*sin(alfa)) { координаты вершин } { исходного N-угольника } for i:= 1 to N do { рисуем N- угольник } { нажать клавишу } x1:= x[1] for i:=1 to N-1 do begin MoveTo(x[N], y[N]); LineTo(x[i], y[i]); ch:= ReadKey; { найдем середины сторон многоугольника и запишем их в массивы новых координат многоугольника } y1:= y[1]; x[i]:= (x[i]+x[i+1]) div 2; y[i]:= (y[i]+y[i+1]) div 2 end; x[N]:= (x[N]+x1) div 2; y[N]:= (y[N]+y1) div 2; { строим многоугольник по новым точкам } MoveTo(x[N], y[N] ) ; for i:=l to N do LineTo(x[i], y[i]); ch:=ReadKey; Until ch=#27; При нажатии клавиши внутрь фигуры будет "убегать" ее уменьшенная копия до нажатия клавиши Esc. Стороны можно делить не пополам, а в каком-либо соотношении. Для стирания фигуры необходимо перерисовать ее в режиме XorPut. Масштабирование фигур можно проводить используя зависимости, приведенные выше для вращения фигуры относительно своего "центра", изменяя Kx и Ky, при постоянных параметрах xf, yf, A. Практическое задание N 1. 57 пульсирующий тре- 1.Создать уменьшающийся треугольник (деление сторон 9:1) угольник. 2.Создать уменьшающийся прямоугольник (деление сторон 3:1) и пульсирующий прямоугольник. Примечание к п. 1 и п. 2: пульсация фигуры достигается перерисовкой ее в режиме XorPut, при многократном увеличении и последующем уменьшении коэффициента масштабирования, например, по закону: K= K + i*0. 02. Где i - параметр цикла. 3. Симметричное отображение фигуры. Пусть хz - ось зеркальной симметрии, тогда координата "yzi" i-ой точки фигуры в системе координат (xz, yz) определяется по формуле: yzi= (yi-yf) *cos(A)-(xi-xf) *sin(A), где xf, yf - координаты любой точки на оси зеркальной симметрии, xi, yi - координаты отображаемой точки в системе координат экрана, 2. Масштабирование фигуры. Рассмотрим случай уменьшения размеров фигуры делением ее сторон. A - угол наклона оси симметрии относительно оси "x" по часовой стрелке. Тогда координаты отраженной точки в системе координат (X0Y) определяются по формулам: xoi xi
xoi = xi + 2*yzi*sin(A); yoi = yi - 2*yzi*cos(A); Приведем пример операторов для расчета координат xo[ i], yo[ i] точек фигуры зеркально отображенной относительно оси, наклоненной под углом "A" и проходящей через точку с координатами xf, yf. for i:= 1 to N do begin yzi:= round((y[i]-yf)*cos(A) - (x[i]-xf)*sin(A)); xo[i]:= x[i] + 2*round(yzi*sin(A)); yo[i]:= y[i] - 2*round(yzi*cos(A)) end; Практическое задание N 1. 58 1.Нарисовать елку с основанием в центре экрана и получить три зеркальных отображения относительно осей, проходящих через центр экрана под углом +450, 00, -450 к оси "х". 2.Выполнить п. 1 для подсвечника со свечой. 4. Штриховка углов. Определим координаты отрезков, образующих стороны угла и поделим их на N-частей. Соединим попарно точки раздела сторон угла так, чтобы наиболее удаленная от вершины угла точка на одной стороне соединялась с наименее удаленной точкой на другой стороне. Приведем процедуру штриховки угла. Procedure UGOL(x1, y1, x2, y2, x3, y3, N: integer); var xx1, xx2, yy1, yy2, i: integer; k: real; for i:= 1 to N+1 do begin k:= (i-1)/N; xx1:=x1+round((x2-x1)*k); yy1:=y1+round((y2-y1)*k); xx2:=x2+round((x3-x2)*k); yy2:=y2+round((y3-y2)*k)); line(xx1, yy1, xx2, yy2){ линия штриховки угла } 5. Использование рекурсии. В программировании иногда используют рекурсивные операторы, например, процедуры, которые содержат обращение к самим себе. Это обращение может быть прямое - вызовом процедуры внутри самой процедуры, или косвенное - вызовом других процедур, внутри которых есть вызов исходной процедуры. Рекурсия позволяет компактно реализовать некоторые алгоритмы. При этом нужно корректно определять условие прекращения работы рекурсивной процедуры во избежание зацикливания программы. Приведем пример рекурсивного построения узора последовательным построением отрезков прямых: Uses Graph; var Gd, Gm, x1, y1,{ x1, y1 - координаты конца отрезка } l, delta,{ l, delta - длина отрезка и ее приращение } alfa, ugol: integer; { alfa - угол поворота, ugol - текущий угол в градусах } Procedure OTREZOK(x, y: integer); begin x1:= x + round(l*cos(ugol*pi/180)); y1:= y - round(l*sin(ugol*pi/180)); line(x, y, x1, y1); ugol:= ugol + alfa;{ изменение угла } l:= l + delta;{ изменение длины отрезка } {условие продолжения рекурсии: } if (x1 > 0) and (x1 < GetMaxX) and (y1 > 0) and (y1 < GetMaxY) then OTREZOK(x1, y1);{ рекурсивный вызов процедуры } { (x, y), (x1, y1) - координаты начала и конца отрезка } begin ugol:= 0; alfa:= 13; l:= 10; delta:= 3; Gd:= Detect; InitGraph(Gd, Gm, c:\tp7\bgi); OTREZOK(GetMaxX div 2, GetMaxY div 2);{ вызов процедуры } readln;CloseGraph; Узор получается перемещением отрезка с вращением вокруг точки (x, y). Поскольку внутри процедуры OTREZOK происходит вызов этой же процедуры с фактическими параметрами Здесь x2, y2 - координаты вершины угла, x1, y1, x3, y3 - координаты крайних точек сторон. Коэффициент "k" определяет удаленность точки от вершины угла. Огибающая пересекающихся отрезков образует параболическую границу. Практическое задание N 1. 59 1.Составить программу рисования звезды с N- вершинами, имеющими перекрестную штриховку углов. Звезда получается вращением угла вокруг центра, лежащего на биссектрисе на расстоянии, равном удвоенной длине стороны угла. 2.В предыдущей задаче центр узора располагать на биссектрисе с внешней стороны угла. |
Среды: 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 | ||||||||||||