向五星红旗致敬 —Python程序绘制国旗
[日期:2024-02-29] | 作者:信息技术 次浏览 | [字体:大 中 小] |
周之卓
2020年一个伟大而特别的年,全民一心共同抗疫,激发着每一个中华儿女的爱国之心。我在学校学习了编程,偶然在网上看到了也可以通过程序来绘制我国国旗,决定用python程序来绘制一面满足法规的国旗,向祖国致敬,也为向奔赴武汉的医生们、护士们,与医护工作者、警察、医学家一并肩作战的支援者们,抗疫前线的远赴别国的中国医护人员,心中那面飘扬的红旗致敬!
Python 我也不做过多介绍,老师们教了不少,相比大家都熟悉,当然,Python更多的知识我在课外也进行深入学习。但要想绘制出国旗,我们还需要一个工具--”库”.库就是一些代码文件包,比如print就是基础库中的一项代码,通过库,我们就可以使用本来在编译器中没有定义的代码.我们这一次主要是运用了两个库turtle等来绘制国旗。turtle库是绘图库,它可以使程序弹出窗口根据你指令动作生成的一个绘制流程图.使用的方法,首先分为画笔和画布(即背景板)。Screen就是画布在turtle中的释义,所以我们要制作画布就要用myScreen=turtle.Screen()这条指令的意思是将变量myScreen定义为一个画布,pen也是如此.下方的def 是定义函数,格式为”def 函数名(函数所需的参数1,函数所需的参数2,函数所需的参数3......):”具体用处主要是减少代码行数,加强可读性,减少编写代码时间,运用这种方法可以将多行代码简化,用一行代码来表达,其余的程序内我均设有注解。
在开始绘制之前,我们要明白一点:不是随手画出的五星红旗都是国旗。在我国,国旗的形状、大小是有明确规定的,我们找到了《中华人民共和国国家标准 国旗(GB 12982-2004)》,这份标准明确记录了国旗的比例、颜色、每颗星的形状和位置等信息,为我们绘制国旗提供参考。
首先,我们先来分析一下结构,方便整理绘制逻辑和流程。国旗的形状可以分解为一个四边形(旗面)、1颗大星星和4颗小星星组成。绘制时我们将星星的边框和填充颜色设置为黄色,把四边形的底色设置为红色。接下来我们将通过Python turtle逐步把国旗画出来
第一步:绘制国旗的旗面四边:绘制的时候长,宽的数值一定要满足比例。
程序是这样的:
import turtle
myscreen = turtle.Screen()
myscreen.setworldcoordinates(0, 0, 800, 800) #设置画布大小四个空格填入:画布的左下横坐标,左下纵坐标,右上横坐标,右上纵坐标
mypen = turtle.Pen() #设定一只画笔
mypen.hideturtle() #不显示画笔
# 绘制旗面
def rectangle(x, y, width, height, color): # 设置画笔
setpen(x, y, color)# 开始绘制
mypen.begin_fill() #填充起点
for i in range(2):
mypen.forward(width) #前进,()内是移动距离(像素)
mypen.right(90) #右转,()内是度数
mypen.forward(height)
mypen.right(90)
mypen.end_fill() #填充终点,将此期间移动的图形填充
第二步:绘制五角星,设画笔。
# 绘制五角星
def starmac(x, y, angle, length, color):# 设置画笔
setpen(x, y, color)# 设置画笔朝向
mypen.setheading(angle) #设置画笔朝向,()内是具体方向# 开始绘制
mypen.begin_fill()
for i in range(5):
mypen.forward(length)
mypen.left(72)
mypen.forward(length)
mypen.right(144)
mypen.end_fill()
# 设置画笔
def setpen(x, y, color):
mypen.penup() #抬起画笔(落笔前移动不产生绘画痕迹)
mypen.setheading(0)
mypen.goto(x, y) #移动到制定位置()内第一二项分别是移动后地点的横坐标,纵坐标
mypen.pencolor(color) #设置画笔颜色
mypen.fillcolor(color) #设置填充颜色
mypen.pendown() #落笔
# 设置画笔为 0 度
mypen.setheading(0)
第三步完整主程序。
# 主程序
def main(): #无实意,对自己起提示作用.(我不能说我懒得解释吧[doge])
per = 20
mx, my = 100, 700
# 旗面
width, height = 30 * per, 20 * per
rectangle(mx, my, width, height, "red")
# 大五角星
import math #导入math库
R = 3 * per
ox, oy = mx + 5 * per, my - 5 * per
fa = R * math.sin(math.radians(72)) #sin求某角正弦值()内输入弧度值 radians 将角度转化成弧度
fo = R * math.cos(math.radians(72)) #cos 求角余弦
ax, ay = ox - fa, oy + fo
#利用三角函数求五角星边长,坐标(具体需要画图,切出连接五角星中心的直角三角形)
length = (R - R * math.cos(math.radians(72))) / math.cos(math.radians(18))
starmac(ax, ay, 0, length, "yellow")
R = 1 * per
length = (R - R * math.cos(math.radians(72))) / math.cos(math.radians(18))
核心函数代码省略(运用三角函数)#设置小五角星参数
on_x,under_x=[10,12],[12,10]
on_y,under_y=[2,4],[7,9]
on_tan,under_tan=[3/5,1/7],[2/7,4/5]
#绘制小五角星
for i in range(2):
starmac_sm_on(on_x[i],on_y[i],on_tan[i])
for i in range(2):
starmac_sm_under(under_x[i], under_y[i], under_tan[i])
turtle.done()
main()
以上就是使用turtle绘制国旗的案例,为方便大家阅读,加上了注释。再想一想,你还可以怎样给这个国旗加上旗杆呢?