Вы import colorsys
, но никогда не используете его - это ключ к тому, что вы должны генерировать цвета на основе углов, а не - фиксированный список цветов.Причина импорта заключается в том, что цвета черепахи RGB - это не та модель, которая подходит для наших нужд, поэтому нам нужна более подходящая модель, такая как HSV (где мы действительно заботимся только о H / hue), и пусть он преобразует эти значения в RGB .
Количество спутников определяется вашим вызовом range
:
for angle in range(30,360,60):
Что для этого чертежа должно быть больше похоже на:
for angle in range(0, 360, 30):
Поскольку существует двенадцать спутников, а 360 / 30
равно 12. Наконец, нам необходимо вести надлежащий учет таким образом, чтобы при каждом изменении позиции или курсаЧтобы сделать рекурсивное рисование, нам нужно восстановить исходные значения при выходе.Ниже приведен упрощенный пример решения этой проблемы:
from turtle import Screen, Turtle
from colorsys import hsv_to_rgb
def draw_circle(radius):
y = turtle.ycor() # save position & heading
heading = turtle.heading()
turtle.fillcolor(hsv_to_rgb(heading / 360, 1.0, 1.0))
turtle.sety(y - radius)
turtle.setheading(0)
turtle.begin_fill()
turtle.circle(radius)
turtle.end_fill()
turtle.sety(y) # restore position & heading
turtle.setheading(heading)
def draw_recursive_circles(radius, n):
if n == 0:
return
draw_circle(radius)
if n > 1:
heading = turtle.heading() # save heading
for angle in range(0, 360, 30):
turtle.setheading(angle)
turtle.forward(radius * 2)
draw_recursive_circles(radius / 5, n - 1)
turtle.backward(radius * 2)
turtle.setheading(heading) # restore heading
screen = Screen()
screen.tracer(False)
turtle = Turtle(visible=False)
turtle.penup()
draw_recursive_circles(150, 4)
screen.update()
screen.tracer(True)
screen.exitonclick()
![enter image description here](https://i.stack.imgur.com/XGlHc.png)
Я намеренно держал перо, чтобы упростить мой пример, чтобы только заполненные частииз кругов показаны.Вернув окружающие контуры, я оставляю вам упражнение.
Центральный круг не того цвета.Исправить это просто, установив курс черепахи до первоначального вызова draw_recursive_circles()