首页资讯科技 Python绘制标准国旗

Python绘制标准国旗

王德贵我们曾经用Python绘制了党旗,也用Scratch绘制过国旗。不过在Python中绘制标准国旗并不简单,我们采用的方法在数学上称为解析法。一、准备工作1.国旗标准图案及分析把整个国旗换成直角坐标系,中心坐标为(0,0)。每个小格边长…

汪德贵

我们以前用Python画党旗,用Scratch画国旗。但是,用Python画标准旗并不容易。我们采用的方法在数学上叫做分析法。一.准备工作

1.国旗标准图案及分析

1.国旗的标准设计与分析

把整个国旗换成直角坐标系,中心坐标为(0,0)。如果每个单元格的边长为20,国旗左上角坐标为(-300,200),国旗长600,高400。五星所在的区域为第二象限,负横坐标,正纵坐标。

大五星直立放置,四个小五星是面向大五星中心的顶点的中轴,即大五星的中心、小五星的中心和小五星的顶点在一条直线上,上下1、4和右2、3关于第五个横格对称。

2.五星坐标及相关参数

将每个单元格的坐标刻度设置为20,大五星的中心坐标为(-200,100),半径为60,顶点坐标为(-200,160)。

小五星的半径是20。四颗小五星的中心坐标分别为(-100,160)、(-60,120)、(-60,60)、(-100,20)。

在大五星顶点的正上方,水平长度为0,垂直长度为3。大五星对应的小五星中心的相对水平和垂直长度(x,y)分别为(5,3),(7,1),(7,-2),(5,-4)。负值低于相对中心。

3.三角函数和反三角函数

小五星的顶点要对着大五星的中心,所以你需要知道小五星顶点的中轴线的方向角。具体算法省略了,我在源代码里做了简单的注释。二、程序设计

1.导入海龟库和数学库

Turtle是小海龟绘图库,Math是数学库,我们要用到里面的三角函数和反三角函数,以及圆周率pi值。from导入方法能使程序简化一点,详细作用请参考其他资料。

Turtle是小乌龟画图库,Math是数学库。我们需要用到三角函数和反三角函数,以及pi值。从中导入的方法可以简化程序。详情请参考其他资料。

2.国旗外框

3.大五星

3.大五星

大五星的起始点,我们能最准确得到的,就是上面的顶点,坐标为(-300,200),其他顶点均不是整数。这个顶点要画五角星,需要向斜下方开始画,我们使用绝对角度setheading()设置小海龟的方向。

大五星的起点,我们能得到最准确的是顶顶点,它的坐标是(-300,200),其他顶点都不是整数。要在这个顶点画五角星,需要斜向下画。我们用绝对角度setheading()来设定小乌龟的方向。

大五星直径120,顶角360。在一个绿色的直角三角形中,斜边为直径,上锐角为180°(蓝色箭头表示),所以移动步数为直角三角形中180°角的邻边,即120*cos(18*pi/180)。这里注意18度角要换算成弧系,所以乘以π再除以180。乌龟朝图中白色箭头的方向移动。

4.四颗小五星

(1)1号小五星中心相对比五星中心大,横向x=5格,纵向y=3格。那么这个锐角的正切tanA=y/x=3/5。数学上,这个锐角的大小是反正切3/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个参数。

画小五星需要五星的圆心坐标和外接圆半径,以及所画五星的圆心相对于大五星的水平和垂直长度。因此,封装的函数需要这五个参数。

三。整体测试

1.更新程序并测试它

通过大五星和小五星一号调用自定义函数进行反复测试。

2.完成所有代码。

测试成功后完成其他小五星参数。设置速度,可以使用(speed())函数,速度值从1到10,逐步加速画线和乌龟转弯的动画效果。

3.摘要

我以为是个简单的程序,没想到涉及到很多三角函数的知识。乌龟坐标的定义和高中数学完全一致。这样更有利于学生的学习。

本文来自网络,不代表管理窝立场。转载请注明出处: https://www.guanliwo.com/a/zx/26532.html
上一篇Scratch桌上冰球小游戏
下一篇 Scratch英语语法练习
管理窝

作者: 管理窝

这里可以再内容模板定义一些文字和说明,也可以调用对应作者的简介!或者做一些网站的描述之类的文字或者HTML!

为您推荐

评论列表()

    联系我们

    联系我们

    0898-88888888

    在线咨询: QQ交谈

    邮箱: email@wangzhan.com

    工作时间:周一至周五,9:00-17:30,节假日休息

    关注微信
    微信扫一扫关注我们

    微信扫一扫关注我们

    关注微博
    返回顶部