07-海龟绘图3_黄金螺旋

  • 阅读: 1097
  • 更新: 2022-06-11

难度:

1. 题目描述

2. 关键点

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

3. 代码实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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》


=== 全文完 ===


欢迎加入QQ群:855013471

京公网安备 11011302003970号 京ICP备2022012301号-1