标准国旗:宽:高 = 3:2
五个星在四分之一旗的左上角,分布在横15格和竖10格中
大星为旗高的三分之一做圆直径,小星为旗高的十分之一做圆直径
星的分布:大星圆心:上5下5左5右10格处
1小星圆心:上2下8左10右5格处
2小星圆心:上4下6左12右3格处
3小星圆心:上7下3左12右3格处
1小星圆心:上9下1左10右5格处
每个小星有一角对着大星的圆心
#练习1 参数设置
导入需要的包,并将自己姓名的后两字缩写作为turtle包的别名
设置所需要的参数,包括:
窗口大小(960*640),起点(变量名为x和y后面加两位学号,取值为学号后两位)
窗口标题(学号,中文姓名)
小方格的长和宽(旗面的四分之一划分为15*10个方格)
星的直径,半径(大星为旗面高度的1/3,小星直径为旗面高度的1/10)
星的边长(直径*cos(18),注意18要转换为弧度)
import turtle as yk#导入python中的画画工具包,as为更换名字
import math
width,height,x1,y1=960,640,1,1
yk.setup(width,height,x1,y1)
yk.title("Nation flag")
x,y=width/2/15,height/2/10
D,d=height/3,height/10
R,r=D/2,d/2
H,h=D*math.cos(18*math.pi/180),d*math.cos(18*math.pi/180)
yk.bgcolor("red")
yk.speed(10)
# 练习2 绘制大五角星
设置国旗的底色为红色(red)
设置笔的粗细
将笔移到到合适的位置(后移10格,左转90,上移5格和一个半径)
设置起笔方向(右转162)
设置笔的颜色(yellow)
设置填充色(yellow)
绘制大五角星(每个内角为36度)
yk.penup()
yk.pensize(5)
yk.fd(-10*x)
yk.lt(90)
yk.fd(5*y+R)
yk.rt(162)
yk.color("yellow")
yk.fillcolor("yellow")
yk.begin_fill()
for i in range (5):
yk.forward(H)
yk.right(144)
yk.end_fill()
# 练习3 绘制第一个小五角星
调整笔的方向(竖直向下)
设置笔的颜色(blue)
将笔移到合适位置(先回到圆心,然后右移5格,再上移3格)
调整起笔的角度(方向指向大星的圆心)
沿当前方向移到角尖
调整方向(右转162)
设置笔及填充色(yellow)
绘制第一个小五角星
yk.penup()
yk.color('green')
yk.rt(18)
yk.fd(R)
yk.lt(90)
yk.fd(5*x)
yk.lt(90)
yk.fd(3*y)
yk.lt(90+math.atan(3*y/(5*x))*180/math.pi)
yk.fd(r)
yk.rt(162)
yk.color('yellow')
yk.fillcolor('yellow')
yk.begin_fill()
for i in range(5):
yk.fd(h)
yk.rt(144)
yk.end_fill()
# 练习4 绘制第二个小五角星
调整角度,回到圆心
调整角度,竖直向下两格
水平向右两格
调整角度,指向大星的圆心(atan(y/(7*x),转换为角度)
移动到角尖
右转162
设置颜色
绘制第二个小五角星
yk.penup()
yk.color('blue')
yk.rt(18)
yk.fd(r)
yk.rt(90+math.atan(3*y/(5*x))*180/math.pi)
yk.fd(2*y)
yk.lt(90)
yk.fd(2*x)
yk.rt(180-math.atan(y/(7*x))*180/math.pi)
yk.fd(r)
yk.rt(162)
yk.color('yellow')
yk.fillcolor('yellow')
yk.begin_fill()
for i in range(5):
yk.fd(h)
yk.rt(144)
yk.end_fill()
# 练习5 绘制第三个小五角星
设置笔的颜色(green)
调整角度,回到圆心
调整角度,竖直向下
将笔移到合适位置(3*y-r)
调整起笔的角度
设置颜色,绘制第三个小五角星
yk.penup()
yk.rt(18)
yk.pencolor('green')
yk.fd(r)
yk.rt(90+math.atan(y/(x*7))*180/math.pi)
yk.fd(3*y-r)
yk.lt(18)
yk.color('yellow')
yk.fillcolor('yellow')
yk.begin_fill()
for i in range(5):
yk.fd(h)
yk.rt(144)
yk.end_fill()
# 练习6 绘制第四个小五角星
将笔移到合适位置
调整起笔的角度
绘制第四个小五角星
yk.penup()
yk.color('black')
yk.rt(18)
yk.fd(r+2*y)
yk.rt(90)
yk.fd(x*2)
yk.rt(math.atan(y*4/(x*5))*180/math.pi)
yk.fd(r)
yk.rt(162)
yk.color('yellow')
yk.fillcolor('yellow')
yk.begin_fill()
for i in range(5):
yk.fd(h)
yk.rt(144)
yk.end_fill()
yk.hideturtle()
yk.done()
#说明7
1.隐藏画笔
yk.hideturtle()
2.隐藏海龟爬行痕迹
yk.penup()
注:每一条直线开始都要先penup,开始画星之前再pendown(方便排错错误)
3.import turtle as yk
as为更换名字(按实际需求更改)
4.width,height,x1,y1=968,648,1,1
yk.setup(width,height,x12,y12)
x1,y1=968,648,1,1(x,y下标按实际需求更改,图的尺寸同理)
#完整代码
#练习1 参数设置
import turtle as yk#导入python中的画画工具包
import math
width,height,x1,y1=960,640,1,1
yk.setup(width,height,x12,y12)
yk.title("Nation flag")
x,y=width/2/15,height/2/10
D,d=height/3,height/10
R,r=D/2,d/2
H,h=D*math.cos(18*math.pi/180),d*math.cos(18*math.pi/180)
yk.bgcolor("red")
yk.speed(10)
# 练习2 绘制大五角星
yk.penup()
yk.pensize(5)
yk.fd(-10*x)
yk.lt(90)
yk.fd(5*y+R)
yk.rt(162)
yk.color("yellow")
yk.fillcolor("yellow")
yk.begin_fill()
for i in range (5):
yk.forward(H)
yk.right(144)
yk.end_fill()
# 练习3 绘制第一个小五角星
yk.penup()
yk.color('green')
yk.rt(18)
yk.fd(R)
yk.lt(90)
yk.fd(5*x)
yk.lt(90)
yk.fd(3*y)
yk.lt(90+math.atan(3*y/(5*x))*180/math.pi)
yk.fd(r)
yk.rt(162)
yk.color('yellow')
yk.fillcolor('yellow')
yk.begin_fill()
for i in range(5):
yk.fd(h)
yk.rt(144)
yk.end_fill()
# 练习4 绘制第二个小五角星
yk.penup()
yk.color('blue')
yk.rt(18)
yk.fd(r)
yk.rt(90+math.atan(3*y/(5*x))*180/math.pi)
yk.fd(2*y)
yk.lt(90)
yk.fd(2*x)
yk.rt(180-math.atan(y/(7*x))*180/math.pi)
yk.fd(r)
yk.rt(162)
yk.color('yellow')
yk.fillcolor('yellow')
yk.begin_fill()
for i in range(5):
yk.fd(h)
yk.rt(144)
yk.end_fill()
# 练习5 绘制第三个小五角星
yk.penup()
yk.rt(18)
yk.pencolor('green')
yk.fd(r)
yk.rt(90+math.atan(y/(x*7))*180/math.pi)
yk.fd(3*y-r)
yk.lt(18)
yk.color('yellow')
yk.fillcolor('yellow')
yk.begin_fill()
for i in range(5):
yk.fd(h)
yk.rt(144)
yk.end_fill()
# 练习6 绘制第四个小五角星
yk.penup()
yk.color('black')
yk.rt(18)
yk.fd(r+2*y)
yk.rt(90)
yk.fd(x*2)
yk.rt(math.atan(y*4/(x*5))*180/math.pi)
yk.fd(r)
yk.rt(162)
yk.color('yellow')
yk.fillcolor('yellow')
yk.begin_fill()
for i in range(5):
yk.fd(h)
yk.rt(144)
yk.end_fill()
yk.hideturtle()
yk.done()
#成品图展示
#记得收藏加关注,投币打赏不迷路!!!