错误区域中的递归分形平方

时间:2018-04-26 16:41:35

标签: python recursion turtle-graphics fractals

我正在为分形广场编写代码。我有绘制正方形的功能,这就是我得到的:click here 但这正是我想要实现的目标:click here。 我认为我的问题不是正确放置我的坐标,但我可能完全错了。这是我的代码:

#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 :(得分:1)

你的递归方法都是错误的。您不能在递归中使用绝对定位:

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

<强>输出

enter image description here

现在出现的问题是填充这些正方形并确保图案中的右上方总是“隐藏在”下面。