我喜欢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星]:旋转风车(静态/动态,单色/多色)相关推荐

  1. Python Turtle 绘图[难度2星]:一朵雪花(基础代码 、 加变量/加自定义函数优化)

    2022年北京冬奥会开幕式上"一朵雪花"贯穿始终,给大家印象深刻.今天我们也让海龟来绘制一朵雪花.先绘制一朵普通雪花,在下一期分享中再让海龟来绘制一朵"中国结雪花&quo ...

  2. Python Turtle绘图[难度2星]:甜美棒棒糖(基础效果 / 加描边优化)

    我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者    案例1:棒棒糖(基础效果)       ...

  3. Python Turtle绘图[难度3星]:24节气倒计时(2.使用字典存储数据)

    "我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己." -- 初中信息技术教师  许华丽 Python Tur ...

  4. Python Turtle绘图 [难度2星]:古风扇子

    我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者    案例:古风扇子       难度:★★ ...

  5. Python Turtle绘图[难度3星]:24节气倒计时(1.使用列表存储数据)

    "我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己." -- 初中信息技术教师  许华丽 2022年2月4日, ...

  6. Python Turtle绘图 [难度2星]:彩虹(分五步完成)

    我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者 彩虹是那样的美丽动人,从地的这一端跨到那一端 ...

  7. Python Turtle绘图[难度2星]:2行代码画爱心

    我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --初中信息技术教师  许华丽 2月14日的情人节,不是我们中国的传统节日,所 ...

  8. Python Turtle绘图[难度2星]:多边形螺旋线(颜色交叉/颜色分层)

    我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者    案例1:       多边形螺旋线(颜 ...

  9. Python Turtle绘图[难度2星]:餐布桌布设计(格子 / 波点)

    我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜. 一些让我心动过的案例,分享给大家,也珍藏给自己. --Python教学路上的爬行者    案例1:       餐布桌布设计1( ...

最新文章

  1. linux下遇到的小问题与解决方法
  2. 如何开启SAP CRM基于WORD模板创建附件的功能
  3. python——input() 的用法及扩展
  4. 针对新手的Java EE7和Maven项目–第7部分
  5. Android recycleview使用详解,recycleview实现九宫格布局即横向排列,recycleview设置item占位数量大号item或小号item
  6. windows安全模式_Windows 安全模式的功能和作用
  7. nsis 固定到任务栏
  8. java升级后nc不能用_用友NC系统使用过程中常见问题和解决方法2017
  9. Vue 点击按钮下载txt文件
  10. java batik_[导入]Apache Batik,又爱又恨
  11. 机器学习中激活函数的作用
  12. python读取excel画折线图_python读取excel数据绘制简单曲线图的完整步骤记录
  13. Android动态更换图标
  14. 入魔了~《武林外传》!
  15. bulldog-vulnhub
  16. Xms/Xmx/Xmn/Xss区别
  17. I帧、B帧、P帧以及IDR帧之间的关系
  18. php正则表达式(手册)
  19. 卷积网络中的通道、特征图、过滤器和卷积核
  20. 13道字符串笔试题及答案,总有一道你面试会遇上

热门文章

  1. Vue自定义域过滤器和管道符
  2. Grafana添加星空背景
  3. 野蛮生长已到尽头 WiFi百家争鸣谁能破局
  4. 看一遍就能玩转QT字体类(2)-QFontDatabase
  5. 易语言java类_易语言面对对象编程
  6. windows 上ffplay 遇到的问题 WASAPI can’t initialize audio client
  7. IOS 多线程 常驻线程,并发,内存问题
  8. 虚拟现实(VR)和增强现实(AR)背后的核心技术是什么?
  9. 介绍一下百度AR平台
  10. 高校计算机教研室工作计划,高校教研室工作计划