Составить рекурсивную программу для получения на экране дисплея следующего рисунка
Пыталась выполнить рисунок как на первом фото. Однако, вышло то, что на втором, и не могу понять как это исправить. Также, не получается добавить вокруг маленьких кружочков еще кружки.
КОД:
import os
import matplotlib.pyplot as plt
import math
plt.rcdefaults()
fig, ax = plt.subplots()
n = int(input('Введите количество ветвей фигуры: '))
k = int(input('Введите количество звеньев фигуры: '))
R = 1
def picture(x1, y1, R, n, k):
if k > 0:
circle = plt.Circle((x1, y1), R, color='black', fill=False)
ax.add_patch(circle)
for i in range(n):
x2 = x1 + 2 * R * math.cos(2 * i * math.pi / n)
y2 = y1 + 2 * R * math.sin(2 * i * math.pi / n)
plt.plot([x1, x2], [y1, y2], color='black')
picture(x2, y2, R / 3, n, k - 1)
picture(0, 0, R, n, k)
plt.subplots_adjust(left=0, right=1, bottom=0, top=1)
plt.axis('equal')
plt.axis('off')
plt.show()
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Лишнее рисование убираем, нужное переносим в соответствующее место
def picture(x1, y1, R, n, k):
if k > 0:
for i in range(n):
x2 = x1 + 2 * R * math.cos(2 * i * math.pi / n)
y2 = y1 + 2 * R * math.sin(2 * i * math.pi / n)
#plt.plot([x1, x2], [y1, y2], color='black')
circle = plt.Circle((x2, y2), R/3, color='black', fill=False)
ax.add_patch(circle)
picture(x2, y2, R / 3, n, k - 1)
picture(0, 0, R, n, k)
Для того, чтобы заполнить и центр, перед циклом можно вставить:
circle = plt.Circle((x1, y1), R/3, color='black', fill=False)
ax.add_patch(circle)
picture(x1, y1, R / 3, n, k - 1)
(тут уже можно играть - не отключить ли некоторые окружности для сохранения "легкости")