Треугольная / геометрическая радуга спираль - PullRequest
0 голосов
/ 01 марта 2019

Я пытался выяснить, как сделать радугу треугольной спирали, используя Python.Я могу сделать квадратную спираль, но она не импортирует цвет.Также он не использует треугольники.

Как должен выглядеть вывод:

enter image description here

Что я достиг:

enter image description here

Мой код:

    import turtle 
    import colorsys

    p = turtle.Pen()
    p.reset()
    p.down()
    p.speed(22)


    for i in range(100):
        p.forward(i)
        p.left(22222)

    dog = 0

    for i in range(100):
        color = colorsys.hsv_to_rgb(dog,1,1)
        turtle.pencolor(color)
        dog += 0.01

1 Ответ

0 голосов
/ 01 марта 2019

Давайте рассмотрим ваш код:

p = turtle.Pen()
p.reset()

Для чего нужен reset()?Ничего еще не было установлено , так почему же сброс ?Не добавляйте код, который не продвигает вашу цель.Снова здесь:

p.down()

Ручка начинается вниз, поэтому нет необходимости ее менять.В этой команде:

p.speed(22)

Откуда взялся 22?Документация для speed() говорит, что аргумент от 1 («самый медленный») до 10 («быстрый»), где 0 означает «самый быстрый».Это превращает 22 в какое-то другое значение - если вы не знаете что, тогда не используйте его!Для ясности следует использовать символические альтернативы, такие как «медленный».

    p.left(22222)

Откуда взялся 22222?Почему ты удивлен, что у тебя нет треугольника?Для идеального равностороннего треугольника мы бы использовали 120 градусов, но нам не нужен идеальный треугольник, нам нужна спираль, поэтому мы добавим к этому значению градус или два.Почему это имя переменной:

dog = 0

Имена переменных должны пояснять, что мы делаем, а не скрывать это.Эта переменная будет циклически проходить через компонент «H» значения цвета «HSV», где «H» обозначает «оттенок».Итак, давайте использовать это.

Наконец, нам нужен один цикл, а не два, чтобы изменения рисунка и цвета происходили одновременно:

from turtle import Screen, Pen
import colorsys

screen = Screen()
screen.title("Rainbow Spiral")

pen = Pen()
pen.speed('fastest')

hue = 0.0  # range is 0.0 to 1.0

for i in range(200):
    color = colorsys.hsv_to_rgb(hue, 1, 1)  # pen wants RGB
    pen.pencolor(color)
    pen.forward(i * 2)  # double size
    pen.right(121)  # 120 degrees is an equilateral triangle
    hue += 0.005  # increment by 1/200

pen.hideturtle()

screen.exitonclick()

Обратите внимание, что я изменил left() до right(), чтобы соответствовать вашему примеру спирали.

ВЫХОД

enter image description here

Программы рассказывают историю.Тщательно выбирайте имена персонажей (переменные) и избегайте включения элементов (кода) в историю, которые не влияют на ее исход.

...