使用递归生成分形正方形

时间:2016-01-02 18:02:02

标签: python recursion turtle-graphics fractals

我正在学习递归,并想在Python(龟)中实现这一点:

Fractal cubes

我做了一个递归函数,我从左下角开始绘制一个正方形,面向东方#39;我可以让其中一方的正方形正确,但不能正确。

在绘制较小的正方形之前向后移动会产生奇怪的结果:

Odd results

from turtle import *
delay(0)
speed(10)

def square(length, level):
if level == 0:
    return
else:
    # Start from the bottom-left corner
    forward(length)
    # Right square
    square(length // 2, level - 1)
    lt(90)

    forward(length)
    lt(90)

    forward(length)
    lt(90)

    forward(length)
    lt(90)

    ### Try moving backward before drawing
    ##backward(length / 2)

    # Left square
    square(length // 2, level - 1)

square(110, 4)

学习这些分形的任何提示或好例子?

1 个答案:

答案 0 :(得分:1)

使用turtle绘制分形时,您应该注意以下几点:

  1. 必须启动的功能(在您的情况下,指定“左下角”)。
  2. 停止的地方(?) - 位置和方向!这些要点在您的代码中并不清楚,这就是它无法正常工作的原因。
  3. 您的代码中存在两个问题:

    • 您应该移动backward(length // 2)以正确开始绘制左方(正如您在评论中所做的那样)
    • 你应该回到你开始广场​​的地方(大广场的左下角)

    这是带有一些评论的代码:

    def square(length, level):
        # Start from the bottom-left corner    
        if level == 0:
            return
        else:
            # Draw the bottom side
            forward(length)
            # Draw the right square
            square(length // 2, level - 1)
            # Assume we ended at the same position
            # Draw the right side
            lt(90); forward(length)
            # Draw the upper side
            lt(90); forward(length)
            # Draw the left side
            lt(90); forward(length)
            # Go backward
            lt(90); backward(length // 2) ;
            # Draw the left square
            square(length // 2, level - 1)
            # Go back to the original position
            forward(length // 2)
    

    基本上,你错过了将乌龟移动到原始位置的最后一个forward(length // 2)