圣诞节即将来临,我们可以用Python的turtle库来绘制一棵充满节日气氛的动态圣诞树。这段代码通过递归算法生成树枝,并在树上随机点缀彩色的装饰球,最后形成一棵完整的圣诞树。
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秒后自动关闭窗口
这段代码主要分为四个部分:
这段代码展示了如何利用Python的turtle库创建复杂的图形,特别是通过递归算法生成自然形态的物体。它不仅是一个有趣的节日项目,也是一个学习递归和计算机图形学的绝佳示例。