python写小猪佩奇
python写小猪佩奇
点击上方“CSD”,选择“置顶”
关键时刻,第一时间送达!
作者 | 丁彦军
责编 | 唐小引
每天写代码的程序员,你们知道今年社交平台上最火的带货女王是谁吗?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇。
如果你经常用抖音、快手、B 站、知乎、微博……或者类似的任何一个内容或社交平台,那你很大概率能答出这道题:
答案是:掌声送给社会人。
随着口号喊响,社会人小猪佩奇似乎一夜之间就在短视频平台和社交网络上爆火了,同时网络上遍布了小猪佩奇九步画法。于是我在儿童节这一天画了一下,结果,不忍直视......
我画的o(╯□╰)o
人家的画
观察这个图像可以发现,小猪佩奇在构图基本是各种曲线,类抛物线、类圆、类椭圆、类二次贝塞尔曲线。这里说的都是“类”,这也正是小猪佩奇的构图精髓,一种手绘风格,而不是标准刻板的线条。在前端技术选型上,画图首先想到的是 SVG、Canvas,但它们本身就擅长画图,而且网上都有在线编辑 SVG 的工具,这就没意思了,我想佩奇也不会答应的。于是我想用纯粹的 Python 来做,这样更有挑战,因为画图画曲线不是 Python 擅长的事情。
基本思路如下:
选好画板大小,设置好画笔颜、粗细,定位好位置,依次画鼻子、头、耳朵、眼睛、腮、嘴、身体、手脚、尾巴,完事儿。
都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称“海龟绘图”,它是基于 Tkinter 模块打造,提供一些简单的绘图工具。
在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片。使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。
所以,海龟作图也常被用作新手学习 Python 的一种方式。更丰富详细的功能及知识可以参考官方文档:
.html
了解了 Tuttle 的用法之后就可以开始实战了。先来看看效果视频:
详细代码如下:
from turtle import*
def nose(x,y):#鼻子
penup()#提起笔
goto(x,y)#定位
pendown()#落笔,开始画
setheading(-0)#将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南)
begin_fill()#准备开始填充图形
a=0.4
for i in range(120):
if 0<=i<0 or 60<=i<90:
a=a0.08
left() #向左转度
forward(a) #向前走a的步长
else:
a=a-0.08
left()
forward(a)
end_fill()#填充完成
penup()
setheading(90)
forward(25)
setheading(0)
forward(10)
pendown()
pencolor(255,155,192)#画笔颜
setheading(10)
begin_fill()
circle(5)
color(160,82,45)#返回或设置pencolor和fillcolor
end_fill()
penup()
setheading(0)
forward(20)
pendown()
pencolor(255,155,192)
setheading(10)
begin_fill()
circle(5)
color(160,82,45)
end_fill()
def head(x,y):#头
color((255,155,192),pink)
penup()
goto(x,y)
setheading(0)
pendown()
begin_fill()
setheading(180)
circle(00,-0)
circle(100,-60)
circle(80,-100)
circle(150,-20)
circle(60,-95)
setheading(161)
circle(-00,15)
penup()
goto(-100,100)
pendown()
setheading(-0)
a=0.4
for i in range(60):
if 0<=i<0 or 60<=i<90:
a=a0.08
lt() #向左转度
fd(a) #向前走a的步长
else:
a=a-0.08
lt()
fd(a)
end_fill()
def ears(x,y): #耳朵
color((255,155,192),pink)
penup()
goto(x,y)
pendown()
begin_fill()
setheading(100)
circle(-50,50)
circle(-10,120)
circle(-50,54)
end_fill()
penup()
setheading(90)
forward(-12)
setheading(0)
forward(0)
pendown()
begin_fill()
setheading(100)
circle(-50,50)
circle(-10,120)
circle(-50,56)
end_fill()
def eyes(x,y):#眼睛
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(-)
pendown()
begin_fill()
circle()
end_fill()
color((255,155,192),white)
penup()
seth(90)
forward(-25)
seth(0)
forward(40)
pendown()
begin_fill()
circle(15)
end_fill()
color(black)
penup()
setheading(90)
forward(12)
setheading(0)
forward(-)
pendown()
begin_fill()
circle()
end_fill()
def cheek(x,y):#腮
color((255,155,192))
penup()
goto(x,y)
pendown()
setheading(0)
begin_fill()
circle(0)
end_fill()
def mouth(x,y): #嘴
color(29,69,19)
penup()
goto(x,y)
pendown()
setheading(-80)
circle(0,40)
circle(40,80)
def setting(): #参数设置
pensize(4)
hideturtle() #使乌龟无形(隐藏)
colormode(255) #将其设置为1.0或255.随后 颜三元组的r,g,b值必须在0 .. cmode范围内
color((255,155,192),pink)
setup(840,500)
speed(10)
def main():
setting() #画布、画笔设置
nose(-100,100) #鼻子
head(-69,167) #头
ears(0,160) #耳朵
eyes(0,140) #眼睛
cheek(80,10) #腮
mouth(-20,0) #嘴
done()
if __name__ == __main__ :
main()
思路其实很简单,就是通过 Trutle 模块实现基本的圆、椭圆、曲线等,难点在于,如何定位每个部位的位置(建议先草图画画)。
本文为作者投稿,版权归作者所有。
征稿啦!
CSD 秉持着「与千万技术人共成长」理念,不仅以「极客头条」、「畅言」栏目在第一时间以技术人的独特视角描述技术人关心的行业焦点事件,更有「技术头条」专栏,深度解读行业内的热门技术与场景应用,让所有的开发者紧跟技术潮流,保持警醒的技术嗅觉,对行业趋势、技术有更为全面的认知。
如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSD 投稿, :(guorui_1118,请备注投稿姓名公司职位),邮箱(guorui@csdn)。
————— 推荐阅读 —————
点击图片即可阅读
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:清华校长送给毕业生的五句话
下一篇:vscode设置自动保存
推荐阅读
留言与评论(共有 20 条评论) |
本站网友 谭赟 | 23分钟前 发表 |
于是我想用纯粹的 Python 来做,这样更有挑战,因为画图画曲线不是 Python 擅长的事情 | |
本站网友 长沙婚庆 | 28分钟前 发表 |
基本思路如下: 选好画板大小,设置好画笔颜 | |
本站网友 公交车上的臀交 | 29分钟前 发表 |
a=a0.08 left() #向左转度 forward(a) #向前走a的步长 else | |
本站网友 香蕉不能和什么一起吃 | 22分钟前 发表 |
140) #眼睛 cheek(80 | |
本站网友 刘雄伟 | 24分钟前 发表 |
167) #头 ears(0 | |
本站网友 搜房网深圳租房 | 5分钟前 发表 |
80) def setting() | |
本站网友 什么叫佣金 | 25分钟前 发表 |
19) penup() goto(x | |
本站网友 孕妇哈密瓜 | 20分钟前 发表 |
这能够帮助我们理解代码的逻辑 | |
本站网友 chengguan | 27分钟前 发表 |
192) setheading(10) begin_fill() circle(5) color(160 | |
本站网友 只峰 | 7分钟前 发表 |
在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动 | |
本站网友 万源城御溪 | 5分钟前 发表 |
征稿啦! CSD 秉持着「与千万技术人共成长」理念,不仅以「极客头条」 | |
本站网友 吴中家天下 | 27分钟前 发表 |
180-西 | |
本站网友 并购贷款 | 27分钟前 发表 |
画笔设置 nose(-100 | |
本站网友 男生强吻女生的胸 | 1分钟前 发表 |
120) circle(-50 | |
本站网友 女性婚外情 | 2分钟前 发表 |
y) pendown() setheading(-80) circle(0 | |
本站网友 rexue | 27分钟前 发表 |
-20) circle(60 | |
本站网友 花柳病图片 | 30分钟前 发表 |
手脚 | |
本站网友 北京国家税务局 | 7分钟前 发表 |
82 | |
本站网友 曲江妇产医院 | 2分钟前 发表 |
头 |