Python的海龟 turtle 库使用详细介绍(画任意多边形,全网最详细) 您所在的位置:网站首页 python海龟库代码字母 Python的海龟 turtle 库使用详细介绍(画任意多边形,全网最详细)

Python的海龟 turtle 库使用详细介绍(画任意多边形,全网最详细)

2024-06-16 12:54| 来源: 网络整理| 查看: 265

学Turtle库,其实就是学数学,而且还能提高对数学和学习的兴趣。Turtle库还能够帮助孩子更好地理解几何学和数学概念,比如角度、比例、几何图形的性质等等,是Python中一个很有趣的库。

前言

Turtle库是Python中一个很有趣的库,可以用来绘制各种图形,比如直线、圆、正方形等等。掌握Turtle库的意义在于可以培养孩子的创造力和想象力,让他们通过编写代码来实现自己的创意,同时也可以提高他们的编程能力和逻辑思维能力。此外,Turtle库还能够帮助孩子更好地理解几何学和数学概念,比如角度、比例、几何图形的性质等等,学Turtle库其实就是学数学,但更有趣味性。

turtle库介绍

Turtle库是Python的一个标准库,提供了一个绘图的海龟机器人,可以使用Python代码控制海龟机器人的移动和动作,从而实现绘制图形的功能。Turtle库支持绘制直线、圆、椭圆、曲线、填充颜色等功能,可以用来绘制各种各样的图形和图案。使用Turtle库可以加深对Python语言的理解和掌握,同时也可以进行艺术创作和教育活动。

Python内置了turtle库。在1966年,Seymour Papert和Wally Feurzig发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图。海龟绘图(Turtle Graphics)后来被移植到各种高级语言中,Python内置了turtle,基本上100%复制了原始的Turtle Graphics的所有功能。

turtle的帮助文档:turtleturtle绘图作品:海龟绘图 turtle库的使用

使用前需先引入库,可以使用 from turtle import * 或者 import turtle。前者使用方法不需要加 turtle,后者需要加turtle。

简单示例:

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()函数可以设置笔刷宽度,调用pencolor()函数可以设置颜色。更多操作请参考turtle库的说明。绘图完成后,记得调用done()函数,让窗口进入消息循环,等待被关闭。否则,由于Python进程会立刻结束,将导致窗口被立刻关闭。

绘制任意多边形

增加点难度,学习下数学的几何知识。

