Python海龟绘图

Python海龟绘图

  Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

turtle绘图的基础知识:

1. 画布(canvas)

        画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。

        设置画布大小

         turtle.screensize(canvwidth=None, canvheight=None, bg=None),参数分别为画布的宽(单位像素), 高, 背景颜色。

        如:turtle.screensize(800,600, "green")

               turtle.screensize() #返回默认大小(400, 300)

        turtle.setup(width=0.5, height=0.75, startx=None, starty=None),参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例,(startx, starty): 这一坐标表示矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。

        如:turtle.setup(width=0.6,height=0.6)

               turtle.setup(width=800,height=800, startx=100, starty=100)

 

2. 画笔

2.1 画笔的状态

        在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。

2.2 画笔的属性

        画笔(画笔的属性,颜色、画线的宽度等)

        1) turtle.pensize():设置画笔的宽度;

        2) turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是RGB 3元组。

        3) turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。

2.3 绘图命令

         操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

(1)    画笔运动命令

命令

说明

turtle.forward(distance)

向当前画笔方向移动distance像素长度

turtle.backward(distance)

向当前画笔相反方向移动distance像素长度

turtle.right(degree)

顺时针移动degree°

turtle.left(degree)

逆时针移动degree°

turtle.pendown()

移动时绘制图形,缺省时也为绘制

turtle.goto(x,y)

将画笔移动到坐标为x,y的位置

turtle.penup()

提起笔移动,不绘制图形,用于另起一个地方绘制

turtle.circle()

画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

setx( )

将当前x轴移动到指定位置

sety( )

将当前y轴移动到指定位置

setheading(angle)

设置当前朝向为angle角度

home()

设置当前画笔位置为原点,朝向东。

dot(r)

绘制一个指定直径和颜色的圆点

 

(2)     画笔控制命令

命令

说明

turtle.fillcolor(colorstring)

绘制图形的填充颜色

turtle.color(color1, color2)

同时设置pencolor=color1, fillcolor=color2

turtle.filling()

返回当前是否在填充状态

turtle.begin_fill()

准备开始填充图形

turtle.end_fill()

填充完成

turtle.hideturtle()

隐藏画笔的turtle形状

turtle.showturtle()

显示画笔的turtle形状

 

(3)    全局控制命令

命令

说明

turtle.clear()

清空turtle窗口,但是turtle的位置和状态不会改变

turtle.reset()

清空窗口,重置turtle状态为起始状态

turtle.undo()

撤销上一个turtle动作

turtle.isvisible()

返回当前turtle是否可见

stamp()

复制当前图形

turtle.write(s [,font=("font-name",font_size,"font_type")])

写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项

 

(4)    其他命令

命令

说明

turtle.mainloop()或turtle.done()

启动事件循环 -调用Tkinter的mainloop函数。

必须是乌龟图形程序中的最后一个语句。

turtle.mode(mode=None)

设置乌龟模式(“standard”,“logo”或“world”)并执行重置。如果没有给出模式,则返回当前模式。

模式

初始龟标题

正角度

standard

向右(东)

逆时针

logo

向上(北)

顺时针

 

turtle.delay(delay=None)

设置或返回以毫秒为单位的绘图延迟。

turtle.begin_poly()

开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。

turtle.end_poly()

停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。

turtle.get_poly()

返回最后记录的多边形。

 

3. 命令详解

        3.1 turtle.circle(radius, extent=None, steps=None)

        描述:以给定半径画圆

        参数:

        radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;

        extent(弧度) (optional);

        steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)。

举例:

circle(50) # 整圆;

circle(50,steps=3) # 三角形;

circle(120, 180) # 半圆

 

 

Python 海龟绘图详解——Cirlcle 方法画圆

在 Python 海龟绘图中,Cirlcle 方法是绘制圆的方法之一,也是官方推荐的方法。在这里对绘制进行一个总结。

