课程来源:
MOOC网《python语言程序设计》嵩天。
https://www.icourse163.org/learn/BIT-268001?tid=1474324443#/learn/announce
第二周:python基本图形绘制
1.tutle绘图库介绍
turtle绘图库是 Python 标准库之一,用户能利用turtle绘图库编写代码来绘制各种图形。
基本原理
- 绘图窗口:turtle提供了一个绘图窗口,就像是一张画布。用户通过编写代码控制一只虚拟的 “海龟” 在这个画布上移动,“海龟” 经过的轨迹就会形成绘制的图形。
- 指令控制:用户通过调用turtle库中的函数来控制 “海龟” 的行为。
案例1:绘制正方形
import turtle
# 创建一个turtle对象
my_turtle = turtle.Turtle()
# 绘制一个正方形
for _ in range(4):
my_turtle.forward(100)
my_turtle.left(90)
# 保持绘图窗口显示
turtle.done()
案例2:绘制蟒蛇
# 导入turtle绘图库,import关键字用于引入模块import turtle
import turtle
# 设置绘图窗口的大小和位置,参数依次为:窗口宽度、窗口高度、窗口左上角x坐标、窗口左上角y坐标
turtle.setup(650, 350, 200, 200)
# 抬起画笔,之后移动画笔时不会绘制线条
turtle.penup()
# 画笔前进(forward的缩写)指定的距离,负数表示向当前方向的反方向移动
turtle.fd(-250)
# 放下画笔,之后移动画笔时会绘制线条
turtle.pendown()
# 设置画笔的宽度
turtle.pensize(25)
# 设置画笔的颜色为紫色
turtle.pencolor("purple")
# 设置海龟(画笔)的朝向,参数为角度,这里设置为 -40度
turtle.seth(-40)
# 使用for循环,循环4次for i in range(4):
# 绘制半径为40,圆心角为80度的圆弧,方向为逆时针
turtle.circle(40, 80)
# 绘制半径为 -40(负号表示圆心在画笔左侧),圆心角为80度的圆弧,方向为顺时针
turtle.circle(-40, 80)
# 绘制半径为40,圆心角为80/2(即40度)的圆弧,方向为逆时针
turtle.circle(40, 80 / 2)
# 画笔前进40个单位长度
turtle.fd(40)
# 绘制半径为16,圆心角为180度的圆弧,方向为逆时针
turtle.circle(16, 180)
# 画笔前进40 * 2/3个单位长度
turtle.fd(40 * 2 / 3)
# 保持绘图窗口显示,防止程序结束后窗口立即关闭
turtle.done()
2.使用方法
(1)turtle 绘图窗体布局
- 概念:turtle的画布空间,最小单位是像素
- 设置方法:通过turtle.setup()函数实现。它可以指定绘图窗口的宽度、高度,以及窗口在屏幕上的起始位置。
import turtle
# 设置窗口宽度为800像素,高度为600像素,窗口左上角在屏幕(100, 100)位置
turtle.setup(800, 600, 100, 100)
(2)turtle空间坐标体系
- 绝对坐标:以绘图窗口中心为原点 (0, 0),水平向右为 x 轴正方向,垂直向上为 y 轴正方向。使用turtle.goto(x, y)函数可将画笔移动到指定的绝对坐标位置。
import turtle
turtle.goto(100, 100) # 画笔移动到坐标(100, 100)处
- 相对坐标:基于当前画笔位置来确定新的位置。例如,turtle.fd(distance)函数使画笔沿当前方向前进指定距离,turtle.bk(distance)则沿当前方向后退指定距离;turtle.right(angle)和turtle.left(angle)分别使画笔顺时针、逆时针旋转指定角度。
import turtle
turtle.fd(100) # 画笔沿当前方向前进100像素
turtle.left(90) # 画笔逆时针旋转90度
(3)turtle角度坐标体系
- 绝对角度:以水平向右方向为 0 度,逆时针方向为角度增加方向。使用turtle.seth(angle)函数可设置画笔的绝对朝向角度。
import turtle
turtle.seth(45) # 将画笔方向设置为与水平向右方向成45度角
- 相对角度:通过left(angle)和right(angle)函数来改变画笔方向,它们基于当前画笔方向进行旋转。如left(30)表示画笔在当前方向基础上逆时针旋转 30 度。
(4)RGB色彩体系
- 概念:RGB指红蓝绿三个通道的颜色组合。RGB色取值范围0-255整数或0-1小数。
- 设置方法:
①直接使用颜色名称:如"red"、“green”、"blue"等常见颜色名称。
import turtle
turtle.pencolor("red") # 设置画笔颜色为红色
②RGB 整数值表示:使用(r, g, b)元组,其中 r、g、b 分别是 0 - 255 之间的整数,表示红、绿、蓝三种颜色的强度。
import turtle
turtle.pencolor((128, 0, 128)) # 设置画笔颜色为紫色
③ RGB 小数值表示:使用(r, g, b)元组,r、g、b 取值范围是 0.0 - 1.0,同样表示红、绿、蓝三种颜色的强度。
import turtle
turtle.pencolor((0.5, 0.5, 0.5)) # 设置画笔颜色为灰色
3.语法元素分析(待补充)
(1)库引用与import
库引用:扩充Python程序功能的方式
方法1:使用import保留字完成,采用<a>.<b>()
编码风格
import<库名>
<库名>.<函数名>(<函数参数>)
方法2:使用from和import保留字共同完成
from <库名>import<函数名>
from<库名>import *
<函数名>(<函数参数>)
(推荐!)方法3:使用import和as保留字共同完成
import<库名>as<库别名>
<库别名>.<函数名>(<函数参数>)
(2)turtle画笔函数
函数名 | 别名 | 功能 | 参数说明 | 示例(含注释) |
---|---|---|---|---|
pendown() | pd() | 放下画笔,使画笔移动时绘制线条 | 无 | python import turtle; t = turtle.Turtle(); t.penup(); t.forward(50); t.pendown(); t.forward(50) # 放下画笔后,向前移动50个单位并绘制线条 |
penup() | pu() | 抬起画笔,使画笔移动时不留下痕迹 | 无 | python import turtle; t = turtle.Turtle(); t.penup(); t.forward(50) # 抬起画笔,向前移动50个单位,不绘制线条 |
forward(distance) | fd(distance) | 使画笔沿着当前方向前进指定距离 | distance :前进的距离数值 | python import turtle; t = turtle.Turtle(); t.forward(100) # 画笔向前移动100个单位 |
backward(distance) | bk(distance) | 使画笔沿着当前方向后退指定距离 | distance :后退的距离数值 | python import turtle; t = turtle.Turtle(); t.backward(50) # 画笔向后移动50个单位 |
setheading(angle) | seth(angle) | 将画笔的方向设置为指定角度(以水平向右为0度,逆时针为正方向) | angle :要设置的角度数值 | python import turtle; t = turtle.Turtle(); t.seth(45) # 将画笔方向设置为45度 |
left(angle) | - | 使画笔逆时针旋转指定角度 | angle :旋转的角度数值 | python import turtle; t = turtle.Turtle(); t.left(90) # 画笔逆时针旋转90度 |
right(angle) | - | 使画笔顺时针旋转指定角度 | angle :旋转的角度数值 | python import turtle; t = turtle.Turtle(); t.right(30) # 画笔顺时针旋转30度 |
goto(x, y) | - | 将画笔移动到指定的坐标位置 | x :目标位置的横坐标y :目标位置的纵坐标 | python import turtle; t = turtle.Turtle(); t.goto(100, 50) # 画笔移动到坐标(100, 50)处 |
setx(x) | - | 将画笔的x坐标设置为指定值,y坐标保持不变 | x :要设置的x坐标值 | python import turtle; t = turtle.Turtle(); t.setx(200) # 将画笔的x坐标设为200 |
sety(y) | - | 将画笔的y坐标设置为指定值,x坐标保持不变 | y :要设置的y坐标值 | python import turtle; t = turtle.Turtle(); t.sety(-100) # 将画笔的y坐标设为 -100 |
pensize(width) | width(width) | 设置画笔的宽度 | width :画笔宽度数值 | python import turtle; t = turtle.Turtle(); t.pensize(5) # 设置画笔宽度为5 |
pencolor(color) | - | 设置画笔的颜色 | color :颜色名称、RGB元组或十六进制颜色码 | python import turtle; t = turtle.Turtle(); t.pencolor('red') # 设置画笔颜色为红色 |
speed(speed) | - | 设置画笔移动的速度 | speed :取值范围为0 - 10,0表示最快(无动画效果),1表示最慢,6为默认速度 | python import turtle; t = turtle.Turtle(); t.speed(2) # 设置画笔速度为2 |
circle(radius, extent=None, steps=None) | - | 绘制圆形或弧形 | radius :圆半径,正数圆心在画笔左侧,负数圆心在画笔右侧extent (可选):绘制弧形角度,默认画完整圆steps (可选):用指定直线段数近似绘制圆形或弧形 | python import turtle; t = turtle.Turtle(); t.circle(50); t.circle(80, 180); t.circle(40, steps = 10) # 分别绘制半径为50的完整圆形、半径为80角度为180度的弧形、半径为40由10条线段组成的近似圆形(十边形) |
(3)循环语句与range函数
循环语句:按照一定次数循环执行一组语句
for<变量>in range(<参数>)
<被循环执行的语句>
- <变量>表示每次循环的计数,0到<次数>-1
range()函数:产生循环计数序列
- range(N):产生 0到 N-1的整数序列,共N个。range(5)→0,1,2,3,4
- range(M,N)产生 M 到 N-1的整数序列,共N-M个。range(2,5)→2,3,4
-