多个变量之间的关系如下图。只要改动一个变量b1,就会影响其他变量的值,所以只要任意输入变量b1的值,风车就会实现等比例缩放。写代码之前,可以先在纸上把风车简单地画出来。再推导出几个关键线条之间的关系。这样可以减少使用电脑的时长,有效保护视力。
第1步:画风车的一个叶片
# 案例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_color turtle.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_color 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()
第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步:让风车旋转起来
import turtle
turtle.bgpic(“1.gif”)
敲重点:
1.背景图片必须是gif格式
2.图片必须和代码文件在同一个文件夹里
3.图片名称一定要使用双引号括起来
# 案例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_color turtle.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_color 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) ### ⑤主程序 for j in range(360): # 让风车旋转80次 turtle.ontimer(fun, t=50 * (j + 1)) # 安装一个计时器,t毫秒后调用fun()函数 ### ⑥绘图结束,隐藏海龟 turtle.hideturtle()
-
扫码下载安卓APP
-
微信扫一扫关注我们
微信扫一扫打开小程序
手Q扫一扫打开小程序
-
返回顶部
发表评论