簡體   English   中英

為什么此L系統僅畫一條直線?

[英]Why is this L-System only drawing a straight line?

我正在嘗試編寫一個生成字符串的程序,然后根據字符串中的下一個字符繪制某些線條。 我相信它已經正確生成了字符串,因為我已經手動檢查了幾次迭代,但是我正在使用的烏龜似乎無法正常工作。

例如,下面的代碼應生成Sierpinski三角形,但只能繪制一條直線。

我已經檢查了其他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() }

如前所述,該示例應產生Sierpinski三角形,但僅產生一條水平線。

作為最后一個快速問題,我認為不應該提出自己的建議,烏龜文檔說speed(“ fastest”)應該刪除所有動畫,但是不是這樣,有什么主意嗎? 感謝您的時間!

編輯:我已經用用戶建議更新了代碼,盡管這為三角形提供了正確的結果,但仍然為龍曲線提供了不正確的圖像。 龍曲線的信息是

“變量:XY常數:F +-開始:FX規則:(X→X + YF +),(Y→-FX-Y)角度:90°在這里,F表示“向前拉”,-表示“向左轉90° “和,+表示“向右旋轉90°”。X和Y與任何繪制動作都不對應,僅用於控制曲線的演變。”

問題是

if char=="A" or "B":

意思是

if (char == "A") or "B":

因此它只將char"A"進行比較,並給出

if True or "B": 

要么

if False or "B": 

首先給

if True:

第二個給

if "B": 

但這就像

if bool("B"): 

這使

if True: 

最后, if char=="A" or "B":就像if True:一樣工作,所以這部分代碼總是被執行。


它一定要是

if char == "A" or char == "B": 

要么

if char in ("A", "B"): 

要么

if char in "AB":   

正如@cdlane在評論中提到的那樣,您也可以使用set()

if char in {"A", "B"}: 

需要恆定的時間來檢查任何大小的字符集。 但是對於小場景,您將看不到時間上的差異。

更改:

if char=="A" or "B":

至:

if char=="A" or char=="B":

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM