先做以五角星的中心点为原点画五角星的函数。
设五角星外接圆半径为r,五角星每条边长度为l。我以左上角为起始点。五角星每两角之间的角度为360°/5=72°。由于直角是90°,所以我要求的θ角为18°。以中心点为原点,则起始点坐标为:
(-r *cos18° , r *sin18°)
r *cos18°同时是五角星边长的一半。
五角星边长l=2*r*cos18°
然后做出给出坐标和长度画五角星的函数。五角星起始点的xy坐标要加上给出的五角星中心坐标。然后先画红的长方形,再根据国旗绘制标准中的位置和半径画出5个五角星。画笔先调成对应的颜色,直接开始上色。不用先画边框,因为上色的时候还要重新一样地画一遍。
import turtle as t
import math
def draw_star(r,pos):
x=pos[0]
y=pos[1]
rad=math.radians(18)#角度18°所对应的弧度
l=r*math.cos(rad)*2 #每笔长度=r*cos18°*2, r为外接圆半径
start_x= -r*math.cos(rad) #五角星起始点坐标:(-r*cos18°,r*sin18°)
start_y=r*math.sin(rad)
star_t = t.Turtle()
star_t.penup()
star_t.goto(x+start_x,y+start_y)#先抬笔,移动到起始点,再落笔#中心坐标+五角星内起始坐标
star_t.pendown()
star_t.pencolor(Prcflag_yellow_str)
'''
for x in range(5):
star_t.forward (l)
star_t. right (144)'''
star_t.begin_fill()
star_t.fillcolor(Prcflag_yellow_str)
for _ in range(4):
star_t.forward(l)
star_t.right(144)
star_t.end_fill()
star_t.hideturtle()
#t.done()
#国旗颜色 参考:
#https://www.zhihu.com/question/50092837
'''
红色 R=238, G=28, B=37
黄色 R=255, G=255, B=0
'''
Prcflag_red=(238,28,37)
Prcflag_yellow=(255,255,0)
Prcflag_red_str = "#%02x%02x%02x" % Prcflag_red#将颜色代码转换为字符串表示,然后传递给pencolor()函数
Prcflag_yellow_str = "#%02x%02x%02x" % Prcflag_yellow
rectangle= t.Turtle()
#canvas=t.Screen()
rectangle.pencolor(Prcflag_red_str)
rectangle.begin_fill()
rectangle.fillcolor(Prcflag_red_str)
rectangle.penup()
rectangle.goto(-300,200)#起始位置
rectangle.pendown()
for i in range(2):
rectangle.forward(600)
rectangle.right(90)
rectangle.fd(400)#国旗长宽比为3:2
rectangle.right(90)
rectangle.end_fill()
rectangle.hideturtle()
#画五个五角星
'''
(一)旗面为红色,长方形,其长与高为三与二之比,旗面左上方缀黄色五角星五颗。一星较大,其外接圆直径为旗高十分之三,居左;四星较小,其外接圆直径为旗高十分之一,环拱于大星之右。
故大星外接圆半径为(3/10)*400/2=60
小星外接圆半径为(1/10)*400/2=20
(二)五星之位置与画法如下:
甲、为便于确定五星之位置,先将旗面对分为四个相等的长方形,将左上方之长方形上下划为十等分,左右划为十五等分。
乙、大五角星的中心点,在该长方形上五下五、左五右十之处。其画法为:以此点为圆心,以三等分为半径作一圆。在此圆周上,定出五个等距离的点,其一点须位于圆之正上方。然后将此五点中各相隔的两点相联,使各成一直线。此五直线所构成之外轮廓线,即为所需之大五角星。五角星之一个角尖正向上方。
丙、四颗小五角星的中心点,第一点在该长方形上二下八、左十右五之处,第二点在上四下六、左十二右三之处,第三点在上七下三、左十二右三之处,第四点在上九下一、左十右五之处。其画法为:以以上四点为圆心,各以一等分为半径,分别作四个圆。在每个圆上各定出五个等距离的点,其中均须各有一点位于大五角星中心点与以上四个圆心的各联结线上。然后用构成大五角星的同样方法,构成小五角星。此四颗小五角星均各有一个角尖正对大五角星的中心点。
参考:
https://mp.weixin.qq.com/s?__biz=MzUzNzcxODIzOQ==&mid=2247486721&idx=4&sn=9645a87e3e831820830265385a905318&chksm=fae3f1b1cd9478a779199eb756c960a243ab71cf3ce5ead275c90b6320adedb975e8eb387cb2&scene=27
这里小五角星一角对中心点没做到
'''
star_pos=[[-200,100],[-100,160],[-60,120],[-60,60],[-100,20]]#五角星的坐标。第一个为大五角星,其余四个一次是从上到下的四个小五角星
draw_star(60,star_pos[0])#画大五角星
for i in range(1,5):
draw_star(20,star_pos[i])
t.done()
我画的还是有点不标准。因为标准要求四颗五角星每一颗的其中一个尖要对准大五角星的中心。这个有点麻烦。大家可以自己想一下怎么画(更简单)。欢迎交流。