美文网首页python热爱者码农的世界
小猪佩奇身上纹!下一句呢?我用Python二十秒就能画出一个小猪

小猪佩奇身上纹!下一句呢?我用Python二十秒就能画出一个小猪

作者: Python树苗 | 来源:发表于2018-06-05 14:38 被阅读1次

导读:今年社交平台上最火的带货女王是谁?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇。

小猪佩奇在构图基本是各种曲线,类抛物线、类圆、类椭圆、类二次贝塞尔曲线。

因为画图画曲线不是Python擅长的事情,所以用纯粹的Python来做,会更有挑战,也更有趣。

答案是:掌声送给社会人。

随着口号喊响,社会人小猪佩奇似乎一夜之间就在短视频平台和社交网络上爆火了,同时网络上遍布了小猪佩奇九步画法。于是我在儿童节这一天画了一下,结果,不忍直视......

▲人家的画

观察这个图像可以发现,小猪佩奇在构图基本是各种曲线,类抛物线、类圆、类椭圆、类二次贝塞尔曲线。这里说的都是“类”,这也正是小猪佩奇的构图精髓,一种手绘风格,而不是标准刻板的线条。

在前端技术选型上,画图首先想到的是svg、canvas,但它们本身就擅长画图,而且网上都有在线编辑svg的工具,这就没意思了,我想佩奇也不会答应的。于是我想用纯粹的Python来做,这样更有挑战,因为画图画曲线不是Python擅长的事情。

使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。所以海龟作图也常被用作新手学习 Python 的一种方式。更丰富详细的功能及知识可以参考:

官方文档:

https://docs.python.org/3/library/turtle.html

源码

from turtle import*def nose(x,y):#鼻子penup()#提起笔goto(x,y)#定位pendown()#落笔,开始画setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南)begin_fill()#准备开始填充图形a=0.4fori in range(120):if0<=i<30or60<=i<90: a=a+0.08left(3)#向左转3度forward(a)#向前走a的步长else: a=a-0.08left(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和fillcolorend_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(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.4fori in range(60):if0<=i<30or60<=i<90: a=a+0.08lt(3)#向左转3度fd(a)#向前走a的步长else: a=a-0.08lt(3) 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(30) 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(-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()def cheek(x,y):#腮color((255,155,192)) penup()goto(x,y) pendown() setheading(0) begin_fill()circle(30) end_fill()def mouth(x,y):#嘴color(239,69,19) penup()goto(x,y) pendown() setheading(-80)circle(30,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,30)#嘴done()if__name__ =='__main__':main()

加入千人交流学习群:125240963   即可获取全部源码哦!

欢迎关注我的博客或者公众号哦:https://home.cnblogs.com/u/Python1234/ Python学习交流

思路其实很简单,就是通过turtle模块实现基本的圆,椭圆,曲线等,难点在于,如何定位每个部位的位置(建议先草图画画)。完整代码需要300行,为了限于篇幅,只放了一部分代码。

相关文章

网友评论

    本文标题:小猪佩奇身上纹!下一句呢?我用Python二十秒就能画出一个小猪

    本文链接:https://www.haomeiwen.com/subject/augpsftx.html