五星红旗要求 每个小的星星的角都对着大的五角星的中心,下面这个每个格子的长度是20,我们根据turtle的api 就能画出该图。如图是小学生都能画出来的错误的五角星朝向,我们肯定不能这样画。
当然我们要绘制这种 用到初三数学三角函数的五星红旗。
导入turtle 绘制红色长方形 与最大的五角星
import turtle
import math
#红色布
turtle.penup()
turtle.goto(300,200)
turtle.pendown()
turtle.color("red","red")
turtle.begin_fill()
for i in range(2):
turtle.right(90)
turtle.forward(400)
turtle.right(90)
turtle.forward(600)
turtle.end_fill()
#最大的五角星
turtle.color("yellow","yellow")
turtle.penup()
turtle.goto(-260,120)
turtle.pendown()
turtle.begin_fill()
for i in range(5):
turtle.forward(120)
turtle.right(144)
turtle.end_fill()
五角星的每个角度是 36°,分析每个小的五角星的中心位置
求出每个小五角星初始边 与 水平线的度数,turtle的初始方向
然后再求出四个小五角星 开始点的位置
示范求出第一个
五角星中点 到每个角之间的距离
r = 20 / math.cos(math.pi / 180 * 18)
每个点的坐标 放到列表里
p = [(-100 - r * math.cos(math.pi / 180 * 30), 160 - r * math.sin(math.pi / 180 * 30)),
(-60 - r * math.cos(math.pi / 180 * 8), 120 - r * math.sin(math.pi / 180 * 8)),
(-60 - r * math.cos(math.pi / 180 * 16), 60 + r * math.sin(math.pi / 180 * 16)),
(-100 - r * math.cos(math.pi / 180 * 39), 20 + r * math.sin(math.pi / 180 * 39))]
完整代码,很快就会画完
import turtle
import math
turtle.hideturtle()
# 画红色的布
turtle.penup()
turtle.goto(300, 200)
turtle.pendown()
turtle.color("red", "red")
turtle.begin_fill()
for i in range(2):
turtle.right(90)
turtle.forward(400)
turtle.right(90)
turtle.forward(600)
turtle.end_fill()
# 画最大的五角星
turtle.color("yellow", "yellow")
turtle.penup()
turtle.goto(-260, 120)
turtle.pendown()
turtle.begin_fill()
for i in range(5):
turtle.forward(120)
turtle.right(144)
turtle.end_fill()
# 每个正方形格子的边长是20
r = 20 / math.cos(math.pi / 180 * 18)
# 4个小五角星的初始点位置
p = [(-100 - r * math.cos(math.pi / 180 * 30), 160 - r * math.sin(math.pi / 180 * 30)),
(-60 - r * math.cos(math.pi / 180 * 8), 120 - r * math.sin(math.pi / 180 * 8)),
(-60 - r * math.cos(math.pi / 180 * 16), 60 + r * math.sin(math.pi / 180 * 16)),
(-100 - r * math.cos(math.pi / 180 * 39), 20 + r * math.sin(math.pi / 180 * 39))]
# 求出 四个五角星的初始边的方向
a = int(math.degrees(math.atan(3 / 5)) + 18)
b = int(math.degrees(math.atan(1 / 7)) + 18)
c = int(-math.degrees(math.atan(2 / 7)) + 18)
d = int(360 + (-math.degrees(math.atan(4 / 5)) + 18))
t = [a, b, c, d]
# 画出剩下四个五角星
for i in range(4):
turtle.penup()
turtle.goto(p[i][0], p[i][1])
turtle.setheading(t[i])
turtle.pendown()
turtle.begin_fill()
for i in range(5):
turtle.forward(40)
turtle.right(144)
turtle.end_fill()
turtle.done()