前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一墩难求?那就自己画一个冰墩墩吧

一墩难求?那就自己画一个冰墩墩吧

作者头像
阿黎逸阳
发布2022-02-25 10:21:22
发布2022-02-25 10:21:22
75210
代码可运行
举报
运行总次数:0
代码可运行

最近北京冬奥会在如火如荼地进行中,有的运动员通过努力缔造了传奇,有的运动员虽然付出了很多,但依然没有到达理想的彼岸。

不管怎么样,他/她们都收获了一段人生宝贵的经历,让我们为奥运健儿喝彩吧。

北京冬奥会

为奥运健儿加油

随着冬奥会的进行,冬奥吉祥物冰墩墩一跃成为了“顶流”,出现了一墩难求的现象。

公众号有些粉丝也在后台留言,想要用python绘制一个冰墩墩,本文就和大家一起来探索绘制的过程吧。

本文目录

  1. 效果展示
  2. 代码详解 2.1 导入库 2.2 播放音乐 2.3 画冰墩墩外轮廓 2.4 画内耳朵 2.5 画眼睛 2.6 画嘴

一、效果展示

在正式进入代码讲解之前,先来看下本文的实现效果。

http://mpvideo.qpic.cn/0bc33eackaaavmajsjiiwnrfbwodexmqajia.f10002.mp4?dis_k=af09fdf65560ebf28f93bed19b120153&dis_t=1645755479&vid=wxv_2267397590713630726&format_id=10002&support_redirect=0&mmversion=false

二、代码详解

python绘制冰墩墩的原理是:应用turtle库首先绘制外轮廓,然后依次绘制内耳朵、手、脚、眼睛、鼻子、嘴巴等不同模块。

1 导入库

首先导入本文需要加载的库,如果你有些库还没有安装,导致运行代码时报错,可以在Anaconda Prompt中用pip方法安装。

代码语言:javascript
代码运行次数:0
运行
复制
import pygame
import turtle as t

本文应用到的库较少,只应用了pygame和turtle两个库。

turtle库是绘图库,相当于给你一支画笔,你可以在画布上用数学逻辑控制的代码完成绘图。

pygame库是为了绘制过程更有趣,在绘图过程中添加了背景音乐。

2 播放音乐

接着应用pygame库播放背景音乐,本文的音乐是一首关于冰墩墩的歌曲。

代码语言:javascript
代码运行次数:0
运行
复制
#播放音乐
pygame.mixer.init()
pygame.mixer.music.load(r"F:\公众号\46.画冰墩墩\王溢,崎川 - 2022冬奥冰墩墩(吉祥物).mp3") 
pygame.mixer.music.set_volume(0.5) 
pygame.mixer.music.play()

3 画冰墩墩外轮廓

然后进入冰墩墩的正式绘制过程,先画的是外轮廓。

代码语言:javascript
代码运行次数:0
运行
复制
##画外轮廓
t.title('冰墩墩')
t.pensize(2)
#t.color('gray')
t.color('lavender')
#画耳朵
t.penup()
t.goto(-50, 160)
t.pendown()
t.left(120)
t.circle(20, 180)
#画左边身体
t.right(60)
t.circle(200, 20)
#画左手
t.right(30)
t.circle(200,15)
#t.right(20)
t.circle(15, 230)
#画左腿
t.right(180)
t.circle(-150, 40)
t.left(80)
t.circle(50, 50)
#画腿中间的弧度
t.left(70)
t.circle(-20, 200)
#画右腿
t.left(90)
t.circle(70, 35)
t.left(90)
t.circle(-80, 25)
t.right(30)
t.circle(200, 28)
#画右手
t.right(45)
t.circle(200, 15)
t.left(20)
t.circle(15, 190)
t.right(30)
t.circle(200, 5)
#画右耳朵
t.right(150)
t.circle(150, 25)
t.right(40)
t.circle(20, 180)
t.right(80)
t.circle(600, 5)

关键代码详解:

t.pensize(width):设置画笔的尺寸。

t.color(color):设置画笔的颜色。

t.penup():抬起画笔,一般用于另起一个地方绘图使用。

t.goto(x,y):画笔去到某个位置,参数为(x,y),对应去到的横坐标和纵坐标。

t.pendown():放下画笔,一般和penup组合使用。

