簡體   English   中英

為什么我的程序沒有生成龍曲線?

[英]Why doesn't my program generate the dragon curve?

我編寫了一個使用 L 系統繪制分形的程序。 它似乎適用於謝爾賓斯基三角形,但不適用於龍曲線。

我知道網站上有一些關於使用海龜圖形創建龍曲線的問題,但似乎沒有一個特別適用,所以我提出了自己的問題。 作為海龜指令,我的代碼生成的字符串似乎是正確的。 我相信問題在於烏龜如何解釋該字符串。 為什么它適用於謝爾賓斯基三角形而不適用於龍曲線令人費解,讓我認為我輸入的規則是錯誤的,但是我檢查了多個來源,它們似乎是正確的。

from tkinter import *
import turtle 

Width=500
Height=500


def process_string(string):
    return string.translate(str.maketrans({'X':'X+YF+','Y':'−FX−Y'}))

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.25*Width,0.25*Height)
    t.pendown()
    t.shape("circle")
    t.speed("fastest")

    for char in string:

        if char=="F":
            t.forward(5)
        elif char=="+":
            t.right(90)
        elif char=="-":
            t.left(90)


root=Tk()
canvas=Canvas(width=Width, height=Height)
canvas.pack()    
draw(createSystem("FX",10))
print("COMPLETE")
root.mainloop()

我希望看到龍曲線,但是該程序只是產生了由線條和框組成的波浪形曲線。

在這一行:

 return string.translate(str.maketrans({'X':'X+YF+','Y':'−FX−Y'}))

您正在使用 Unicode 字符“-”表示左轉。 但在這一行:

elif char=="-":

您在左轉時使用的是基本的 ASCII 連字符/減號。 讓這些在連字符/減號上達成一致,你應該釋放你的龍!

盡管您在嵌入的海龜周圍有一個 tkinter 包裝器,但這也可以僅使用獨立的海龜來完成:

from turtle import Screen, Turtle

TRANSLATION = str.maketrans({'X': "X+YF+", 'Y': "-FX-Y"})

def process_string(string):
    return string.translate(TRANSLATION)

def createSystem(string, depth):

    for _ in range(depth):
        string = process_string(string)

    return string

def draw(string):

    for character in string:
        if character == 'F':
            turtle.forward(5)
        elif character == '+':
            turtle.right(90)
        elif character == '-':
            turtle.left(90)

turtle = Turtle()
turtle.shape('circle')
turtle.shapesize(0.2)
turtle.speed('fastest')

draw(createSystem("FX", 10))

turtle.hideturtle()

screen = Screen()
screen.exitonclick()

在此處輸入圖片說明

我假設您將使用 tkinter 向您的程序添加一些控件。

暫無
暫無

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

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