使用循环来绘制海龟模块的图案
Using loops to to draw patterns with turtle module
我正在尝试使用 turtle 模块绘制此图案:
不仅是这个,我在应用循环绘制任何类型的图案时也遇到了麻烦(特别是当涉及到不同形状的图案相互重叠时,我只是不知道从哪里开始并且如何组织函数来绘制那些复杂的图案)。因此,我通常一步一步来,知道应该有一个循环让乌龟把同样的事情从头到尾做一遍。
这是我目前的情况:
import turtle
wn = turtle.Screen()
t = turtle.Turtle()
def pattern(t,clr):
t.screen.bgcolor("white")
t.pensize(10)
for i in range(2):
t.pd()
t.fd(100) ##
t.rt(90)
t.fd(100) ##
t.rt(90)
t.fd(90) ##
t.rt(90)
t.fd(75) ##
t.rt(90)
t.fd(70) ##
t.rt(90)
t.fd(38) ##
t.rt(90)
t.fd(38) ##
t.pu()
t.lt(90)
t.fd(77)
t.pd()
t.lt(90)
t.fd(38)
t.rt(90)
t.fd(38)
t.rt(90)
t.fd(70)
t.rt(90)
t.fd(75)
t.rt(90)
t.fd(90)
t.rt(90)
t.fd(100)
t.rt(90)
t.fd(100)
pattern(t,"black")
如有任何提示和建议,我们将不胜感激!
查看原始图像和程序的输出,您似乎专注于白底黑线,而没有注意到这可以看作是黑底白线。也就是说,笔划的宽度与笔划之间的间隙宽度相匹配。让我们从简单地在图像上叠加一个网格开始:
现在我们可以根据网格块来描述图像,使用任意大小的网格块。这是根据网格块重写的程序:
from turtle import Screen, Turtle
BLOCK = 15
def pattern(turtle):
turtle.pensize(BLOCK)
for _ in range(2):
turtle.pd()
turtle.fd(BLOCK * 6)
turtle.rt(90)
turtle.fd(BLOCK * 6)
turtle.rt(90)
turtle.fd(BLOCK * 5)
turtle.rt(90)
turtle.fd(BLOCK * 4)
turtle.rt(90)
turtle.fd(BLOCK * 3)
turtle.rt(90)
turtle.fd(BLOCK * 2)
turtle.rt(90)
turtle.fd(BLOCK * 1)
turtle.pu()
turtle.lt(90)
turtle.fd(BLOCK * 4)
turtle.lt(90)
turtle.pd()
turtle.fd(BLOCK * 1)
turtle.rt(90)
turtle.fd(BLOCK * 2)
turtle.rt(90)
turtle.fd(BLOCK * 3)
turtle.rt(90)
turtle.fd(BLOCK * 4)
turtle.rt(90)
turtle.fd(BLOCK * 5)
turtle.rt(90)
turtle.fd(BLOCK * 6)
turtle.rt(90)
turtle.fd(BLOCK * 6)
turtle = Turtle()
pattern(turtle)
screen = Screen()
screen.exitonclick()
查看此修改后的代码和图像,您是否了解可以在何处使用循环来合并代码?
我正在尝试使用 turtle 模块绘制此图案:
不仅是这个,我在应用循环绘制任何类型的图案时也遇到了麻烦(特别是当涉及到不同形状的图案相互重叠时,我只是不知道从哪里开始并且如何组织函数来绘制那些复杂的图案)。因此,我通常一步一步来,知道应该有一个循环让乌龟把同样的事情从头到尾做一遍。
这是我目前的情况:
import turtle
wn = turtle.Screen()
t = turtle.Turtle()
def pattern(t,clr):
t.screen.bgcolor("white")
t.pensize(10)
for i in range(2):
t.pd()
t.fd(100) ##
t.rt(90)
t.fd(100) ##
t.rt(90)
t.fd(90) ##
t.rt(90)
t.fd(75) ##
t.rt(90)
t.fd(70) ##
t.rt(90)
t.fd(38) ##
t.rt(90)
t.fd(38) ##
t.pu()
t.lt(90)
t.fd(77)
t.pd()
t.lt(90)
t.fd(38)
t.rt(90)
t.fd(38)
t.rt(90)
t.fd(70)
t.rt(90)
t.fd(75)
t.rt(90)
t.fd(90)
t.rt(90)
t.fd(100)
t.rt(90)
t.fd(100)
pattern(t,"black")
如有任何提示和建议,我们将不胜感激!
查看原始图像和程序的输出,您似乎专注于白底黑线,而没有注意到这可以看作是黑底白线。也就是说,笔划的宽度与笔划之间的间隙宽度相匹配。让我们从简单地在图像上叠加一个网格开始:
现在我们可以根据网格块来描述图像,使用任意大小的网格块。这是根据网格块重写的程序:
from turtle import Screen, Turtle
BLOCK = 15
def pattern(turtle):
turtle.pensize(BLOCK)
for _ in range(2):
turtle.pd()
turtle.fd(BLOCK * 6)
turtle.rt(90)
turtle.fd(BLOCK * 6)
turtle.rt(90)
turtle.fd(BLOCK * 5)
turtle.rt(90)
turtle.fd(BLOCK * 4)
turtle.rt(90)
turtle.fd(BLOCK * 3)
turtle.rt(90)
turtle.fd(BLOCK * 2)
turtle.rt(90)
turtle.fd(BLOCK * 1)
turtle.pu()
turtle.lt(90)
turtle.fd(BLOCK * 4)
turtle.lt(90)
turtle.pd()
turtle.fd(BLOCK * 1)
turtle.rt(90)
turtle.fd(BLOCK * 2)
turtle.rt(90)
turtle.fd(BLOCK * 3)
turtle.rt(90)
turtle.fd(BLOCK * 4)
turtle.rt(90)
turtle.fd(BLOCK * 5)
turtle.rt(90)
turtle.fd(BLOCK * 6)
turtle.rt(90)
turtle.fd(BLOCK * 6)
turtle = Turtle()
pattern(turtle)
screen = Screen()
screen.exitonclick()
查看此修改后的代码和图像,您是否了解可以在何处使用循环来合并代码?