如何让乌龟记住它在L系统中的位置?

问题描述 投票:0回答:1

我们刚刚在大学开始编程。我们的任务之一是使用 Python 中的海龟 L 系统创建一棵分形树。这个:

1. variables : X F
2. constants : + − [ ]
3. start  : X
4. rules  : (X → F-[[X]+X]+F[+FX]-X), (F → FF)
5. angle  : 25°

代码:

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

def Xmerke(padde, depth):
    if depth > 0:# X ->
        padde.forward(10)          #      F
        padde.right(25)            #       -
        padde.setposition()
        padde.setheading()         #         [
        padde.setheading()         #          [
        Xmerke(padde, depth-1)     #            X
        padde.heading()
        padde.goto()               #              ]
        padde.left(25)             #                +
        Xmerke(padde, depth-1)     #                 X
        padde.heading()            #                  ]
        padde.left(25)             #                   +
        padde.forward(10)          #                    F
        padde.setposition()
        padde.setheading()         #                      [
        padde.left(25)             #                       +
        padde.forward(10)          #                        F
        Xmerke(padde, depth-1)     #                         X
        padde.heading()
        padde.goto()               #                          ]
        padde.right(25)            #                            -
        Xmerke(padde, depth-1)     #                             X

def Fmerke (padde, depth):
    if depth > 0:                  #    Y ->
        padde.forward(10)          #          F
        padde.forward(10)          #             F

正如你所看到的,它很乱。我想知道如何让乌龟记住它的位置和标题“ [ ”,然后再返回到它“ ] ”。

我对此很陌生,所以请以清晰易懂的方式回答。

python turtle-graphics python-turtle l-systems
1个回答
3
投票

您可以通过调用

turtle.heading()
来获取海龟的当前航向。同样,它的当前位置由
turtle.position()
返回。因此,您可以使用它们来保存其当前状态,然后使用这些值来恢复它。这是一个简单的示例,说明如何使用它们来完成您想要的事情:

from __future__ import print_function


def get_turtle_state(turtle):
    """ Return turtle's current heading and position. """
    return turtle.heading(), turtle.position()

def restore_turtle_state(turtle, state):
    """ Set the turtle's heading and position to the given values. """
    turtle.setheading(state[0])
    turtle.setposition(state[1][0], state[1][1])


if __name__ == '__main__':
    import turtle

    tortoise = turtle.Turtle()
    saved_state = get_turtle_state(tortoise)
    print('saved state:', saved_state)  # -> (0.0, (0.00,0.00))

    tortoise.forward(100)
    tortoise.left(90)
    print('changed state:', get_turtle_state(tortoise))  # -> (90.0, (100.00,0.00))

    restore_turtle_state(tortoise, saved_state)
    print('restored state:', get_turtle_state(tortoise))  # -> (0.0, (0.00,0.00))

    turtle.getscreen().ontimer(turtle.bye, 2000)  # End script after a delay.
    turtle.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.