|
发表于 2019-10-30 22:18:29
|
显示全部楼层
本帖最后由 cnpzhlq 于 2019-10-30 22:22 编辑
想问楼主一个问题:四颗小五角星倾斜的角度,和小五角星的边长,可以通过什么方法确定的。我是查询了画五星红旗的方法后,用三角函数计算出来的。有什么固定的模式,或者更简单的方法吗?我的程序太复杂了。我画的旗面是660*440,每个小格子是22。
import turtle as t
import math as m
import os,time
t.setup(width=1200,height=700)
t.reset()
t.speed(10)
#画红旗长方形
t.up()
t.goto(-300,200)
t.down()
t.color('red','red')
t.begin_fill()
t.fd(660)
t.rt(90)
t.fd(440)
t.rt(90)
t.fd(660)
t.rt(90)
t.fd(440)
t.end_fill()
#画分格线
t.pencolor('black')
t.rt(90)
t.fd(330)
t.rt(90)
t.fd(220)
t.rt(90)
t.fd(330)
t.rt(90)
t.fd(220)
t.rt(90)
for i in range(5):
t.fd(330)
t.rt(90)
t.fd(22)
t.rt(90)
t.fd(330)
t.lt(90)
t.fd(22)
t.lt(90)
t.up()
t.goto(-300,200)
t.down()
for i in range(7):
t.fd(22)
t.rt(90)
t.fd(220)
t.lt(90)
t.fd(22)
t.lt(90)
t.fd(220)
t.rt(90)
#画大五星
a = 66*m.cos(54*m.pi/180)
b = a/m.cos(36*m.pi/180)
t.color('yellow','yellow')
t.up()
t.goto(-190,156)
t.down()
t.rt(72)
t.speed(2)
#t.begin_fill()
for i in range(5):
t.fd(b)
t.lt(72)
t.fd(b)
t.rt(144)
#t.end_fill()
t.up()
t.hideturtle()
#第1、2、3、4颗小五星
x_list=[(-80,156),(-36,112),(-36,46),(-80,2)]
c_list=[]
d_list=[]
e_list=[5*22,7*22,2*22,4*22]
for i in range(4):
t.goto(x_list[i])
c = t.distance(-190,90)
d = m.degrees(m.asin(e_list[i]/c))
c_list.append(c)
d_list.append(d)
for i in range(4):
t.goto(x_list[i])
t.seth(0)
if i == 0 or i == 1:
t.rt(90+d_list[i])
else:
t.rt(180+d_list[i])
a_list=[]
for i in range(5):
t.fd(22)
a_list.append(t.pos())
t.bk(22)
t.rt(72)
t.goto(a_list[0])
t.down()
t.showturtle()
#t.begin_fill()
t.goto(a_list[2])
t.goto(a_list[4])
t.goto(a_list[1])
t.goto(a_list[3])
t.goto(a_list[0])
t.end_fill()
t.up()
t.hideturtle()
#测试小五星是否对正大五星
for i in range(4):
t.up()
t.goto(-190,90)
t.down()
t.goto(x_list[i])
t.hideturtle()
t.up()
#暂停
time.sleep(3)
os.system('pause')
#完整的画一面五星红旗
t.reset()
t.speed(10)
#画红旗长方形
t.up()
t.goto(-300,200)
t.down()
t.color('red','red')
t.begin_fill()
t.fd(660)
t.rt(90)
t.fd(440)
t.rt(90)
t.fd(660)
t.rt(90)
t.fd(440)
t.end_fill()
t.rt(90)
#画大五星
t.color('yellow','yellow')
t.hideturtle()
t.up()
t.goto(-190,90)
t.seth(0)
t.lt(90)
a_list=[]
for i in range(5):
t.fd(66)
a_list.append(t.pos())
t.bk(66)
t.rt(72)
t.goto(a_list[0])
t.down()
t.showturtle()
t.begin_fill()
t.goto(a_list[2])
t.goto(a_list[4])
t.goto(a_list[1])
t.goto(a_list[3])
t.goto(a_list[0])
t.end_fill()
t.up()
t.hideturtle()
#第1、2、3、4颗小五星
x_list=[(-80,156),(-36,112),(-36,46),(-80,2)]
c_list=[]
d_list=[]
e_list=[5*22,7*22,2*22,4*22]
for i in range(4):
t.goto(x_list[i])
c = t.distance(-190,90)
d = m.degrees(m.asin(e_list[i]/c))
c_list.append(c)
d_list.append(d)
for i in range(4):
t.goto(x_list[i])
t.seth(0)
if i == 0 or i == 1:
t.rt(90+d_list[i])
else:
t.rt(180+d_list[i])
a_list=[]
for i in range(5):
t.fd(22)
a_list.append(t.pos())
t.bk(22)
t.rt(72)
t.goto(a_list[0])
t.down()
t.showturtle()
t.begin_fill()
t.goto(a_list[2])
t.goto(a_list[4])
t.goto(a_list[1])
t.goto(a_list[3])
t.goto(a_list[0])
t.end_fill()
t.up()
t.hideturtle()
t.goto(-250,240)
t.down()
t.color('red')
t.write('祝祖国母亲70华诞生日快乐!',font=('隶书',32))
|
|