Добавил:
mtuciboy
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные 1-5 для Вариант 19 / lab5
.pyimport 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