1. Circle 方法填写不同参数值绘制出的图

 

Python 海龟绘图详解—— Cirlcle 方法画圆

上图的程序代码是

  1. import turtle as t
  2. t.circle(100, 90)
  3. t.home()
  4. t.circle(100, -90)
  5. t.home()
  6. t.circle(-100, 90)
  7. t.home()
  8. t.circle(-100, -90)
  9. t.home()

2. circle 方法说明

在 circle 方法中,第一个参数是圆的半径,第二个方法是圆的角度。这两个参数都是可正可负。

当第二个参数为正数时,第一个参数如果为正数,则是逆时针向前画圆。

当第二个参数为正数时,第一个参数如果为负数,则是顺时针向后画圆。

当第二个参数为负数时,第一个参数如果为正数,则是顺时针向前画圆。

当第二个参数为负数时,第一个参数如果为负数,则是逆时针向后画圆。

3. 记忆方法

总结为:

角度为正向前走 负负得正逆时针

角度为正数的时候都是顺着当前的方向向前走,两个参数都为负数,两个参数都为正数的时候,时顺时针画。

对于记忆来说,我们要记住的是当第一个第二个参数都为正时的情况。

当都为正数是,是按照逆时针的方向,向前画了一个圆。

当我们不知道半径可以填写负数的时候,我们尝试修改角度的负数,此时发现,是在上一个圆的基础上,倒着画了一个。

意味着当第一个参数为正数的时候,圆实际上是同一个圆,只是从同一个点出发,一个正向画一个反向画。

只要当角度是正数,我们都是顺着向前画的。由于半径正数时逆时针,那么半径负数就是顺时针了。

当两个都为负数的时候,首先根据上一句话,角度是负数,一定是倒着向后走的。其次,由于两个正数时逆时针,我们两个负数,负负得正了,所以也为逆时针。

授课时可直接将口诀推出,然后进行详细的讲解。

 

Python 海龟绘图详解——圆和圆弧绘制总结

在 Python 海龟绘图中,绘制圆形和圆弧有两种方法,在这里对绘制方法进行一个总结。

1. 官方使用的绘制方法 circle

circle 方法是 Python 官方使用的方法。circle(半径,度数)。起始位置在圆的最下方,逆时针方向绘制。

例如,在绘制半径为 100 的圆形的时候。使用方法为

  1. t.circle(100)

在绘制半圆的时候,实际是 360 度的圆的一半,使用方法为

  1. t.circle(100, 180)

实际上在这个地方 circle 方法有第三个参数,官方文档解释说,圆实际是以其内切正多边形来近似表示的,其边的数量由 steps 指定(第三个参数)。我们在这里不需要管第三个参数。使用前两个即可。

2. 使用循环绘制

利用循环的思想,当我们绘制多边形的时候,边数足够多的话,就逼近于圆了。

我们尝试绘制下 360 边形

  1. for i in range(0,360):
  2.     t.fd(1)
  3.     t.rt(360/360)

这个地方有两个问题,一是,绘制速度慢,二是无法确定圆的半径。

绘制速度慢是因为我们实际上循环了 360 次,所以速度慢,可以考虑用 36 边形进行处理。

无法确定圆的半径可以通过计算来得到一个通解。

圆的周长是 2*Pi*r = 360*fd,fd = 2*Pi*r / 360 = 0.0174 * r,得到倍数是 0.0174,即在 fd 里填 0.0174*半径。

我们尝试绘制半径为 100 的圆形

  1. for i in range(0,360):
  2.     t.fd(0.0174*100)
  3.     t.rt(360/360)

36 边形通过计算是 t.fd(0.174*半径)。

那么如何绘制半圆呢,实际上我们这个地方是通过循环的次数来控制圆的弧度。

使用方法为

  1. for i in range(0,180):
  2.     t.fd(0.0174*100)
  3.     t.rt(1)

四分之一圆的话循环 90 次就可以了。

3. 两种方法的比较

