python画国旗讲解(Python绘制标准国旗)
我们曾经用Python绘制了党旗,也用Scratch绘制过国旗。不过在Python中绘制标准国旗并不简单,我们采用的方法在数学上称为解析法。
1.准备工作
1.国旗标准图案及分析
把整个国旗换成直角坐标系,中心坐标为(0,0)。每个小格边长20,则国旗左上角坐标为(-300,200)、国旗长600,高400。五星所在的区域为第二象限,横坐标为负,纵坐标为正。
大五星正立放置的,而4颗小五星则是顶点中心轴线正对着大五星的中心,即是大五星中心、小五星中心和小五星顶点在一条直线上,而且上下1、4两颗和右侧2、3两颗是关于第五个横格对称的。
2.五星的坐标及相关参数
设定坐标的标度为每个小格20,大五星的中心坐标为(-200,100),半径60,顶点坐标为(-200,160)。
小五星的半径为20。4个小五星中心坐标分别为(-100,160)、(-60,120)、(-60,60)、(-100,20)。
大五星顶点中心正上方,横向长度为0,纵向为3。小五星对应大五星中心相对横纵长度(x,y)分别为(5,3)、(7,1)、(7,-2)、(5,-4)。负值表示在相对中心的下方。
3.三角函数及反三角函数
小五星的顶点要正对着大五星的中心,所以需要知道小五星顶点中心轴的方向角。具体算法从略,我在源代码中做了简单的注释。
2.程序设计
1.导入Turtle库和Math库
Turtle是小海龟绘图库,Math是数学库,我们要用到里面的三角函数和反三角函数,以及圆周率pi值。from导入方法能使程序简化一点,详细作用请参考其它资料。
2.国旗外围框
3.大五星
大五星的起始点,我们能最准确得到的,就是上面的顶点,坐标为(-300,200),其它顶点均不是整数。这个顶点要画五角星,需要向斜下方开始画,我们使用绝对角度setheading()设置小海龟的方向。
大五星的直径为120,顶角为360,绿色直角三角形中,斜边是直径,上侧锐角为180(蓝色箭头所指),所以移动的步数为直角三角形中180角的邻边,即120*cos(18*pi/180),这里注意18度角要转换为弧度制,所以要乘以,除以180。Turtle运动方向为图中白色箭头方向。
4.四个小五星
(1)1号小五星中心相对大五星中心,横x=5格,纵y=3格,那么这个锐角的正切值tanA=y/x=3/5,数学上这个锐角的大小为arctan3/5,右转18度角,才是白色线用箭头所指方向。
在Python中有两个反正切函数,atan(x)和atan2(y,x),它俩的区别在于,第一个函数只需要一个参数,比如atan(3/5),而第二个函数需要两个参数atan2(3,5)。那么他们的区别在哪里呢?就是正切函数的定义域问题,90度时,正切值没有意义,即atan(3/0)没有意义,不能返回90度角度值,而atan2(3,0)能返回90度值。因而我们使用第二个函数求解。
由于海龟起始角度很难计算,因而使用绝对角度setheading(),这样就能准确地计算海龟的方向。
(2)其它2、3、4号五星和1号五星类似,就是起始位置和相对大五星中心和横纵长度不同,因而程序就具有重复性,我们可以将重复性的代码封装起来,每次画五星调用他就可以了,这就是自定义函数。
5.自定义函数
画小五星需要五角星的中心坐标、外接圆半径和所画五角星相对大五星中心的横纵长度。因而封装的函数,需要这5个参数。
3.整体测试
1.更新程序并测试
通过大五星和1号小五星调用自定义函数进行反复测试。
2.完成全部代码
测试成功后补全其他小五星参数。设置速度,可以利用(speed())函数,速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。
3.总结
本以为很简单的程序,没想到涉及了不少三角函数的相关知识,在Turtle坐标的定义和高中数学是完全一致的。这更有助于学生的学习。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com