Python Turtle绘图[难度2星]:旋转风车(静态/动态,单色/多色)
我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜。
一些让我心动过的案例,分享给大家,也珍藏给自己。
——Python教学路上的爬行者
色彩交织的风车是春天里一道绚烂的风景线。蓝天,白云,风车,仿佛世上所有的浪漫场景瞬间定格在这里。
老话说“风车转,幸福来”,所以在春天里,只要吹一吹风车,烦恼就能全部吹走。
本文将分六步来用turtle绘制一个旋转的风车。
难度:★★☆☆☆☆
第1步:画风车的一个叶片
【效果预览】
【重难点突破】
多个变量之间的关系如下图。只要改动一个变量b1,就会影响其他变量的值,所以只要任意输入变量b1的值,风车就会实现等比例缩放。
写代码之前,可以先在纸上把风车简单地画出来。再推导出几个关键线条之间的关系。这样可以减少使用电脑的时长,有效保护视力。
【代码参考】
# 案例1:画风车的一个叶片
import turtle # 导入turtle库(模块)
turtle.bgcolor("#64c6fe") # 设置背景颜色为#64c6f,一种蓝色
turtle.speed(1) # 设置海龟的绘图速度,参数为1时最慢### 变量初始化设置
# b1是大等腰直角三角形的斜边,a1是直角边
b1=200 # 只要改变b1的值,风车的大小会等比例缩放
a1=2**0.5/2*b1 # 2**0.5 表示数学中的“根号2”
# b2是小等腰直角三角形的斜边,a2是直角边
a2=b1/2
b2=2**0.5 *a2### 画风车的叶片
# 画小的等腰直角三角形
turtle.forward(a2)
turtle.left(90)
turtle.forward(a2)
turtle.left(135)
turtle.forward(b2)
# 画大的等腰直角三角形
turtle.backward(b2)
turtle.right(90)
turtle.forward(a1)
turtle.left(135)
turtle.forward(b1)
第2步:画4个叶片+单色填充
【效果预览】
【重难点突破】
为了使风车的叶片有层次感,小等腰直角三角形可以用较深的颜色来填充,大等腰三角形用较浅的颜色填充。
【代码参考】
# 案例2:绘制风车(画4个叶片+单色填充)
import turtle # 导入turtle库(模块)
turtle.bgcolor("#64c6fe") # 设置背景颜色为,一种蓝色#64c6fe
turtle.speed(4) # 设置海龟的绘图速度### 变量初始化设置
# b1是大等腰直角三角形的斜边,a1是直角边
b1=200 # 只要改变b1的值,风车的大小会等比例缩放
a1=2**0.5/2*b1 # 2**0.5 表示数学中的“根号2”
# b2是小等腰直角三角形的斜边,a2是直角边
a2=b1/2
b2=2**0.5 *a2### 画风车,并填充颜色
for i in range(4): # 风车有4个叶片# 画小的等腰直角三角形turtle.color("#f2b11b") # 颜色较深turtle.begin_fill()turtle.forward(a2)turtle.left(90)turtle.forward(a2)turtle.left(135)turtle.forward(b2)turtle.end_fill()# 画大的等腰直角三角形turtle.color("#f3d727") # 颜色较浅turtle.begin_fill()turtle.backward(b2)turtle.right(90)turtle.forward(a1)turtle.left(135)turtle.forward(b1)turtle.end_fill()# 旋转180度后,开始画下一个风车叶片turtle.right(180)### 绘图结束,隐藏海龟
turtle.hideturtle()
第3步:风车上移+后面加杆
【效果预览】
【重难点突破】
风车杆的长度用变量length表示,宽度用变量width来表示,这两个变量也要与变量b1建立数学运算关系。如下:
length=1.7*b1
width=2/15*b1
【代码参考】
# 案例3:绘制风车(风车上移+后面加杆)### ①程序初始化设置
import turtle # 导入turtle库(模块)
turtle.bgcolor("#64c6fe") # 设置背景颜色为#64c6fe,一种浅蓝色
turtle.speed(6) # 设置海龟的绘图速度,参数为0时最快### ②变量初始化设置
# b1是大等腰直角三角形的斜边,a1是直角边
b1=200 # 只要改变b1的值,风车的大小会等比例缩放
a1=2**0.5/2*b1 # 2**0.5 表示数学中的“根号2”
# b2是小等腰直角三角形的斜边,a2是直角边
a2=b1/2
b2=2**0.5 *a2
# 设置风车杆的长度和宽度
length=1.7*b1
width=2/15*b1### ③起始坐标上移
turtle.penup()
turtle.goto(0,70)
turtle.pendown()### ④风车后面加杆
# 当b1=150时,经过不断调试,turtle.pensize(20)的效果最好。所以可以推导出风车杆粗细和b1的关系。
turtle.setheading(-90)
turtle.pensize(width)
turtle.pencolor("#5f4a1d")
turtle.forward(length)
turtle.backward(length)
turtle.setheading(0)### ⑤画风车的4个叶片
turtle.right(22) # 向右旋转22度后再画风车,加一定的角度,风车比较有动感
turtle.pensize(1)
for i in range(4):# 画小的等腰直角三角形turtle.color("#f2b11b") # 颜色较深turtle.begin_fill()turtle.forward(a2)turtle.left(90)turtle.forward(a2)turtle.left(135)turtle.forward(b2)turtle.end_fill()# 画大的等腰直角三角形turtle.color("#f3d727") # 颜色较浅turtle.begin_fill()turtle.backward(b2)turtle.right(90)turtle.forward(a1)turtle.left(135)turtle.forward(b1)turtle.end_fill()# 旋转一定角度,开始画另外的风车叶子turtle.right(180)### ⑥绘图结束,隐藏海龟
turtle.hideturtle()
第4步:风车(多色填充)
【效果预览】
【重难点突破】
风车的4个叶片,分别使用4种深浅的颜色来填充。可以通过遍历颜色列表来实现。
# 深色列表
dark_color=["#267fb9","#f2b11b","#538a30","#ba62c1"]
#267fb9是一种深蓝色,#f2b11b是一种深黄色,#538a30是一种深绿色,#ba62c1是一种深紫色。
# 浅色列表
light_color=["#2aaad1","#f3d727","#7fbc2b","#cc81d2"]
#2aaad19是一种浅蓝色,#f3d727是一种浅黄色,#7fbc2b是一种浅绿色,#cc81d2是一种浅紫色。
【代码参考】
# 案例4:绘制风车(多色填充)### ①程序初始化设置
import turtle # 导入turtle库(模块)
turtle.speed(6) # 设置海龟的绘图速度,参数为0时最快
turtle.bgcolor("#64c6fe") # 设置背景颜色为#64c6fe,一种蓝色### ②变量初始化设置
# 分别创建深色和浅色列表
dark_color=["#267fb9","#f2b11b","#538a30","#ba62c1"] # 深色列表
light_color=["#2aaad1","#f3d727","#7fbc2b","#cc81d2"] # 浅色列表
# b1是大等腰直角三角形的斜边,a1是直角边
b1=150 # 只要改变b1的值,风车的大小会等比例缩放
a1=2**0.5/2*b1 # 2**0.5 表示数学中的“根号2”
# b2是小等腰直角三角形的斜边,a2是直角边
a2=b1/2
b2=2**0.5 *a2
# 设置风车杆的长度和宽度
length=1.7*b1
width=2/15*b1### ③起始坐标上移
turtle.penup()
turtle.goto(0,70)
turtle.pendown()### ④风车后面加杆
# 当b1=150时,经过不断调试,turtle.pensize(20)的效果最好。所以可以推导出风车杆粗细和b1的关系。
turtle.setheading(-90)
turtle.pensize(width)
turtle.pencolor("#5f4a1d")
turtle.forward(length)
turtle.backward(length)
turtle.setheading(0)### ⑤画风车的4个叶片
turtle.right(22) # 向右旋转22度后再画风车,加一定的角度,风车比较有动感
turtle.pensize(1)
for i in range(4):# 画小的等腰直角三角形turtle.color(dark_color[i]) # 遍历深色列表dark_colorturtle.begin_fill()turtle.forward(a2)turtle.left(90)turtle.forward(a2)turtle.left(135)turtle.forward(b2)turtle.end_fill()# 画大的等腰直角三角形turtle.color(light_color[i]) # 遍历浅色列表light_colorturtle.begin_fill()turtle.backward(b2)turtle.right(90)turtle.forward(a1)turtle.left(135)turtle.forward(b1)turtle.end_fill()# 旋转一定角度,开始画另外的风车叶子turtle.right(180)### ⑥绘图结束,隐藏海龟
turtle.hideturtle()
第5步:让直线旋转起来
【效果预览】
【重难点突破】
1. 动画的基本原理
动画的基本原理就是以超过人眼可以分辨的频率播放图片。
举例:让直线动旋转起来需要4步
step 1:清屏
step 2:画一条直线
step 3:等待 t 秒(1/t 就是刷新频率)
step 4:重复step 1,2,3
2. ontimer( )函数
语法:turtle.ontimer(fun, t=0)
作用:安装一个计时器,在 t 毫秒后调用 fun 函数。(1秒=1000毫秒)
参数:
fun 一个无参数的函数
t 一个数值 >= 0
【代码参考】
# 案例5:旋转的直线
import turtle
turtle.bgcolor("black")
turtle.pencolor('red')
turtle.pensize(3)
turtle.delay(0)
turtle.speed(0)# 自定义函数draw_line()
def draw_line():turtle.left(1) # 每次旋转1度后再画直线turtle.clear() # 清屏turtle.forward(250)turtle.backward(250)# 主程序
for j in range(400): # 画400次直线turtle.ontimer(draw_line, t=50 * (j + 1)) # 安装一个计时器,t毫秒后调用fun()函数# 绘图结束,隐藏海龟
turtle.hideturtle()
第6步:让风车旋转起来
【效果预览】
最初的想法是,通过编程分别实现“风车叶片旋转”和“风车杆静止”这两个功能。
但是尝试了好多次,要么都静止,要么都旋转。最后只能导入一张带风车杆的图片作为背景。如果哪位老师有更好的方法,请一定要及时反馈给我哦。
风车杆无法静止的问题,困扰了我好多天。当我不得不“曲线救国”,用另一种方法来解决问题后,发现加了背景后的风车比纯色背景更漂亮。
【重难点突破】
1. 设置背景颜色方法:
import turtle
turtle.bgcolor("black")
2.设置背景图片方法:
import turtle
turtle.bgpic("1.gif")
敲重点:
1.背景图片必须是gif格式
2.图片必须和代码文件在同一个文件夹里
3.图片名称一定要使用双引号括起来
上面就是gif格式的背景图片
上面就是gif格式的背景图片
【代码参考】
# 案例6:绘制旋转的风车### ①程序初始化设置
import turtle # 导入turtle库(模块)
turtle.bgpic("1.gif") # 导入一张gif图片做背景
turtle.tracer(0) # 没有画图过程,图形会立马呈现出最终结果 ### ②变量初始化设置
# 分别创建深色和浅色列表
dark_color=["#267fb9","#f2b11b","#538a30","#ba62c1"] # 深色列表
light_color=["#2aaad1","#f3d727","#7fbc2b","#cc81d2"] # 浅色列表
# b1是大等腰直角三角形的斜边,a1是直角边
b1=150 # 只要改变b1的值,风车的大小会等比例缩放
a1=2**0.5/2*b1 # 2**0.5 表示数学中的“根号2”
# b2是小等腰直角三角形的斜边,a2是直角边
a2=b1/2
b2=2**0.5 *a2
# 设置风车杆的长度和宽度
length=1.7*b1
width=2/15*b1### ③起始坐标上移
turtle.penup()
turtle.goto(0,70)
turtle.pendown()### ④自定义函数fun()
turtle.right(22) # 向右旋转22度后再画风车,加一定的角度,风车比较有动感
def fun():"""函数功能:每调用一次fun(),就会在旋转1度后的新方向出现风车 """turtle.clear()turtle.right(1)for i in range(4):# 画小的等腰直角三角形turtle.color(dark_color[i]) # 遍历深色列表dark_colorturtle.begin_fill()turtle.forward(a2)turtle.left(90)turtle.forward(a2)turtle.left(135)turtle.forward(b2)turtle.end_fill()# 画大的等腰直角三角形turtle.color(light_color[i]) # 遍历浅色列表light_colorturtle.begin_fill()turtle.backward(b2)turtle.right(90)turtle.forward(a1)turtle.left(135)turtle.forward(b1)turtle.end_fill()# 旋转180度后,开始画下一片风车叶片turtle.right(180)### ⑤主程序
for j in range(360): # 让风车旋转80次turtle.ontimer(fun, t=50 * (j + 1)) # 安装一个计时器,t毫秒后调用fun()函数### ⑥绘图结束,隐藏海龟
turtle.hideturtle()
——end——
Python Turtle绘图[难度2星]:旋转风车(静态/动态,单色/多色)相关推荐
- Python Turtle 绘图[难度2星]:一朵雪花(基础代码 、 加变量/加自定义函数优化)
2022年北京冬奥会开幕式上"一朵雪花"贯穿始终,给大家印象深刻.今天我们也让海龟来绘制一朵雪花.先绘制一朵普通雪花,在下一期分享中再让海龟来绘制一朵"中国结雪花&quo ...
- Python Turtle绘图[难度2星]:甜美棒棒糖(基础效果 / 加描边优化)
我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者 案例1:棒棒糖(基础效果) ...
- Python Turtle绘图[难度3星]:24节气倒计时(2.使用字典存储数据)
"我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己." -- 初中信息技术教师 许华丽 Python Tur ...
- Python Turtle绘图 [难度2星]:古风扇子
我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者 案例:古风扇子 难度:★★ ...
- Python Turtle绘图[难度3星]:24节气倒计时(1.使用列表存储数据)
"我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己." -- 初中信息技术教师 许华丽 2022年2月4日, ...
- Python Turtle绘图 [难度2星]:彩虹(分五步完成)
我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者 彩虹是那样的美丽动人,从地的这一端跨到那一端 ...
- Python Turtle绘图[难度2星]:2行代码画爱心
我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --初中信息技术教师 许华丽 2月14日的情人节,不是我们中国的传统节日,所 ...
- Python Turtle绘图[难度2星]:多边形螺旋线(颜色交叉/颜色分层)
我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者 案例1: 多边形螺旋线(颜 ...
- Python Turtle绘图[难度2星]:餐布桌布设计(格子 / 波点)
我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者 案例1: 餐布桌布设计1( ...
最新文章
- linux下遇到的小问题与解决方法
- 如何开启SAP CRM基于WORD模板创建附件的功能
- python——input() 的用法及扩展
- 针对新手的Java EE7和Maven项目–第7部分
- Android recycleview使用详解,recycleview实现九宫格布局即横向排列,recycleview设置item占位数量大号item或小号item
- windows安全模式_Windows 安全模式的功能和作用
- nsis 固定到任务栏
- java升级后nc不能用_用友NC系统使用过程中常见问题和解决方法2017
- Vue 点击按钮下载txt文件
- java batik_[导入]Apache Batik,又爱又恨
- 机器学习中激活函数的作用
- python读取excel画折线图_python读取excel数据绘制简单曲线图的完整步骤记录
- Android动态更换图标
- 入魔了~《武林外传》!
- bulldog-vulnhub
- Xms/Xmx/Xmn/Xss区别
- I帧、B帧、P帧以及IDR帧之间的关系
- php正则表达式(手册)
- 卷积网络中的通道、特征图、过滤器和卷积核
- 13道字符串笔试题及答案,总有一道你面试会遇上