python画国旗-五星红旗
如何用python绘制一面国旗
前言
了解一些国旗的一些基本知识:
旗帜图案
1、五星红旗制作标准是:先将旗面划分为4个等分长方形,再将左上方长方形划分长宽15×10个方格。大五角星的中心位于该长方形上5下5、左5右10之处。大五角星外接圆的直径为6单位长度。
2、四颗小五角星的中心点,第一颗位于上2下8、左10右5,第二颗位于上4下6、左12右3,第三颗位于上7下3、左12右3,第四颗位于上9下1、左10右5之处。
3、每颗小五角星外接圆的直径均为2单位长度。四颗小五角星均有一角尖正对大五角星的中心点。
4、根据《中华人民共和国国旗法》第四条规定,制作国旗的企业由省、自治区和直辖市的人民政府指定。国旗的长宽之比为3:2。
尺寸规格
根据1949年9月28日中国人民政治协商会议第一届全体会议主席团公布的《国旗制法说明》,中华人民共和国国旗之通用尺度定为如下五种,各界酌情选用:
甲、长288公分,高192公分。
乙、长240公分,高160公分。
丙、长192公分,高128公分。
丁、长144公分,高96公分。
戊、长96公分,高64公分
可以根据墨线法绘制国旗,如下图:
具体实现
1.生成一个空白窗口
利用tkinter
及math
库实现,tkinter实现可视化界面,math主要用于计算坐标点;定义窗口的长跟宽,并生成一个窗口
1 |
|
2.画出红旗底面
生成一个红色背景的矩形,宽、高与窗口相同是为了便于后续计算中心点坐标
1 |
|
3.计算五角星中心点坐标
五星红旗制作标准是:先将旗面划分为4个等分长方形,再将左上方长方形划分长宽15×10个方格。大五角星的中心位于该长方形上5下5、左5右10之处。大五角星外接圆的直径为6单位长度。
四颗小五角星的中心点,第一颗位于上2下8、左10右5,第二颗位于上4下6、左12右3,第三颗位于上7下3、左12右3,第四颗位于上9下1、左10右5之处。
通过下面的函数可以,根据输入的宽、高值返回指定五角星的中心点及外接圆半径值。star_type
中的0-4分别表示大五角星及从上到到下的4颗小五角星;将宽平均分为30份、高平均分为20份,完成五角星坐标中心坐标计算。
1 |
|
4.计算五角星的5个顶点坐标
根据正五角星的数学特性,∠OEL=18°,∠GEL=36°,∠EOL=72°,OE为外切圆半径就是radius,那么根据数学公式:
sin18° = OL / OE => OL = sin18° * OE 或者 cos72° =OL/OE => OL=cos72° *OE
cos18° = EL / OE => EL = cos18° * OE 或者 sin72° = EL/OE => EL=sin72° *OE
tan36° = GL / EL => GL = tan36° * EL
所以各个点的坐标计算公式如下:
左上点
center_x-r*math.sin(2*math.pi/5),
center_y-r*math.cos(2*math.pi/5)右上点
center_x+r*math.sin(2*math.pi/5),
center_y-r*math.cos(2*math.pi/5)左下点
center_x-r*math.sin(math.pi/5),
center_y+r*math.cos(math.pi/5)顶点
center_x,
center_y-r右下点
center_x+r*math.sin(math.pi/5),
center_y+r*math.cos(math.pi/5)
完整的函数可以按如下定义:
1 |
|
5.旋转小五角星
上面的四颗小五角星还没旋转角度,我们要计算出每个小五角星的旋转角度,首先算出大五角星外切圆圆心和每个小五角星外切圆圆心的角度,如下:
⭐︎第一颗:Math.atan(3 / 5) * 180 / Math.PI ≈ 30.96°
⭐︎第二颗:Math.atan(1 / 7) * 180 / Math.PI ≈ 8.13°
⭐︎第三颗:Math.atan(2 / 7) * 180 / Math.PI ≈ 15.94°
⭐︎第四颗:Math.atan(4 / 5) * 180 / Math.PI ≈ 38.66°
最后还要加减18°(18°为五角星外部角的一半值),得到-48.96°,-26.13°,-2.06,20.66这几个数据。代码实现如下:
1 |
|
根据输入的一组坐标点,中心点X、Y及旋转角度,完成对坐标点的转换,返回一组新的坐标点。
6.完成国旗的绘制
根据前面定义的函数,完成完整国旗的绘制:
1 |
|
完整代码
完整代码如下:
1 |
|