用turtle库绘制标准中国国旗

时间:2022-12-21 07:13:56

国旗标准参考资料:

1:​​https://baike.baidu.com/item/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%9B%BD%E6%97%97/240342?fromModule=search-result_lemma​

2:​​https://www.bilibili.com/video/BV1mL4y1J7Yw/?spm_id_from=333.999.0.0&vd_source=d69d83b04649eb19a782df3614a6cc45​​1       

srgb色彩:五角星:黄色 背景:红色

大五角星:

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗



五角星外角的计算:

用turtle库绘制标准中国国旗

用turtle库绘制标准中国国旗



 假设四个小五角星的角尖正对水平方向,此时旋转向大五角星中心的角度计算:

我们假设以长方形中心为原点,建立xoy水平坐标系

用turtle库绘制标准中国国旗

补充:大五角星一开始角尖对应为-18°

如图所示

已经知道五角星小的内角为36°

用turtle库绘制标准中国国旗




已经知道五角星外接圆直径,计算五角星的边长:

用turtle库绘制标准中国国旗



理解了以上原理,可以开始写绘图小程序了

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()

附:可将t =turtle.Pen()删除,将所有t 式子改成turtle

最终结果

300*200:


用turtle库绘制标准中国国旗

600*400:

用turtle库绘制标准中国国旗