用 Python 画哆啦 A 梦

共 1167字,需浏览 3分钟

 ·

2021-02-09 03:06


导读:相信大家童年的时候都看过哆啦 A 梦,他的口袋简直是无所不能,里面装满了各种神奇的道具。曾经的我也幻想过如果自己也有一个这样的口袋多好。今天我们就用 Python 来画一个哆啦 A 梦,怀念下我们的童年。


作者:豆豆
来源:Python 技术(ID: pythonall)


先来看看我们最终实现的效果图。



01 头部轮廓和围巾


老规矩,先引入今天要用到的库 turtle 并做一些基础设置。

import turtle as t

t.speed(5)
t.pensize(1)
t.screensize(500500)
t.bgcolor('white')

首先,我们先画下多啦 A 梦头部外轮廓,头部轮廓主要是一个多半圆,围巾就是一个小的长方形。

# 头部
def head():
    t.up()
    t.circle(15045)
    t.down()
    t.fillcolor(head_color)
    t.begin_fill()
    t.circle(150270)
    t.end_fill()


# 围巾
def scarf():
    t.fillcolor(scarf_color)
    t.begin_fill()
    t.seth(0)
    t.fd(216)
    t.circle(-590)
    t.fd(10)
    t.circle(-590)
    t.fd(220)
    t.circle(-590)
    t.fd(10)
    t.circle(-590)
    t.end_fill()

来看下效果如何,呃呃呃,怎么感觉有点像大马路上的石墩儿呢,除了颜色有点像之外。


不急不急,我们再画一下脸部细节。


02 脸部


1. 眼睛


俗话说眼睛是心灵的窗户,我们先把眼睛画上。

def face():
    t.fd(186)
    t.lt(45)
    t.fillcolor(color_white)
    t.begin_fill()
    t.circle(120100)
    t.seth(180)
    t.fd(120)
    t.seth(215)
    t.circle(120100)
    t.end_fill()

def draw_eyes():
    t.fillcolor(color_white)
    t.begin_fill()
    a = 2.5
    for i in range(120):
        if 0 <= i < 30 or 60 <= i < 90:
            a -= 0.05
        else:
            a += 0.05
        t.lt(3)
        t.fd(a)
    t.end_fill()

def eyes():
    go_to(0227)
    t.seth(90)
    draw_eyes()
    go_to(0227)
    t.seth(270)
    draw_eyes()

画眼睛不能直接画一个正圆,那样看起来会比较奇怪,要画一个椭圆才行,来看下效果。


眼睛画上去之后明显感觉精神多了,也有点多啦 A 梦的模样了。可是看起来还是有点不太对,是的,眼睛还没有画瞳孔。

简单起见,直接补两个黑色的圆圈圈即可。

def fill_eyes():
    # 填充眼睛
    go_to(-15220)
    t.pensize(12)
    t.color('black')
    for i in range(30):
        t.forward(2)
        t.right(12)
    go_to(15220)
    for i in range(30):
        t.forward(2)
        t.left(12)
    t.pensize(1)


不错不错,越来越有样了。下面我们把鼻子和嘴巴加上。

2. 鼻子 & 嘴巴


鼻子也不难,在眼睛下面画个小圈圈就行,嘴巴就类似一个倒 T 字。

# 鼻子
def nose():
    go_to(-13166)
    t.seth(315)
    t.fillcolor(nose_color)
    t.begin_fill()
    t.circle(20)
    t.end_fill()


# 嘴巴
def mouth():
    go_to(0156)
    t.seth(270)
    t.fd(100)
    pos = t.pos()
    t.seth(0)
    t.circle(11060)
    go_to(pos[0], pos[1])
    t.seth(180)
    t.circle(-11060)


离成功就剩下最后一步了,把胡须和铃铛画上就大功告成了。

3. 胡须 & 铃铛


胡须就类似画猫的胡须就好,铃铛表复杂些,大圆套小圆,还有装饰。

# 胡须
def mustache():
    h = 70
    go_to(30140)
    t.seth(15)
    t.fd(h)

    go_to(30130)
    t.seth(0)
    t.fd(h)

    go_to(30120)
    t.seth(-15)
    t.fd(h)

    go_to(-30140)
    t.seth(150)
    t.fd(h)

    go_to(-30130)
    t.seth(180)
    t.fd(h)

    go_to(-30120)
    t.seth(195)
    t.fd(h)

# 铃铛
def bell():
    # 大圆
    go_to(033)
    t.pensize(1)
    t.fillcolor("#FCE341")
    t.begin_fill()
    t.circle(25)
    t.end_fill()

    # 横条纹
    go_to(-1522)
    t.seth(0)
    t.forward(42)
    go_to(-1817)
    t.seth(0)
    t.forward(47)

    # 小圆
    go_to(50)
    t.pensize(1)
    t.color("black"'#79675D')
    t.begin_fill()
    t.circle(5)
    t.end_fill()
    t.seth(270)
    t.pensize(1)
    t.forward(15)

最后我们写一个入口函数,将这些画身体不同部位的函数给封装起来。代码如下:

if __name__ == '__main__':
    head()
    scarf()
    face()
    eyes()
    fill_eyes()
    nose()
    mouth()
    mustache()
    bell()
    go_to()
    t.hideturtle()
    t.done()

最终效果如下:


是不是觉得很简单,快去后台获取源码 run 起来吧。有兴趣的读者还可以把身体给加上去。


03 总结


本文我们使用 Python 的 turtle 库画了一下哆啦 A 梦,不知道和大家记忆中的哆啦 A 梦是否一样呢。

其实 turtle 使用不难,主要是要理清乌龟的位置以及朝向,然后就是其运动模式,直线运动,还是曲线运动以及怎调换运动方向。其中乌龟的坐标计算比较麻烦,尤其是做曲线运动的时候,大家可以结合 pos() 函数来获取查看乌龟的坐标,有助于你理清画图思路。

大家多加练习,肯定都可以画出自己想画的,有趣且好玩的图像。


延伸阅读👇

利用Python进行数据分析(原书第2版)

推荐语:Python数据分析经典畅销书全新升级,第1版中文版累计销售100000册。针对Python 3.6进行全面修订和更新,涵盖新版的pandas、NumPy、IPython和Jupyter。


干货直达👇



更多精彩👇

在公众号对话框输入以下关键词
查看更多优质内容!

PPT | 读书 | 书单 | 硬核 | 干货 | 讲明白 | 神操作
大数据 | 云计算 | 数据库 | Python | 可视化
AI | 人工智能 | 机器学习 | 深度学习 | NLP
5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生

据统计,99%的大咖都完成了这个神操作
👇


浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报