python 绘制五星红旗(包含三角函数)

祖国万岁,五星红旗在我心中飘扬


五星红旗要求 每个小的星星的角都对着大的五角星的中心,下面这个每个格子的长度是20,我们根据turtle的api 就能画出该图。如图是小学生都能画出来的错误的五角星朝向,我们肯定不能这样画。

python 绘制五星红旗(包含三角函数)_第1张图片

当然我们要绘制这种 用到初三数学三角函数的五星红旗。

python 绘制五星红旗(包含三角函数)_第2张图片

 导入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°,分析每个小的五角星的中心位置

python 绘制五星红旗(包含三角函数)_第3张图片

求出每个小五角星初始边 与 水平线的度数,turtle的初始方向

 python 绘制五星红旗(包含三角函数)_第4张图片

 然后再求出四个小五角星 开始点的位置

python 绘制五星红旗(包含三角函数)_第5张图片

示范求出第一个 

python 绘制五星红旗(包含三角函数)_第6张图片

五角星中点 到每个角之间的距离 

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

你可能感兴趣的:(python,python,开发语言)