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

1 程序分析

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

图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所示。

图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所示。

图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所示。

图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所示。

图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所示。

图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所示。

图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所示。

图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所示。

图9

4.7 mouth()函数

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

penup()

goto(-20,30)

color(239,69,19)

pendown()

setheading(-80)

circle(35,120)

调用这个函数,看一下绘制效果,如图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所示。

图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所示。

图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所示。

图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所示。

图14

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

5 小结

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

本文摘自《Python少儿趣味编程》,还可以在本书中学习绘制海龟,机器猫哟!快来带领孩子从零开始学Python吧。

本书是少儿学习Python编程的趣味指南,全书共17章,按照由简到难、逐步深入的方式组织各章内容。本书从认识Python开始,首先介绍了Python的安装和IDLE的使用,然后依次介绍了变量、数字和字符串、列表、元组和字典、布尔类型等数据类型,以及条件、循环、异常和注释、函数、面向对象编程、文件操作等基础知识,并且通过实际案例讲解了海龟绘图、Pygame基础和游戏编程,以及Python在自然语言处理方面的应用。

本书精心选取内容,注重难易适度和趣味性,语言通俗易懂,代码示例丰富。在多章的末尾,还给出了一些练习题并给出了解答。本书适合想要学习Python编程基础的少儿(尤其是10岁以上的孩子)及想要教孩子学习编程的家长阅读,也适合少儿编程培训班的老师用作少儿编程培训的教材

python设置笔大小的函数_小朋友们,你试过用Python语言绘制小猪佩奇吗?来完成你的第一个创作吧!...相关推荐

  1. 小朋友们,你试过用Python绘制小猪佩奇吗?来开始创作吧

    在上一章中,我们用海龟绘图绘制了机器猫的卡通图像.在本章中,我们介绍如何用海龟绘图来绘制小朋友们喜欢的另一个卡通形象--小猪佩奇. 1 程序分析 我们先来看一下小猪佩奇的样子,如图1所示. 图1 观察 ...

  2. python绘制小猪佩奇程序设计大作业_代码绘制一只小猪佩奇---python篇

    今天教大家用python的pillow包来绘制小猪佩奇,python的安装就不用多说了,直接上代码吧 0.首先当然是安装pillow包啦. 关于pillow库的安装有几种方式 最常使用的是pip安装 ...

  3. 用python画小猪佩奇的编码_如何用python绘制小猪佩奇-python绘图教程图文讲解

    原标题:如何用python绘制小猪佩奇-python绘图教程图文讲解 如何运用python来绘制小猪佩奇呢?通过几道简单的python代码即可让你绘制出小猪佩奇,话不多说,直接上代码. 用python ...

  4. 趣味python | 一步一步绘制小猪佩奇

    微信公众号:Python 集中营 简单的事情重复做,重复的事情坚持做,坚持的事情用心做; 你的肯定是我坚持的动力,如果这篇文章对你有帮助,点个关注吧! 定义全局属性 1# 导入turtle绘图库23i ...

  5. 用python画小动物大全_python3用turtle库进行绘制小猪佩奇图案

    晚上闲着无事,深入学习这个turtle用法,就做了小猪佩奇图 附上代码: # coding: utf-8 #功能:绘画小猪佩奇 import turtle as t t.screensize(400, ...

  6. Python|Python简介|安装Python解释器|运行|开发工具|Python之禅|turtle绘制五星红旗|绘制方块|绘制小猪佩奇|语言100课:学习(1)

    文章目录 源项目地址 初识Python Python简介 Python的历史 Python的优缺点 Python的应用领域 安装Python解释器 运行Python程序 确认Python的版本 编写P ...

  7. 绘制小猪佩奇的python代码

    一个很有意思的代码,可以绘制出小猪佩奇,代码来源 github.com """ 绘制小猪佩奇 """ from turtle import ...

  8. python turtle画熊-Python使用turtle库绘制小猪佩奇(实例代码)

    turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制.turtle图形绘制的概念诞生于1969年,成功应用于LOGO编程语言. turtle库绘制图形有一个基本框架:一个小海龟 ...

  9. python turtle 绘图小猪佩奇,Python使用turtle库绘制小猪佩奇(实例代码)

    这篇文章主要介绍了Python使用turtle库绘制小猪佩奇,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 turtle(海龟)是Python重要的标准库之一,它 ...

最新文章

  1. PHP 利用PHPExcel类库批量导出数据
  2. C/C++实现快速排序
  3. Acwing 第 2场热身赛 【完结】
  4. junit:junit_JUnit ExpectedException规则:超越基础
  5. C++ const vector的迭代器
  6. 这又何止呢的openeim002
  7. 安卓调用系统语音识别功能全解(谷歌语音服务):获取识别结果,使用语音识别进行搜索。
  8. 【进大厂必学】3W字180张图学习Linux基础总结
  9. 大意导致Java访问DB2库时导出SQLCODE=-301, SQLSTATE=07006错误
  10. 求曲线面积的原理(微积分入门)
  11. XP下免U盘安装Ubuntu 18.04(持续更新遇到的问题,20200422更新)
  12. IBM沃森对哈利波特各大主角的人格分析
  13. 路由实验7777777
  14. 链家房源数据清洗和预处理(pandas)
  15. Icons - Material Design各种ICON图标大全
  16. Excel 如何根据单元格选中一行?
  17. 打开51cto.com网页出现病毒提示
  18. 嵌入式设备的switch 以及PHY 芯片调试和选型 (1)
  19. java毕业生设计紫陶文化传播与学习交流网站计算机源码+系统+mysql+调试部署+lw
  20. Apache Jakarta 项目介绍

热门文章

  1. [Weex 学习]Weex Debug模式
  2. Egret 4.1.6 和 LayaBox(LayaAir 2.0) 的 易用性 对比
  3. 写博客,成专家;为了什么,成就了什么?
  4. 浅析中国剩余定理(CRT)
  5. 食用油详细 制造工艺、等级划分、国家标准号和注意事项
  6. 概率图模型 - 学习笔记
  7. Oracle rpad 转 sqlserver的 left 函数
  8. 查找树形数据的某个值
  9. vim查找和替换详解
  10. linux下通过fdisk和mkfs.ext4给TF卡建立分区