Скачиваний:
5
Добавлен:
10.11.2023
Размер:
2.63 Кб
Скачать
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