用python绘制五星红旗

标准国旗:宽:高 = 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()

#成品图展示

07347874e04447e08ec6b4197c563d52.png

#记得收藏加关注,投币打赏不迷路!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潇墨დ

点赞加关注,打赏不迷路!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值