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

  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 turtleturtle.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=1for 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绘制小猪佩奇吗?来开始创作吧相关推荐

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

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

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

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

  3. 用python绘制小猪佩奇

    程序画是用代码做画,这次画佩奇. 可以用python去绘制小孩子们的喜欢的<海底小纵队>.<BabyShark>.<超级飞侠>.<汪汪队>等动画片的人物 ...

  4. python绘制小猪佩奇

    一.源码 # -*- coding: utf-8 -*- """ Created on Sun Jan 27 11:30:14 2019@author: Administ ...

  5. 用python画气球程序_运用python绘制小猪佩奇

    1. from turtle import * 2.3. def nose(x,y):#鼻子 4. penup()#提起笔 5. goto(x,y)#定位 6. pendown()#落笔,开始画 7. ...

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

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

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

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

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

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

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

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

最新文章

  1. svn无法创建分支的解决方法
  2. 【定区管理功能】定区列表分页条件查询
  3. java date 最小值_java – Datepicker和timepicker – 设置最大值和最小值
  4. 739. Daily Temperatures - LeetCode
  5. 解决新版本webpack vue-cli生成文件没有dev.server.js问题
  6. 选项卡,下拉菜单操做时的页面数据更新,highcharts,d3 结合。
  7. xilinx芯片管脚使用限制_【转载】 Xilinx FPGA配置的一些细节
  8. node mysql 查询_Node.js使用mysql进行查询详解
  9. 拓端tecdat|R语言Bass模型进行销售预测
  10. vivo S9无法激活手机了vivoS9e怎么解锁平台刷机教程屏幕锁不记得了可以用这个方法教程重装系统固件软件S9手机如果已忘记密码可以自己学习升级降级USB操作了
  11. css 固定宽度超出部分换行,css怎么超出宽度换行
  12. php 检测硬盘,php测试硬盘读写速度脚本
  13. android逆向神器,Android MT管理器(APK逆向修改神器) v2.9.8.0 正式版 / v2.5.0 VIP版
  14. 【哈利波特】Sherbert Lemon对HP的解读之14
  15. linux服务器6t硬盘分区,linux多块6T大硬盘分区挂载GPT分区
  16. ORACLE LPAD()函数
  17. 用户场景分析的四要素是什么?
  18. python如何更新包_python如何更新包
  19. 番茄工作法,定时提醒小程序,番茄计时器
  20. android菜单栏设置位置,android系统设置setting菜单在哪

热门文章

  1. 云服务器搭建网站(初学)
  2. css6图层 解锁,OpenLayers6实例分析:Layer Spy(图层探查)
  3. 一些关于c语言if语句的练习
  4. 小土堆pytorch教程学习笔记P22
  5. 体系结构实验(1)—— 计算机性能评测
  6. python duplicated函数_Python Pandas Dataframe.duplicated()用法及代码示例
  7. 产业分析:个人网盘行业研究报告
  8. 考研近代史 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理
  9. 设置无线路由器dns服务器和备用dns服务器是什么?,路由器备用dns服务器怎么设置...
  10. pythonturtle画小白兔_竟用Python画一只兔子?——turtle库circle()画圆函数的详细用法介绍...