当前位置 : 主页 > 编程语言 > python >

小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!

来源:互联网 收集:自由互联 发布时间:2022-06-15
在上一章中,我们用海龟绘图绘制了机器猫的卡通图像。在本章中,我们介绍如何用海龟绘图来绘制小朋友们喜欢的另一个卡通形象——小猪佩奇。 1 程序分析 我们先来看一下小猪佩奇


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

1 程序分析

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

小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_python编程

图1

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

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

2 绘制弧线和椭圆

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

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

我们通过一个简单的示例,来看看如何画弧线,代码请参见ch14\1.py。

  • ​​import turtle​​
  • ​​turtle.pencolor("red")​​
  • ​​turtle.setheading(-80)​​
  • ​​turtle.circle(100,120)​​
  • 执行结果如下所示,在窗口中画出了一个条红色弧线,如图2所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_数据类型_02

    图2

    因为turtle中并没有直接画椭圆的函数,所以我们要换一个思路。如果我们想利用一个正多边形来模拟圆的话,当边足够多的时候,就可以模拟出一个非常接近的圆。例如,正120边形,看上去就很接近圆了。我们来试着做一做,代码请参见ch14\2.py。

  • ​​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所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_python编程_03

    图3

    如果修改forward()中的参数,还可以画出不同半径的圆。这样就给了我们更大的自由度。在角度范围内,通过修改forward()中的参数来影响画弧的速度。我们还是画120个弧线,但是这次通过if-else条件语句,在前30步让画弧的速度由慢到快,接下来的30步速度由快到慢,此后的30步让画弧的速度再次由慢到快,最后的30步速度又由快到慢,这样不匀速的画法,就可以形成一个椭圆。我们来试着做一做,代码请参见ch14\3.py。

  • ​​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所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_python编程_04

    图4

    3 导入turtle模块

    从这里开始,我们要介绍如何绘制小猪佩奇,完整代码请参见ch14\4.py。

    还是和上一章中提到的情况相同,要使用海龟绘图,我们需要先导入turtle模块。我们还是采用第11章介绍的导入模块的第2种方法:

  • ​​from turtle import *​​
  • 这样就可以导入turtle模块中所有的方法和变量,然后就可以直接调用方法了,而不需要再添加“turtle.”前缀。

    4 绘制程序

    4.1 设置画布和画笔

    首先,我们定义一个setting()函数,用它来设置画布和画笔。setting()函数的代码如下所示。

  • ​​def setting(): ​​
  • ​​setup(800,500)​​
  • ​​pensize(4)​​
  • ​​hideturtle()​​
  • ​​colormode(255)​​
  • ​​speed(10)​​
  • setting()函数主要做一些绘制前的设置和准备工作。它先将画布设置为800像素宽和500像素高的大小。然后设置画笔的大小为4,隐藏小海龟图标。调用colormode(255)设置RGB色彩值范围为0~255。调用speed(10) 将画笔速度设置为10。

    4.2 nose()函数

    接下来,我们先定义绘制鼻子的函数,该函数的代码如下所示。

  • ​​def nose(): ​​
  • ​​penup()​​
  • ​​goto(-100,100) ​​
  • ​​setheading(-30)​​
  • ​​color((255,155,192),"pink") #画笔色是浅粉,填充色是粉色​​
  • ​​pendown() ​​
  • ​​begin_fill()​​
  • ​​#绘制一个椭圆作为鼻子的轮廓​​
  • ​​segment=0.4​​
  • ​​for i in range(120):​​
  • ​​if 0<=i<30 or 60<=i<90:​​
  • ​​segment= segment+0.08 #加速​​
  • ​​left(3) #向左转3度​​
  • ​​forward(segment) #画直线​​
  • ​​else:​​
  • ​​segment= segment-0.08 #减速​​
  • ​​left(3) #向左转3度​​
  • ​​forward(segment) #画直线​​
  • ​​end_fill()​​
  • ​​#左鼻孔​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(25)​​
  • ​​setheading(0)​​
  • ​​forward(10)​​
  • ​​color((255,155,192),(160,82,45)) #画笔色是浅粉,填充色是黄土赭色 ​​
  • ​​pendown()​​
  • ​​begin_fill()​​
  • ​​circle(5) ​​
  • ​​end_fill()​​
  • ​​#右鼻孔​​
  • ​​penup()​​
  • ​​setheading(0)​​
  • ​​forward(20)​​
  • ​​pendown()​​
  • ​​begin_fill()​​
  • ​​circle(5)​​
  • ​​end_fill()​​
  • 首先调用penup()函数拿起画笔,避免在画布上留下痕迹。然后调用goto()函数将画笔定位到指定坐标。调用setheading()设置画笔启动时运动的方向。然后调用color()函数,将画笔的颜色设置为浅粉色,将填充的颜色也设置为粉色,这是佩奇的标志性的颜色。然后调用pendown()函数,落下画笔,现在画笔的任何移动都会留下轨迹。接下来,我们绘制了一个椭圆,绘制方法在2节已经介绍过,这里不再详述。这样鼻子的轮廓就绘制完成了。

    下面我们来绘制佩奇的鼻孔。还是拿起画笔,将画笔定位到指定坐标,设置启动时运动的方向,指定画笔颜色和填充颜色,落下画笔。然后画一个圆。这样就画好了左鼻孔,右鼻孔的代码也类似,这里就不再赘述。调用这个函数,看一下绘制效果,如图5所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_python_05

    图5

    4.3 head()函数

    接下来我们定义head()函数,它用来绘制头部。head()函数的代码如下所示。

  • ​​def head(): ​​
  • ​​penup()​​
  • ​​goto(-69,167)​​
  • ​​pendown()​​
  • ​​color((255,155,192),"pink") ​​
  • ​​begin_fill()​​
  • ​​setheading(180)​​
  • ​​circle(300,-30)​​
  • ​​circle(100,-60)​​
  • ​​circle(80,-100)​​
  • ​​circle(150,-20)​​
  • ​​circle(60,-95)​​
  • ​​setheading(161)​​
  • ​​circle(-300,15)​​
  • ​​#勾画出右半个鼻子的轮廓,避免填充时覆盖掉​​
  • ​​penup()​​
  • ​​goto(-100,100)​​
  • ​​pendown()​​
  • ​​setheading(-30)​​
  • ​​segment=0.4​​
  • ​​for i in range(60):​​
  • ​​if 0<=i<30 or 60<=i<90:​​
  • ​​segment= segment+0.08​​
  • ​​left(3) ​​
  • ​​forward(segment) ​​
  • ​​else:​​
  • ​​segment= segment-0.08​​
  • ​​left(3)​​
  • ​​forward(segment)​​
  • ​​end_fill()​​
  • 拿起画笔,将画笔定位到指定坐标,落下画笔。指定画笔颜色和填充颜色。调用begin_fill()函数开始填充。设置启动时运动的方向,然后通过绘制几条弧线把头绘制出来。

    接下来,又重新拿起画笔,将画笔定位到(−100,100),这是画鼻子时的位置。然后勾画出右半个鼻子的轮廓,也就是半个椭圆。这样做是为了避免填充头的时候把鼻子覆盖掉。最后调用end_fill()函数结束填充。

    调用这个函数,看一下其绘制效果,如图6所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_数据类型_06

    图6

    4.4 ears()函数

    接下来我们定义ears()函数,用来绘制耳朵。ears()函数的代码如下所示。

  • ​​def ears(): ​​
  • ​​color((255,155,192),"pink")​​
  • ​​#左耳朵​​
  • ​​penup()​​
  • ​​goto(0,160)​​
  • ​​pendown()​​
  • ​​begin_fill()​​
  • ​​setheading(100)​​
  • ​​circle(-50,50)​​
  • ​​circle(-10,120)​​
  • ​​circle(-50,54)​​
  • ​​end_fill()​​
  • ​​#右耳朵​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(-12)​​
  • ​​setheading(0)​​
  • ​​forward(30)​​
  • ​​pendown()​​
  • ​​begin_fill()​​
  • ​​setheading(100)​​
  • ​​circle(-50,50)​​
  • ​​circle(-10,120)​​
  • ​​circle(-50,56)​​
  • ​​end_fill()​​
  • 代码和前面类似,这里不再赘述。调用这个ears()函数,看一下其绘制效果,如图7所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_python_07

    图7

    4.5 eyes()函数

    接下来我们定义eyes()函数,用来绘制眼睛。eyes()函数的代码如下所示。

  • ​​def eyes(): ​​
  • ​​#左眼眶 ​​
  • ​​color((255,155,192),"white")​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(-20)​​
  • ​​setheading(0)​​
  • ​​forward(-95)​​
  • ​​pendown()​​
  • ​​begin_fill()​​
  • ​​circle(15)​​
  • ​​end_fill()​​
  • ​​#左眼珠​​
  • ​​color("black")​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(12)​​
  • ​​setheading(0)​​
  • ​​forward(-3)​​
  • ​​pendown()​​
  • ​​begin_fill()​​
  • ​​circle(3)​​
  • ​​end_fill()​​
  • ​​#右眼框​​
  • ​​color((255,155,192),"white")​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(-25)​​
  • ​​setheading(0)​​
  • ​​forward(40)​​
  • ​​pendown()​​
  • ​​begin_fill()​​
  • ​​circle(15)​​
  • ​​end_fill()​​
  • ​​#右眼珠​​
  • ​​color("black")​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(12)​​
  • ​​setheading(0)​​
  • ​​forward(-3)​​
  • ​​pendown()​​
  • ​​begin_fill()​​
  • ​​circle(3)​​
  • ​​end_fill()​​
  • 调用这个函数,看看绘制效果,如图8所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_python_08

    图8

    4.6 cheek()函数

    接下来,我们定义cheek()函数,它绘制一个红色的圆,用来表示腮红。cheek()函数代码如下所示。

  • ​​def cheek(): ​​
  • ​​penup()​​
  • ​​goto(80,10)​​
  • ​​setheading(0)​​
  • ​​color((255,155,192))​​
  • ​​pendown() ​​
  • ​​begin_fill()​​
  • ​​circle(30)​​
  • ​​end_fill()​​
  • 调用这个函数,看一下其绘制效果,如图9所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_数据类型_09

    图9

    4.7 mouth()函数

    接下来我们定义mouth()函数,就是绘制一个红色弧线,用来表示嘴巴。mouth函数的代码如下所示。

  • ​​def mouth(): ​​
  • ​​penup()​​
  • ​​goto(-20,30)​​
  • ​​color(239,69,19)​​
  • ​​pendown()​​
  • ​​setheading(-80)​​
  • ​​circle(35,120)​​
  • 调用这个函数,看一下绘制效果,如图10所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_数据类型_10

    图10

    4.8 body()函数

    接下来,我们定义body()函数,用来绘制身体。body()函数的代码如下所示。

  • ​​def body(): ​​
  • ​​color("red",(255,99,71))​​
  • ​​#身体左边的曲线​​
  • ​​penup()​​
  • ​​goto(-32,-8)​​
  • ​​pendown()​​
  • ​​begin_fill()​​
  • ​​setheading(-130)​​
  • ​​circle(100,10)​​
  • ​​circle(300,30)​​
  • ​​#身体底边​​
  • ​​setheading(0)​​
  • ​​forward(230)​​
  • ​​#身体右边的曲线​​
  • ​​setheading(90)​​
  • ​​circle(300,30)​​
  • ​​circle(100,3)​​
  • ​​color((255,155,192),(255,100,100))​​
  • ​​#把脸上的下巴颏画出来,避免填充时覆盖掉​​
  • ​​setheading(-135)​​
  • ​​circle(-80,63)​​
  • ​​circle(-150,24)​​
  • ​​end_fill()​​
  • 调用这个函数,看一下绘制效果,如图11所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_python编程_11

    图11

    4.9 hands()函数

    接下来,我们定义hands()函数用来绘制手。hands()函数的代码如下所示。

  • ​​def hands(): ​​
  • ​​color((255,155,192))​​
  • ​​# 左手的中间手指​​
  • ​​penup()​​
  • ​​goto(-56,-45)​​
  • ​​pendown()​​
  • ​​setheading(-160)​​
  • ​​circle(300,15)​​
  • ​​#通过一个弧形表示左手另外两根手指​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(15)​​
  • ​​setheading(0) ​​
  • ​​pendown()​​
  • ​​setheading(-10)​​
  • ​​circle(-20,90)​​
  • ​​# 右手的中间手指​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(30)​​
  • ​​setheading(0)​​
  • ​​forward(237)​​
  • ​​pendown()​​
  • ​​setheading(-20)​​
  • ​​circle(-300,15)​​
  • ​​#通过一个弧形表示另外两根手指​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(20)​​
  • ​​setheading(0)​​
  • ​​pendown()​​
  • ​​setheading(-170)​​
  • ​​circle(20,90)​​
  • 调用这个函数,看看绘制效果,如图12所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_数据类型_12

    图12

    4.10 feet()函数

    接下来,我们定义feet()函数,用来绘制脚。feet()函数的代码如下所示。

  • ​​def feet(): ​​
  • ​​#左腿​​
  • ​​pensize(10)​​
  • ​​color((240,128,128))​​
  • ​​penup()​​
  • ​​goto(2,-177)​​
  • ​​pendown()​​
  • ​​setheading(-90)​​
  • ​​forward(40)​​
  • ​​setheading(-180)​​
  • ​​#左脚​​
  • ​​color("black")​​
  • ​​pensize(15)​​
  • ​​forward(20)​​
  • ​​#右腿​​
  • ​​pensize(10)​​
  • ​​color((240,128,128))​​
  • ​​penup()​​
  • ​​setheading(90)​​
  • ​​forward(40)​​
  • ​​setheading(0)​​
  • ​​forward(90)​​
  • ​​pendown()​​
  • ​​setheading(-90)​​
  • ​​forward(40)​​
  • ​​setheading(-180)​​
  • ​​#右脚​​
  • ​​color("black")​​
  • ​​pensize(15)​​
  • ​​forward(20)​​
  • 为了简单起见,我们就用直线来表示腿和脚,调用这个函数,看一下绘制效果,如图13所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_python编程_13

    图13

    4.11 tail()函数

    这里定义了tail()函数,用来绘制尾巴。tail()函数的代码如下所示。

  • ​​def tail(): ​​
  • ​​pensize(4)​​
  • ​​color((255,155,192))​​
  • ​​penup()​​
  • ​​goto(148,-155)​​
  • ​​pendown()​​
  • ​​setheading(0)​​
  • ​​#打卷的尾巴​​
  • ​​circle(70,20)​​
  • ​​circle(10,330)​​
  • ​​circle(70,30)​​
  • 调用这个函数,来看一下效果,如图14所示。

    小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!_python编程_14

    图14

    到这里,我们的小猪佩奇就绘制完成了,看上去是不是和图1很像呢?

    5 小结

    在本章中,我们使用海龟绘图绘制了一个小猪佩奇的形象,进一步加深读者对海龟绘图的了解和掌握。读者也可以尝试使用海龟绘图绘制自己喜欢的其他图案。



    网友评论