Обнаженное дерево Пифагора

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск

Описание

Визуализация фрактала Обнаженное дерево Пифагора на языке программирования JavaScript

Исполнители: Смирнов Михаил

Группа 3630103/00001 Кафедра Теоретической механики

Визуализация

Введение

Данный курсовой проект “Обнаженное дерево Пифагора” предназначен для ознакомления и понимания фракталов. Сама визуализация фрактала показывает принцип их работы, а также различные вариации данного фрактала "Обнаженное дерево Пифагора".

Актуальность

Актуальность темы обусловлена следующим. Мир фракталов очень разнообразен. Фракталы окружают нас повсюду: в природе, их используют в науке, в компьютерных технологиях, в экономике, в медицине.

Теория

Дерево Пифагора — разновидность фрактала, основанная на фигуре, известной как «Пифагоровы штаны». Если в классическом дереве Пифагора угол равен 45 градусам, то также можно построить и обобщённое дерево Пифагора при использовании других углов. Такое дерево часто называют обдуваемое ветром дерево Пифагора. Если изображать только отрезки, соединяющие каким-либо образом выбранные «центры» треугольников, то получается обнаженное дерево Пифагора.

Алгоритм построения:

1) Строим вертикальный отрезок

2) Из верхнего конца этого отрезка рекурсивно строим еще 2 отрезка под определенными углами

3) Вызываем функцию построения двух последующих отрезков для каждой ветви дерева

Особенности реализации

Код программы на Javascript

      function drawLine(x, y, ln, angle) {
         context.moveTo(x, y);
         context.lineTo(Math.round(x + ln * Math.cos(angle)), Math.round(y - ln * Math.sin(angle)));
       }
     // Функция рисует дерево
       function drawTree(x, y, ln, minLn, angle) {

var n2; n2 = document.getElementById('a2').value; var n3; n3 = document.getElementById('a3').value;

         if (ln > minLn) {
             ln = ln*0.75 ;//на сколько уменьшается линия 
             drawLine(x, y, ln, angle);
             x = Math.round(x + ln * Math.cos(angle));
             y = Math.round(y - ln * Math.sin(angle));
             drawTree(x, y, ln, minLn, angle + n2 * Math.PI / 180);
             drawTree(x, y, ln, minLn, angle - n3 * Math.PI / 180);
         }
       }
       // Инициализация переменных
       function init() {

var n1; n1 = document.getElementById('a1').value;

         var canvas = document.getElementById("tree");
         context = canvas.getContext("2d");
         canvas.width = 800; // Ширина холста
         canvas.height = 550; // высота холста
         var x = canvas.width / 2;
         var y = canvas.height;
         var ln = 180; // начальная длина линии
         var minLn ; // минимальная длина до которой рисуются линии

minLn = n1;

         context.fillStyle = "black"; // цвет фона
         context.strokeStyle = "green"; //цвет линий
         context.fillRect(0, 0, canvas.width, canvas.height);
         context.lineWidth = 1; // ширина линий
         context.beginPath();
         drawTree(x, y, ln, minLn, Math.PI / 2);
         context.stroke();
       }	

Вывод

Таким образом, реализация и визуализация фрактала дерево Пифагора оказались успешными, мне удалось выполнить поставленные задачи и также освоить использование новых функций. Подводя итоги, я получил новый и полезный опыт при работе с JavaScript и HTML.