fork download
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3.  
  4. def koch_curve(x, y, length, angle, n):
  5. if n == 0:
  6. dx = length * np.cos(np.deg2rad(angle))
  7. dy = length * np.sin(np.deg2rad(angle))
  8. return [[x, x + dx], [y, y + dy]]
  9. else:
  10. segments = []
  11. for i in range(4):
  12. new_x, new_y = x, y
  13. if i % 2 == 0:
  14. angle += 60
  15. else:
  16. angle -= 120
  17. new_segments = koch_curve(new_x, new_y, length / 3, angle, n - 1)
  18. x, y = new_segments[0][-1], new_segments[1][-1]
  19. segments.extend(new_segments)
  20. return segments
  21.  
  22. def draw_koch_curve(level):
  23. plt.figure(figsize=(8, 8))
  24. plt.axis('equal')
  25. plt.axis('off')
  26. start_x, start_y = -1, -0.5
  27. length = 3
  28. angle = 0
  29. segments = koch_curve(start_x, start_y, length, angle, level)
  30. for segment in segments:
  31. plt.plot(segment[0], segment[1], color='blue')
  32. plt.show()
  33.  
  34. # Укажите уровень рекурсии для построения
  35. level = 4
  36. draw_koch_curve(level)
Success #stdin #stdout 3.2s 63032KB
stdin
Standard input is empty
stdout
Standard output is empty