引言
Python的Turtle图形库是一个简单但功能强大的工具,用于绘制各种形状和图案。它模仿了一只可以在屏幕上移动的“海龟”,通过一系列指令控制它的位置、方向和动作。今天,我们将使用Turtle库来创作一幅充满爱意的艺术作品——一棵长满爱心的树。
一、Turtle库简介
Turtle是Python的标准库之一,旨在通过图形化编程教授计算机科学的基本概念。它可以被看作是一支可以在屏幕上移动和绘制的画笔。Turtle提供了大量的函数,如前进、后退、左转、右转以及设置颜色和线条宽度等,使得创建图形变得直观而有趣。
二、基本使用
在开始之前,我们先了解几个基础的Turtle函数:
turtle.speed(speed)
: 设置绘图速度。turtle.forward(distance)
: 向前移动指定的距离。turtle.backward(distance)
: 向后移动指定的距离。turtle.left(angle)
: 向左转指定的角度。turtle.right(angle)
: 向右转指定的角度。turtle.penup()
: 抬起画笔(移动时不会绘制)。turtle.pendown()
: 放下画笔(移动时会绘制)。turtle.goto(x, y)
: 移动到屏幕上的指定位置。
三、代码详细解释
import turtle
import random
首先,我们导入了turtle
模块和random
模块,后者将用于添加一些随机性,使我们的爱心树更加自然。
turtle.bgcolor("black")
设置背景色为黑色,为后续的绘制提供对比度。
def love(x, y):
...
love
函数负责在给定的坐标(x, y)处绘制一个爱心。它使用了圆弧绘制技巧来形成心形的曲线部分。
def tree(branchLen, t):
...
tree
函数是一个递归函数,用于绘制树的分支。随着分支长度的缩短,颜色会从棕色变为绿色,以模拟叶子的效果。每次调用自身时,都会随机改变角度和分支长度,从而创造出自然的树木外观。
myWin = turtle.Screen()
...
这部分代码设置了画布和Turtle的初始位置与方向,然后调用tree
函数开始绘制。
四、效果图
五、完整代码
import turtle
import random
turtle.bgcolor("black")
def love(x, y): # 在(x,y)处画爱心lalala
lv = turtle.Turtle()
lv.hideturtle()
lv.up()
lv.goto(x, y) # 定位到(x,y)
def curvemove(): # 画圆弧
for i in range(20):
lv.right(10)
lv.forward(2)
lv.color('red', 'pink')
lv.speed(10000000)
lv.pensize(1)
# 开始画爱心lalala
lv.down()
lv.begin_fill()
lv.left(140)
lv.forward(22)
curvemove()
lv.left(120)
curvemove()
lv.forward(22)
lv.left(140) # 画完复位
lv.end_fill()
def tree(branchLen, t):
if branchLen > 5: # 剩余树枝太少要结束递归
if branchLen < 20: # 如果树枝剩余长度较短则变绿
t.color("green")
t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
t.down()
t.forward(branchLen)
love(t.xcor(), t.ycor()) # 传输现在turtle的坐标
t.up()
t.backward(branchLen)
t.color("brown")
return
t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
t.down()
t.forward(branchLen)
#以下递归
ang = random.uniform(15, 45)
t.right(ang)
tree(branchLen - random.uniform(12, 16), t) # 随机决定减小长度
t.left(2 * ang)
tree(branchLen - random.uniform(12, 16), t) # 随机决定减小长度
t.right(ang)
t.up()
t.backward(branchLen)
myWin = turtle.Screen()
t = turtle.Turtle()
t.hideturtle()
t.speed(1000)
t.left(90)
t.up()
t.backward(200)
t.down()
t.color("brown")
t.pensize(32)
t.forward(60)
tree(100, t)
turtle.done()