Python turtle模块实例:绘制小猪佩奇前分析

在上一教程中,我们用海龟绘图绘制了机器猫的卡通图像。现在我们介绍如何用海龟绘图来绘制小朋友们喜欢的另一个卡通形象——小猪佩奇。

程序分析

我们先来看一下小猪佩奇的样子,如图 1 所示。
python实例:小猪佩奇实例

观察这个图像可以发现,小猪佩奇基本是由各种曲线构成的。她的鼻子是个椭圆。头是几条弧线连接而成,耳朵也是由几条弧线构成的。眼睛是大圆套小圆。腮是一个实心圆。嘴巴就是一条弧线。然后就是身体,左边和右边两条曲线,下面是一条直线。胳膊可以通过直线表示,手指用曲线表示。我们还可以用两条竖线表示左腿和右腿,用两条横线表示脚。最后用 3 条弧线画出带卷的小尾巴。

我们还是使用自定义函数,按照小猪佩奇的部位来定义各个绘制函数:nose(鼻子)、head(头)、ears(耳朵)、eyes(眼睛)、cheek(腮)、mouth(嘴巴)、body(身体)、hands(手)、foot(脚)和 tail(尾巴)。函数的名字就表明了该函数负责绘制的身体部位。

绘制弧线和椭圆

可以看到很多部位都是用弧线画出来的。我们在之前介绍 circle() 函数时曾提到过,这个函数有 3 个参数,分别是 radius(半径)、extent(弧度)和 steps(做半径为 radius 的圆的内切正多边形),其中后面两个参数是可选的。

之前我们都是用 circle() 函数画圆,所以要么只给这个函数传递一个参数,要么在传递第 2 个参数的时候将其设置为 360。如果用 circle() 函数画弧线,那就要为第 2 个参数指定相应的弧度。

我们通过一个简单的示例,来看看如何画弧线,代码如下。
import turtle
turtle.pencolor("red")
turtle.setheading(-80)
turtle.circle(100,120)
执行结果如下所示,在窗口中画出了一个条红色弧线,如图 2 所示。

circle()  函数画圆
图 2

因为 turtle 中并没有直接画椭圆的函数,所以我们要换一个思路。如果我们想利用一个正多边形来模拟圆的话,当边足够多的时候,就可以模拟出一个非常接近的圆。例如,正 120 边形,看上去就很接近圆了。我们来试着做一做,代码如下。
import turtle
turtle.pendown()
for j in range(120):        # 重复执行120次
    turtle.forward(5)       # 移动5个像素
    turtle.left(3)          # 左转3度
turtle.penup()
我们执行一个循环 120 次,每次循环中移动 5 个像素,然后左转 3 度。这样完成循环后,正好左转了 360 度,回到了最初的位置。执行过程中,在窗口中,我们会看到光标从初始位置出发,按逆时针方向画出了一个近似的圆,如图 3 所示。


图 3

如果修改 forward() 中的参数,还可以画出不同半径的圆。这样就给了我们更大的自由度。在角度范围内,通过修改 forward() 中的参数来影响画弧的速度。

我们还是画 120 个弧线,但是这次通过 if-else 条件语句,在前 30 步让画弧的速度由慢到快,接下来的 30 步速度由快到慢,此后的 30 步让画弧的速度再次由慢到快,最后的 30 步速度又由快到慢,这样不匀速的画法,就可以形成一个椭圆。

我们来试着做一做,代码如下。
import turtle
turtle.pendown()
segment=1
for i in range(120):
    if 0<=i<30 or 60<=i<90:
        segment= segment+0.2
        turtle.left(3)
        turtle.forward(segment)
    else:
        segment= segment-0.2
        turtle.left(3)
        turtle.forward(segment)
运行这段代码,可以看到 turtle 画出了一个椭圆,如图 4 所示。


图 4

导入turtle模块

从这里开始,我们要介绍如何绘制小猪佩奇,还是和之前提到的情况相同,要使用海龟绘图,我们需要先导入 turtle 模块。我们还是采用之前介绍的导入模块的第 2 种方法:
from turtle import *
这样就可以导入 turtle 模块中所有的方法和变量,然后就可以直接调用方法了,而不需要再添加“turtle.”前缀。