Кривая Дракона в Python Заказать 10

Почему моя кривая Дракона не похожа на кривую дракона?

Кривая Дракона

Вот реализация в 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

1 ответ

Когда ты бежишь

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

вторая строка заменяет Xs введены в первой строке. (Кроме того, вы используете неправильные правила замены, но, похоже, вы это уже заметили.)

Вы должны выполнять эти замены таким образом, чтобы они не взаимодействовали друг с другом, возможно, выполняя их в комбинированном режиме. Один из способов сделать это - использовать более продвинутые возможности замены re модуль. Еще бы написать свою собственную программу замены. Вы также можете использовать другой символ, кроме X в первой замене, поэтому вторая замена не поднимает его, затем замените этот символ на X в третьем проходе.

Другие вопросы по тегам