赞
踩
海龟绘图很适合用来引导孩子学习编程。最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于1967 年所创造的 Logo 编程语言。请想象绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点。
首先了解下海龟绘图的坐标体系:
图中红点部分,就是海龟画笔的起点坐标(0,0),海龟的头部是x轴方向,为0度。看看这个坐标系的代码:
import turtle #写下坐标 turtle.write(turtle.position(),align="right") #画一个直径为10的红色圆点 turtle.dot(10,'red') #前进200个像素距离 turtle.forward(200) #盖上印章,默认为海龟的形状 turtle.stamp() #写上x,代表x轴 turtle.write("x") #写上坐标 turtle.write(turtle.position(),align="right") #返回原点 turtle.home() #海龟方向左转90度,也就是逆时针 turtle.left(90) #前进200 turtle.forward(200) turtle.stamp() turtle.write("y") turtle.write(turtle.position(),align="right") turtle.home() turtle.left(180) turtle.forward(200) turtle.write(turtle.position(),align="right") turtle.home() turtle.left(270) turtle.forward(200) turtle.write(turtle.position(),align="right") turtle.home() #为了保留图形,开启循环 turtle.done()
了解了坐标系,我们就能按照要求画出合适的图形,上面的事全部的流程,我们可以用循环简化代码。
import turtle #写下坐标 turtle.write(turtle.position(),align="right") #画一个直径为10的红色圆点 turtle.dot(10,'red') #前进200个像素距离 agel = 0 for i in ("xy"): turtle.left(agel) turtle.forward(200) turtle.stamp() turtle.write(i) turtle.write(turtle.position(),align="right") #后退400 turtle.backward(400) turtle.home() #角度增加 agel += 90 turtle.done()
下面我们了解一下turtle的各个画图工具函数:
移动和绘制
forward() | fd() 前进
backward() | bk() | back() 后退
right() | rt() 右转
left() | lt() 左转
goto() | setpos() | setposition() 前往/定位
setx() 设置 x 坐标
sety() 设置 y 坐标
setheading() | seth() 设置朝向
home() 返回原点
circle() 画圆
dot() 画点
stamp() 印章
clearstamp() 清除印章
clearstamps() 清除多个印章
undo() 撤消
speed() 速度
获取海龟的状态
position() | pos() 位置
towards() 目标方向
xcor() x 坐标
ycor() y 坐标
heading() 朝向
distance() 距离
设置与度量单位
degrees() 角度
radians() 弧度
绘图状态
pendown() | pd() | down() 画笔落下
penup() | pu() | up() 画笔抬起
pensize() | width() 画笔粗细
pen() 画笔
isdown() 画笔是否落下
颜色控制
color() 颜色
pencolor() 画笔颜色
fillcolor() 填充颜色
填充
filling() 是否填充
begin_fill() 开始填充
end_fill() 结束填充
更多绘图控制
reset() 重置
clear() 清空
write() 书写
可见性
showturtle() | st() 显示海龟
hideturtle() | ht() 隐藏海龟
isvisible() 是否可见
外观
shape() 形状
resizemode() 大小调整模式
shapesize() | turtlesize() 形状大小
shearfactor() 剪切因子
settiltangle() 设置倾角
tiltangle() 倾角
tilt() 倾斜
shapetransform() 变形
get_shapepoly() 获取形状多边形
使用事件
onclick() 当鼠标点击
onrelease() 当鼠标释放
ondrag() 当鼠标拖动
特殊海龟方法
begin_poly() 开始记录多边形
end_poly() 结束记录多边形
get_poly() 获取多边形
clone() 克隆
getturtle() | getpen() 获取海龟画笔
getscreen() 获取屏幕
setundobuffer() 设置撤消缓冲区
undobufferentries() 撤消缓冲区条目数
窗口控制
bgcolor() 背景颜色
bgpic() 背景图片
clearscreen()
resetscreen()
screensize() 屏幕大小
setworldcoordinates() 设置世界坐标系
动画控制
delay() 延迟
tracer() 追踪
update() 更新
使用屏幕事件
listen() 监听
onkey() | onkeyrelease() 当键盘按下并释放
onkeypress() 当键盘按下
onclick() | onscreenclick() 当点击屏幕
ontimer() 当达到定时
mainloop() | done() 主循环
设置与特殊方法
mode()
colormode() 颜色模式
getcanvas() 获取画布
getshapes() 获取形状
register_shape() | addshape() 添加形状
turtles() 所有海龟
window_height() 窗口高度
window_width() 窗口宽度
输入方法
textinput() 文本输入
numinput() 数字输入
Screen 专有方法
bye() 退出
exitonclick() 当点击时退出
setup() 设置
title() 标题
下面我们通过示例来了解绘图的各个方法:
为了方便学习,先画出一个虚线的坐标系,x,y方向都是±400,作为我们底图,通过坐标来研究各个函数的绘图结果
import turtle def coord(): angle = 0 for i in [(-400,0),(0,-400)]: turtle.penup() turtle.goto(*i) turtle.left(angle) for _ in range(40): #通过画笔抬起再放下画出虚线 turtle.pendown() turtle.forward(10) turtle.penup() turtle.forward(10) angle += 90 turtle.home() turtle.pendown()
首先请大家记住,在我们画图过程中,如果没有明确的指定坐标,角度,那我们所有的角度,位置都是相对的,相对当前海龟的位置和角度。
turtle.circle(radius, extent=None, steps=None)
参数
• radius -- 一个数值
• extent -- 一个数值 (或 None)
• steps -- 一个整型数 (或 None)
绘制一个 radius 指定半径的圆。圆心在海龟左边 radius 个单位;extent 为一个夹角,用来决定绘制
圆的一部分。如未指定 extent* 则绘制整个圆。如果 *extent 不是完整圆周,则以当前画笔位置为一
个端点绘制圆弧。如果 radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。最终海龟的朝
向会依据 extent 的值而改变。
圆实际是以其内切正多边形来近似表示的,其边的数量由 steps 指定。如果未指定边数则会自动确
定。此方法也可用来绘制正多边形。
import turtle #设置画图速度 turtle.speed('fast') #设置窗口标题 turtle.title("海龟绘图学习") #设置画笔粗细 turtle.pensize(3) #绘制虚线坐标系 def coord(): angle = 0 for i in [(-400,0),(0,-400)]: turtle.penup() turtle.goto(*i) turtle.left(angle) for _ in range(40): turtle.pendown() turtle.forward(10) turtle.penup() turtle.forward(10) angle += 90 turtle.home() turtle.pendown() coord() #画一个半径为100的圆形,注意圆心位置 turtle.circle(100) turtle.goto(0,100) turtle.dot(10,'red') turtle.write("这是圆心位置{}".format(turtle.pos())) turtle.done()
下面是通过circle函数化半圆只需更改部分参数即可,和多边形的示例:
#第二个参数改为180度画半圆,也可为复数,则顺时针画圆
turtle.circle(100,180)
#画六边形
turtle.circle(100,360,6)
#画三角形
turtle.circle(100,360,3)
turtle.goto(x, y=None)
turtle.setpos(x, y=None)
turtle.setposition(x, y=None)
参数
• x -- 一个数值或数值对/向量
• y -- 一个数值或 None
如果 y 为 None,x 应为一个表示坐标的数值对或Vec2D 类对象 (例如pos() 返回的对象).
海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。
turtle.speed(speed=None)
参数 speed -- 一个 0..10 范围内的整型数或速度字符串 (见下)
设置海龟移动的速度为 0..10 表示的整型数值。如未指定参数则返回当前速度。
如果输入数值大于 10 或小于 0.5 则速度设为 0。速度字符串与速度值的对应关系如下:
• ”fastest”: 0 最快
• ”fast”: 10 快
• ”normal”: 6 正常
• ”slow”: 3 慢
• ”slowest”: 1 最慢
速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。
注意: speed = 0 表示 没有动画效果。forward/back 将使海龟向前/向后跳跃,同样的 left/right 将使海
龟立即改变朝向。
如果我们要画一个直角三角形怎么办,一个正方形怎么办,显然circle函数无法满足我们的所有要求,那就要利用角度和移动来绘画:
turtle.left(angle)
turtle.lt(angle)
参数 angle -- 一个数值 (整型或浮点型)
海龟左转 angle 个单位。(单位默认为角度,但可通过degrees() 和radians() 函数改变设置。)
角度的正负由海龟模式确定,参见mode()。
turtle.right(angle)
turtle.rt(angle)
参数 angle -- 一个数值 (整型或浮点型)
海龟右转 angle 个单位。(单位默认为角度,但可通过degrees() 和radians() 函数改变设置。)
角度的正负由海龟模式确定,参见mode()。
turtle.setheading(to_angle)
turtle.seth(to_angle)
参数 to_angle -- 一个数值 (整型或浮点型)
设置海龟的朝向为 to_angle。以下是以角度表示的几个常用方向:
标准模式 logo 模式
0 - 东 0 - 北
90 - 北 90 - 东
180 - 西 180 - 南
270 - 南 270 - 西
以上为三个调整海龟角度朝向的函数,我们大部分的图形都是要靠它们来完成的。
turtle.color("red") #平行四边形,夹角分别为60度,120度 #提起画笔 turtle.penup() #设置海龟坐标(150,150) turtle.setpos(150,150) #放下画笔开始绘画 turtle.pendown() #利用setheading,改变方向, turtle.fd(100) #角度为为对比x轴方向的偏移度数 turtle.setheading(60) turtle.fd(50) turtle.setheading(180) turtle.fd(100) turtle.setheading(240) turtle.fd(50) turtle.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。