ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.03.2024
Просмотров: 21
Скачиваний: 0
Федеральное агентство связи
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра Математической Кибернетики и Информационных Технологий
Отчет по лабораторной работе
по предмету «СиАОД»
на тему:
«Рекурсия. Фракталы»
Выполнил: студент группы УБСТ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()
Результаты работы
Вывод
Реализовали генерацию фрактала «Кривая Коха» с применением рекурсивных функций. Из результатов тестов сделали вывод, что «Кривая Коха» несложный фрактал на низких глубинах, и становится сложнее с большими глубинами.