不要给糖果制造麻烦,用Python绘制有趣的万圣节南瓜怪物
今
日
鸡
汤
关于万圣节
万圣节又称诸圣节,是每年11月1日的西方传统节日。万圣节前夕的10月31日是这个节日最热闹的时刻。在汉语中,万圣节前夕经常被用来(Halloween)被解读为万圣节(All Saints' Day)。
为了庆祝万圣节的到来,孩子们会打扮成各种可爱的鬼魂,一个接一个地敲门,要求得到糖果,否则他们会制造麻烦。与此同时,据说在这个晚上,各种各样的鬼魂也会打扮成孩子们一起庆祝万圣节的到来,人类会打扮成各种各样的鬼魂,以使鬼魂更加和谐。
不知道什么时候,西方的节日一个个进入了中国,比如情人节、圣诞节、感恩节、万圣节...对于那些整天只知道上网的大学生来说,万圣节的熟悉自然来自于游戏!比如wow:
魔兽世界
再或者MapleStory:
冒险岛
无论是魔兽世界帖子的发布时间,还是这个老式的2D冒险岛游戏,都代表着我们80后的时代已经过去…
万圣节和Python
最近因为工作忙,会转载一些大佬的优秀文章。今天,我有一些时间想写点什么。快到万圣节了。既然我们坚持python的学习态度,不如用Python画一个万圣节标志。------南瓜怪吧!
提到python制图,难免会提到turtle模块,小海龟就是python中最热门的制图模块,虽然它的作用无法与专业的制图工具相比,但还是可以画出一些简笔画。之所以说turtle只能画一些简笔画,主要是因为学习技巧太浅薄,无法用它来做出高大的作品。另外一个原因当然是我在制图方面没有天赋,从小艺术就不及格啊!但是为了回应情况,还是咬紧牙关去编码吧!
模块turtle
首先,python的turtle库还是小甲鱼的。【Python零基础入门学习】我已经很久没用了,有点生疏。让我们带你回顾一下模块的使用。如果你想努力学习这个数据库,建议去官网仔细看看相关内容:https://docs.python.org/3.7/library/turtle.html但是如果你只是像我一样从娱乐开始,你只需要几分钟就可以开始绘画。在这里,我为大家整理了一些常用的方法:
参数 |
表明 |
turtle.setup(width,height,startx,starty) |
起点坐标:与屏幕的坐标相比,左上角默认位于屏幕中央。 |
turtle.bgpic('xxx.png') |
将背景图片添加到画板上(记得使用png,jpg不支持) |
turtle.begin_fill() |
准备开始添加图形 |
turtle.end_fill() |
添充完成 |
turtle.goto(x,y) |
把乌龟带到坐标位置 绝对坐标 |
turtle.bk(d) |
海龟倒退 海龟坐标 |
turtle.fd(d) |
海龟前行 |
turtle.circle(r,extent,steps) |
extent范围(360为一圈),setps感觉空虚,表示正圆,数字表示边数。 |
turtle.seth(angle) |
乌龟变成了绝对的坐标 |
turtle.left(angle) |
左转 |
turtle.right(angle) |
右转 |
penup() |
抬起画笔 |
pendown() |
落下画笔 |
pencolor() |
笔的颜色 |
pensize() |
笔的大小 |
turtle.colormode(mode) |
改变RGB模式,mode=1.0小数值,mode=255整数值 RGB颜色,例如white的RGB总值为:255.255.255,修改数值可改变颜色。 |
turtle.done() |
画完后不要关窗 |
以上这些内容,已经完全够大家强装13了…
百鸟朝凤图
中国每天晚上的新闻联播节目结束时,总会播放主持人收到稿件的场景。为了告诉观众朋友,主持人说新(段)闻(子)已经写好了!既然要画南瓜怪,就得先打草稿!
每个人都记得星爷唐伯虎点秋香中国,祝枝山一对百鸟向凤图(小鸡吃米图)至今给人留下深刻印象。所以今天,让IT界的王伯虎给你带来以下画轴,名字:这南瓜有点冷
不知这幅画会吸引多少粉丝来取关,没办法他们一定是嫉妒我的才华!
祝枝山在IT界
实现turtle代码代码
第一,为了达到遮盖画功拙劣的效果,我们应该在制图之前,先选择一幅略显美观的背景图,比如:
背景图南瓜怪
因为南瓜不是正圆,所以我们应该画椭圆来达到效果。在我刚刚学习的内容中,有一个turtle.circle(r,extent,steps)
方法,其中steps参数值得我们重点分析,首先要看一段代码:
1# -*- coding: utf-8 -*-
2# @Author : 王翔
3# @微信号 : King_Uranus
4# @公众号 : Python清风
5# @GitHub : https://github.com/BreezePython
6# @Date : 2019/10/30 22:31
7# @Software : PyCharm
8# @version :Python 3.7.3
9# @File : circle.py
10
11import turtle as t
12
13for i in range(3, 10, 2):
14 t.circle(100, steps=i)
15 t.left(90)
16
17t.circle(100, steps=30)
18
19for i in range(30): # 重复执行i次
20 t.forward(20.93) # 移动x个单位
21 t.left(12) # 左转y度
22
23t.done()
效果如下:
steps参数在circle中
事实上,steps参数可以理解为多边形的边数和边数,所以边数越多(30边形),在我们眼里,图形是否趋近和圆润?然后拆分思考,具体的实现能不能理解为画笔画一条直线,然后转动视角,再画一条直线,这样往复,最后转360度,形成一个图形。同样如下:
有些朋友会问1.74是从哪里来的?C = 2πr = 628628/360 = 1.7444… 所以每个度的边长是1.74。
1import turtle as t
2
3for i in range(360): # 重复执行i次
4 t.forward(1.74) # 移动x个单位
5 t.left(1) # 偏移弧度
6
7t.circle(100)
圆绘图分析
知道了这一点,下来就要考虑怎么画椭圆了。之所以是圆,是因为每边都一样,所以如果每边都不一样,会不会造成椭圆效果?现在我们用这种方式画南瓜形状:
1import turtle as t
2
3t.speed(10)
4t.pensize(6)
5t.hideturtle()
6t.screensize()
7t.bgcolor('black')
8t.bgpic('dark_night.png')
9t.color('#CF5E1A', '#CF5E1A')
10
11# 绘制南瓜
12t.penup()
13t.goto(250, 30)
14t.pendown()
15t.seth(90)
16t.begin_fill()
17for j in range(25):
18 t.fd(j)
19 t.left(3.6)
20for j in range(25, 0, -1):
21 t.fd(j)
22 t.left(3.6)
23t.seth(-90)
24t.circle(254, 180)
25t.end_fill()
26
27t.done()
南瓜外形
南瓜把儿比较简单,只需将画笔调粗,然后画一段弧度即可。双眼处理方法与南瓜顶盖相似,不再赘述。
最后效果
最后效果图
总体代码:
1# -*- coding: utf-8 -*-
2# @Author : 王翔
3# @WeChat : King_Uranus
4# @公众号 : Python清风
5# @GitHub : https://github.com/BreezePython
6# @Date : 2019/10/29 22:30
7# @Software : PyCharm
8# @version :Python 3.7.3
9# @File : PumpkinMonster.py
10
11
12import turtle as t
13
14
15def init():
16 # 初始化
17 t.bgpic('dark_night.png')
18 t.screensize(500, 500, bg='white')
19 t.speed(10)
20 t.hideturtle()
21 t.bgcolor('black')
22 t.bgpic('dark_night.png')
23
24
25def outline():
26 # 画出南瓜的轮廓
27 t.color('#CF5E1A', '#CF5E1A')
28 t.penup()
29 t.goto(250, 30)
30 t.pendown()
31 t.seth(90)
32 t.begin_fill()
33 for j in range(25):
34 t.fd(j)
35 t.left(3.6)
36 for j in range(25, 0, -1):
37 t.fd(j)
38 t.left(3.6)
39 t.seth(-90)
40 t.circle(254, 180)
41 t.end_fill()
42
43
44def tail():
45 # 绘制南瓜枝
46 t.penup()
47 t.goto(0, 180)
48 t.pendown()
49 t.color(#2E3C01')
50 t.seth(100)
51 t.pensize(25)
52 t.circle(60, 100)
53
54
55def eyes(args):
56 # 双眼
57 for items in args:
58 position, angle, direction = items
59 t.pensize(6)
60 t.penup()
61 t.goto(position, 0)
62 t.pendown()
63 t.color(#4C180D', #4C180D'
64 t.begin_fill()
65 t.seth(angle)
66 for j in range(55):
67 t.fd(3)
68 if direction:
69 t.left(3) # 左转3度
70 else:
71 t.right(3) # 左转3度
72 t.goto(position, 0)
73 t.end_fill()
74
75
76def nose():
77 # 鼻子
78 t.penup()
79 t.goto(0, 0)
80 t.seth(180)
81 t.pendown()
82 t.begin_fill()
83 t.circle(50, steps=3)
84 t.end_fill()
85
86
87def mouth():
88 # 嘴巴
89 t.color('#F9D503', #F9D503'
90 t.pensize(6)
91 t.penup()
92 t.penup()
93 t.goto(-150, -100)
94 t.pendown()
95 t.begin_fill()
96 t.seth(-30)
97 t.fd(100)
98 t.left(90)
99 t.fd(30)
100 t.right(90)
101 t.fd(60)
102 t.left(60)
103 t.fd(60)
104 t.right(90)
105 t.fd(30)
106 t.left(90)
107 t.fd(100)
108 t.end_fill()
109 t.done()
110
111
112if __name__ == '__main__':
113 init()
114 outline()
115 tail()
116 eyes_items = [(-60, 230, 0), (60, -50, 1)]
117 eyes(eyes_items)
118 nose()
119 mouth()
120 t.done()
END
本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。
免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com