Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4 курс / СиАОД пример 5

.docx
Скачиваний:
0
Добавлен:
26.01.2026
Размер:
223.59 Кб
Скачать

Федеральное агентство связи

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Кафедра Математической Кибернетики и Информационных Технологий

Отчет по лабораторной работе

по предмету «СиАОД»

на тему:

«Рекурсия. Фракталы»

Выполнил: студент группы ______

_______

Руководитель:

Кутейников Иван Алексеевич

Москва 2021

Цель работы

Реализовать генерацию заданного типа фрактала с применением рекурсивных функций. Добавить возможность задания глубины фрактала. Оценить глубину рекурсии. Построить таблицу зависимости времени построения от глубины фрактала.

Вариант 30

Реализовать генерацию фрактала «Дерево Пифагора»

Выполнение

Глубина 1:

Глубина 5:

Глубина 12

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

import java.awt.*; import java.awt.geom.Rectangle2D; import javax.swing.*; public class PythagorasTree extends JPanel { final int depthLimit = 15; int width = 1280; int height = 800; public static int count = 0; public static long time = 0; public PythagorasTree() { setPreferredSize(new Dimension(width, height)); setBackground(Color.white); } private void drawTreeAngle(Graphics2D g, float x1, float y1,int size, double angle, int depth) { count++; if (depth == depthLimit) return; Graphics2D g1 = (Graphics2D) g.create(); g1.translate(x1,y1); g1.rotate(angle); Rectangle2D rect = new Rectangle(0, -size, size, size); g1.setColor(Color.getHSBColor(count*0.02f, 1, 1)); g1.draw(rect); g1.fill(rect); float x2 =0,y2 = -size; int size2 = (int)Math.abs(Math.cos(-Math.PI/4) * size); double angle2 = -Math.PI/4; Graphics2D g2 = (Graphics2D) g1.create(); if(depth>0) { drawTreeAngle(g1,x2,y2,size2,angle2,depth-1); } else { g1.translate(x2,y2); g1.rotate(angle2); rect = new Rectangle(0, -size2, size2, size2); g1.draw(rect); g1.fill(rect); } Graphics2D gg = (Graphics2D) g2.create(); float x3 = x2 + (float)Math.cos(angle2) * size2; float y3 = y2 + (float)Math.sin(angle2) * size2; int size3 = (int)Math.abs(Math.cos(-Math.PI/4) * size); double angle3 = angle2 + Math.PI/2; if(depth>0) { drawTreeAngle(g1,x3,y3,size3,angle3,depth-1); } else { g2.translate(x3,y3); g2.rotate(angle3); rect = new Rectangle(0, -size3, size3, size3); g2.draw(rect); g2.fill(rect); } } @Override public void paintComponent(Graphics g) { super.paintComponent(g); final Graphics2D g1 = (Graphics2D)g.create(); try { long start = System.currentTimeMillis(); drawTreeAngle(g1, width/2-75, height, 150, 0, 12); long finish = System.currentTimeMillis(); time = finish - start; } finally { g1.dispose(); System.out.println("Time it took: " + time); System.out.println(count); } } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setTitle("Pythagoras Tree"); f.setResizable(false); f.add(new PythagorasTree(), BorderLayout.CENTER); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); }); } }

Результаты работы

Глубина фрактала

1

5

10

14

Время выполнения

1

5

44

213

Кол-во вызовов функции

6

126

4094

65534

Вывод

Реализовали генерацию фрактала «Дерево Пифагора» с применением рекурсивных функций. Из результатов тестов сделали вывод, что

«Дерево Пифагора» несложный фрактал на низких глубинах, и становится сложнее с большими глубинами.

Соседние файлы в папке 4 курс