簡體   English   中英

Python Order 10中的Dragon Curve

[英]Dragon Curve in Python Order 10

為什么我的龍形曲線看起來不像龍形曲線?

龍曲線

這是python中10階的實現:

def setupForDragonCurve():
    turtle.hideturtle()
    turtle.tracer(1e3, 0)
    turtle.penup()
    turtle.goto(0, -turtle.window_height()/5)
    turtle.pendown()

def generateDragonCurve(n, result='[FX]'):
    for _ in range(n):
        result = result.replace('Y', 'FX-Y')
        result = result.replace('X', 'X+YF')
    return result

def drawDragonCurve(cmds, size):
    stack = []
    for cmd in cmds:
        if cmd=='F':
            turtle.forward(size)
        elif cmd=='-':
            turtle.left(90)
        elif cmd=='+':
            turtle.right(90)
        elif cmd=='X':
            pass
        elif cmd=='Y':
            pass
        elif cmd=='[':
            stack.append((turtle.position(), turtle.heading()))
        elif cmd==']':
            position, heading = stack.pop()
            turtle.penup()
            turtle.setposition(position)
            turtle.setheading(heading)
            turtle.pendown()
        else:
            raise ValueError('Unknown Cmd: {}'.format(ord(cmd)))
    turtle.update()

這是訂單10的樣子:

龍曲線

編輯:這是我得到的訂單1,具有較大的比例曲線:

龍彎階1

當你跑步

    result = result.replace('Y', 'FX-Y')
    result = result.replace('X', 'X+YF')

第二行替換第一行引入的X (此外,您使用了錯誤的替換規則,但您似乎已經注意到了這一點。)

您需要以不相互影響的方式進行這些替換,可能是通過組合步驟進行的。 一種方法是使用re模塊的更高級的替換功能。 另一個方法是編寫自己的替換例程。 您也可以在第一個替換中使用X以外的其他字符,因此第二個替換不會將其選中,然后在第三遍中將該字符替換為X

暫無
暫無

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

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