使用循环来绘制海龟模块的图案

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()

查看此修改后的代码和图像,您是否了解可以在何处使用循环来合并代码?