Python几何图形编程之圆弧组成的花

1 任务描述

用Python作图,画出如图1所示的圆弧组成的花。

圆弧组成的花

图1 圆弧组成的花

2 数学知识点

圆上任意两点间的部分称为圆弧,简称弧(arc),以“⌒”表示。圆弧是由所在圆的半径和弧度来描述的。图2所示为一个60°的圆弧。顶点在圆心上的角叫做圆心角,∠AOB就是一个60°的圆心角。

圆弧组成的花

图2 圆弧

3 编程知识点

(1)画圆弧

turtle库里画圆弧的函数是circle()。画圆弧时,不但需要指定圆弧的半径,还需要指定圆弧的弧度。画圆弧函数的格式为:

圆弧组成的花

例如要画一个半径为50像素的半圆,即circle(50,180)。

太极图就是典型的由圆和圆弧组成的图。编写一段画太极图的程序代码,如图3所示。

圆弧组成的花

图3 画太极图的程序代码

运行画太极图的程序,结果如图4所示。

圆弧组成的花

图4 程序运行结果:画太极图

(2)用函数circle()画正多边形

理论上,无数条边的正多边形就是圆,所以圆和正多边形关系密切。用函数circle(),画正多边形的格式为:

圆弧组成的花

画一个外接圆半径为100像素的棕色正七边形的程序如图5所示,程序运行结果如图6所示。

圆弧组成的花

图5 画一个棕色的正七边形的程序代码

圆弧组成的花

图6 程序运行结果:画正七边形

画边数逐渐增多(从2到10)的正多边形组合图形的程序代码如图7所示,使用for循环,使变量i从2(为一条线段,边数量为2)增长到10,每次循环调用函数circle(-100,steps=i)。运行程序,可以看到随着边数的增多,正多边形逐渐趋近于一个圆的过程,具体如图8所示。

圆弧组成的花

图7 画边数从2到10的正多边形的程序代码

到现在为止,我们接触了circle()函数的3个参数:半径、弧度、steps。如果把这3个参数都设置完整,如图9程序里circle(100,120,steps=5),则画出将半径为100像素的120°圆弧分为5个相等部分的线段组合,程序运行结果如图10所示。

圆弧组成的花

图8 程序运行结果:画边数从2到10的正多边形

圆弧组成的花

图9 画把圆弧5等分线段组合的程序代码

圆弧组成的花

图10 程序运行结果:画把圆弧5等分的线段组合

4 任务分析

在图1所示的图形里,我们看到的基本图形元素是一定半径和弧度的圆弧以及回到圆心的直线。从整体上看,图形由20组等角度分布的花瓣组成;每个方向的花瓣又由半径和起笔角度都不相同的圆弧刀状图形组成。这就涉及两层循环。可以使用自定义函数实现画某一个方向的花瓣,这个函数包含一层循环;在主程序里,也构建一个循环,实现画等角度分布、不同方向的花瓣。

自定义函数的逻辑结构如下:

圆弧组成的花
圆弧组成的花

在主程序中,循环调用自定义函数,画不同方向的花瓣,逻辑结构如下:

圆弧组成的花

5 程序设计

新建一个Python程序文件arcflowergoto.py,花瓣组合图形的程序代码如图11所示。

圆弧组成的花

图11 花瓣组合图形的程序代码

自定义函数apartf()有两个输入参数,半径r和画笔方向角度angle,功能是完成一定方向(角度为angle)的花瓣组的绘制。这个方向上最大的圆弧半径是r。这个方向的花瓣组由6个圆弧半径依次减少(“r-=30”)的刀状图形组成,每次刀状图形的画笔方向变量加2(“a =2”)。

在主程序循环调用apartf()函数时,每次赋予的角度由18×i生成,一共循环20次,生成20个等角度分布的花瓣组。

6 运行结果

运行程序arcflowergoto.py,结果如图12所示。

圆弧组成的花

图12程序运行结果:圆弧组成的花

7 发散思考

(a)当主程序循环调用函数时,如果变化循环次数和角度,画图效果会有哪些变化?

在图11的主程序中,将循环次数改为12,函数apartf()的角度参数改为30×i,程序代码如图13所示。

圆弧组成的花

图13 更改循环次数和角度参数的程序代码

这样,每个花瓣组的角度间隔增大了,花瓣变得稀疏了很多,程序运行结果如图14所示。

圆弧组成的花

图14 程序运行结果:花瓣稀疏的花

(b)在自定义函数中,如果将画笔回到原点改为回到原点附近的圆弧,画图效果会怎样变化?

在图11所示的主程序中,将pic.goto(0,0)换成pic.left(150)和pic.circle(-2.75×r,30),去掉a变量赋值和操作及pic.setheading(a),下一个图形的画笔角度直接用pic.left(150)代替,程序代码如图15所示,程序运行结果如图16所示。

圆弧组成的花

图15 圆弧状花瓣的程序代码

圆弧组成的花

图16 程序运行结果:圆弧花瓣组合

8 挑战自我

用Python作如图17所示的图形。

圆弧组成的花

图17 美丽花朵

参考程序

参考程序文件:lineflower.py,这个圆弧线段组成的花的程序代码如图18所示。

圆弧组成的花

图18 圆弧线段组成的花的程序代码

小结

·数学知识:圆弧。

·编程知识:画圆弧;

用函数circle()画正多边形和等分圆弧的线段;

用循环画圆弧的组合图形。

发表评论