用Python绘制一棵动态生成的圣诞树
Python教程
返回文章列表

用Python绘制一棵动态生成的圣诞树

圣诞节即将来临,我们可以用Python的turtle库来绘制一棵充满节日气氛的动态圣诞树。这段代码通过递归算法生成树枝,并在树上随机点缀彩色的装饰球,最后形成一棵完整的圣诞树。

提示: 运行此代码需要安装Python的turtle模块,它是Python标准库的一部分,通常无需额外安装。

完整的实现代码


from turtle import *
import random
import time

# 设置画布和速度
n = 100.0  # 基本单位长度
speed("fastest")  # 设置最快绘图速度
screensize(bg='seashell')  # 设置背景颜色为贝壳色

# 绘制树干
left(90)  # 海龟朝向北方
forward(3 * n)  # 向上移动300个单位

# 绘制星星
color("orange", "yellow")  # 设置星星颜色(边框橙色,填充黄色)
begin_fill()
left(126)
for i in range(5):
    forward(n / 5)
    right(144)
    forward(n / 5)
    left(72)
end_fill()
right(126)

# 回到树干底部
color("dark green")  # 设置树干颜色为深绿色
backward(n * 4.8)  # 向下移动480个单位

# 递归函数绘制树枝
def tree(d, s):
    if d <= 0: return  # 终止条件:当深度为0时返回
    forward(s)  # 向前移动s个单位
    tree(d - 1, s * .8)  # 递归调用,深度减1,长度缩短为80%
    right(120)  # 右转120度
    tree(d - 3, s * .5)  # 递归调用,深度减3,长度缩短为50%
    right(120)  # 右转120度
    tree(d - 3, s * .5)  # 递归调用,深度减3,长度缩短为50%
    right(120)  # 右转120度
    backward(s)  # 退回原位

# 绘制整棵树
tree(15, n)  # 树的深度为15,基本长度为n
backward(n / 2)  # 稍微向上移动

# 随机添加装饰球
for i in range(200):
    a = 200 - 400 * random.random()  # 随机x坐标偏移量
    b = 10 - 20 * random.random()    # 随机y坐标偏移量
    up()  # 提起画笔
    forward(b)  # 移动到随机位置
    left(90)
    forward(a)
    down()  # 放下画笔
    if random.randint(0, 1) == 0:  # 随机选择颜色
        color('tomato')  # 番茄红色
    else:
        color('wheat')   # 小麦色
    circle(2)  # 绘制装饰球
    up()  # 提起画笔
    backward(a)  # 回到原位
    right(90)
    backward(b)

# 保持窗口打开一段时间
time.sleep(60)  # 程序运行60秒后自动关闭窗口
        

代码解析

这段代码主要分为四个部分:

  1. 初始化设置
    • 导入必要的库(turtle、random、time)
    • 设置绘图速度和背景颜色
    • 定义基本单位长度n,用于控制整体比例
  2. 树干和星星绘制
    • 使用turtle的基本移动和转向命令绘制树干
    • 通过循环绘制五角星作为圣诞树顶部装饰
    • 使用begin_fill()和end_fill()填充星星颜色
  3. 树枝绘制(递归算法)
    • 定义递归函数tree,通过不断缩小树枝长度和改变角度来生成自然的树形结构
    • 递归深度控制树枝的细节程度
    • 每次递归调用时,树枝长度按比例缩短,形成逐渐变细的效果
  4. 装饰球添加
    • 使用随机数生成器在树上随机位置添加装饰球
    • 随机选择红色或黄色作为装饰球颜色
    • 循环200次,确保树上有足够的装饰
扩展建议: 你可以尝试修改代码中的参数,如调整递归深度、改变装饰球颜色、增加闪烁效果或添加礼物盒等元素,让圣诞树更加丰富多彩!

这段代码展示了如何利用Python的turtle库创建复杂的图形,特别是通过递归算法生成自然形态的物体。它不仅是一个有趣的节日项目,也是一个学习递归和计算机图形学的绝佳示例。