使用python turtle重复功能

时间:2018-08-30 12:52:50

标签: python turtle-graphics

我想知道使函数循环重新生成具有不同旋转和位置以及不同变量(例如颜色)的相同形状/图案(google photo logo)的方法。下面的代码可让我以正确的角度制作一个托盘,但比例不准确。还希望不要使用任何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 :(得分:3)

非常简化的答案:

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)

但是,当然,您需要考虑每个循环之后将要转至哪里,以及是否也需要前进。

答案 1 :(得分:2)

  

为什么蓝色花瓣上有奇怪的缝隙,而其他花瓣则没有?

要清晰地绘制,我们需要某种几何模型。我将使用的是一对匹配的直角三角形,其底数为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

我将把着色问题留给你。