利用Python绘制有趣的万圣节南瓜怪效果


Posted in Python onOctober 31, 2019

关于万圣节

万圣节又叫诸圣节,在每年的11月1日,是西方的传统节日;而万圣节前夜的10月31日是这个节日最热闹的时刻。在中文里,常常把万圣节前夜(Halloween)讹译为万圣节(All Saints' Day)。

为庆祝万圣节的来临,小孩会装扮成各种可爱的鬼怪向逐家逐户地敲门,要求获得糖果,否则就会捣蛋。而同时传说这一晚,各种鬼怪也会装扮成小孩混入群众之中一起庆祝万圣节的来临,而人类为了让鬼怪更融洽才装扮成各种鬼怪。

不知从何时开始,西方的节日一个个的走进了天朝,情人节、圣诞节、感恩节、万圣节…对于当年我们那些整天只知道逃课上网的?潘看笱??此担?蚴ソ诘氖熘??匀焕丛从谟蜗妨?

比如wow:

利用Python绘制有趣的万圣节南瓜怪效果 

魔兽世界

再或者MapleStory:

利用Python绘制有趣的万圣节南瓜怪效果 

冒险岛

不管是魔兽世界帖子的发布时间还是这老掉牙的2D冒险岛游戏,都代表属于我们80后的时代过去了…

Python与万圣节

最近由于工作比较忙,所以会转载一些大佬们的优秀文章。今天有些时间,想着写点什么呢?快到万圣节了既然秉承着寓教于乐的python学习态度,不如就用Python画一个万圣节标志------南瓜怪吧!

说到python绘图,免不了提及turtle模块,小海龟算是python中炙手可热的绘图模块了,虽然它的功能无法与专业绘图工具相比,但还是可以画一些简笔画。之所以说用turtle只能画些简笔画,多半是因为我的学习功底过于浅薄,没办法用它做出高大上的作品。当然还有一个原因,就是我没有绘图这方面的天赋,从小美术就不及格啊!但为了应景,还是硬着头皮撸一段代码吧!

turtle模块

python的turtle库,最早还是在小甲鱼的【零基础入门学习Python】中接触的,好久没用了有些生疏,先带大家一起回顾下模块的使用。

如果你是想认真学习这个库,推荐去官网仔细看看相关内容:

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

但如果你只是跟我一样从娱乐出发,那么你只需简单的几分钟入门就可以开始作画了。在这里,我帮大家整理了一些常用的方法:

利用Python绘制有趣的万圣节南瓜怪效果 

就以上这些内容,已经完全够大家强势炫耀了…

百鸟朝凤图

天朝每晚的新闻联播节目结束,总会播放一下主持人收稿子的画面。为了告诉观众朋友们,主持人说新(段)闻(子)是打过草稿的!那既然要画南瓜怪,我也得先打打草稿了!

大家都记得星爷的《唐伯虎点秋香》中,祝枝山一副百鸟朝凤图(小鸡吃米图)至今给人留下深刻的印象。那么今天让IT界的王伯虎为大家带来以下画卷,名曰:这个南瓜有点冷

不知道这幅图会引来多少粉丝取关,没办法他们肯定是嫉妒我的才华!

利用Python绘制有趣的万圣节南瓜怪效果 

IT界的祝枝山

turtle代码实现

首先,为了能起到遮盖画功低劣的效果,我们需要在绘图前,先选则一张稍显美观的背景图,比如这样:

利用Python绘制有趣的万圣节南瓜怪效果 

南瓜怪背景图

下来由于南瓜不是一个正圆,我们需要画出椭圆的实现效果。刚才学过的内容中,有一个turtle.circle(r,extent,steps)的方法,其中steps参数值得我们去重点分析,先来看一段代码:

# -*- coding: utf-8 -*- 
# @Author  : 王翔 
# @微信号  : King_Uranus 
# @公众号  : 清风Python 
# @GitHub  : https://github.com/BreezePython 
# @Date   : 2019/10/30 22:31 
# @Software : PyCharm 
# @version :Python 3.7.3 
# @File   : circle.py 
import turtle as t 
for i in range(3, 10, 2): 
 t.circle(100, steps=i) 
 t.left(90) 
t.circle(100, steps=30) 
for i in range(30):   # 重复执行i次 
 t.forward(20.93)  # 移动x个单位 
 t.left(12)     # 左转y度 
t.done()

效果如下:

利用Python绘制有趣的万圣节南瓜怪效果 

circle中steps参数

steps参数其实大家可以理解为多边形的边数和,那么当边数越多(30边形),在我们肉眼看来是否图形就趋近与圆了?再拆分思考一下,具体的实现是否可以理解为,画笔画一段直线,然后旋转一下角度,再画直线,如此往复,最终旋转360度,组成一个图形。同理如下:

有人朋友会问1.74是哪里来的?

C = 2πr = 628

628/360 = 1.7444… 所以每一度的边长为1.74

import turtle as t 
for i in range(360):  # 重复执行i次 
 t.forward(1.74)   # 移动x个单位 
 t.left(1)      # 偏移弧度 
t.circle(100)

圆绘图分析

利用Python绘制有趣的万圣节南瓜怪效果 

知道了这些,下来就该考虑如何画椭圆了,之所以为圆,是由于各边相等,那么如果各边不等是否就会造成椭圆的效果,现在我们通过这种方式来画南瓜外形:

import turtle as t 
t.speed(10) 
t.pensize(6) 
t.hideturtle() 
t.screensize() 
t.bgcolor('black') 
t.bgpic('dark_night.png') 
t.color('#CF5E1A', '#CF5E1A') 
# 绘制南瓜 
t.penup() 
t.goto(250, 30) 
t.pendown() 
t.seth(90) 
t.begin_fill() 
for j in range(25): 
 t.fd(j) 
 t.left(3.6) 
for j in range(25, 0, -1): 
 t.fd(j) 
 t.left(3.6) 
t.seth(-90) 
t.circle(254, 180) 
t.end_fill() 
t.done()

南瓜外形

利用Python绘制有趣的万圣节南瓜怪效果 

南瓜把儿比较简单,只需要把画笔调粗,然后画一段弧度即可。眼睛部分的处理方法与南瓜上盖类似,不多赘述。

最终效果

最终效果图

利用Python绘制有趣的万圣节南瓜怪效果 

整体代码:

# -*- coding: utf-8 -*- 
# @Author  : 王翔 
# @WeChat  : King_Uranus 
# @公众号  : 清风Python 
# @GitHub  : https://github.com/BreezePython 
# @Date   : 2019/10/29 22:30 
# @Software : PyCharm 
# @version :Python 3.7.3 
# @File   : PumpkinMonster.py 
import turtle as t 
def init(): 
# 初始化 
t.bgpic('dark_night.png') 
t.screensize(500, 500, bg='white') 
t.speed(10) 
t.hideturtle() 
t.bgcolor('black') 
t.bgpic('dark_night.png') 
def outline(): 
# 绘制南瓜轮廓 
t.color('#CF5E1A', '#CF5E1A') 
t.penup() 
t.goto(250, 30) 
t.pendown() 
t.seth(90) 
t.begin_fill() 
for j in range(25): 
  t.fd(j) 
  t.left(3.6) 
for j in range(25, 0, -1): 
  t.fd(j) 
  t.left(3.6) 
t.seth(-90) 
t.circle(254, 180) 
t.end_fill() 
def tail(): 
# 绘制南瓜枝 
t.penup() 
t.goto(0, 180) 
t.pendown() 
t.color('#2E3C01') 
t.seth(100) 
t.pensize(25) 
t.circle(60, 100) 
def eyes(args): 
# 眼睛 
for items in args: 
  position, angle, direction = items 
  t.pensize(6) 
  t.penup() 
  t.goto(position, 0) 
  t.pendown() 
  t.color('#4C180D', '#4C180D') 
  t.begin_fill() 
  t.seth(angle) 
  for j in range(55): 
    t.fd(3) 
    if direction: 
      t.left(3) # 左转3度 
    else: 
      t.right(3) # 左转3度 
  t.goto(position, 0) 
  t.end_fill() 
def nose(): 
# 鼻子 
t.penup() 
t.goto(0, 0) 
t.seth(180) 
t.pendown() 
t.begin_fill() 
t.circle(50, steps=3) 
t.end_fill() 
def mouth(): 
# 嘴巴 
t.color('#F9D503', '#F9D503') 
t.pensize(6) 
t.penup() 
t.penup() 
t.goto(-150, -100) 
t.pendown() 
t.begin_fill() 
t.seth(-30) 
t.fd(100) 
t.left(90) 
t.fd(30) 
t.right(90) 
t.fd(60) 
t.left(60) 
t.fd(60) 
t.right(90) 
t.fd(30) 
t.left(90) 
t.fd(100) 
t.end_fill() 
t.done() 
if __name__ == '__main__': 
init() 
outline() 
tail() 
eyes_items = [(-60, 230, 0), (60, -50, 1)] 
eyes(eyes_items) 
nose() 
mouth() 
t.done()

总结

以上所述是小编给大家介绍的利用Python绘制有趣的万圣节南瓜怪效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
python文件和目录操作函数小结
Jul 11 Python
Python实现partial改变方法默认参数
Aug 18 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
一百多行python代码实现抢票助手
Sep 25 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
python实现猜拳游戏
Mar 04 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
Python容器类型公共方法总结
Aug 19 Python
python lambda的使用详解
Feb 26 Python
python实现大量图片重命名
Mar 23 #Python
python3图片文件批量重命名处理
Oct 31 #Python
Django1.11自带分页器paginator的使用方法
Oct 31 #Python
python实现批量文件重命名
Oct 31 #Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 #Python
python实现操作文件(文件夹)
Oct 31 #Python
python用requests实现http请求代码实例
Oct 31 #Python
You might like
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
在Python程序中操作MySQL的基本方法
2015/07/29 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
python关于变量名的基础知识点
2020/03/03 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
优秀团队申报材料
2014/12/26 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
行政前台岗位职责
2015/04/16 职场文书
初中班干部工作总结
2015/08/10 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS