我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜。
一些让我心动过的案例,分享给大家,也珍藏给自己。
——Python教学路上的爬行者
彩虹是那样的美丽动人,从地的这一端跨到那一端,犹如花朵编织的环带,缀在天蓝的裙襟上。红、橙、黄、绿、青、蓝、紫,多么迷人。它把世界上一切柔和的颜色凝固在天空中。仿佛把我们带进了一个童话般的世界,灿烂夺目。
本案例将分五步来完成下图彩虹的绘制。
难度:★★☆☆☆☆
第1步:根据背景图片定画布
【重难点突破】
1. 设置画布大小方法:
turtle.setup(839,612)
# 设置窗口的宽为839像素,高为612像素
只要单击选中图片“蓝天白云”,下面的状态栏就会显示该图片的尺寸。如下图,这张图片的尺寸是839×612,即宽是839像素,高是612像素。
2. 设置背景图片方法:
turtle.bgpic("蓝天白云.gif")
# 将图片“蓝天白云”设置为背景
敲重点:
1. 背景图片必须是gif或png格式
2. 图片必须和代码文件在同一个文件夹里
3. 图片名称一定要用双引号括起来
4. 图片名称必须加格式后缀
这是本案例用到的背景图片 来源于昵图网
3. 如何快速将JPG图片转换为GIF格式?
在网页上右键另存图片时无法直接保存为GIF格式。可以使用微信、QQ、钉钉等聊天框的截图工具,截图后再选择gif格式保存。
第2步:确定彩虹七色数值
【重难点突破】
1. 到底是“红橙黄绿青蓝紫”,还是“红橙黄绿蓝靛紫”?
学生经常会这样问。我在网上查了好久,搜到了一个比较合理的解释。
在文学中常说“红(赤)橙黄绿青蓝紫”,但是在科学研究中的严谨说法是“红橙黄绿蓝靛紫”。
2. “彩虹”百度百科
彩虹,又称天弓(客家话)、天虹、绛等,简称虹,是气象中的一种光学现象。
当太阳光照射到半空中的水滴,光线被折射及反射,在天空上形成拱形的七彩光谱,由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫 七种颜色。
事实上彩虹有无数种颜色,比如,在红色和橙色之间还有许多种细微差别的颜色,但为了简便起见,所以只用七种颜色作为区别。
3. 彩虹七色十六进制数值
在网上提供的彩虹七色的十六进制数值,基本上都是“红橙黄绿青蓝紫”。
红色 #FF0000
橙色 #FF7F00
黄色 #FFFF00
绿色 #00FF00
青色 #00FFFF
蓝色 #0000FF
紫色 #8B00FF
第3步:确定弧的半径角度
【重难点突破】
要想画出彩虹一样的圆弧,需要先调整海龟的头部朝向,然后再使用circle(半径,角度)来实现。
举例1:
让海龟的头部向上,即setheading(90)
①可用circle(正半径,正角度)从右往左画弧,
②也可用circle(负半径,正角度)从左往右画弧。
举例2:
让海龟的头部向下,即setheading(-90)
③可用circle(正半径,负角度)从左往右画弧,
④也可用circle(负半径,负角度)从右往左画弧。
本案例中使用的是第1种方法。
试一试下面两块代码画出的图形是一模一样的:
若使用第2、3种方法,海龟goto(x,y)的坐标需要重新设置。
第4步:试画两色圆弧
【重难点突破】
画彩虹时,圆弧的半径和画笔粗细的关系如下:
【代码分享】
思考一下,如何将重复的代码改为循环?
# 彩虹(画两色圆弧)
import turtle
turtle.pensize(30)
# ①画红圈
turtle.penup()
turtle.setheading(90) # 让海龟头部向上
turtle.goto(260,0) # 海龟要移动到圆的右侧切点处,即x值等于半径长度
turtle.pendown()
turtle.pencolor("#ff0000")
turtle.circle(260,180) # 画半径为280,度数为180的圆弧
# ②画橙圈
turtle.penup()
turtle.setheading(90) # 重新让海龟头部向上
turtle.goto(230,0) # 海龟要移动到圆的右侧切点处,即x值等于半径长度
turtle.pendown()
turtle.pencolor("#ff7f00")
turtle.circle(230,180) # 画半径为270,度数为180的圆弧。270是280减去画笔粗细得来的。
第5步:加入循环画七色弧
【最终效果预览】
【代码分享】
画彩虹的七条圆弧时,需要根据画布大小,重新设置画笔的粗细和圆弧的半径数值。数值虽然改变了,但是两者之间的关系没有变。
r=r-size+1
# turtle案例:彩虹
# ① 程序初始化设置
import turtle
turtle.setup(839,612) # 根据图片尺寸,设置画布大小
#turtle.bgcolor('#92e8ff') # 设置背景颜色为浅蓝色
turtle.bgpic("蓝天白云.gif") # 设置图片为背景
turtle.speed(1) # 设置海龟绘图速度
turtle.delay(0) # 设置海龟绘图的延迟时间
# ② 变量初始化设置
r=330 # 画圆的半径
size=10 # 设置圆弧的粗细
colors=["#ff0000","#ff7f00","#ffff00","#00ff00","#00ffff","#0000ff","#8b00ff"] # 彩虹七色列表红橙黄绿蓝靛紫
# ③ 画彩虹
for i in range(7): # 画7条圆弧
# 画1个圆弧
turtle.penup()
turtle.setheading(90) # 海龟头部向上
turtle.goto(r,-50) # 海龟从圆的圆心移动到圆的右侧
turtle.pendown()
turtle.pencolor(colors[i]) # 遍历颜色列表
turtle.pensize(size) # 画笔的粗细设置为size
turtle.circle(r,180) # 画半径为r,角度为180度的圆弧
r=r-size+1 # 将下一个圆的半径减小
# ④写文字
turtle.penup()
turtle.home() # 让海龟返回原点(0,0)
turtle.pendown()
turtle.pencolor("#ffffff") # 设置画笔颜色为白色
turtle.write("不经历风雨,怎么见彩虹?",align="center",font=("隶书",30)) # 居中写文字
# ⑤ 画图结束,隐藏海龟
turtle.hideturtle()
——end——
也许,风雨过后没有期待已久的彩虹。也许,努力过后没能得到相应的回报,可毕竟我们都曾努力过。或许,彩虹已不远,回报也在前方不远处等着你。请认真过好每一天。