2014-05-08 59 views
0

爲什麼我的龍的曲線不像龍的曲線?Python中的龍的曲線訂購10

Dragon Curve

這裏是用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:

Dragon Curve

編輯:這裏是我得到的訂單1,具有更大的縮放曲線:

Dragon Curve Order 1

+2

您是否嘗試過低階曲線?這樣看問題可能會更容易。 –

+0

我的意思是,比如,訂購1.將其縮小到最簡單的情況下,您會發現問題。 –

+0

看來我可能已經實現了繪圖功能錯誤?我不確定,我可以完美地繪製出一種分形植物以及蓬鬆的雪花......但我無法得到這一個:( – jsetting32

回答

1

當您運行

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

第二線替換第一線引進了X秒。 (另外,你使用了錯誤的替換規則,但你似乎已經注意到了。)

您需要通過執行來進行這些替代以這樣的方式,他們不互相影響,可能他們在一個合併的步驟。一種方法是使用re模塊的更高級替代功能。另一個將是寫你自己的替代例程。您也可以在第一次更換時使用X以外的字符,因此第二次更換不會將其取出,然後在第三次更換時使用X替換該字符。