t.left(degree):画笔向左转多少度,括号里表示度数。

t.right(degree):画笔向右转多少度,括号里表示度数。

t.circle(radius,extent,steps):radius指半径,若为正,半径在小乌龟左侧radius远的地方,若为负,半径在小乌龟右侧radius远的地方;extent指弧度;steps指阶数。

画外轮廓的关键是:通过调节circle函数中的半径和弧度来调节曲线的弧度,从而使得冰墩墩的轮廓比较流畅。

4 画内耳朵

画完外轮廓后就可以分模块画里面的组成部分了,本小节画耳朵,分为左耳朵和右耳朵。

代码语言:javascript
代码运行次数:0
运行
复制
##画内耳朵
#左
t.pensize(1)
t.penup()
t.goto(-53, 158)
t.pendown()
t.color('gray', 'black')
t.begin_fill()
t.right(50)
t.circle(16, 180)
t.end_fill()
#右
t.penup()
t.goto(35, 142)
t.pendown()
t.color('gray', 'black')
t.begin_fill()
t.left(120)
t.circle(15, 180)
t.end_fill()

关键代码详解:

t.begin_fill():开始填充。

t.end_fill():结束填充。

其他代码在第3小节中已介绍,所以本节只阐述之前未涉及的begin_fill和end_fill函数。

5 画眼睛

本小节介绍画眼睛的代码,为了看起来效果更好,需要注意的是眼睛的对称。

代码语言:javascript
代码运行次数:0
运行
复制
##画眼睛
#画左眼睛
t.penup()
t.goto(-40, 100)
t.pendown()
t.color('black')
t.begin_fill()
t.circle(15, 170)
t.circle(100, 20)
t.circle(16, 160)
t.left(2)
t.circle(100, 19)
t.end_fill()
#画右眼睛
t.penup()
t.goto(-10, 100)
t.pendown()
t.color('black')
t.begin_fill()
t.left(50)
t.circle(-15, 170)
t.circle(-100, 20)
t.circle(-16, 160)
t.right(2)
t.circle(-100, 19)
t.end_fill()
t.goto(-8, 95)
t.color('white')
t.begin_fill()
t.circle(-10, 360)
t.end_fill()
t.goto(-6, 95)
t.color('#341c02')
t.begin_fill()
t.circle(-8, 360)
t.end_fill()
t.penup()
t.goto(-3, 93)
t.color('black')
t.begin_fill()
t.circle(-5, 360)
t.end_fill()
t.penup()
t.goto(-1, 100)
t.color('white')
t.begin_fill()
t.circle(-2.5, 360)
t.end_fill()
#画左眼睛眼球部分
t.penup()
t.goto(-43, 95)
t.color('white')
t.begin_fill()
t.right(30)
t.circle(10, 360)
t.end_fill()
t.penup()
t.goto(-47, 91)
t.color('#341c02')
t.begin_fill()
t.right(30)
t.circle(8, 360)
t.end_fill()
t.penup()
t.goto(-50, 90)
t.color('black')
t.begin_fill()
t.circle(5, 360)
t.end_fill()
t.penup()
t.goto(-52, 98)
t.color('white')
t.begin_fill()
t.circle(2.3, 360)
t.end_fill()

6 画嘴

本小节介绍画嘴,本来以为嘴是比较容易画的,但是在绘制过程中出现了一些bug。

经验建议是有填充的地方要沿着一个方向绘制,否则会出现多余的填充。

代码语言:javascript
代码运行次数:0
运行
复制
#画嘴
t.penup()
t.goto(-41, 76)
t.pendown()
t.color('black')
t.begin_fill()
t.pensize(0.1)
t.right(50)
t.circle(26, 90)
t.penup()
t.goto(-8, 75)
t.pendown()
t.left(170)
t.circle(-25,86)
t.penup()
t.goto(-41, 77)
t.pendown()
t.penup()
t.goto(-41, 76)
t.pendown()
t.end_fill()
t.goto(-21, 70)
t.pendown()
t.pensize(3)
t.end_fill()
t.color('#ec2d01')
t.left(60)
t.circle(-10, 30)

其余代码用到的函数也大致相同,由于篇幅原因,本文不再一一展示。

需要全部代码可以在公众号后台回复"冰墩墩",即可获得完整源代码百度网盘链接。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档