2013-10-03 70 views
2

我試圖從維基百科做這個分形植物:Example 7如何在python中用龜圖形制作l系統的分形植物?

即使我使用相同的規則,我最終得到的東西看起來更像一棵樹。這裏是代碼:

def fraktal_plante(padde, depth): 
    Xmerke(padde, depth-1)  # X 


def Xmerke(padde, depth): 
    if depth > 0:     
     padde.forward(12)   
     padde.right(25)   
     pos1 = padde.position() 
     head1 = padde.heading() 
     Xmerke(padde, depth-1) 
     padde.up() 
     padde.goto(pos1) 
     padde.setheading(head1)   
     padde.down() 
     padde.left(25)   
     Xmerke(padde, depth-1) 
     padde.up() 
     padde.goto(pos1) 
     padde.setheading(head1) 
     padde.down()    
     padde.left(25)    
     padde.forward(12)   
     pos2 = padde.position() 
     head2 = padde.heading() 
     padde.left(25)   
     padde.forward(12)   
     Xmerke(padde, depth-1) 
     padde.up() 
     padde.goto(pos2) 
     padde.setheading(head2) 
     padde.down() 
     padde.right(25)   
     Xmerke(padde, depth-1) 



    def Fmerke (padde, depth): 
     if depth > 0:     
      padde.forward(12)   
      padde.forward(12)   

你能幫我嗎?我是python的新手,所以請用簡單的方式解釋!

回答

4

我覺得你有一棵樹的原因是你的.forward()一步太大。嘗試paddle.forward(1)而不是12

對於什麼是值得的,這裏是我從維基百科的描述中寫道:

import turtle 
import sys 

def generate(n, result='[X]'): 
    for _ in range(n): 
     # rule #2 
     result = result.replace('F', 'FF') 
     # rule #1 
     result = result.replace('X', 'F-[[X]+X]+F[+FX]-X') 

    return result 

def draw(cmds, size=2): 
    stack = [] 
    for cmd in cmds: 
     if cmd=='F': 
      turtle.forward(size) 
     elif cmd=='-': 
      turtle.left(25) 
     elif cmd=='+': 
      turtle.right(25) 
     elif cmd=='X': 
      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() 

def setup(): 
    turtle.hideturtle() 
    turtle.tracer(1e3,0) 
    turtle.left(90) 
    turtle.penup() 
    turtle.goto(0,-turtle.window_height()/2) 
    turtle.pendown() 

setup() 
plant = generate(6) 
draw(plant, 2) 
turtle.exitonclick() 
+1

你可能會發現我的[codegolf挑戰(http://codegolf.stackexchange.com/questions/9341/sorry - 年輕人,但它的海龜,一路下來)有趣。有294個字符的Python L系統。 –

+0

是的,@ jsetting32,我不得不改變設置代碼來繪製龍的曲線。看這裏:ideone.com/RvmXFn。在'setup()'中,對'hideturtle()'和'tracer()'的調用使繪圖更快。其他調用確保這個特定的圖像在窗口中。 –