当前位置:   article > 正文

python海龟绘图_学python第十节:海龟绘图体系

设置画笔为紫色的代码

0855fe779b0b99d74fe6d15a3ec817ec.png

让小海龟画出五彩斑斓的世界。

今天学一个简单的绘图工具,叫做海龟绘图(Turtle Graphics)。

先欣赏一个绘制蟒蛇的代码:

  1. #PythonDraw.py # 注释
  2. import turtle #调用海龟绘图函数turtle
  3. turtle.setup(650, 350, 200, 200) #定义绘图窗体
  4. turtle.penup() #画笔抬起
  5. turtle.fd(-250) #向后(X轴负方向)移动250个像素
  6. turtle.pendown() #画笔落下,开始绘画
  7. turtle.pensize(25) #设置画笔粗细,款25像素
  8. turtle.pencolor("purple") #设置画笔颜色为紫色
  9. turtle.seth(-40) #设置画笔朝向角度为-40°
  10. for i in range(4): #使用for in 遍历循环,循环四次结束
  11. turtle.circle(40, 80) #画笔画弧线,画圆心在左侧,半径为40像素,角度为80°的弧线
  12. turtle.circle(-40, 80) #画笔画弧线,画圆心在右侧,半径为40像素,角度为80°的弧线
  13. turtle.circle(40, 80/2) #画笔画弧线,画圆心在左侧,半径为40像素,角度为40°的弧线
  14. turtle.fd(40) #向前画40像素的直线
  15. turtle.circle(16, 180) #画笔画弧线,画圆心在左侧,半径为16像素,角度为1800°的弧线
  16. turtle.fd(40 * 2/3) #画笔向前画80/3像素的直线
  17. turtle.done() #绘制结束并保持当前绘制结果,若没有则窗口迅速关闭

dac981ee6483902690c649212d20f1ab.png

b56d2e0f8783afd81511999236ec8317.png
执行一次turtle.circle(40, 80) turtle.circle(-40, 80),需要四次

turtle库基本概览: turtle库是python的标准库(python计算生态=标准库+第三方库),使用时直接调用(import turtle)即可。

标准库:随解释器直接安装到操作系统的功能模块。

第三方库:需要进过安装才能使用的模块

Turtle的原理是什么呢?使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。

Turtle绘画窗体如何布局呢:

56099fcfcf0bd6c1674a4f43a19eae21.png

d7cc95b9ed782c78fffa6a4ba1490605.png

0749ab4bdcfdda4785c7b4d260d20549.png

Turtle的坐标是怎么规定的呢?

在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片,对于海龟来说,有前进,后退,旋转等爬行行为,是靠自身角度方位来完成,刚开始,小海龟在画布正中央,坐标为(0,0),头部方向为向X轴正方向。

19d8ddd563c2573a845563bb84ae0a8f.png

这里有个turtle的参数,turtle.goto(x,y),指的是小海龟到坐标(x,y)的地方。需要脑海里时刻有小海龟头的朝向,可以用一个例子说明:

ebdd22e2c2f1c02cb18ec6531007f55f.png

Turtle的角度是怎么规定的呢?

a2d899ca597ce18949fceb96969b884b.png

2c115b49c51da0ec597b21c54efb8037.png

6e53accd9d856aaf82664bdcfe3ed4f8.png

b28b67e7058d78eda02dbdbdacf0b408.png

海龟的向前向后走很好理解,最难的是在拐弯(走弧线)和走圆圈

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

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

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

t.circle(100)

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

t.circle(100, 180)

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

9dd1d190481a043c3f1b3566f5f6f1a4.png

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 的圆形

#for..in.. 就是把每个元素代入变量i,然后执行缩进块的语句遍历循环函数,从0到360循环执行

  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. 两种方法的比较

方法二是利用循环的思想逼近成圆。使用 for 循环绘制圆形,可以更好的理解逼近的思想以及熟悉循环的过程。虽然要记忆数字 0.0174 以及写更多的程序,但是也更好的理解了程序本身。同时,在方法二中,虽然使用 360 边形,速度会变慢,但是 360 和角度进行了结合,一圈是 360 度,旋转了 360 次。也方便进行计算。

我们现在只需要掌握第一种方法就可以了。

Turtle的颜色体系:

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

turtle.pencolor(”blue”)

turtle.pencolor(52,209,32)

常用的颜色参数如下:

b1f211e92b8842fa7237ee82583ca2de.png

Turtle常用参数汇总:

画笔的属性:
turtle.pensize() #设置画笔的宽度
turtle.pencolor(color) #没有参数传入,返回当前画笔颜色,color参数有三种形式传入参数,可以是字符串形式(颜色的英文,字母用小写),如"green", “red”;也可以是RGB小数值或元组值(3元组)(每个小数或元组值对应的有颜色表,感兴趣可以自己了解一下,因为鄙人也不是特别清楚颜色这块)
turtle.speed(speed) #设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快

画笔运动命令:
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(radius,extent) #根据半径radius绘制extent角度的弧形,若无extent参数则画圆,radius为正(负),表示圆心在画笔的左边(右边)画圆,参数为正则是顺时针画圆,参数为负则是逆时针画圆
turtle.setx( ) #将当前x轴移动到指定位置,y轴不变
turtlr.sety( ) #将当前y轴移动到指定位置,x轴不变
turtle.setheading(angle) #设置当前箭头朝向为angle角度,0-向右,90-向上,180-向左,270-向下
turtle.home() #设置当前画笔位置为原点,朝向东。
turtle.dot() #绘制一个指定直径和颜色的圆点
turtle.setpos(x,y) #机器小乌龟定位到x=,y=
turtle.pos() #获得当前位置
turtle.xcor() #获得X坐标
turtle.ycor() #获得Y坐标

画笔控制命令:
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形状

全局控制命令:
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参数也是可选项

再来看看个好玩的例子

  1. import turtle #使用turtle函数
  2. turtle.speed(1) #绘制速度为1
  3. turtle.pensize(4) #线条宽度为4像素
  4. turtle.color('black', 'black')
  5. turtle.begin_fill()
  6. #右中圆
  7. turtle.circle(50,180)
  8. #左大圆
  9. turtle.circle(100,180)
  10. #左中圆
  11. turtle.left(180)
  12. turtle.circle(-50,180)
  13. turtle.end_fill()
  14. turtle.color('white', 'white')
  15. turtle.begin_fill()
  16. #上小圆
  17. turtle.left(90)
  18. turtle.penup()
  19. turtle.forward(35)
  20. turtle.right(90)
  21. turtle.pendown()
  22. turtle.circle(15)
  23. turtle.end_fill()
  24. turtle.color('black', 'black')
  25. turtle.begin_fill()
  26. #下小圆
  27. turtle.left(90)
  28. turtle.penup()
  29. turtle.backward(70)
  30. turtle.pendown()
  31. turtle.left(90)
  32. turtle.circle(15)
  33. turtle.end_fill()
  34. #右大圆
  35. turtle.right(90)
  36. turtle.up()
  37. turtle.backward(65)
  38. turtle.right(90)
  39. turtle.down()
  40. turtle.circle(100, 180)
  41. turtle.done()

44aac7022481ffedfd6bc0a6fb75d3e9.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/116921
推荐阅读
相关标签
  

闽ICP备14008679号