专栏首页州的先生Python绘鼠,“福鼠”中华

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()

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

本文分享自微信公众号 - 州的先生(zmister2016),作者:州的先生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用Python写一个“听后即焚”的极简音乐播放器

    这个极极极简的音乐播放器类似于“阅后即焚”的软件,播放器可以随机播放歌曲,获取下一首歌曲,不能重新播放上一首歌曲,不能获取歌曲的名称和演唱者。听过的歌曲,就像过...

    州的先生
  • 几百个Excel表格的内容要复制粘贴,如何一键自动化搞定?| 州的先生

    在工作中经过会遇到大量格式一致,内容不同的Excel表格文件,需要将这里面的内容整理到一个Excel文件中的情形。

    州的先生
  • MrDoc 0.3.3版本更新,新增图片管理功能、优化样式、修复Bug

    2020年3月21日,MrDoc迎来0.3.3版本的更新,主要新增的图片管理功能,同时修复了部分Bug,优化了一些样式,让使用更加方便,下面来看看具体的更新内容...

    州的先生
  • Python绘制分形树(一)

    dreamkong
  • 用 Python 画一只福鼠!

    今年这个鼠年,尽管只是刚过了一个开头,但现实仿佛把我们很多年才需要经历的不好的事情,都在一瞬间抛向了我们,这个鼠年好像缺了点福气,本节我们使用 Python 画...

    纯洁的微笑
  • Python的学习笔记--画图

    海龟绘图画图比较简单,主要使用python的turtle模块, 就是通过编程指挥一个小海龟在屏幕上前进和左转右转。

    付威
  • python 学习总结3

    该程序运用到了python的标准库Turtle,那么什么是Turtle,他又能用来干什么呢?

    py3study
  • [Python学习笔记] turtle库

    py3study
  • python的表白

    py3study
  • Python3 turtle安装和使用教

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控...

    py3study

扫码关注云+社区

领取腾讯云代金券