多边形的内角公式: 内角 = (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 time def draw5(x, y): pu() goto(x, y) pd() # set heading: 0 seth(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 time def drawStar(x, y): pu() goto(x, y) pd() # set heading: 0 seth(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()

turtle主要函数介绍

绝对坐标

海龟初始位置为(0,0),位于画布中央。

海龟默认朝向右侧。(在turtle模块中,可使用setheading()函数(可简写为seth)用于设置海龟的朝向。它的作用是设置海龟当前的前进方向,参数是一个0-360之间的整数,表示海龟的朝向角度。例如setheading(90)将使海龟朝向上方,seth(180)将使朝向指向左方。

行进函数

turtle.goto(x,y,从当前位置到达任何位置(X,Y)。

海龟无论何处,面对的方向是前进方向。

前进函数:turtle.fd(),向前移动指定的距离。

后退函数:turtle.bk(),向后移动指定的距离。

画弧函数:turtle.circle(r, angle) 以左侧r像素处为圆心,逆时针旋转angle的角度。

朝向函数:turtle.seth(angle)朝向绝对方向angle。(海龟默认朝向右侧,设置90,则逆时针转向指向正上方,设置为180则将使朝向指向左侧。)

right()和left()函数用于设置海龟的转向角度。

right(angle)函数用于将海龟向右旋转指定的角度。参数angle是一个整数,表示海龟要旋转的角度。例如,right(90)将使海龟向右旋转90度。

left(angle)函数用于将海龟向左旋转指定的角度。参数angle是一个整数,表示海龟要旋转的角度。例如left(90)将使海龟向左旋转90度。 这两个函数可以用于控制海龟的行走方向和绘制图形的方向。在使用这两个函数时,需要注意它们设置的是海龟的相对转向角度,而不是绝对转向角度。也就是说,调用right()函数后,海龟的面向方向会向右旋转,而调用left()函数后,海龟的面向方向会向左旋转。

turtle.penup()      画笔抬起

turtle.pendown()  画笔落下

turtle.pensize()    海龟腰围

turtle.pencolor()  画笔颜色

turtle.speed() 设置移动速度,其中的参数值表示海龟的速度等级,取值范围为[0, 10],注意其中0也是表示最快的速度,1则是最慢,10也是表示最快的速度,默认速度应该是5(normal)。

如果输入的数字大于10或小于0.5,则速度设置为0。速度字符串通过以下方式映射到速度值: ‘fastest’:0‘fast’:10‘normal’:6‘slow’:3‘slowest’:1

turtle.home() 返回原点(0,0)位置(屏幕正中央),朝向右。

绘制复杂的图形

注:部分资源引用自《Python创意编程100例turtle篇》。如有侵权请告知删除。

美丽的树 from turtle import * # 设置色彩模式是RGB: colormode(255) lt(90) lv = 14 l = 120 s = 45 width(lv) # 初始化RGB颜色: r = 0 g = 0 b = 0 pencolor(r, g, b) penup() bk(l) pendown() fd(l) def draw_tree(l, level): global r, g, b # save the current pen width w = width() # narrow the pen width width(w * 3.0 / 4.0) # set color: r = r + 1 g = g + 2 b = b + 3 pencolor(r % 200, g % 200, b % 200) l = 3.0 / 4.0 * l lt(s) fd(l) if level < lv: draw_tree(l, level + 1) bk(l) rt(2 * s) fd(l) if level < lv: draw_tree(l, level + 1) bk(l) lt(s) # restore the previous pen width width(w) speed("fastest") draw_tree(l, 4) done() 彩色大蟒蛇 import turtle turtle.setup(650, 350,200,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) colors=['green','blue','yellow','orange','pink','purple'] turtle.seth(-40) for i in range(4): turtle.color(colors[i])#选择索引从0~3的颜色 turtle.circle(40, 80)#上半弧度 turtle.circle(-40, 80)#下半弧度 turtle.color(colors[5]) turtle.circle(40, 80/2) turtle.fd(40) turtle.circle(16, 180) turtle.fd(40 * 2/3) turtle.done()

画小猪佩奇 # coding=utf-8 import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.color((255, 155, 192), "pink") t.setup(840, 500) t.speed(10) # 鼻子 t.pu() t.goto(-100, 100) t.pd() t.seth(-30) t.begin_fill() a = 0.4 for i in range(120): if 0 0.7): pu () # 飘落 t = heading () an = -40 + random () * 40 setheading ( an ) dis = int ( 800 * random () * 0.5 + 400 * random () * 0.3 + 200 * random () * 0.2 ) forward ( dis ) setheading ( t ) # 画叶子 pd () right ( 90 ) n = cos ( radians ( heading () - 45 ) ) / 4 + 0.5 pencolor ( n * 0.5 + 0.5, 0.4 + n * 0.4, 0.4 + n * 0.4 ) circle ( 2 ) left ( 90 ) pu () # 返回 t = heading () setheading ( an ) backward ( dis ) setheading ( t ) pu () backward ( l ) # 退回 bgcolor ( 0.956, 0.9255, 0.9882 ) # 设置背景色(把灰色换成淡紫色) ht () # 隐藏turtle speed ( 0 ) # 速度 1-10渐进,0 最快 tracer ( 0, 0 ) pu () # 抬笔 backward ( 50 ) left ( 90 ) # 左转90度 pu () # 抬笔 backward ( 300 ) # 后退300 tree ( 12, 100 ) # 递归7层 done ()

引用出处 

海龟绘图 - 廖雪峰的官方网站

python---turtle库(详解)_python turtle_超越ct的博客-CSDN博客

python: turtle绘制有趣的小图像合集_turtle画图作品-CSDN博客

Python Turtle 画图:黑洞里的繁星(附源代码)_turtle绘图代码-CSDN博客

Python海龟turtle基础知识大全与画图集合_python海龟编程代码大全-CSDN博客

Python — — turtle 常用代码_python海龟编程代码大全-CSDN博客

Python海龟画图集合_香自寒来-华为云开发者联盟



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有