到目前为止我们通过turtle库了解了Python的基本语法,包括顺序与循环、函数的调用与方法的定义、列表与简单的数学运算等;也学习了用turtle库绘图的基本用法,包括坐标与角度、落笔抬笔、颜色与填充等。
但是我们所绘的所有内容仅限于直线,对于曲线的绘制,一直没有涉及。从现在开始,我们就来了角一下用turtle库怎么画曲线,首先我们来画一个圆,看代码:
- import turtle as t
- t.circle(100) # 画一个半径为100的圆
- t.mainloop() # 等效于t.done()
运行这个例子,我们可以看到,turtle从坐标原点开始,按逆时针方向画出了一个圆。非常简单,一条语句就实现了。
第一个问题是,如果有希望turtle按顺时针方向画,应该怎样实现?嗯,将t.circle(100)中的参数100改为-100即可,也就是t.circle(-100)。也就是说明这个参数除了表示圆的半径面,其正负性还定义了画圆的方向。修改一下上面的代码:
- import turtle as t
- t.circle(100) # 从原点开始按逆时针方向画圆,直径为100
- t.circle(-100) # 从鼠标所在点开始按顺时针方向画圆,直径为100
- t.mainloop()
运行这段代码,可以看到turtle在界面上画出一个8字形,先逆时针方向画圆,再顺时针方向画圆。可以看到turtle画这两个圆中的第一个时,相当于从圆的下底开始画(也即圆的-90度位置);画第二个圆相当于从上顶位置开始画(也即90度的位置)。
那么,第二个问题来了,如果我希望从圆的0度位置开始画,或者180度位置开始画,应该怎么操作?修改一下上面的实例代码:
- import turtle as t
- t.setheading(90) # 设置turtle的方向为正北(向上)方向
- t.circle(100) # 逆时针画
- t.circle(-100) # 顺时针画
- t.mainloop()
运行一下例子,可以看到,第一个圆是从0度位置开始画的,而第二个圆是从180度位置开始画的。通过这个小改动,我们可以看到,turtle画圆时,没有明确的“圆心”概念,而是以“初始方向+半径”来决定一个圆的位置和大小。其核心原理等同于割圆术。
接下来,我们来看一下怎样画一段弧线,而不是完整的圆。t.circle()的第一个参数是半径,第二个参数就是圆弧的角度,默认是360度。修改一下上面的例子:
- import turtle as t
- t.setheading(90)
- t.circle(100, 120) # 画一段120度的弧线
- t.penup() # 抬起笔来
- t.goto(0, 0)