国旗标准参考资料: 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/BV1mL4
国旗标准参考资料:
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=d69d83b04649eb19a782df3614a6cc451
srgb色彩:五角星:黄色 背景:红色
大五角星:
五角星外角的计算:
假设四个小五角星的角尖正对水平方向,此时旋转向大五角星中心的角度计算:
我们假设以长方形中心为原点,建立xoy水平坐标系
补充:大五角星一开始角尖对应为-18°
如图所示
已经知道五角星小的内角为36°
已经知道五角星外接圆直径,计算五角星的边长:
理解了以上原理,可以开始写绘图小程序了
import turtleimport matht = turtle.Turtle()width = 300length = 200t.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:
600*400:
【文章原创作者:盐城网页制作 http://www.1234xp.com/yancheng.html 复制请保留原URL】