在我个人教学中,推荐使用方法二。方法二是利用循环的思想逼近成圆。

理由是本身我们学习 Python 海龟绘图,更多的是为了熟悉角度知识,熟悉数值计算。

使用 for 循环绘制圆形,可以更好的理解逼近的思想以及熟悉循环的过程。虽然学生需要记忆数字 0.0174 以及写更多的程序,但是也更好的理解了程序本身。

同时,在方法二中,虽然使用 360 边形,速度会变慢,但是 360 和角度进行了结合,一圈是 360 度,旋转了 360 次。也方便进行计算。

对于方法一来说,需要通过调整半径和方向的正负来画圆,对于低年级学生来说,没有学习过负数的概念。而使用循环绘制圆,只有左右的概念。

4. 解答说明

Python 海龟绘图网已经进入到了圆的习题更新部分。

我会分别提供方法一和方法二的解答,供各位老师们选择授课。

 

Python 海龟绘图详解——多角星绘制总结

在 Python 海龟绘图中,绘制多角星是个常见问题,在这里对多角星进行总结。

绘制方法

例如,在绘制边长为 100 的五角星的时候。使用方法为

  1. for i in range(0,5):
  2.     t.fd(100)
  3.     t.rt(180-180/5)

例如,在绘制边长为 100 的七角星的时候。使用方法为

  1. for i in range(0,7):
  2.     t.fd(60)
  3.     t.rt(180-180/7)

为什么没有偶数角星

偶数角星,不能一笔画。在一笔画问题中,要求图中交叉点的顶点数目等于0或者2。

而偶数角星不符合一笔画的要求。

在多角形绘制中,为什么转过的角度是 180-180 / n 呢?

每一个多角星都会有一个外接圆。圆周角的度数等于它所对的弧度数的一半。所以 n 角星,就是 360 / 2 / n=180 / n。

则转过的角度是 180-180 / n。

 

Python 海龟绘图——多边形绘制总结

在 turtle 作图中,经常会遇到多边形。在这里对多边形的画法进行一个总结。

方法一 使用循环绘制

在 Python 海龟绘图中,可以使用循环绘制多边形。在这里可以利用公式 重复次数*转过角度=360。

例如,在绘制边长为 100 的五边形的时候。使用方法为

  1. for i in range(0,5):
  2.     t.fd(100)
  3.     t.(360/5)

例如,在绘制边长为 60 的六边形的时候。使用方法为

  1. for i in range(0,6):
  2.     t.fd(60)
  3.     t.(360/6)

此处在记忆中,可用三角形,正方形进行辅助记忆。

三角形重复 3 次,每次转过的角度为 120 度。

正方形重复 4 次,每次转过的角度为 90 度。

3*120=4*90=360。从而记忆 360 度这个关键角度。

在多边形绘制中,为什么转过的角度是 360/n 呢?

假设一个正多边形有 n 条边,正多边形的内角和为 (n−2)∗180

那么每个角的度数则为 (n−2)∗180n=180+360n

每个角的转角是 180−(180−360n)=360n

方法二 使用 turtle circle 方法

使用 turtle 的 circle() 方法,可以进行绘制多边形。

circle() 函数有三个参数,依次是

  • radius — 一个数值
  • extent — 一个数值 (或 None)
  • steps — 一个整型数 (或 None)

circle() 方法的本质是以其内切正多边形来近似表示圆。第一个参数为圆的半径,第二个参数是圆转过的角度,第三个参数为边的数量。在使用时,只填写第一个和第三个参数即可。具体使用方法如下。

例如,在绘制六边形的时候。使用方法为

  1. t.circle(100,None,6)

但是此种方法无法在已有知识体系下明确多边形的边长(具体边长的值为 d=2∗r∗sin(180n)

总结

两张方法都可以画出多边形。但方法二无法明确边长,因此推荐使用方法一完成日常绘图。

 

  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chsht2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值