0

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

龙曲线

这是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

4

1 回答 1

1

当你跑

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

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

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

于 2014-05-08T03:05:58.693 回答