Как мне нарисовать кривую Пеано? - PullRequest
0 голосов
/ 13 февраля 2020

Это мой код для рисования кривой Пеано с использованием python черепахи в Visual Studio Code. Я могу получить уровень 1 просто отлично, но кроме этого он не совсем правильно повторяет форму для последующих уровней. Есть предложения?

from turtle import *
def peano(level, length):
    if level == 1:
       print(rt(45), fd(length/3), rt(90), fd(length/3), lt(90), fd(length/3))
       print(lt(90), fd(length/3), lt(90), fd(length/3), rt(90), fd(length/3))
       print(rt(90), fd(length/3), rt(90), fd(length/3), lt(90), fd(length/3))
    else:
       peano(level-1, length/2)
       rt(45)
       peano(level-1, length/2)
       rt(-45)
       peano(level-1, length/2)

peano(2, 40)

1 Ответ

0 голосов
/ 13 февраля 2020

На своем самом базовом c, 0-м уровне, фрактальная процедура должна просто нарисовать прямую линию, используя forward() (он же fd()). На уровне 1 он должен нарисовать базовый паттерн c, который составляет фрактал, , но , используя саму фрактальную процедуру для рисования линий, а не forward(). Каждый уровень выше делает то же самое. Мы заменяем рисование линий на фрактальное:

from turtle import *

def peano(level, length):
    if level == 0:
        forward(length)
    else:
        angle = 90

        peano(level-1, length/3)

        right(angle)
        peano(level-1, length/3)

        for _ in range(2):
            for _ in range(3):
                left(angle)
                peano(level-1, length/3)

            angle = -angle

        left(angle)
        peano(level-1, length/3)

# Starting position and angle to fill our window
penup()
goto(-220, 220)
pendown()
right(45)

peano(2, 600)

exitonclick()

Вам не нужны вложенные циклы, которые я добавил, вы можете явно написать шаги:

    else:
        peano(level-1, length/3)

        right(90)
        peano(level-1, length/3)

        left(90)
        peano(level-1, length/3)
        left(90)
        peano(level-1, length/3)
        left(90)
        peano(level-1, length/3)

        right(90)
        peano(level-1, length/3)
        right(90)
        peano(level-1, length/3)
        right(90)
        peano(level-1, length/3)

        left(90)
        peano(level-1, length/3)

enter image description here

...