之前了解过用python中的turtle模块绘制国旗,但是很多介绍和画法都是错误的,中国国旗有严格的规则和标准,本文就是在了解国旗知识的前提下,给出的一个严格准确的绘制方法。
(1)了解一下中国国旗的知识。
•(一)基本介绍
旗面为红色,长方形,其长与高为三与二之比,旗面左上方缀黄色五角星五颗。一星较大,其外接圆直径为旗高十分之三,居左;四星较小,其外接圆直径为旗高十分之一,环拱于大星之右。旗杆套为白色。
•(二)五星之位置与画法如下:
•(1)为便于确定五星之位置,先将旗面对分为四个相等的长方形,将左上方之长方形上下划为十等分,左右划为十五等分。
•(2)大五角星的中心点,在该长方形上五下五、左五右十之处。其画法为:以此点为圆心,以三等分为半径作一圆。
•在此圆周上,定出五个等距离的点,其一点须位于圆之正上方。然后将此五点中各相隔的两点相联,使各成一直线。
•此五直线所构成之外轮廓线,即为所需之大五角星。五角星之一个角尖正向上方。
•(3)四颗小五角星的中心点,第一点在该长方形上二下八、左十右五之处,第二点在上四下六、左十二右三之处,
•第三点在上七下三、左十二右三之处,第四点在上九下一、左十右五之处。其画法为:以以上四点为圆心,各以一等分为半径,
•分别作四个圆。在每个圆上各定出五个等距离的点,其中均须各有一点位于大五角星中心点与以上四个圆心的各联结线上。
•然后用构成大五角星的同样方法,构成小五角星。此四颗小五角星均各有一个角尖正对大五角星的中心点。
•(三)国旗之通用尺度定为如下五种,各界酌情选用:
•(1)长288厘米,高192厘米。
•(2)长240厘米,高160厘米。
•(3)长192厘米,高128厘米。
•(4)长144厘米,高96厘米。
•(5)长96厘米,高64厘米。
(四)具体位置关系如下图:
(五)Python代码实现
#!/usr/bin/env python
# -*- coding: utf-8 –*-
''' 利用turtle类画五星红旗。'''
__author__ = 'xu xinjian'
import turtle
import math
'''定义一个坐标点的类'''
class Point:
def __init__(self,x=0,y=0):
self.x=x
self.y=y
def getx(self):
return self.x
def gety(self):
return self.y
'''定义个获取两点间距离的类'''
class Getlen:
def __init__(self,p1,p2):
self.x=p1.getx()-p2.getx()
self.y=p1.gety()-p2.gety()
#用math.sqrt()求平方根
self.len= math.sqrt((self.x**2)+(self.y**2))
#定义得到直线长度的函数
def getlen(self):
return self.len
'''初始化窗口和画布大小'''
turtle.setup(width=240*2,height=160*2,startx=350,starty=250)
turtle.bgcolor("red")
turtle.shape("turtle")
turtle.color("yellow","yellow")
'''
画大五角星
'''
turtle.penup()
turtle.goto(-160,108)
turtle.right(72)
turtle.pendown()
length1=2*48*math.cos(18)#计算五角星的边长
# print(length1)
turtle.begin_fill()#开始填充
#重复画五条边
for i in range(5):
turtle.forward(length1)
turtle.right(144)
turtle.end_fill()
'''回到大五角星的中心'''
turtle.penup()
turtle.goto(-160,80)
turtle.setheading(0)#朝向往右
'''
画第一个小五角星
'''
p0=Point(-160,80)
p1=Point(-80,124)
d1=Getlen(p0,p1).getlen() #
angle1=math.degrees(math.atan(3/5))
print("angle1:",angle1)
turtle.left(angle1)
turtle.penup()
turtle.forward(d1-16)
turtle.pendown()
turtle.left(18)
length2=2*16*math.cos(18)
turtle.begin_fill()
for i in range(5):
turtle.forward(length2)
turtle.right(144)
turtle.end_fill()
'''回到大五角星的中心'''
turtle.penup()
turtle.goto(-160,80)
turtle.setheading(0)
'''
画第二个小五角星
'''
p0=Point(-160,80)
p1=Point(-48,96)
d1=Getlen(p0,p1).getlen()
angle1=math.degrees(math.atan(1/7))
print("angle1:",angle1)
turtle.left(angle1)
turtle.penup()
turtle.forward(d1-16)
turtle.pendown()
turtle.left(18)
length2=2*16*math.cos(18)
turtle.begin_fill()
for i in range(5):
turtle.forward(length2)
turtle.right(144)
turtle.end_fill()
'''回到大五角星的中心'''
turtle.penup()
turtle.goto(-160,80)
turtle.setheading(0)
'''
画第三个小五角星
'''
p0=Point(-160,80)
p1=Point(-48,48)
d1=Getlen(p0,p1).getlen()
angle1=math.degrees(math.atan(2/7))
print("angle1:",angle1)
turtle.right(angle1)
turtle.penup()
turtle.forward(d1-16)
turtle.pendown()
turtle.left(18)
length2=2*16*math.cos(18)
turtle.begin_fill()
for i in range(5):
turtle.forward(length2)
turtle.right(144)
turtle.end_fill()
'''回到大五角星的中心'''
turtle.penup()
turtle.goto(-160,80)
turtle.setheading(0)
'''
画第四个小五角星
'''
p0=Point(-160,80)
p1=Point(-80,16)
d1=Getlen(p0,p1).getlen()
angle1=math.degrees(math.atan(4/5))
print("angle1:",angle1)
turtle.right(angle1)
turtle.penup()
turtle.forward(d1-16)
turtle.pendown()
turtle.left(18)
length2=2*16*math.cos(18)
turtle.begin_fill()
for i in range(5):
turtle.forward(length2)
turtle.right(144)
turtle.end_fill()
turtle.hideturtle()
turtle.mainloop()
(六)实现效果
转载请注明:XAMPP中文组官网 » Python实战项目_Python实现五星红旗的绘制