声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。
4.6 turtle模块
python是一门灵活而强大的语言,它也可以很方便地实现图形绘制。python中提供了turtle模块用于实现图形绘制。
4.6.1 基本介绍
使用turtle进行图形绘制要先了解以下几个方面:窗体布局、空间坐标系、色彩体系。
(1)窗体布局
窗体就是turtle作图的窗口,turtle模块提供了turtle.setup()函数来创建窗口。具体使用如下:
import turtleturtle.setup(width=300, height=200, startx=100, starty=100)'''
turtle.setup函数规定的绘制图形的窗口,但它不是绘制图形必须的,也可以直接画图。
width,规定了窗体的宽度,是必传参数;
height,规定了窗体的高度,是必传参数;
startx,规定了窗体左边与屏幕左边的边距,是可选参数;
starty,规定了窗体上边与屏幕上边的边距,是可选参数。
'''
(2)空间坐标系
使用turtle画图本质上是虚拟控制画笔触点(称为海龟)在屏幕上的移动,因此需要有坐标系的概念。turtle中支持三种坐标系:绝对坐标系、相对坐标系(海龟坐标系)、角度坐标系。
绝对坐标系:以画面中心为(0, 0)原点,以屏幕向右与向上分别为x方向与y方向,在直角坐标系下控制海龟在屏幕上的移动。可以使用turtle.goto(x, y)来控制海龟到达指定的位置。
相对坐标系:以海龟自身为原点,控制海龟的移动。如:turtle.fd(d),使用海龟前进距离d;turtle.bk(d)使海龟后退距离d;turtle.circle(r, angle),使海龟以半径r右转某个角度。
角度坐标系:是指一个绝对的角度坐标系,以屏幕的向右为0度,逆时针旋转为正,顺时针旋转为负。例如:turtle.seth(angle),改变海龟的前进角度,但不绘制图形;turtle.left(angle),向左转某个角度;turtle.right(angle),向右转某个角度。
(3)色彩体系
turtle要想画出颜色不同的线条需要对颜色参数进行控制,最常用的色彩体系是RGB色彩体系。
RGB色彩体系是由红、绿、蓝三种通道颜色组成混合色的调色体系。下面是常用见色彩的RGB值:
色彩名 | 整体RGB值 | 小数RGB值 |
---|---|---|
white | 255,255,255 | 1,1,1 |
red | 255,0,0 | 1,0,0 |
green | 0,255,0 | 0,1,0 |
blue | 0,0,255 | 0,0,1 |
yellow | 255,255,0 | 1,1,0 |
magenta | 255,0,255 | 1,0,1 |
cyan | 0,255,255 | 0,1,1 |
black | 0,0,0 | 0,0,0 |
turtle使用turtle.colormode(mode)来改变色彩控制模式(使用小数RGB或整数RGB)。取mode=1.0则表示使用小数模式;即mode=255则表示使用整数模式;默认采用小数值来定义色彩。
4.6.2 语法元素分析
turtle库中提供了许多函数来控制海龟的行为,以到达画出指定图形的目的。这些函数大体可以分为三类:画笔控制函数、运动控制函数和方向控制函数。
(1)画笔控制函数
画笔控制函数即控制画笔操作,画笔操作执行后一直有效,一般成对出现。常用的画笔控制函数有:
- turtle.penup():别名turtle.pu()。抬起画笔,抬起画笔后海龟不会在画布上留下轨迹;
- turtle.pendown():别名turtle.pd()。落下画笔,落下画笔后海龟会在画布上留下轨迹;
- turtle.pensize(width):别名turtle.width(width)。决定画笔的粗细;
- turtle.pencolor(color):决定画笔的颜色。color可以是颜色的名称字符串(如"red"),也可以是RGB值(如1,0,1或元组形式(1,0,1))。
(2)运动控制函数
运动控制函数用于控制海龟的行进,走直线或走曲线。常用的运动控制函数如下:
- turtle.forword(d):别名turtle.fd(d)。向前行进,海龟走直线,d为行进距离;
- turtle.circle(r, extent, steps):根据半径r绘制角度为extent角度的弧形。steps表示圆内接多边形的边数,可用于画内接多边形。r为+,则海龟向右侧画圆;r为-,则海龟向左侧画圆。
(3)方向控制函数
方向控制函数用于控制海龟的运动方向,可以使用绝对角度或相对角度。常用函数如下:
- turtle.setheading(angle):改变行进方向,即海龟的方向转为绝对角度值;
- turtle.left(angle):向左转,改变相对角度值;
- turtle.right(angle):向右转,改变相对角度值。
(4)其他函数
turtle.done():写在代码的最后一行,保证程序执行完毕后不会自动退出窗口,而是使用手动退出;若不加此行,则自动退出。
turtle.hideturtle():在画图完毕后隐藏海龟,以免挡住图上的某些点。
4.6.3 示例:科赫雪花图案绘制
科赫雪花是一种典型的分形几何图案。它的绘制过程如下:
- 取一条长为l的直线,即为0阶科赫曲线;
- 取直线的中间1/3长度,改成一个60度的锐角,即为一阶科赫曲线;
- 对一阶科赫曲线上的每段直线重复相同的操作,即得二阶科赫曲线;
- 循环多次,即可得n阶科赫曲线…
可以看到科赫雪花的绘制过程是典型的递归过程,最终我们要画的第n阶线段的长度,都取决于n-1阶线段的长度。绘制的代码如下:
import turtle# 定义绘制科赫雪花的递归函数
def koch(size, n):if n==0:turtle.fd(size)else:for angle in [0, 60, -120, 60]:turtle.left(angle)koch(size/3, n-1)# 定义一个函数,调用递归函数,并执行绘制过程
def main():turtle.setup(600, 600)turtle.penup()turtle.goto(-200, 100)turtle.pendown()turtle.pensize(2)level=3koch(400, level)turtle.right(120) # 转角度后再次绘制,重复两次以获得封闭的科赫雪花图形koch(400, level)turtle.right(120)koch(400, level)turtle.hideturtle()main() # 调用主函数,开始绘制