这两天刷爆朋友圈的莫过于一则「啥是佩奇」的视频短片,看完之后不由的感叹一句,好久没见过这么温情幽默的广告了!

作为一个python的学习者,让我萌生了用python画社会人的想法。

看这个图像可以发现,佩奇由各种曲线、类抛物线、类圆、类椭圆等组成。这里提到的“类”,是小猪佩奇的构图精髓,一种手绘风格,而不是标准刻板的线条。

思路如下:选好画板大小,设置好画笔颜色,粗细,定位好位置,依次画鼻子,头、耳朵,眼睛,腮,嘴,身体,手脚,尾巴。

环境

语言:python3.7

编辑器:Pycharm

具体代码如下:

fromturtleimport*

defnose(x,y):#鼻子

penup()#提起笔

goto(x,y)#定位

pendown()#落笔,开始画

setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南)

begin_fill()#准备开始填充图形

a=0.4

foriinrange(120):

if0<=i<30or60<=i<90:

a=a+0.08

left(3)#向左转3度

forward(a)#向前走a的步长

else:

a=a-0.08

left(3)

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

defhead(x,y):#头

color((255,155,192),"pink")

penup()

goto(x,y)

setheading(0)

pendown()

begin_fill()

setheading(180)

circle(300,-30)

circle(100,-60)

circle(80,-100)

circle(150,-20)

circle(60,-95)

setheading(161)

circle(-300,15)

penup()

goto(-100,100)

pendown()

setheading(-30)

a=0.4

foriinrange(60):

if0<=i<30or60<=i<90:

a=a+0.08

lt(3)#向左转3度

fd(a)#向前走a的步长

else:

a=a-0.08

lt(3)

fd(a)

end_fill()

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

pendown()

begin_fill()

setheading(100)

circle(-50,50)

circle(-10,120)

circle(-50,56)

end_fill()

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

pendown()

begin_fill()

circle(3)

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

pendown()

begin_fill()

circle(3)

end_fill()

defcheek(x,y):#腮

color((255,155,192))

penup()

goto(x,y)

pendown()

setheading(0)

begin_fill()

circle(30)

end_fill()

defmouth(x,y):#嘴

color(239,69,19)

penup()

goto(x,y)

pendown()

setheading(-80)

circle(30,40)

circle(40,80)

defbody(x,y):#身体

color("red",(255,99,71))

penup()

goto(x,y)

pendown()

begin_fill()

setheading(-130)

circle(100,10)

circle(300,30)

setheading(0)

forward(230)

setheading(90)

circle(300,30)

circle(100,3)

color((255,155,192),(255,100,100))

setheading(-135)

circle(-80,63)

circle(-150,24)

end_fill()

defhands(x,y):#手

color((255,155,192))

penup()

goto(x,y)

pendown()

setheading(-160)

circle(300,15)

penup()

setheading(90)

forward(15)

setheading(0)

forward(0)

pendown()

setheading(-10)

circle(-20,90)

penup()

setheading(90)

forward(30)

setheading(0)

forward(237)

pendown()

setheading(-20)

circle(-300,15)

penup()

setheading(90)

forward(20)

setheading(0)

forward(0)

pendown()

setheading(-170)

circle(20,90)

deffoot(x,y):#脚

pensize(10)

color((240,128,128))

penup()

goto(x,y)

pendown()

setheading(-90)

forward(40)

setheading(-180)

color("black")

pensize(15)

fd(20)

pensize(10)

color((240,128,128))

penup()

setheading(90)

forward(40)

setheading(0)

forward(90)

pendown()

setheading(-90)

forward(40)

setheading(-180)

color("black")

pensize(15)

fd(20)

deftail(x,y):#尾巴

pensize(4)

color((255,155,192))

penup()

goto(x,y)

pendown()

seth(0)

circle(70,20)

circle(10,330)

circle(70,30)

defsetting():#参数设置

pensize(4)

hideturtle()#使乌龟无形(隐藏)

colormode(255)#将其设置为1.0或255.随后 颜色三元组的r,g,b值必须在0 .. cmode范围内

color((255,155,192),"pink")

setup(840,500)

speed(10)

defmain():

setting()#画布、画笔设置

nose(-100,100)#鼻子

head(-69,167)#头

ears(0,160)#耳朵

eyes(0,140)#眼睛

cheek(80,10)#腮

mouth(-20,30)#嘴

body(-32,-8)#身体

hands(-56,-45)#手

foot(2,-177)#脚

tail(148,-155)#尾巴

done()

if__name__ =='__main__':

main()

从代码来看,我们可以发现,主要用到了turtle库,它是python内置的一个比较有趣味的模块,俗称「海龟绘图」,它是基于tkinter模块打造的,提供了一些简单的绘图工具。

如果你想了解turtle库更多信息,可以访问官方文档:https://docs.python.org/3/library/turtle.html.

总结:通过trutle库实现基本的圆、椭圆、曲线等,难点在于,如何定位每个部分的位置(画之前可以先画个草图)。

利用turtle库,我还画过玫瑰花,作为一个python学习者,还不赶快把这么牛逼的撩妹技能学到手。后台回复「玫瑰花」就可以获得源码。

今天的两个小项目适合入门学习者练手,光跑一遍程序,就会让你对python上瘾,还等什么呢?赶紧操练起来吧。

本站以现代、古代情诗为主,情诗网创办于2013年,以原创爱情诗歌、经典情诗、现代情诗、古代情诗、英文情诗、情诗绝句为主并收集古诗、古诗词、诗歌大全、诗词名句的文学门户。方便您下次继续阅读;可以放在浏览器的收藏夹中(快捷键Ctrl+D);或者看到喜欢或者有趣的诗词可以通过分享按钮给你的好友分享;情诗网是目前最全情诗大全网站之一。并欢迎广大诗歌爱好者阅览投稿!喜欢本站的话请大家把本站告诉给你朋友哦!地址是 www.qingshiwang.com !