import turtle
import math
t = turtle.Turtle()
width = 300
length = 200
t.speed(0)
t.screen.title("five stars")
t.screen.setup(width,length)
t.screen.bgcolor('red')
t.fillcolor('yellow')
t.pencolor('yellow')
def scale(diameter):# scale:比例尺 diameter代表格子数(五角星外接圆的直径)
return diameter*width/30 # width/30代表每一个格子的实际长度
def side_length(diameter): # 定义函数 side_length,传入参数 diameter
return math.sin(math.radians(72))*diameter*width/30
# 返回 72 度的正弦值乘以直径除以 30 的结果
def spin(x,y): # 定义函数 spin,传入参数 x 和 y
return math.degrees(math.atan2(x,y)) # 返回 x 和 y 的反正切值的角度
# 绘制不同大小的五角星 每个五角星的画法轨迹是一样的
def star(diameter, angle):
# star:星星 第一个参数代表五角星的外接圆直径 第二个代表画笔旋转角度
t.setheading(angle)
# 当画笔来到某个五角星的中心点后,对画笔的指向进行调整,以使小五角星一角指向大五角星的中心
t.backward(scale(diameter/2) )
# 画笔从五角星的中心点前进到五角星的起始绘制点 距离为外接圆直径的一半 所以要除以2
t.left(18)
# 画笔再次进行微调18度(五角星内角的一半) 准确指向将要开始绘制第一条边的方向
t.begin_fill()
# 准备颜色填充 填充将要绘制出的五角星
for i in range(5):
t.forward(side_length(diameter))
t.right(144)
t.end_fill() # 颜色填充 直到结束
def nation_flag(x, y, z, h):
t.up()
t.goto(-scale(x), scale(y))
t.down()
star(z, h)
nation_flag(10, 5, 6, -18)
nation_flag(5, 8, 2, +spin(3, 5))
nation_flag(3, 6, 2, +spin(1, 7))
nation_flag(3, 3, 2, -spin(2, 7))
nation_flag(5, 1, 2, -spin(4, 5))
t.hideturtle()
turtle.done()