Skip to content

海龟绘图-黄金螺旋

难度:⭐⭐⭐⭐⭐

1. 题目描述

题目描述

使用海龟绘图 turtle 绘制斐波那契黄金矩形&黄金螺旋

2. 关键点

  • 海龟绘图
  • 每个矩形第二条边的终点为下一个矩形的起点
  • 每个矩形之间,海龟的朝向也是每次加 90°

3. 代码实现

点击显示代码
python
import turtle


def fb(n):
    """斐波那契数递归函数"""
    if n <= 1:
        return n
    return fb(n-1) + fb(n-2)


def draw_fb(n):
    """绘制斐波那契黄金矩形"""
    width = 10  # 1 单位的宽度,可看作放大倍数

    to_angle = 270  # 初始海龟朝向,朝南
    pos = (0, 0)  # 初始海龟坐标
    for i in range(1, n+1):
        x = fb(i)
        x *= width
        ta = to_angle  # 每个矩形的初始朝向

        # 回到每一个矩形的起始点,此时抬起画笔,不绘画
        turtle.penup()
        turtle.setpos(pos)
        turtle.pendown()

        # 绘制矩形的四条边
        for j in range(4):
            turtle.setheading(ta)  # 设置矩形初始朝向
            turtle.forward(x)  # 绘制边
            if j == 1:  # 每个矩形第二条边的终点为下一个矩形的起点
                pos = turtle.pos()  # 记录下一个矩形的起点
            ta += 90  # 绘制完一条边后转 90°

        turtle.setheading(to_angle)  # 复位海龟朝向,准备绘制四分之一圆
        turtle.circle(x, 90)  # 绘制四分之一圆
        to_angle += 90  # 绘制完一条矩形后转 90°

    turtle.exitonclick()


if __name__ == '__main__':
    draw_fb(8)

4. 运行示例

5. 进阶思考

  1. 添加背景、颜色等

6. 请欣赏影片

片名:《Nature by Numbers》