内容正文:
任务9.1 绘图库turtle的应用
绘制奥运五环标志
python
9.1 绘图库turtle的应用——绘制奥运五环标志
【任务描述】
截止至2022年,奥林匹克运动会已经举办了32届,奥运会以“更快、更高、更强”的格言向人们传递不断进取、不畏艰险、敢攀高峰的拼搏精神。在每届奥林匹克运动会开幕时,运动场中间都要高高地悬挂一面奥林匹克旗帜,这面白色无边旗中间有5个圆环组成的图案。小T非常热爱体育运动,他打算用Python绘图工具turtle来绘制奥运五环标志,如图9-1所示,让我们跟随他一起来学习Python的第三方库——turtle库吧。
python
9.1 绘图库turtle的应用——绘制奥运五环标志
素养小课堂:
设计者:皮埃尔·德·顾拜旦
形态:由5个奥林匹克环套接组成,有蓝、黄、黑、绿、红5种颜色。环从左到右互相套接,上面是蓝、黑、红环,下面是是黄、绿环。
象征:五环——五大洲,白色——旗帜的底色,意指所有国家都毫无例外地能在自己的旗帜下参加比赛。”
python
9.1 绘图库turtle的应用——绘制奥运五环标志
【任务分析】
(1)确定奥运五环各环的位置、厚度、颜色。
(2)将上面的蓝、黑、红环,下面的黄、绿环依次画出来。
(3)完成(2)后,下面的黄环和绿环完全覆盖在上面的蓝、黑、红环上,之后对环的交叉处进行适当修改,以达到环间互相套接效果。
python
9.1 绘图库turtle的应用——绘制奥运五环标志
任务解决:
画图库turtle的引入?
圆环如何绘制?
颜色如何设定?
环交叉点如何绘制?
python
9.1 绘图库turtle的应用——绘制奥运五环标志
9.1.1 turtle库常用函数
9.1.2 任务实现——绘制奥运五环标志
python
9.1.1 turtle库常用函数
python
9.1.1 turtle库常用函数
turtle库(也叫作海龟绘图库)是Python语言中一个很流行的用于绘制图像的函数库,来源于1969年诞生的Logo语言,后被Python接纳并将其作为标准库提供给用户使用。
可以将turtle库想象成一个小海龟,在一个横轴为X、纵轴为Y的坐标系原点,从(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系上移动,从而在爬行的路径上绘制出图形。
python
9.1.1 turtle库常用函数
turtle库哪些常用方法?
turtle库的引入
画布的创建方法
画笔的控制方法
画笔的运动方法
python
1.画布方法
坐标原点:绘图窗口的中心为坐标原点(0,0)
X轴方向:X轴正方向为前进方向,负方向为后退方向
转向方向:X轴下方为右转方向,X轴上方为左转方向
X轴
Y轴
(0,0)
右转方向
左转方向
前进方向
后退方向
9.1.1 turtle库常用函数
python
(1)绘图窗口创建
turtle.setup()方法用来设置绘图窗口的大小和位置。
width、height:表示绘图窗口的宽和高,表示以像素或窗口占据屏幕的百分比。
startx、starty:窗口位置距离屏幕边缘距离的像素,为正整数是表示窗口位置距离屏幕左边缘/上边缘的像素;为负整数时,表示窗口位置距离屏幕右边缘/下边缘的像素;为空,则表示窗口水平/垂直位于屏幕中心。
turtle.setup(width,height,startx,starty)
9.1.1 turtle库常用函数
python
【例9-1】创建绘图窗口。
注意:使用turtle模块实现图形化程序时setup()函数并不是必须的,如果程序未调用setup()函数,程序执行时会生成一个默认窗口
import turtle
turtle.setup(width=800,height=600,startx=100,starty=100)
代码功能:创建800*600的窗口,窗口距离屏幕左边缘100像素、上边缘100像素
9.1.1 turtle库常用函数
python
(2)设置画布的大小和背景色
turtle.screensize()方法来设置画布大小和背景颜色。
canvwidth:正整数,表示像素表示画布的宽度。
canvheight:正整数,以像素表示画布的高度。
bg:字符串,表示画布背景颜色。
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
如果画布大于窗体,窗体会出现滚动条,如果画布小于窗体,画布会填充整个窗体。
9.1.1 turtle库常用函数
python
turtle库中颜色的表示方法:
第二种,采用十六进制颜色值字符串表示,如“#FF0000”、“#FFFF00”等。
第一种,采用颜色英文单词表示,如“red”表示红色,“green”表示绿色,“yellow”表示黄色,等等。
第三种,RGB颜色元组,采元组格式(r, g, b),每个颜色取值0~255或者0~1。例如(0, 255, 0)或者(1, 0.5, 0)。
9.1.1 turtle库常用函数
python
例:【例9-2】设置画布大小和背景色。
import turtle
turtle.screensize(600,400,"green")
代码功能:创建600*400,背景色为绿色的画布
9.1.1 turtle库常用函数
python
即学即答:
turtle绘图中角度坐标系的绝对0度方向是( )。
A.画布正下方 B.画布正左方
C.画布正上方 D.画布正右方。
9.1.1 turtle库常用函数
python
(1)设置画笔的粗细
turtle.pensize():设置画笔的粗细。
width:正数,设置画笔绘制线条时的粗细,如未指定参数,则返回当前画笔的粗细
turtle.pensize(width)
2.画笔控制方法
9.1.1 turtle库常用函数
python
(2)设置画笔的颜色
turtle.color():来设置画笔的颜色。
color1:画笔的颜色
color2:填充的颜色
turtle.color(color1, color2)
9.1.1 turtle库常用函数
python
(3)画笔的抬起和落下
在移动时不画线,turtle.pu()将画笔抬起。
需要绘图时,再用turtle.pd()将画笔落下
turtle.pu() # 抬起画笔
turtle.pd() # 落下画笔
9.1.1 turtle库常用函数
python
【例9-3】画笔的控制。
import turtle
turtle.screensize(400,100,'black')
turtle.pensize(10) # 设置画笔粗细
turtle.color('red') # 设置画笔颜色
turtle.forward(50) #直接画直线
(1)画一条粗细为10、长度为50像素的红线
9.1.1 turtle库常用函数
python
turtle.pu()
turtle.forward(50) # 画笔抬起,移动画笔,不画直线
(2)挪动画笔50像素,不画线
turtle.pd()
turtle.pensize(5) # 设置画笔粗细
turtle.color('green') # 设置画笔颜色
turtle.forward(100) # 直接画直线
(3)画一条粗细为5、长度为100的绿线
9.1.1 turtle库常用函数
python
3.画笔运动函数
turle中画笔落下时,画笔才会在沿经过的路径绘制线条。
改变画笔位置时,画笔会在前后两个位置之间绘制图形。
9.1.1 turtle库常用函数
python
(1)画笔的前进和后退
turtle.forward()或者turtle.fd()方法:画笔的直线前进
turtle.backward() 或者turtle.bk()方法: 画笔的直线后退
turtle.forward(distance)或者turtle.fd(distance)
turtle.backward(distance) 或者turtle.bk(distance)
distance:画笔前进或后退的距离,不改变当前画笔的朝向。
9.1.1 turtle库常用函数
python
(2)画笔的左旋转和右旋转
turtle.left()方法:画笔的左旋转
turtle.right()方法:画笔的右旋转
tutle.left(angle)
tutle.right(angle)
angle:画笔的旋转角度。
右转120度
右转120度
9.1.1 turtle库常用函数
python
【例9-4】绘制等边三角形。
import turtle
turtle.setup(800,600)
turtle.screensize(800,600)
turtle.pensize(3) #设置画笔粗细
turtle.color('black','yellow')
turtle.begin_fill()
turtle.forward(100) #画第一条边直线
turtle.right(120) #向右旋转120度
turtle.forward(100) #画第二条边直线
turtle.right(120) #向右旋转120度
turtle.forward(100) #画第三条边直线
turtle.end_fill()
9.1.1 turtle库常用函数
python
(3)移动画笔到绝对位置
turtle.goto()函数:将画笔移动到绝对坐标位置
turtle.goto(x,y)
x、y:移动到的目标新坐标
9.1.1 turtle库常用函数
python
(4)设置画笔的移动速度:
turtle.speed()方法:画笔的移动速度
turtle.speed(speed)
speed:取值范围为[0,10]的整数。speed为0是表示没有动画效果(即速度最快)。速度为1~10时,数字越大,绘制的速度越快。
9.1.1 turtle库常用函数
python
(5)画圆、弧或其他规则图形
turtle.circle()函数:绘制圆形、弧线或其他规则图形
turtle.circle(radius, extent=None, steps=None)
radius:数值型数据,表示圆的半径,圆心在画笔的左侧randius个单位的位置。
extentd:数值型,表示绘制指定角度的圆弧。参数radius为正值时,沿逆时针方向绘制圆弧,否则沿顺时针方向绘制圆弧。绘制完毕后画笔的朝向有extent决定。
注意:turtle实际上是用内切正多边形来近似表示圆,其边数由steps参数指定。因此turtle.circle()函数也可以用来绘制正多边形。
9.1.1 turtle库常用函数
python
【例9-5】绘制圆、正多边形等图形。
import turtle
turtle.screensize(600,400)
turtle.pensize(5) #设置画笔粗细
turtle.speed(8) #设置画笔运行速度
turtle.penup()
turtle.goto(-200,0)
turtle.pendown()
turtle.circle(50) # 绘制半径为50的圆
9.1.1 turtle库常用函数
python
turtle.penup()
turtle.goto(0,0)
turtle.pendown()
turtle.circle(50,None,6) # 绘制对角线为100的六边形
turtle.penup()
turtle.goto(200,0)
turtle.pendown()
turtle.circle(50,180) #绘制半径为50的半圆弧
9.1.1 turtle库常用函数
python
边学边练:
在600*400的画布上绘制一个边长为100的正六边形,画笔粗细为3,填充其颜色为Orange,线条颜色为Purple,如下图所示。
9.1.1 turtle库常用函数
python
9.1.2 任务实现——绘制奥运五环标志
python
9.1.2 任务实现——绘制奥运五环标志
【任务描述】
小T查找了各项资料,得知奥运五环的大小和间距是按比例描绘的,假设圆环内圈半径为1,外圈半径为1.2,相邻圆环圆心水平距离为2.6,两排圆环圆心垂直距离为1.1。5个环套接组成,有蓝、黑、红、黄、绿5种颜色。环从左到右互相套接,上面是蓝、黑、红环,下面是黄、绿环。整个造型为一个底部小的规则梯形。在前面所学知识的基础上,跟随小T一起开始奥运五环标志的绘制吧。
python
9.1.2 任务实现——绘制奥运五环标志
【任务分析】
(1)确定奥运五环的比例,计算各环的圆心位置、半径、画笔的粗细。设圆环内半径为100(画圆时半径为110),则需设置画笔粗细为20。如果上面中间的黑环的坐标是(0,0),那么其左边蓝环的坐标为(-260,0),依次类推,右边红环坐标为(0,260),下面左边的黄环坐标(-130,-110),右边的绿环坐标(130,110),环间的坐标关系如图所示。
python
9.1.2 任务实现——绘制奥运五环标志
【任务分析】
(2)设置绘画窗口、画布、画笔粗细、五环的颜色等。
(3)找到各环坐标相对于(0,0)的规律,用循环语句计算各个圆的圆心,画出圆环。
(4)完成步骤(3)后各圆环间的交叉点均是下面的圆环覆盖上面的圆环。现需将图中标有“×”的交叉点进行修改以达到环间互相套接效果,即黄环与蓝环标“×”处交叉点被蓝环覆盖,黄环与黑环标“×”处交叉点被黑环覆盖,绿环与黑环标“×”处交叉点被黑环覆盖、绿环与红环的标“×”处交叉点被红覆盖,因此需要对蓝环、黑环、红环的部分弧线进行重画,覆盖黄、绿环。
python
9.1.2 任务实现——绘制奥运五环标志
计算各环的圆心位置、半径、画笔的粗细
用循环语句计算各个圆的圆心,画出圆环。
修正各圆环间的交叉点
(1)根据奥运五环的比例,计算各环的圆心位置、半径、画笔的粗细
(3)找到各环坐标相对于(0,0)的规律,用循环语句计算各个圆的圆心,画出圆环
(4)将图标有“×”的交叉点进行修改以达到环间互相套接效果
设置绘画窗口、画布、画笔粗细、五环的颜色
(2)设置绘画窗口、画布、画笔粗细、五环的颜色等
python
9.1.2 任务实现——绘制奥运五环标志
260
R100
R120
110
设圆环内半径为100(画圆时半径为110),则需设置画笔粗细为20
设上层中间的黑环的坐标是(0,0),那么其左边蓝环的坐标为(-260,0),右边红环坐标为(0,260),下层左边的黄环坐标(-130,-110),右边的绿环坐标(130,110)
(0,0)
(260,0)
(-260,0)
(-130,-110)
(130,-110)
(1)根据奥运五环的比例,计算各环的圆心位置、半径、画笔的粗细
【例9-6】绘制奥运五环标志。
python
9.1.2 任务实现——绘制奥运五环标志
import turtle
turtle.setup(width=0.8,height=0.8)
turtle.screensize(1200,800)
colors = ['blue', 'black', 'red', 'yellow', 'green'] # 五环颜色列表
turtle.speed(6)
turtle.width(20)
(2)设置绘画窗口、画布、画笔粗细、五环的颜色等
【例9-6】绘制奥运五环标志。
python
9.1.2 任务实现——绘制奥运五环标志
for i in range(5):
# 计算下一个环的坐标
if i<3:
x=260*(i-1)
y = 0
else:
x=260*(i-3)-130
y=-110
turtle.penup()
turtle.goto(x, y) # 将画笔移动到下一个圆环圆心
turtle.pendown()
turtle.color(colors[i]) # 设置画笔颜色
turtle.circle(110)
(3)找到各环坐标相对于(0,0)的规律,用循环语句计算各个圆的圆心,画出圆环
python
39
9.1.2 任务实现——绘制奥运五环标志
# 处理蓝、黄环交叉点
turtle.penup()
turtle.goto(-260,0)
# 抬起画笔画圆弧,未标“×”处交叉点不覆盖
turtle.circle(110,30)
turtle.pendown()
turtle.color('blue')
# 落下画笔,把标“×”处交叉点的弧线重画为蓝色
turtle.circle(110,90)
# 设置画笔方向指向东
turtle.seth(0)
(4)将图标有“×”的交叉点进行修改以达到环间互相套接效果(蓝、黄环交叉点;绿、红环交叉点)
# 处理绿、红环交叉点
turtle.penup()
turtle.goto(260,0)
turtle.circle(110,330)
turtle.pendown()
turtle.color('red')
turtle.circle(110,30)
turtle.seth(0)
python
9.1.2 任务实现——绘制奥运五环标志
# 处理绿、黑环交叉点
turtle.penup()
turtle.goto(0,0)
turtle.circle(110,60)
turtle.pendown()
turtle.color('black')
turtle.circle(110,60)
(4)将图标有“×”的交叉点进行修改以达到环间互相套接效果(绿、黑环交叉点;黄、黑环交叉点)
# 处理黄、黑环交叉点
turtle.penup()
turtle.circle(110,210)
turtle.pendown()
turtle.circle(110,30)
python
$$