Python绘制图形库turtle
1.介绍: turtle库根据一组函数指令的控制,在平面坐标系中移动,从而它爬行的路径上绘制图形。
2.原理:turtle(海龟)由程序控制在画布上游走,走过的轨迹形成绘制的图形,可以变换海龟的颜色和宽度等,这里海龟即画笔。
1、turtle的绘图窗体布局
绘图窗体,在操作系统上表现为一个窗口,是turtle的一个画布空间。
窗口中最小单位是像素。
例如:绘制一个100单位长度的直线,指100像素长的直线。
设置启动窗体的位置和大小;
turtle.setup(width, height, startx, starty)
参数说明:
width和height:
如果是整数,则为像素大小;
如果是浮点数则为屏幕的百分比。
width默认为屏幕的50%,
height默认为屏幕的70%。
startx和starty:
如果为正,则为距屏幕左侧或顶部的像素长度;
如果为负,则为举例屏幕右侧或底部的像素长度;
如果为None,则水平或垂直居中。
2、turtle空间坐标体系
turtle窗体内部的空间坐标体系,包含绝对坐标
和海龟坐标
。
2.1 绝对坐标
画布的正中心作为绝对坐标的(0,0)。
窗体的右方向为x轴,上方向为y轴,构成绝对标系。
相关函数:
turtle. goto(x, y) 该函数是让任意位置的海龟,到达指定位置
2.2 海龟坐标
无论海龟朝向什么方向,海龟当前行进方向都叫前进方向,反方向是后退方向,左侧是左侧方向,右侧是右侧方向。
相关函数:
turtle.fd(d),前进d像素距离;
turtle.bk(d),后退d像素距离,海龟方向不变;
turtle.circle(r, angle),以海龟左侧为原点,半径为r像素,行进angle度圆形弧度,并且海龟方向改变angle度,如果没有angle,行进一个完整的圆。
注意: d、r、 angle允许负数,意为反方向。
3、角度坐标系
分为绝对角度
和海龟角度
。
3.1 绝对角度
x正轴表示0度或360度
y正轴表示90度或-270度
x负轴表示180度或-180度
y负轴表示270度或-90度
相关函数:
turtle.seth(angle) 用于改变海龟行进方向,只改变方向不行进
3.2 海龟角度
使用左右的方式来改变行进角度。
相关函数:
turtle.left(angle) 向左改变行进方向
turtle.right(angle) 向右改变行进方向
4、turtle的RGB色彩体系
采用计算机最常见的RGB色彩体系,取值范围可以是0-255
的整数,也可以是0-1
的小数。
常见的RGB色彩表
turtle库默认采用RGB的小数值
来表示颜色,也可以使用函数
turtle.colormode(mode)
切换RGB数值模式。
当mode为1.0时,表示采用·小数值·来表现RGB。
当mode为255时,表示采用·整数值·来表现RGB。
与颜色设置相关的函数:
turtle.color()
turtle. pencolor()
turtle.fillcolor()
科赫曲线的生成
步骤:
1.将线段分成三等份(AC,CD,DB)
2.以CD为底,向外(内外随意)画一个等边三角形DMC3.将线段CD移去,如图4-1-9所示
4.分别对AC,CM,MD,DB重复1~3
科赫雪花是以等边三角形三边
生成的科赫曲线组成的。
import turtle
turtle.color('Blue') #设置turtle的颜色为蓝色 默认是黑色
turtle.setup(800,500) #设置窗口的初始化大小
turtle.penup() #把画笔开启
turtle.goto(-300,100) #移动绘制曲线的位置,从(-300,100)这个坐标开始进行绘制
turtle.pendown() #把画笔移动到指定位置后,再把画笔放下 目的是保证我们移动画笔的过程当中,在我们窗口上不要留下痕迹
turtle.pensize(3) #设置画笔的尺寸 粗细
a = [0,60,-120,60]#定义一个角度的列表,主要用来帮助我们绘图的时候海龟的一个移动方向
# 0表示开始的绘制方向(黄色线段),60表示往左旋转60度(绿色线段),-120表示在绿色线段方向的基础上
# 向左旋转-120度(紫色线段) 60表示向左转60度绘制红色线段
def koch(len,n,anglelist): #绘制曲线每条边的长度,绘制曲线的阶数,转换的角度列表
'''
绘制N阶科赫曲线
:param len: 边长
:param n:阶数
:param anglelist:角度列表
:return: NULL
'''
if n == 0:
turtle.fd(len) #当n等于0时直接绘制一条直线
else:
for angle in anglelist: #根据旋转的角度绘制
turtle.left(angle) #向左转
koch(len/3,n-1,anglelist)#每次绘制都会变为原来的1/3
koch(300,3,a)
turtle.penup() #绘制完曲线后要改变初始位置,不然曲线会重叠
turtle.goto(-300,0)
turtle.pendown()
koch(300,4,a) #边长为300 绘制一个4阶的科赫曲线
turtle.penup()
turtle.goto(-300,-100)
turtle.pendown() #5阶的科赫曲线
koch(300,5,a)
turtle.done() #为了让窗口一直处在可见的状态
运行结果为:
绘制科赫雪花
import turtle
turtle.color('Blue') #画笔颜色设置为蓝色
turtle.setup(800,500) #设置主窗体大小
turtle.penup() #抬起画笔
turtle.goto(-300,100) #移动坐标
turtle.pendown() #落下画笔
turtle.pensize(3) #设置画笔尺寸
anglelist=[0,60,-120,60] #转换角度列表
#定义一个科赫曲线
def koch(len,n): #因为转换的角度,实际上每次都是一样的,没有发生变化,所以可以不用参数,直接进行传递,作为一个全局变量来使用
'''
绘制科赫曲线
:param len:边长
:param n: 阶数
:return: NULL
'''
if n == 0:#当阶数为0时画一条直线
turtle.fd(len)
else: #否则从角度列表里面取出来,每次进行角度的转换
for angle in anglelist:
turtle.left(angle)
koch(len/3,n-1)#每次进行分解时,要把他的边长缩小要除以3,阶数每次减1
# 调用科赫曲线函数
koch(300,3) #这时候画出来的时科赫曲线的一条边
# 三条边组成一个科赫雪花 每次绘制完一条曲线后,让它旋转120度,然后绘制吓一跳曲线,最后三条曲线连在一起成科赫雪花
turtle.right(120) #向右旋转120度后
koch(300,3) #再绘制一次曲线
turtle.right(120) #向右旋转120度后
koch(300,3) #再绘制一次曲线
turtle.done() #为了让窗口一直处在可见的状态
运行结果为: