gpt4 book ai didi

python - 使用 turtle 图形的谢尔宾斯基三角形递归

转载 作者:行者123 更新时间:2023-12-03 02:10:36 26 4
gpt4 key购买 nike

我正在尝试编写一个程序,使用 turtle 用 python 绘制谢尔宾斯基树。这是我的想法:

import turtle
def draw_sierpinski(length,depth):
window = turtle.Screen()
t = turtle.Turtle()
if depth==0:
for i in range(0,3):
t.fd(length)
t.left(120)
else:
draw_sierpinski(length/2,depth-1)
t.fd(length/2)
draw_sierpinski(length/2,depth-1)
t.bk(length/2)
t.left(60)
t.fd(length/2)
t.right(60)
draw_sierpinski(length/2,depth-1)
window.exitonclick()


draw_sierpinski(500,1)

程序没有到达 else 语句之后的第二行,我不知道为什么。谁能帮我吗?

最佳答案

我认为您不应该在函数内创建 turtle 或窗口对象。由于如果您最初使用深度 1 调用 draw_sierpinski,它会被调用四次,因此您将创建四个单独的窗口,其中包含四个单独的 turtle ,每个 turtle 仅绘制一个三角形。相反,我认为你应该只有一扇 window 和一只 turtle 。

import turtle
def draw_sierpinski(length,depth):
if depth==0:
for i in range(0,3):
t.fd(length)
t.left(120)
else:
draw_sierpinski(length/2,depth-1)
t.fd(length/2)
draw_sierpinski(length/2,depth-1)
t.bk(length/2)
t.left(60)
t.fd(length/2)
t.right(60)
draw_sierpinski(length/2,depth-1)


window = turtle.Screen()
t = turtle.Turtle()
draw_sierpinski(500,1)
window.exitonclick()

结果:

enter image description here

<小时/>

对于深度为 1 的三角形,这些结果看起来相当不错,但是当我们调用 draw_sierpinski(100,2) 时会怎么样?

enter image description here

哦,不太好。发生这种情况是因为该函数应该绘制形状,然后将 turtle 返回到其原始起始位置和角度。但从深度 1 图像中可以明显看出, turtle 并没有返回到其起始位置;而是返回到了起始位置。它最终到达左坡的一半。您需要一些额外的逻辑才能将其发送回家。

import turtle
def draw_sierpinski(length,depth):
if depth==0:
for i in range(0,3):
t.fd(length)
t.left(120)
else:
draw_sierpinski(length/2,depth-1)
t.fd(length/2)
draw_sierpinski(length/2,depth-1)
t.bk(length/2)
t.left(60)
t.fd(length/2)
t.right(60)
draw_sierpinski(length/2,depth-1)
t.left(60)
t.bk(length/2)
t.right(60)

window = turtle.Screen()
t = turtle.Turtle()
draw_sierpinski(100,2)
window.exitonclick()

结果:

enter image description here

关于python - 使用 turtle 图形的谢尔宾斯基三角形递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com