0

ドラゴン カーブがドラゴン カーブのように見えないのはなぜですか?

ドラゴンカーブ

以下は、オーダー 10 の Python での実装です。

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

X2 行目は、最初の行で導入された s を置き換えます。(また、間違った置換規則を使用していますが、既に気付いているようです。)

これらの置換は、相互に作用しないように行う必要があります。おそらく、それらを組み合わせた手順で行うことによります。これを行う 1 つの方法は、reモジュールのより高度な置換機能を使用することです。もう 1 つは、独自の置換ルーチンを作成することです。最初の置換以外の文字を使用することもできるXため、2 回目の置換ではそれが選択されずX、3 回目のパスでその文字が置換されます。

于 2014-05-08T03:05:58.693 に答える