Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 巨蟒10级龙曲线_Python_Turtle Graphics_L Systems - Fatal编程技术网

Python 巨蟒10级龙曲线

Python 巨蟒10级龙曲线,python,turtle-graphics,l-systems,Python,Turtle Graphics,L Systems,为什么我的龙形曲线看起来不像龙形曲线 以下是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]'): f

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

以下是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的外观:

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()

编辑:以下是我使用1阶得到的结果,具有更大比例的曲线:

当你跑步时

    result = result.replace('Y', 'FX-Y')
    result = result.replace('X', 'X+YF')
第二行替换第一行引入的
X
s。(此外,您使用了错误的替换规则,但您似乎已经注意到了这一点。)


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

您尝试过低阶曲线吗?这样看问题可能更容易。我的意思是,像,1号订单。把它简化到你看到问题的最简单的情况。看来我可能把绘图功能实现错了?我不确定,我能画出完美的分形植物和奔腾的雪花。。。但我就是搞不懂这个:(我想我明白了…我搞砸了,我想维基有一条规则错了…我没有用“X”->“X+YF+”而是用“X”->“X+YF”Nvm…还是错了…你认为我的规则可能有问题吗?我卡住了:/除了规则之外真的没有什么可以检查的了,对吗?