通过Turtle库在Python中绘制一个鼠年福鼠

turtle库是一个很经典的绘图库,其最初来自于1967年创造的logo编程语言,之后被Python编写放到了Python的内置模块中。网络上有很多借助于turtle绘制精美图像的案例。比如小猪佩奇、皮卡丘、柯基犬等等。趁着新年假期还未结束,今天州的先生(https://zmister.com)为大家带来一个福鼠的绘制。

一、绘制鼠头

首先,咱们(https://zmister.com)把鼠的头给绘制了。鼠头主要是由圆来构成,脸庞是一个大圆,耳朵、眉毛、眼睛、嘴角和鼻子也都是由不同弧度的圆构成。鼠头的绘制代码如下所示:

def head():
 turtle.color('black')

 # 脸轮廓
 turtle.pd() # 落笔
 turtle.circle(50) # 画一个半径为50的圆
 turtle.pu() # 提笔

 # 右耳轮廓
 turtle.goto(50,60) # 移动到x=50,y=60的位置
 turtle.pd() # 落笔
 turtle.circle(30,260) # 画一个半径为30,角度为245的圆弧
 turtle.pu() # 提笔
 # 右耳耳纹
 turtle.goto(30,90)
 turtle.pd()
 turtle.seth(65)
 turtle.circle(-30,70)
 turtle.pu()

 # 左耳轮廓
 turtle.goto(-50,60)
 turtle.pd()
 turtle.seth(180) # 设置方向为西,
 turtle.circle(-30,260)
 turtle.pu()
 # 左耳耳纹
 turtle.goto(-30,90)
 turtle.pd()
 turtle.seth(120)
 turtle.circle(30,70)
 turtle.pu()

 # 面部五官
 # 右侧眉毛
 turtle.goto(5,80)
 turtle.seth(20)
 turtle.pd()
 turtle.circle(-25,40)
 turtle.pu()
 # 左侧眉毛
 turtle.goto(-5,80)
 turtle.seth(160)
 turtle.pd()
 turtle.circle(25,40)
 turtle.pu()

 # 右侧眼睛
 turtle.begin_poly()
 turtle.goto(8,60)
 turtle.seth(45)
 turtle.pd()
 turtle.circle(-15,120)
 turtle.pu()
 turtle.goto(8,60)
 turtle.seth(40)
 turtle.pd()
 turtle.circle(-15,100)
 turtle.pu()
 turtle.end_poly()

 # 左侧眼睛
 turtle.goto(-8,60)
 turtle.seth(135)
 turtle.pd()
 turtle.circle(15,120)
 turtle.pu()
 turtle.goto(-8,60)
 turtle.seth(140)
 turtle.pd()
 turtle.circle(15,100)
 turtle.pu()

 # 鼻子
 # 鼻子上瓣
 turtle.goto(-6,45)
 turtle.seth(70)
 turtle.pd()
 turtle.circle(-6,150)
 turtle.pu()
 # 鼻子下瓣
 turtle.goto(-6,45)
 turtle.seth(-70)
 turtle.pd()
 turtle.circle(6,150)
 turtle.pu()

 # 鼻线
 turtle.goto(0,40)
 turtle.seth(270)
 turtle.pd()
 turtle.forward(7)
 turtle.pu()

 # 上嘴线
 turtle.seth(200)
 turtle.pd()
 turtle.circle(-15,60)
 turtle.pu()

 turtle.goto(0,33)
 turtle.seth(-20)
 turtle.pd()
 turtle.circle(15,60)
 turtle.pu()

 # 下嘴线
 turtle.goto(10,33)
 turtle.seth(260)
 turtle.pd()
 turtle.circle(-15,65)
 turtle.pu()

 turtle.goto(-10,33)
 turtle.seth(280)
 turtle.pd()
 turtle.circle(15,65)
 turtle.pu()

 # 牙齿
 turtle.goto(4,33)
 turtle.seth(270)
 turtle.pd()
 turtle.forward(4)
 turtle.seth(180)
 turtle.forward(8)
 turtle.seth(90)
 turtle.forward(4)
 turtle.pu()

 # 胡须
 turtle.pensize(2)
 turtle.goto(30,30)
 turtle.seth(8)
 turtle.pd()
 turtle.circle(-60,40)
 turtle.pu()

 turtle.goto(30,25)
 turtle.seth(-5)
 turtle.pd()
 turtle.circle(-60,40)
 turtle.pu()

 turtle.goto(-30,30)
 turtle.seth(172)
 turtle.pd()
 turtle.circle(60,40)
 turtle.pu()

 turtle.goto(-30,25)
 turtle.seth(188)
 turtle.pd()
 turtle.circle(60,40)
 turtle.pu()

 # 睫毛
 turtle.pensize(1)
 turtle.goto(30,58)
 turtle.seth(20)
 turtle.pd()
 turtle.circle(20,20)
 turtle.pu()

 turtle.pensize(1)
 turtle.goto(28,62)
 turtle.seth(25)
 turtle.pd()
 turtle.circle(20,12)
 turtle.pu()

 turtle.pensize(1)
 turtle.goto(-30,58)
 turtle.seth(160)
 turtle.pd()
 turtle.circle(-20,20)
 turtle.pu()

 turtle.pensize(1)
 turtle.goto(-28,62)
 turtle.seth(165)
 turtle.pd()
 turtle.circle(-20,12)
 turtle.pu()

运行上述代码,我们可以看到鼠头可以完整地绘制出来了,如下动图所示:

二、绘制身体

接着,咱们来绘制老鼠的身体。我们(https://zmister.com)画的这个老鼠是一个穿着财神服站立拱手的老鼠,所以它的身体需要重点突出的是服装:

def body():
 # 左手
 turtle.goto(-25,8)
 turtle.seth(240)
 turtle.pd()
 turtle.circle(150,15)
 turtle.seth(270)
 turtle.circle(40,15)
 turtle.circle(15,65)
 turtle.seth(0)
 turtle.forward(10)
 turtle.circle(10,100)
 turtle.seth(90)
 turtle.forward(5)
 turtle.circle(10,100)
 turtle.seth(180)
 turtle.forward(10)
 turtle.pu()
 # 右手
 turtle.goto(25,8)
 turtle.seth(-60)
 turtle.pd()
 turtle.circle(-150,15)
 turtle.seth(270)
 turtle.circle(-40,15)
 turtle.circle(-15,65)
 turtle.seth(180)
 turtle.forward(10)
 turtle.circle(-10,100)
 turtle.seth(90)
 turtle.forward(5)
 turtle.circle(-10,100)
 turtle.seth(0)
 turtle.forward(10)
 turtle.pu()

 # 袍子
 turtle.goto(-30,-48)
 turtle.seth(270)
 turtle.pd()
 turtle.forward(30)
 turtle.circle(10,100)
 turtle.seth(0)
 turtle.forward(38)
 turtle.circle(10,100)
 turtle.seth(90)
 turtle.forward(30)
 turtle.pu()

 # 领口
 turtle.goto(-20,4)
 turtle.pd()
 turtle.seth(300)
 turtle.circle(30,20)
 turtle.seth(0)
 turtle.forward(25)
 turtle.seth(30)
 turtle.circle(30,20)
 turtle.pu()

 # 官带
 turtle.goto(-7,-38)
 turtle.seth(0)
 turtle.pd()
 turtle.forward(15)
 turtle.pu()
 turtle.goto(-30,-54)
 turtle.pd()
 turtle.forward(60)
 turtle.pu()

 # 袍子上的波浪
 turtle.goto(-30,-80)
 turtle.pd()
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.pu()

 turtle.goto(-25,-85)
 turtle.pd()
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.pu()

运行上述代码,我们可以看到老鼠身体的绘制过程,如下动图所示:

这里先不将其汇合在一起,待几个部件都完成之后,我们再将其组成一个完整地老鼠。

三、绘制手

上面绘制的身体还缺了两只手,对了,还有袍子上的一个大金钱,我们将其补上:

def hands():
 turtle.goto(-8, -25)
 turtle.pd()
 turtle.seth(30)
 turtle.forward(10)
 turtle.seth(0)
 turtle.circle(-10, 50)
 turtle.seth(210)
 turtle.forward(18)

 turtle.back(10)
 turtle.seth(-45)
 turtle.forward(10)
 turtle.back(10)
 turtle.seth(30)
 turtle.forward(8)
 turtle.seth(300)
 turtle.forward(5)
 turtle.pu()

 turtle.goto(0, -75)
 turtle.pd()
 turtle.seth(0)
 turtle.circle(10)
 turtle.seth(90)
 turtle.circle(10, 90)
 turtle.seth(0)
 turtle.circle(10, 90)
 turtle.seth(270)
 turtle.circle(10, 90)
 turtle.seth(180)
 turtle.circle(10, 90)
 turtle.pu()

拱手和金钱没有和身体结合在一起时,暂时看不出上面效果来,如下动图所示:

四、绘制帽子

老鼠还戴了一顶金钱帽,咱们(zmister.com)现在给它加上:

def hat():
 # 画帽子
 turtle.goto(-20,98)
 turtle.pd()
 turtle.seth(80)
 turtle.forward(20)
 turtle.seth(60)
 turtle.circle(-20,140)
 turtle.seth(-85)
 turtle.forward(18)
 turtle.pu()

 turtle.goto(-20,98)
 turtle.pd()
 turtle.seth(80)
 turtle.forward(5)
 turtle.seth(30)
 turtle.forward(22)
 turtle.seth(-25)
 turtle.forward(24)
 turtle.pu()

 turtle.goto(0,127)
 turtle.pd()
 turtle.seth(0)
 turtle.circle(5)
 turtle.pu()

 turtle.goto(0,125)
 turtle.pd()
 turtle.seth(270)
 turtle.forward(10)
 turtle.pu()

 # 右边抖带
 turtle.goto(19,110)
 turtle.pd()
 turtle.seth(30)
 turtle.circle(40,50)
 turtle.seth(0)
 turtle.circle(10)
 turtle.seth(90)
 turtle.circle(10,90)
 turtle.seth(0)
 turtle.circle(10,90)
 turtle.seth(270)
 turtle.circle(10,90)
 turtle.seth(180)
 turtle.circle(10,90)
 turtle.pu()

 # 左边抖带
 turtle.goto(-19,110)
 turtle.pd()
 turtle.seth(150)
 turtle.circle(-40,50)
 turtle.seth(0)
 turtle.circle(10)
 turtle.seth(90)
 turtle.circle(10,90)
 turtle.seth(0)
 turtle.circle(10,90)
 turtle.seth(270)
 turtle.circle(10,90)
 turtle.seth(180)
 turtle.circle(10,90)
 turtle.pu()

帽子主要都是由圆构成,其绘制过程如下动图所示:

五、绘制尾巴

先不着急为老鼠带上金钱帽,我们还忘记了老鼠有一根长长的尾巴,为它补上吧:

def tail():
 turtle.goto(30, -60)
 turtle.pd()
 turtle.seth(20)
 turtle.circle(40, 80)
 turtle.circle(-20, 180)
 turtle.circle(-10, 90)

尾巴就是两个方向相反弧度不同的圆,效果我们就不演示了。最后将其结合在一起:

if __name__ == '__main__':
 head()
 body()
 hands()
 hat()
 tail()
 turtle.done()

我们就可以看到一个完整的鼠年福鼠绘制过程,如下动图所示:

总结

以上所述是小编给大家介绍的通过Turtle库在Python中绘制一个鼠年福鼠,希望对大家有帮助!

(0)

相关推荐

  • python使用turtle库与random库绘制雪花

    本文实例为大家分享了python绘制雪花的具体代码,供大家参考,具体内容如下 代码非常容易理解,画着玩玩还是可以的.直接上代码 # -*- coding: utf-8 -*- """ Created on Fri Jan 12 14:35:14 2018 @author: Administrator """ from turtle import * from random import * def ground(): hideturtle() s

  • 详解python中的Turtle函数库

    python对函数库的引用方式 1.import <库名> 例如:import turtle 如果需要使用库函数中的函数,需要使用:<库名>.<函数名> 例如: import turtle turtle.fd(100) 2.from <库名> import <函数名> from <库名> import  *, 使用这种方式时,直接使用<函数名> 例如:  >>>from turtle import *  

  • Python3使用turtle绘制超立方体图形示例

    本文实例讲述了Python3使用turtle绘制超立方体图形.分享给大家供大家参考,具体如下: 利用Python3中turtle的绘制超立方体. 绘图思路: 1)求出边长100的超立方体的点坐标: 以竖直线为依据,将点分为上下两组: a为上边点列表,b为下边点列表: a = [[120.71, 50], [50, 120.71], [-50, 120.71], [-120.71, 50], [-50, -20.71], [50, -20.71], [20.71, 50],[-20.71, 50]

  • python使用Turtle库绘制动态钟表

    Python函数库众多,而且在不断更新,所以学习这些函数库最有效的方法,就是阅读Python官方文档.同时借助Google和百度. 本文介绍的turtle库对应的官方文档地址 绘制动态钟表的基本思路如下(面向对象的编程): 使用5个turtle对象 1个turtle:绘制外表盘 3个turtle:模拟表针行为 1个turtle:输出表盘上文字 根据实时时间使用ontimer()函数更新表盘画面,显示效果如下: 相关函数的使用在程序中进行了详细的注释,代码如下: from turtle impor

  • 通过Turtle库在Python中绘制一个鼠年福鼠

    turtle库是一个很经典的绘图库,其最初来自于1967年创造的logo编程语言,之后被Python编写放到了Python的内置模块中.网络上有很多借助于turtle绘制精美图像的案例.比如小猪佩奇.皮卡丘.柯基犬等等.趁着新年假期还未结束,今天州的先生(https://zmister.com)为大家带来一个福鼠的绘制. 一.绘制鼠头 首先,咱们(https://zmister.com)把鼠的头给绘制了.鼠头主要是由圆来构成,脸庞是一个大圆,耳朵.眉毛.眼睛.嘴角和鼻子也都是由不同弧度的圆构成.

  • python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib.pyplot as plt import MySQLdb as mdb import numpy as np from mpl_toolkits.axes_grid1.inset_locator import inset_axes from mpl_toolkits.axes_grid1.inset

  • Python+Tkinter绘制一个数字时钟

    Tkinter 实现上述功能并不复杂,只要使用 Tkinter 的相关组件和一些简单的逻辑处理即可,在编写这个案例的过程中大家要做到温故而知新. 程序代码如下所示: from tkinter import * from time import strftime root = Tk() root.geometry('500x350+300+300') root.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico') root.titl

  • 基于Python实现绘制一个足球

    目录 前情提要 先画六边形 再画五边形 前情提要 如果想优雅地绘制一个足球,那首先需要绘制正二十面体:用Python绘制正二十面体 其核心代码为 import numpy as np from itertools import product G = (np.sqrt(5)-1)/2 def getVertex(): pt2 = [(a,b) for a,b in product([1,-1], [G, -G])] pts = [(a,b,0) for a,b in pt2] pts += [(

  • 在Python中定义一个常量的方法

    大家都知道,网络上流行这么一句话 如果一个程序,JAVA需要写1000行,那PHP要写500行,而Python只要写200行就可以拉~~ 那么在Python中,如何用代码去实现一个常量呢? class MyNum(object): def __init__(self): self.__PI = 3.1415926 @property def PI(self): return self.__PI mynum = MyNum() print(mynum.PI) 这是通过私有属性去定义,通过装饰器@p

  • python中计算一个列表中连续相同的元素个数方法

    最简单的例子: a = [1,1,1,1,2,2,2,3,3,1,1,1,3] # 问:计算a中最多有几个连续的1 很明显,答案是4 如果用代码实现,最先想到的就是itertools: import itertools a = [1,1,1,1,2,2,2,3,3,1,1,1,3] print max([len(list(v)) for k,v in itertools.groupby(a)]) 但是如果不想用itertools呢? 可以尝试以下的办法,效率还比itertools高一个数量级!

  • 在Python中输入一个以空格为间隔的数组方法

    很多时候要从键盘连续输入一个数组,并用空格隔开,Python中的实现方法如下: >>> str_in = input('请以空格为间隔连续输入一个数组:') 然后在键盘中输入比如:123 456 789 111 222 以回车结束输入 得到的str_in为一个字符串,要将其转为一个列表有两种方法 方法一: >>> num = [int(n) for n in str_in.split()] 注意,因为int函数不能对列表操作,只能对的单个字符操作,另外,如果以其他字符为

  • python中创建一个包并引用使用的操作方法

    一.Python包 python包在开发中十分常见,一般通过导入包含特定功能的python模块包进行使用.当然,也可以自己创建打包模块,然后发布,安装使用. 1.安装包 在线安装包:pip install 包名:安装第三方包:python setup.py  install (几乎每个python第三方包中都有这个setup.py文件,这个文件是作者打包时设置的文件,而安装第三方包时,也是要先进入到setup.py文件所在目录,然后执行python setup.py install) 2.dis

  • 利用Fn.py库在Python中进行函数式编程

    尽管Python事实上并不是一门纯函数式编程语言,但它本身是一门多范型语言,并给了你足够的自由利用函数式编程的便利.函数式风格有着各种理论与实际上的好处(你可以在Python的文档中找到这个列表): 形式上可证 模块性 组合性 易于调试及测试 虽然这份列表已经描述得够清楚了,但我还是很喜欢Michael O.Church在他的文章"函数式程序极少腐坏(Functional programs rarely rot)"中对函数式编程的优点所作的描述.我在PyCon UA 2012期间的讲座

  • Python中生成一个指定长度的随机字符串实现示例

    方法一: 定义一个函数,参数为所要生成随机字符串的长度.通过random.randint(a, b)方法得到随机数字,具体函数如下: def generate_random_str(randomlength=16): """ 生成一个指定长度的随机字符串 """ random_str = '' base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789' l

随机推荐