Рекурсивный квадрат фрактала в неправильной области - PullRequest
0 голосов
/ 26 апреля 2018

Я пишу код для фрактального квадрата. У меня есть функция для рисования квадрата, и вот что я получаю: нажмите здесь но это то, чего я пытаюсь достичь: нажмите здесь . Я думаю, что моя проблема не в том, чтобы правильно расположить мои координаты, но я могу быть совершенно не прав. Вот мой код:

#setting up stuff Code by Angel M. Gonzalez
import turtle
window = turtle.Screen()
square = turtle.Pen()
square.speed(0)
square.penup()
square.goto(0,0)
square.pendown()
square.color("black", "red")

#defining my function to make what i want

def pattern(length, depth, x, y):
    square.goto(0,0)
    if depth > 1:
        square.begin_fill()
        square.forward(length)
        square.left(90)
        square.forward(length)
        square.left(90)
        square.forward(length)
        square.left(90)
        square.forward(length)
        square.end_fill()

        pattern(length/2.2, depth -1, 1,1)
        pattern(length/4.4, depth -1, 1.5,1.5)

#run my function  
pattern(300, 4, 0,0)




#exit
turtle.exitonclick()

Как я уже говорил, я не знаю, неправильно ли здесь размещены координаты или я что-то упустил. Я бы сказал, что моя функция для исходного квадрата в порядке.

1 Ответ

0 голосов
/ 27 апреля 2018

Ваш подход к рекурсии неверен. Вы не можете использовать абсолютное позиционирование в своей рекурсии:

square.goto(0,0)
...
pattern(length/4.4, depth -1, 1.5,1.5)

Все должно быть относительно того, где вы находитесь. Кроме того, для создания рекурсивного рисунка, подобного этой работе, ваша рекурсивная функция должна оставлять черепаху в том же состоянии (положении и направлении), в каком она была при входе в рекурсивную функцию, чтобы вызывающая сторона знала, где она стоит.

Для этого дизайна вы не можете просто нарисовать квадрат и затем выполнить рекурсию, вам нужно повторяться в каждом углу квадрата во время рисования.

В качестве более простого начального упражнения давайте просто нарисуем линии этой фигуры и проигнорируем заливку. Это может не привести непосредственно к решению, но продемонстрирует вышеуказанные принципы:

from turtle import Turtle, Screen

def pattern(length, depth):

    if depth < 1:
        return

    # assume we're at the center of square, move to corner
    turtle.penup()
    turtle.backward(length / 2)
    turtle.left(90)
    turtle.backward(length / 2)
    turtle.right(90)
    turtle.pendown()

    for _ in range(4):
        pattern(length / 2.2, depth - 1)  # recurse at each corner
        turtle.forward(length)
        turtle.left(90)

    # return to center of square for the benefit of caller
    turtle.penup()
    turtle.forward(length / 2)
    turtle.left(90)
    turtle.forward(length / 2)
    turtle.right(90)
    turtle.pendown()

screen = Screen()
turtle = Turtle()
turtle.speed('fastest')

pattern(100, 4)

turtle.hideturtle()
screen.exitonclick()

OUTPUT

enter image description here

Теперь возникает проблема как заполнить эти квадраты, так и убедиться, что верхний правый квадрат в шаблоне всегда «заправлен».

...