turtle库
基本介绍
- 入门级图形绘制函数第三方库1
- turtle绘图原理:一只海龟在窗体中行走,路径便是绘制的图形
绘图窗体布局
turtle的绘图窗体是一个画布空间,最小单位是像素
在使用turtle时分为屏幕坐标系和窗体坐标系
绘图窗体函数 | 描述 |
---|---|
turtle.setup(width,height,startx,starty) | 可以使用setup()函数设置窗体大小和相对屏幕的位置(默认位于屏幕中央),其中startx和starty两个参数可选 |
画笔控制
函数 | 别名 | 描述 |
---|---|---|
turtle.penup() | turtle.pu() | 提起画笔(常用于移动海龟位置,并不在画布上显示路径) |
turlte.pendown() | turtle.pd() | 落下画笔(与penup()函数成对出现) |
turtle.pensize(width)/turtle.width(width) | 用于设置画笔宽度 | |
turtle.pencolor(color) | 设置画笔颜色(color为颜色字符串或RGB数值2) | |
turtle.speed(speed) | 设置画笔移动速度,范围取[0-10]的整数,数字越快速度越快,0最快 |
运动控制
turtle绘图体系中包含两种坐标体系:绝对坐标和海龟坐标
绝对坐标在绝对坐标系下的坐标体系,而海龟角度则是根据海龟的视角的角度体系
绝对坐标下运动控制函数 | 描述 |
---|---|
turtle.goto(x,y) /turtle.setpos(x,y) | 海龟移动到坐标(x,y)处 |
海龟坐标下运动控制函数 | 别名 | 描述 |
---|---|---|
turtle.forward(d) | turtle.fd(d) | 海龟前进d个像素 |
turtle.backward(d) | turtle,bk(d) | 海龟后退d个像素 |
turtle.circle(r,angle,steps) | 海龟沿半径为r的圆前进(angle/360) 个圆周,即画圆圈3 |
方向控制
turtle库中包含两种角度体系:绝对角度和海龟角度
其中绝对角度在绝对坐标系下的角度体系,而海龟角度则是根据海龟的视角的角度体系
绝对角度方向控制函数 | 描述 |
---|---|
turtle.seth(angle) | 改变海龟前进角度,不使海龟前进,angle为绝对角度 |
海龟角度方向控制函数 | 描述 |
---|---|
turtle.left(angle) | 控制海龟向左转角度angle(angle是相对于海龟前进的角度,并不使海龟前进) |
turtle.right(angle) | 控制海龟向右转角度angle(同上) |
RGB色彩体系
RGB指红蓝绿三个通道的颜色组合,覆盖人类视力能够感知的所有颜色,每个颜色的取值范围为整数(0-255)或小数(0-1)
turtle的RGB色彩模式默认采用小数值,可以切换为整数值:turtle.colormode(mode)
mode=1,小数模式,修改颜色使用RGB小数值
mode=255,整数模式,修改颜色使用RGB整数值
颜色填充
函数 | 描述 |
---|---|
turtle.begin_fill() | 开始填充 |
turtle.fillcolor(color) | 填充颜色 |
turtle.end_fill() | 结束填充 |
turtle.filling() | 判断是否为填充状态 |
其它函数
设置画笔
函数 | 描述 |
---|---|
turtle.hideturtle() | 隐藏画笔 |
turtle.showturtle() | 显示画笔 |
turtle.delay() | 设置并返回绘图延迟 |
turtle.dot(r,color) | 绘制半径为r,颜色为color的圆点 |
turtle.reset() | 从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值 |
turtle.clear() | 从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响 |
turtle.setx(x) | 设置海龟的横坐标为 x,纵坐标保持不变 |
turtle.sety(y) | 设置海龟的纵坐标为 y,横坐标保持不变 |
获取海龟(画笔)状态
函数 | 描述 |
---|---|
turtle.home() | 设置当前画笔位置为原点,朝向东 |
turtle.position() | 获取海龟当前位置 |
turtle. towards(x,y) | 从海龟位置到到 (x,y)的矢量到海龟初始朝向的矢量的夹角。 |
turtle.xcor() | x坐标 |
turtle.ycor() | y坐标 |
turtle.heading() | 返回海龟朝向角度 |
turtle.distance(x,y) | 返回从海龟位置到 (x,y)的单位距离 |
turtle绘图示例
示例1:python蟒蛇绘制
import turtle
turtle.setup(700,500)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor('purple')
for i in range(4):
turtle.circle(40,80)
turtle.circle(-40,80)
turtle.circle(40,40)
turtle.fd(40)
turtle.circle(16,180)
turtle.fd(40*2/3)
turtle.done()
示例2:七彩车轮
iimport turtle
import random
turtle.setup(800,400)
angle=36
color=['pink','purple','green','cyan','gold','brown','yellow','blue']
for i in range(10):
turtle.pensize(10)
pencolor=color[random.randint(0,7)]
turtle.pencolor(pencolor)
turtle.fd(180)
if i==9:
turtle.left(angle)
turtle.penup()
turtle.goto(0,-180)
turtle.pd()
turtle.circle(180)
else:
turtle.penup()
turtle.goto(0,0)
turtle.pd()
turtle.left(angle)
turtle.circle(180)
turtle.done()
示例3:六芒星
import turtle
import math
turtle.pensize(4)
turtle.pencolor('brown')
# 绘制小六边形
turtle.left(30)
for i in range(6):
turtle.fd(50)
turtle.left(60)
# 调整画笔状态,准备绘制大六边形
turtle.penup()
turtle.goto(0,-50)
turtle.pendown()
# 大六边形
for i in range(6):
turtle.fd(100)
turtle.left(60)
# 绘制小六角星
turtle.left(30)
for i in range(3):
turtle.fd(100*(math.sqrt(3)))
turtle.left(120)
turtle.right(60)
turtle.pu()
turtle.circle(100,60)
turtle.pd()
turtle.left(60)
for i in range(3):
turtle.fd(100*(math.sqrt(3)))
turtle.left(120)
# 调整画笔状态,准备绘制第一个大六角星
turtle.right(90)
turtle.pu()
turtle.goto(0,-100)
turtle.pd()
turtle.left(30)
# 第一个大六角星
for i in range(3):
turtle.fd(150*(math.sqrt(3)))
turtle.left(120)
turtle.right(60)
turtle.circle(150)
turtle.circle(150,60)
turtle.left(60)
for i in range(3):
turtle.fd(150*(math.sqrt(3)))
turtle.left(120)
# 调整画笔状态,准备绘制第二个大六角星
turtle.right(60)
turtle.circle(150,30)
turtle.pensize(1)
turtle.left(60)
# 第二个大六角星
for i in range(3):
turtle.fd(150*(math.sqrt(3)))
turtle.left(120)
turtle.right(60)
turtle.circle(150,60)
turtle.left(60)
for i in range(3):
turtle.fd(150*(math.sqrt(3)))
turtle.left(120)
# 调整画笔状态,准备绘制六连环
turtle.pu()
turtle.goto(0,50)
turtle.pd()
# 六连环绘制
turtle.color('black')
for i in range(6):
turtle.circle(75)
turtle.left(60)
turtle.done()