Python命令10中的龙曲线

时间:2014-05-08 02:37:26

标签: python turtle-graphics l-systems

为什么我的龙曲线看起来不像龙曲线?

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

1 个答案:

答案 0 :(得分:1)

运行时

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

第二行替换第一行引入的X。 (另外,你使用了错误的替换规则,但你似乎已经注意到了。)

您需要以不相互影响的方式执行这些替换,可能是通过组合步骤完成这些替换。一种方法是使用re模块的更高级替换功能。另一种方法是编写自己的替换例程。您还可以在第一次替换中使用X以外的字符,因此第二个替换不会拾取它,然后在第三次传递中将该字符替换为X