Python几何图形编程之超炫的三角形

1 任务描述

用Python作图,画100条长度逐渐增加的线段,每画一条线段,画笔逆时针方向旋转120°,用三种颜色区分不同画笔朝向的线段。

2 数学知识点

(1)等边三角形

等边三角形是三边相等的三角形,也叫正三角形,如图1所示。它是锐角三角形的一种。等边三角形的三个内角相等,均为60°。等边三角形也是最稳定的结构。

Python几何图形编程之超炫的三角形

图1 等边三角形

(2)三角形的外角

三角形的一条边与另一条边的延长线组成的角,叫做三角形的外角,如图2所示,∠CBE就是等边三角形△ABC的外角。三角形的一个外角等于与它不相邻的两个内角的和。一个等边三角形的外角是120°,三角形的内角和是180°,外角和是360°(每个顶点取一个外角)。

Python几何图形编程之超炫的三角形

图2 三角形的外角

3 编程知识点

(1)函数left()和right()

前面我们介绍了设置画笔的绝对朝向函数setheading(),使用这个函数的前提是必须知道画笔朝向与横轴正向的夹角的准确值,否则图形会画乱。

有时候,我们需要画笔在当前方向上顺时针旋转或者逆时针旋转一个角度,这时计算画笔朝向与横轴正向的夹角较为困难,而使用与当前方向的夹角值计算比较容易。这就需要设置画笔的相对朝向。

turtle库的left()函数用来设置画笔以当前朝向为基础逆时针旋转一定的角度;turtle库的right()函数用来设置画笔以当前朝向为基础顺时针旋转一定的角度。

如图3所示的程序代码中,我们使用for循环画三条边,画第一条边的时候,画笔从原点(0,0)开始沿着横轴正向前行200像素,然后画笔朝向逆时针旋转120°(等边三角形的外角为120°),开始画第二条边;画笔继续前行200像素,画笔在当前方向的基础上再逆时针旋转120°,开始画第三条边;画笔前行200像素后,画笔朝向回到横轴正向的方向上。运行这段代码,画笔运行的轨迹和过程如图4所示。

Python几何图形编程之超炫的三角形

图3 逆时针画等边三角形的程序代码

Python几何图形编程之超炫的三角形

图4 程序运行过程:逆时针画等边三角形

如果把上面的程序代码中left()函数改成right()函数,程序代码如图5所示,画笔运行轨迹和过程如图6所示。

Python几何图形编程之超炫的三角形

图5 顺时针画等边三角形的程序代码

Python几何图形编程之超炫的三角形

Python几何图形编程之超炫的三角形

图6 程序运行过程:顺时针画等边三角形

(2)函数speed()

turtle库里的函数speed()用来设置画笔移动速度,画笔绘制的速度为0到10之间的整数。数字越大移动速度越快。

(3)函数done()和bye()

函数done()和bye()用来关闭和退出turtle库,可以避免在使用完turtle库后继续占用计算资源和内存资源。它们不会产生任何画图动作,也不会有任何提示。在小的程序中不使用上述两函数并不影响程序的运行,但在规范化的大型程序设计中,养成使用完某一库后及时释放相应计算资源和内容的习惯是非常职业化的要求。

4 任务分析

画100条线,需要用到循环语句。用三种颜色区分不同画笔朝向的线,则颜色列表应包含3个颜色。在每次循环中,画笔要先变一次颜色,再画一次线,逆时针旋转120°。每画完一次线,线的长度增加一次。

程序设计的思路为:

Python几何图形编程之超炫的三角形

5 程序设计

我们在Python的文件编辑器里,新建一个triangleloop.py文件,完成旋转三角形的程序代码如图7所示。在本程序中,使用了colors颜色列表,放置了红、绿、紫三种颜色。在循环100次的过程中,每次循环颜色要更换一次,颜色在colors列表中获取。颜色索引值用i%3生成。因为i除以3的余数在[0,2]范围内,所以可以实现三个颜色不断循环使用。每次循环用函数forward()移动画笔5×i的长度,也就是画笔线条的长度在每次循环中都会增加5像素;在每次循环中还使用函数left()逆时针旋转画笔朝向120°。

循环完毕后,使用函数hideturtle()隐藏画笔,使用函数done()退出turtle库。

Python几何图形编程之超炫的三角形

图7 旋转三角形程序代码

6 运行结果

运行triangleloop.py程序,结果如图8所示。

Python几何图形编程之超炫的三角形

图8 程序运行结果:旋转三角形

7 发散思考

(a)如果把颜色列表改成其他颜色集,效果会怎样?

颜色集更改为colors=[“blue”,”yellow”,”brown”]以后,运行程序的结果如图9所示。

Python几何图形编程之超炫的三角形

图9 程序运行结果:更换颜色集后的图形

(b)如果把逆时针旋转角度改为其他值,效果会怎样?

在图7所示的程序中,把逆时针旋转角度改为122°,即left(122),运行程序的结果如图10所示。

在图7的程序中,把逆时针旋转角度改为118°,运行程序的结果如图11所示。

Python几何图形编程之超炫的三角形

图10 程序运行结果:更改逆时针旋转的角度为122°

Python几何图形编程之超炫的三角形

图11 程序运行结果:更改逆时针旋转的角度为118°

(c)把旋转方向改为顺时针,效果会怎样?

在图7的程序中,把旋转角度改为顺时针旋转122°,即right(122),运行程序的结果如图12所示。

Python几何图形编程之超炫的三角形

图12 程序运行结果:更改顺时针旋转的角度为122°

8 挑战自我

用Python作一个由三角形组成的扇面。

参考程序

参考答案文件:trianglefan.py,这个三角形组成扇面的程序设计如图13所示。

Python几何图形编程之超炫的三角形

图13 三角形组成的扇面程序代码

参考运行结果如图14所示。

Python几何图形编程之超炫的三角形

图14 程序运行结果:三角形扇面

本章小结

·数学知识:等边三角形;

等边三角形的角、外角。

·编程知识:画笔旋转函数left()和right();

画笔速度设置;

退出turtle库;

图形旋转设计。

发表评论