我正在尝试编写一个生成字符串的程序,然后根据字符串中的下一个字符绘制某些行。我相信它可以正确生成字符串,因为我已经手动检查了几次迭代,但是我使用的海龟似乎无法正常工作。
例如,下面的代码应该生成谢尔宾斯基三角形,但只画一条直线。
我已经检查过其他 L 系统(例如龙曲线),虽然它没有产生水平线,但结果仍然不正确。字符串似乎是正确的,所以我认为问题在于海龟模块如何解释我的指令。这是我第一次使用该模块,所以如果我遇到了一些非常基本的错误,我不会感到惊讶。
from tkinter import *
import turtle
Width=500
Height=500
def process_string(string):
return string.translate(str.maketrans({'A':'B-A-B','B':'A+B+A'}))
def createSystem(seed,depth):
string=seed
for i in range(depth):
string=process_string(string)
print(string)
return(string)
def draw(string):
t = turtle.RawTurtle(canvas)
t.penup()
t.goto(-0.4*Width,0.4*Height) #this translation fits more of the curve
on the screen
t.pendown()
t.shape("circle")
t.speed("fastest")
for char in string:
if char=="A" or char=="B":
t.forward(10)
elif char=="+":
t.right(60)
elif char=="-":
t.left(60)
root=Tk()
canvas=Canvas(width=Width, height=Height)
canvas.pack()
draw(createSystem("A",3))
print("COMPLETE")
root.mainloop() }
和以前一样,这个例子应该产生谢尔宾斯基三角形,但只产生一条水平线。
作为我认为不值得发表的最后一个快速问题,海龟文档说 speed("fastest") 应该删除所有动画,但事实并非如此,有什么想法吗?谢谢大家的时间!
编辑:我已经用用户建议更新了代码,虽然这为三角形提供了正确的结果,但它仍然为龙曲线提供了不正确的图像。龙曲线的信息是
"变量 : XY 常数 : F + − start : FX 规则 : (X → X+YF+), (Y → −FX−Y) 角度 : 90° 这里,F 表示“向前拉”,- 表示“左转 90° ”,+表示“右转90°”。X和Y不对应任何绘制动作,仅用于控制曲线的演变。