Скачиваний:
10
Добавлен:
10.11.2023
Размер:
166.29 Кб
Скачать

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

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

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

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

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

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

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

на тему:

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

Выполнил: студент группы УБСТ2204

Становов Роман Андреевич

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

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

Москва 2021

Цель работы

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

Вариант 19

Реализовать генерацию фрактала «Кривая Коха»

Выполнение

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

import matplotlib.pyplot as plt

import time

class KochSnowflake:

def __init__(self, ax, order, size, x0, y0, x1, y1):

self.ax = ax

self.order = order

self.size = size

self.x0, self.y0 = x0, y0

self.x1, self.y1 = x1, y1

def koch_snowflake(self):

self._koch_snowflake(self.order, self.size, self.x0, self.y0, self.x1, self.y1)

def _koch_snowflake(self, order, size, x0, y0, x1, y1):

if order == 0:

self.ax.plot([x0, x1], [y0, y1], color='b')

else:

x2 = (2 * x0 + x1) / 3

y2 = (2 * y0 + y1) / 3

x3 = (x0 + 2 * x1) / 3

y3 = (y0 + 2 * y1) / 3

x4 = (x2 + x3) / 2 - (y3 - y2) * 3**0.5 / 2

y4 = (y2 + y3) / 2 + (x3 - x2) * 3**0.5 / 2

self._koch_snowflake(order - 1, size, x0, y0, x2, y2)

self._koch_snowflake(order - 1, size, x2, y2, x4, y4)

self._koch_snowflake(order - 1, size, x4, y4, x3, y3)

self._koch_snowflake(order - 1, size, x3, y3, x1, y1)

def get_user_depth():

while True:

try:

depth = int(input("Введите глубину фрактала (целое число): "))

if depth > 0:

return depth

else:

print("Глубина должна быть положительным целым числом.")

except ValueError:

print("Пожалуйста, введите целое число.")

def main():

depth = get_user_depth()

execution_times = []

print("\nТаблица зависимости времени построения от глубины фрактала:")

print("| Глубина | Время (сек) |")

print("|---------|-------------|")

fig, ax = plt.subplots()

x0, y0 = 0, 0

x1, y1 = 1, 0

for current_depth in range(1, depth + 1):

start_time = time.time()

snowflake = KochSnowflake(ax, current_depth, 1, x0, y0, x1, y1)

snowflake.koch_snowflake()

ax.set_aspect('equal')

ax.axis('off')

plt.title(f'Глубина {current_depth}')

plt.show(block=False)

plt.pause(0.1) # Добавляем паузу для корректного отображения

end_time = time.time()

execution_time = end_time - start_time

execution_times.append(execution_time)

print(f"| {current_depth} | {execution_time:.6f} |")

plt.show()

if __name__ == "__main__":

main()

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

Вывод

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

Соседние файлы в папке Лабораторные 1-5 для Вариант 19