0
点赞
收藏
分享

微信扫一扫

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

是她丫 2022-03-11 阅读 115
python

我喜欢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——

也许,风雨过后没有期待已久的彩虹。也许,努力过后没能得到相应的回报,可毕竟我们都曾努力过。或许,彩虹已不远,回报也在前方不远处等着你。请认真过好每一天。

举报

相关推荐

0 条评论