Python的海龟 turtle 库使用详细介绍(画任意多边形,全网最详细)
学库,其实就是学数学,而且还能提高对数学和学习的兴趣。库还能够帮助孩子更好地理解几何学和数学概念,比如角度、比例、几何图形的性质等等,是中一个很有趣的库。
前言
库是中一个很有趣的库,可以用来绘制各种图形,比如直线、圆、正方形等等。掌握库的意义在于可以培养孩子的创造力和想象力,让他们通过编写代码来实现自己的创意,同时也可以提高他们的编程能力和逻辑思维能力。此外,库还能够帮助孩子更好地理解几何学和数学概念,比如角度、比例、几何图形的性质等等,学库其实就是学数学,但更有趣味性。
库介绍
库是的一个标准库,提供了一个绘图的海龟机器人,可以使用代码控制海龟机器人的移动和动作,从而实现绘制图形的功能。库支持绘制直线、圆、椭圆、曲线、填充颜色等功能,可以用来绘制各种各样的图形和图案。使用库可以加深对语言的理解和掌握,同时也可以进行艺术创作和教育活动。
内置了库。在1966年, 和Wally 发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟()在屏幕上绘图。海龟绘图( )后来被移植到各种高级语言中,内置了,基本上100%复制了原始的 的所有功能。
库的使用
使用前需先引入库,可以使用 from *或者 。前者使用方法不需要加,后者需要加。
简单示例:
import turtle# 创建一个Turtle对象
t = turtle.Turtle()#turtle.setup(width,height,startx,starty)
# 移动Turtle对象前进100步
t.forward(100)# 向左旋转Turtle对象90度
t.left(90)# 移动Turtle对象前进50步
t.forward(50)# 创建另一个Turtle对象
t2 = turtle.Turtle()# 移动Turtle对象t2前进80步
t2.forward(80)# 绘制线段连接两个Turtle对象的位置
t2.goto(t.xcor(), t.ycor())# 调用done()使得窗口等待被关闭,否则将立刻关闭窗口:
turtle.done()
画出长方形
从简单的开始,画个长方形。
# 导入turtle包的所有内容:
from turtle import *# 设置笔刷宽度:
width(4)# 前进:
forward(200)
# 右转90度:
right(90)# 笔刷颜色:
pencolor('red')
forward(100)
right(90)pencolor('green')
forward(200)
right(90)pencolor('blue')
forward(100)
right(90)# 调用done()使得窗口等待被关闭,否则将立刻关闭窗口:
done()
从程序代码可以看出,海龟绘图就是指挥海龟前进、转向,海龟移动的轨迹就是绘制的线条。要绘制一个长方形,只需要让海龟前进、右转90度,反复4次。
调用width()函数可以设置笔刷宽度,调用()函数可以设置颜色。更多操作请参考库的说明。绘图完成后,记得调用done()函数,让窗口进入消息循环,等待被关闭。否则,由于进程会立刻结束,将导致窗口被立刻关闭。
绘制任意多边形
增加点难度,学习下数学的几何知识。
多边形的内角公式: 内角 =(n-2) * 180 / n,其中n是多边形的边数。
多边形的所有内角之和等于 180*(n - 2),其中 n 是多边形的边数。
以正五边形为例,将n设置为5,代入公式得到 (5-2) * 180 / 5 = 3 * 180 / 5 = 108度,因此,正五边形的每个内角为108度。
其实类似这类画图问题,都是数学问题,算对了角度,就很容易画了。
多边形内角公式的推导,来学习下数数学知识。
多边形的内角是指多边形内部的任意两个相邻顶点之间的夹角。
证法一:
因为每个三角形的内角之和为 180°,一个n边行,可以分为n-2个三角形。因此,多边形的内角和等于 180*(n - 2)。那么每个内角=(n-2) * 180 / n。
证法二:
任意凸多边形的外角和都为360°,在一个n边形中,每个顶点的外角度数为360度/n。由于多边形有n个顶点,所以外角度数的总和为360度。因此可以得到公式:n * 外角度数 = 360度,即外角度数 = 360度 / n。内角+外角=180度,可以得到多边形的内角公式:内角 = 180度 - (360度 / n) = (n - 2) * 180度 / n。
例如,在一个三角形中,每个顶点的外角度数为 360° / 3 = 120°。 在一个四边形中,每个顶点的外角度数为 360° / 4 = 90°。 在一个五边形中,每个顶点的外角度数为 360° / 5 = 72°。
举例,画几个正五边形:
from turtle import *
import timedef draw5(x, y):pu()goto(x, y)pd()# set heading: 0seth(0)for i in range(5):fd(40)rt(72)time.sleep(1)for x in range(0, 250, 50):draw5(x, 0)done()
出题,如何绘制出五角星?
根据上述公式,如果要绘制五角星,关键是得知道每次转向多少角度?
五角星是144度。为什么是144度,你知道吗?因为正五边形的内角是108度,则它的的补角是72度,五角星的每个角是180-72-72=36度,因此 每次转向180-36 = 144 度。
#绘制一个五角星
from turtle import *
import timedef drawStar(x, y):pu()goto(x, y)pd()# set heading: 0seth(0)for i in range(5):fd(110)rt(144)time.sleep(1)drawStar(0,0)done()
以此类推,你能绘制出六角星吗?
也很简单,关键是知道六角星的每个角的角度,求得转向角度。根据多边形的内角公式,多边形内角 = (n-2) * 180 / n,其中n是多边形的边数。
先画出每个小三角形,每次转向60度,再画出剩余5个小三角形,总共是6个小三角形组成了六边形。
from turtle import *def triangle():pensize(2)pencolor('black')for i in range(3):fd(60)right(120)def test():colors=['green','red','yellow','pink','purple','orange']speed(1)for i in range(6):begin_fill()fillcolor(colors[i])triangle()fd(60) left(60) #以坐标系为基准,左转60°end_fill()#填充中心颜色fillcolor("blue")begin_fill()for i in range(6):fd(60)left(60)end_fill()ht()#隐藏画笔done()test()
from turtle import *
def triangle(x):pensize(2)pencolor('black')for i in range(3):fd(x)right(120)def main():speed(8)colors=['green','red','yellow','blue']for j in range(1,7):for i in range(4):if j >= 2:triangle(160 + j * 10)left(90)else:fillcolor(colors[i])begin_fill()triangle(160)left(90)end_fill()ht()
main()
done()
猜一猜以下代码将画出什么图形?
from turtle import *
def triangle():pensize(2)pencolor('black')for i in range(3):fd(160)right(120)def test():penup()setpos(-100,140)#画笔移动到一个绝对坐标。(开始默认画笔居中)pendown()speed(5)colors=['green','red','pink','purple','blue','yellow','orange']for i in range(6):fillcolor(colors[i])begin_fill()triangle()fd(160)right(60)end_fill()ht()#执行
test()done()
出题,你能画出如下的风车吗?
画个龙卷风
from turtle import *
# 龙卷风
setup(800,600)pensize(1)speed(6)colors=['green','red','yellow','grey','orange','blue','pink','purple']bgcolor('black')for i in range(1,10):pencolor(colors[i%8])penup()goto(5*i,0)pendown()circle(10*i)done()
同心圆(箭靶)
# 同心圆
from turtle import *
setup(800, 600, 450, 50)
pensize(5)
bgcolor('white')
speed('fastest')
colors = ['blue', 'yellow', 'red', 'green', 'white', 'black', 'orange', 'grey']
for i in range(10, 1, -1):penup()goto(0, -20 * i)pendown()begin_fill()fillcolor(colors[i % 4])circle(20 * i)end_fill()
hideturtle()
done()
主要函数介绍
绝对坐标
海龟初始位置为(0,0),位于画布中央。
海龟默认朝向右侧。(在模块中,可使用()函数(可简写为seth)用于设置海龟的朝向。它的作用是设置海龟当前的前进方向,参数是一个0-360之间的整数,表示海龟的朝向角度。例如(90)将使海龟朝向上方,seth(180)将使朝向指向左方。
行进函数