Повторение функций с питоном черепахой - PullRequest
0 голосов
/ 30 августа 2018

Я хочу знать способ создания цикла функции для воссоздания одной и той же формы / шаблона ( логотип Google Photo ) с другим поворотом и положением и различными переменными, такими как цвет. Ниже приведен код, который позволит мне изготовить один из поддонов с правильными углами, но соотношение не является точным. Также предпочитаю не использовать любую функцию goto / home, так как мне нужно повторить этот рисунок позже. Должен ли я использовать левое / правое направление вместо заданного курса?

def photo():
    speed(1) # turtle speed (debugging)
    #speed(0)
    length = 50

    penup()
    color("#4688f4") #Blue petal
    begin_fill() 
    setheading(25)
    forward(length/5.5)
    setheading(0)
    forward(length)
    setheading(227)
    forward(length*0.87)
    setheading(135)
    forward(length*0.8)
    end_fill()

    color("#3d6ec9") #Blue petal
    begin_fill() 
    setheading(250)
    forward(length/5)
    setheading(270)
    forward(length/2.6)
    setheading(0)
    forward(length/1.6)
    end_fill() 

здесь вы видите рисунок из кода ...

thats the above described turtle drawing

Обновление:

enter image description here

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Почему на голубом лепестке есть странный разрыв, а другие нет?

Чтобы нарисовать это чисто, нам нужна какая-то геометрическая модель. Я буду использовать соответствующую пару прямоугольных треугольников с основанием из 7 единиц и углом 45 градусов:

enter image description here

Я поставил красную точку на том, что я считаю логическим происхождением нашего рисунка. Чтобы математика была последовательной, мы вырежем нужное изображение из приведенного выше рисунка:

enter image description here

Должен ли я использовать левое / правое направление вместо заданного курса?

Код для рисования этой фигуры и ее поворота не может использовать setheading(), поскольку он абсолютный, и мы должны рисовать относительно нашего логического происхождения:

from turtle import *

UNIT = 50

def photo(petal, shadow):

    right(45)  # move from "origin" to start of image
    forward(0.45 * UNIT)
    left(70)

    color(petal)

    begin_fill()
    forward(0.752 * UNIT)
    right(25)
    forward(6 * UNIT)
    right(135)
    forward(4.95 * UNIT)
    end_fill()

    right(45)

    color(shadow)

    begin_fill()
    forward(3.5 * UNIT)
    right(90)
    forward(2.5 * UNIT)
    right(25)
    forward(0.752 * UNIT)
    end_fill()

    left(70)  # return to "origin" where we started 
    forward(0.45 * UNIT)
    right(135)

penup()

for _ in range(4):
    photo("#4688f4", "#3d6ec9")
    left(90)

hideturtle()
mainloop()

enter image description here

Я оставлю вам вопрос о раскраске.

0 голосов
/ 30 августа 2018

очень упрощенный ответ:

my_colors =['blue', 'yellow', 'red', 'green'] # replace with hex values

for i in range(4):

    photo(my_colors[i])
    right(90)
Затем необходимо настроить

photo функцию для получения ключевого слова, которое может выглядеть следующим образом: def photo(my_color):, и там, где вы используете цвета в своей функции, вы просто вызываете ее color(my_color)

но, конечно, вам нужно подумать о том, куда вы будете поворачиваться после каждого цикла, а также о том, нужно ли вам двигаться вперед.

...