我应该怎样画一条Peano曲线?

2024-04-25 14:00:44 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在VisualStudio代码中使用python turtle绘制peano曲线的代码。我可以得到一级只是罚款,但除此之外,它没有真正重复的形状正确的后续各级。有什么建议吗

from turtle import *
def peano(level, length):
    if level == 1:
       print(rt(45), fd(length/3), rt(90), fd(length/3), lt(90), fd(length/3))
       print(lt(90), fd(length/3), lt(90), fd(length/3), rt(90), fd(length/3))
       print(rt(90), fd(length/3), rt(90), fd(length/3), lt(90), fd(length/3))
    else:
       peano(level-1, length/2)
       rt(45)
       peano(level-1, length/2)
       rt(-45)
       peano(level-1, length/2)

peano(2, 40)

Tags: 代码lt绘制levellength曲线建议形状
1条回答
网友
1楼 · 发布于 2024-04-25 14:00:44

在最基本的第0级,分形例程需要使用forward()(aka fd())简单地绘制一条直线。在级别1,它应该绘制构成分形的基本模式,但是使用分形例程本身来绘制线,而不是forward()。以上的每一个级别都是一样的。我们将用分形图形替换线条图形:

from turtle import *

def peano(level, length):
    if level == 0:
        forward(length)
    else:
        angle = 90

        peano(level-1, length/3)

        right(angle)
        peano(level-1, length/3)

        for _ in range(2):
            for _ in range(3):
                left(angle)
                peano(level-1, length/3)

            angle = -angle

        left(angle)
        peano(level-1, length/3)

# Starting position and angle to fill our window
penup()
goto(-220, 220)
pendown()
right(45)

peano(2, 600)

exitonclick()

您不需要我添加的嵌套循环,您可以显式写出步骤:

    else:
        peano(level-1, length/3)

        right(90)
        peano(level-1, length/3)

        left(90)
        peano(level-1, length/3)
        left(90)
        peano(level-1, length/3)
        left(90)
        peano(level-1, length/3)

        right(90)
        peano(level-1, length/3)
        right(90)
        peano(level-1, length/3)
        right(90)
        peano(level-1, length/3)

        left(90)
        peano(level-1, length/3)

enter image description here

相关问题 更多 >