向五星红旗致敬 —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绘制国旗的案例,为方便大家阅读,加上了注释。再想一想,你还可以怎样给这个国旗加上旗杆呢?