前言
海龟绘图很适合用来引导孩子学习编程。 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。。
一、turtle海龟绘图
1.了解海龟绘图的来源
2.掌握turtle库的基本方法
海龟绘图概述
-
Python语言标准库之一
标准库:随解释器直接安装到操作系统中的功能模块
第三方:需要经过安装才能使用的功能模块
库Library、包package、模块Module,统称模块。
入门级的图形绘制函数库
海龟坐标体系
-
turtle空间坐标体系
-
RGB色彩体系
turtle库基本方法
海龟动作
- 移动和绘制
方法 | 解释 |
---|---|
forward() | fd() | 前进 |
backward() | bk() | back() | 后退 |
right()| rt() | 右转 |
left()| lt() | 左转 |
goto()| setpostion() | 前往/定位 |
setx() | 设置x坐标 |
sety() | 设置y坐标 |
seth() | 设置朝向 |
home() | 返回原点 |
-------------- | -------- |
circle() | 画圆 |
dot() | 画点 |
stamp() | 印章 |
cleanstamp() | 清除印章 |
undo | 撤销 |
- 获取海龟状态
position()| pos() | 位置 |
---|---|
towards() | 目标方向 |
xcor() | x坐标 |
ycor() | y坐标 |
heading() | 朝向 |
distance() | 距离 |
画笔控制
- 绘图状态
pendown() |pd() | down() | 画笔落下 |
---|---|
penup()|pu() | up() | 画笔抬起 |
pensize() | width() | 画笔粗细 |
pen() | 画笔 |
isdown() | 画笔是否落下 |
- 颜色控制
color() | 颜色 |
---|---|
pencolor() | 画笔颜色 |
fillcolor() | 填充颜色 |
- 填充
filling() | 是否填充 |
---|---|
begin_fill() | 开始填充 |
end_fill() | 结束填充 |
二、Python图形绘制
通过turtle绘画图形
- 绘制五角星
#利用fd和rt方法即可
from turtle import *
for i in range(5):
fd(200)
rt(144)#内角为36
hideturtle()
- 绘制正五边形
#seth和fd方法
import turtle
turtle.pensize(2)
d=72
for i in range(5):
turtle.seth(d)
d+=72
turtle.fd(200)
turtle.hideturtle()
- 四瓣花图形
#seth和circle方法
import turtle as t
turtle.color('black','red')
turtle.begin_fill()
for i in range(4):
t.seth(90*(i+1))
t.circle(50,90)
t.seth(-90+i*90)
t.circle(50,90)
turtle.end_fill()
turtle.hideturtle()
- 铜币
import turtle
turtle.pensize(2)
for i in range(4):
turtle.fd(200)
turtle.left(90)
turtle.left(-45)
turtle.circle(100*pow(2,0.5))
- 爱心
import turtle as t
#
def curvemove():
for i in range(200):
t.rt(1)
t.fd(1)
t.hideturtle()
t.color('red')
t.pensize(2)
t.begin_fill()
t.lt(140)
t.fd(111.65)
curvemove()
t.lt(120)
curvemove()
t.fd(111.65)
t.end_fill()
t.penup()
t.goto(-27,85)
t.pendown()
- 直方图
import turtle as t
ls = [69, 292, 33, 131, 61, 254]
X_len = 400
Y_len = 300
x0 = -200
y0 = -100
t.penup()
t.goto(x0, y0)
t.pendown()
#绘画坐标轴
t.fd(X_len)
t.fd(-X_len)
t.seth(90)
t.fd(Y_len)
t.pencolor('red')
t.pensize(5)
for i in range(len(ls)):
t.penup()
t.goto(x0 + (i+1)*50, -100)
t.seth(90)
t.pendown()
t.fd(ls[i])
t.done()
- 太阳花
import turtle
turtle.color('red','yellow')
turtle.begin_fill()
for i in range(36):
turtle.fd(200)
turtle.left(170)
turtle.end_fill()
三、绘画小黄人
用面向对象方法结合turtle库,绘画小黄人
#encoding=utf-8
import turtle as t
class DrawYellowpeople(object):
#画布初始化
def __init__(self):
wn = t.Screen()
t.colormode(255)
t.hideturtle()
t.speed(15)#控制画笔速度
#定位
def Dw(self,x,y):
t.penup()
t.goto(x,y)
t.pendown()
#画身体
def mkbody(self):
t.penup()
t.pensize(4)
t.goto(100, 0)
t.pendown()
t.left(90)
t.color((0, 0, 0), (255, 255, 0))
t.begin_fill()
t.forward(200)
t.circle(100, 180)
t.forward(200)
t.circle(100, 180)
t.end_fill()
#画眼睛框
def mkclass(self):
t.pensize(12)
t.penup()
t.goto(-100, 200)
t.pendown()
t.right(100)
t.circle(500, 23)
t.pensize(3)
#画眼睛
def mkeye(self,x,y,z):
t.seth(x)
t.color("black", "white")
t.begin_fill()
t.circle(30)
t.end_fill()
t.penup()
t.goto(y, 200)
t.pendown()
t.color("black", "black")
t.begin_fill()
t.circle(15)
t.end_fill()
#点光
t.penup()
t.goto(z, 205)
t.color("black", "white")
t.begin_fill()
t.circle(5)
t.end_fill()
#画嘴巴
def mkmouth(self):
t.seth(270)
t.color("black", "white")
t.begin_fill()
t.circle(20, 180)
t.left(90)
t.forward(40)
t.end_fill()
#画裤子
def mktrouse(self):
t.seth(0)
t.color("black", "blue")
t.begin_fill()
t.forward(20)
t.left(90)
t.forward(40)
t.right(90)
t.forward(160)
t.right(90)
t.forward(40)
t.left(90)
t.forward(20)
t.seth(270)
t.penup()
t.goto(-100, 0)
t.circle(100, 180)
t.end_fill()
#裤腰
def mktrouseby(self,x,y,z,e):
t.color("black", "blue")
t.begin_fill()
t.seth(x)
t.forward(15)
t.left(y)
t.forward(60)
t.seth(270)
t.forward(15)
t.left(z)
t.forward(50)
t.end_fill()
t.left(180)
t.goto(e, 30)
t.dot()
#脚
def mkfoot(self,x,y,z,w,l):
t.seth(270)
t.color("black", "black")
t.begin_fill()
t.forward(30)
t.left(x)
t.forward(40)
t.seth(20)
t.circle(10, y)
t.circle(400, w)
t.seth(90)
t.forward(l)
t.goto(z, -100)
t.end_fill()
#画手
def mkhands(self,x,y,z):
t.seth(x)
t.color("black", "yellow")
t.begin_fill()
t.forward(40)
t.left(y)
t.forward(z)
t.seth(90)
t.forward(50)
t.end_fill()
#画心图案
def mkheart(self):
t.color("yellow")
t.begin_fill()
t.seth(45)
t.forward(20)
t.circle(10, 180)
t.right(90)
t.circle(10, 180)
t.forward(20)
t.end_fill()
#画口袋
def mkbag(self):
t.penup()
t.color("black")
t.goto(-100, -20)
t.pendown()
t.circle(30, 90)
t.penup()
t.goto(100, -20)
t.pendown()
t.circle(30, -90)
#画头发
def mkhair(self,x):
t.penup()
t.goto(2, 300)
t.pendown()
t.begin_fill()
t.seth(x)
t.circle(100, 40)
t.end_fill()
if __name__ == '__main__':
E=DrawYellowpeople()
E.mkbody()#身体
E.mkclass()#眼睛框
E.Dw(0,200)
E.mkeye(270,15,35)#右眼
E.Dw(0,200)
E.mkeye(90,-15,-35)#左眼
E.Dw(-20,100)
E.mkmouth()
E.Dw(-100,0)
E.mktrouse()#裤子
E.Dw(-70,20)
E.mktrouseby(45,90,40,-70)#左裤带
E.Dw(70,20)
E.mktrouseby(135,-90,-40,70)#右裤带
E.Dw(4,-100)
E.Dw(4,-100)
E.mkfoot(90,180,4,2,20)#右脚
E.Dw(-4,-100)
E.mkfoot(-90,-225,-4,-3,21)#左脚
E.Dw(-100,50)
E.mkhands(225,90,35)#右手
E.Dw(100, 50)
E.mkhands(315, -90, 36)#左手
E.Dw(0,-100)
t.forward(30)
E.Dw(0,-20)
E.mkheart()#心图案
E.mkbag()#口袋
E.mkhair(135)#左头发
E.mkhair(45)#右头发
t.done()
习题巩固
1.下面绘制的图形是()
import turtle as t
for i in range(1,7):
t.fd(50)
t.lt(60)
A.正方形
B.六边形
C.三角形
D.五角星
2.下面选项不能改变turtle绘制方向的是()
A.turtle.open()
B.turtle.left()
C.turtle.fd()
D.turtle.seth()
3.turtle风轮绘制
使用turtle库,绘制一个风轮效果,其中,每个风轮内角为45度,风轮边长150像素。
提示:turtle.goto(x,y)函数,能够将turtle画笔移动到坐标(x,y)
4.turtle叠边形绘制
使用turtle库,绘制一个叠边形,其中,叠边形内角为100度,边为100px。
5.turtle库中控制颜色的函数是()
A right()
B pendown()
C goto()
D pencolor()
6.turtle库中控制顺时针转的函数是()
A penup()
B set()
C right()
D pencolor()
7.以下关于turtle库的描述,错误的是()
A 在import turtle 之后,可以用turtle.cirlcle()语句画一个圆圈
B seth(x)是setheading(x)函数的别名,让画笔旋转x角度
C 可以用import turtle 来导入turtle库函数
D home()函数设置当前画笔位置到原点,方向朝上
8.turtle画图结束后,让画面停顿下来,不立即关掉窗口的方法是()
A turtle.setup()
B turtle.done()
C turtle.penup()
D turt(le.clear()
答案
-
B 根据次数(6)即可确定绘画是一个六边形
-
A left是向左、fd是直行、seth是调整角度 唯有open不是控制方向,所以选择A
-
根据提示,绘画风轮,从turtle.circle()、goto()出发,可编写代码如下
import turtle as t
for i in range(4):
t.fd(150)
t.rt(90)
t.circle(-150,45)
t.goto(0,0)
t.lt(45)
t.done()
4.绘制叠边形可以从绘画多边形角度出发
import turtle as t
for i in range(8):
t.fd(100)
t.lt(80)
5.D 控制颜色的函数是pencolor
6.C penup即抬起画笔,seth是设置朝向,pencolor()即是颜色.
7.D home()函数是设置当前画笔位置到原点,方向朝东
8.B 画图结束后,让画面停顿下来,通过done()函数即可
注:Python基础课件完整电子书版可添加下面微信获取