Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Построение геометрических фракталов
Цель работы: 1). Изучить: наиболее распространённые методы построения симметричных геометрических фракталов на основе заданных графических объектов; способ реализации метода на основе рекурсивного алгоритма с помощью языка ActionScript 2.0. 2). Создать приложение для вывода на экран простого геометрического фрактал, а также правильно построенного симметричного изображения дерева на основе этого фрактала. Порядок выполнения работы: 1. Создайте новый класс Fractal, наследующий методы класса MovieClip. 2. Конструктору класса Fractal должен быть передан объект со сцены для дальнейшего управления. Основным методом класса будет являться рекурсивная функция drawFractal(). public function drawFractal(x: Number, y: Number, scale: Number, child: Number, generation: Number) { } 3. Переменная child управляет количеством потомков фрактала. Значение этой переменной должно сохраниться один раз, и затем меняться в зависимости от количества вхождений в рекурсивную функцию. Используйте следующий способ сохранения исходного значения: if (! dchild) { dchild = child; } 4. После того, как будет создан дубликат экземпляра фрактала, необходимо присвоить ему новые координаты, которые были переданы от родительского экземпляра фрактала (переменные x и y) и размер (переменная scale): var fractal = this.target.duplicateMovieClip(" fractal", this.target._parent.getNextHighestDepth()); fractal._x = x; fractal._y = y; fractal._xscale = fractal._yscale=scale; 5. Переменная generation управляет количеством поколений фрактала. Каждое новое поколение фрактала будет построено вокруг родительского под углами вращения, равными углам сегментов, занимаемых дубликатами: if (generation) { var angle: Number = 360/child; } 6. В теле этого условия необходимо установить новые свойства для каждого потомка внутри поколения. Поскольку все объекты дублируются на одном и том же уровне, то их предком будет по-прежнему являться background: while (child) { var dx: Number = x+Math.cos(Math.PI/180*angle*child)* fractal._width*2+fractal._width/2*.4; var dy: Number = y+Math.sin(Math.PI/180*angle*child)* fractal._height*2+fractal._height/2*.4; var dscale: Number = scale*.6; drawFractal(dx, dy, dscale, dchild, generation-1); child--; } 7. На рис. 6 показан простейший фрактал, имеющий 3 потомка в 7 поколениях. Каждый такой потомок расположен под одинаковым углом относительно друг друга вокруг родителя, то есть 0°, 120° и 240°: Рис. 6. Простейший геометрический фрактал 3 x 7
8. В классе Main необходимо добавить исходный объект, который затем нужно скрыть, а всё управление объектами передать классу Fractal: var ball: MovieClip = this.target.attachMovie(" Ball", " ball", 1); ball._visible = false; 9. Первый, то есть корневой, элемент фрактала, построенный по рекурсивному алгоритму, представляет собой экземпляр объекта ball. Этот элемент необходимо поместить в центр сцены, используя новые переменные. Необходимо также учесть также размеры объекта ball для более точного размещения его в центре сцены: var cx: Number = Stage.width/2; var cy: Number = Stage.height/2; 10. Для того, чтобы построить фрактальное дерево (рис. 7) методом drawFractal(), необходимо в качестве дублируемого объекта использовать трапецию, схема построения которой с помощью двух прямоугольников размерами 100 x 20 и 10 x 10, а также инструмента Free Transform Tool (панель Tools) со свойством Distort (панель Options) показана на рис. 8. 11. При добавлении этого объекта в библиотеку необходимо также учесть, что точка регистрации для него должна находиться по центру ширины, а не в верхнем левом углу, как это было для объекта " Ball". Определите самостоятельно местоположение точки регистрации, а также возможность использования её расположения в верхнем левом углу и решите задачу, поставленную в вопросе 5 для данной лабораторной работы. Рис. 7. Дерево на основе геометрического фрактала 3 x 7
12. Создайте таким образом объект типа MovieClip с изображением трапеции и поместите его в библиотеку файла " lab08.fla" с названием " Branch", который используйте для построения элементов фрактала branch. Рис. 8. Схема построения графического объекта " Branch"
13. В метод drawFractal() класса Fractal также необходимо ввести новую управляющую переменную angle для изменения угла при построении дерева: public function drawFractal(x: Number, y: Number, angle: Number, scale: Number, child: Number, generation: Number) { } 14. Для расчёта углов наклонов веток необходимо ввести следующие переменные (где 180° – угол разворота между крайними ветками): var angle1: Number = 180/child; var angle2: Number = -(180+angle1)/2; 15. Расчёт координат положения нового элемента фрактала dx и dy в цикле изменения переменной child также должен быть изменён и добавлена новая переменная dangle, которая должна быть передана рекурсивно методу drawFractal() на месте переменной angle: var dx: Number = x+Math.sin(Math.PI/180*angle)*scale; var dy: Number = y-Math.cos(Math.PI/180*angle)*scale; var dangle: Number = angle+angle2+angle1*child; Контрольные вопросы: 1). Объясните смысл переменной dchild. 2). Как изменится порядок расчёта координат dx и dy элементов фрактала, если поместить точку регистрации объекта " Ball" в его центр? 3). Где будет добавлен экземпляр объекта " Ball", если его не скрывать? 4). Что нужно сделать для того, чтобы начальное значение угла angle было равно 90° и дерево при этом было построено так же, как на рис. 7? 5). Каким образом можно изменить расчёт координат dx и dy при построении дерева, если переместить точку регистрации в объекте " Branch" в верхний левый угол?
Вопросы для отчёта по лабораторным работам 2-5: 1). Предоставьте листинг класса Motion с двумя вариантами изменения координат движущегося объекта (относительно скорости движения и через угол наклона), первый из которых закомментируйте. 2). Предоставьте листинг класса Collision с объяснением решения задачи, поставленной в вопросе 2 для лабораторной работы 3. 3). Предоставьте листинг класса Trail с поясняющими комментариями. 4). Предоставьте листинг класса Fractal с поясняющими комментариями.
Лабораторная работа 6 Популярное:
|
Последнее изменение этой страницы: 2016-05-03; Просмотров: 639; Нарушение авторского права страницы