用python代码海龟绘图法绘制五星红旗

一、前言

我们要想运用python代码绘制出五星红旗,我们首先要对五星红旗的外观形状,长宽比,以及各五角星的方位进行了解。

二、五星红旗的介绍以及画法介绍

        红色为第,长宽比例为3:2。 左上方缀黄色五角星五颗,四颗小星环拱在一颗大星的右面,并各有一个角尖正对大星的中心点。甲、为便于确定五星之位置,先将旗面对分为四个相等的长方形,将左上方之长方形上下划为十等分,左右划为十五等分。乙、大五角星的中心点,在该长方形上五下五、左五右十之处。其画法为:以此点为圆心,以三等分为半径作一圆。在此圆周上,定出五个等距离的点,其一点须位于圆之正上方。然后将此五点中各相隔的两点相联,使各成一直线。此五直线所构成之外轮廓线,即为所需之大五角星。五角星之一个角尖正向上方。丙、四颗小五角星的中心点,第一点在该长方形上二下八、左十右五之处,第二点在上四下六、左十二右三之处,第三点在上七下三、左十二右三之处,第四点在上九下一、左十右五之处。其画法为:以以上四点为圆心,各以一等分为半径,分别作四个圆。在每个圆上各定出五个等距离的点,其中均须各有一点位于大五角星中心点与以上四个圆心的各联结线上。然后用构成大五角星的同样方法,构成小五角星。此四颗小五角星均各有一个角尖正对大五角星的中心点。

三、相关代码
import turtle as t
import math as m
 
def wjx(long):  #画五角星函数
    t.color('yellow')
    t.begin_fill()
    t.rt(180)
    for i in range(5):
        t.fd(long)
        t.rt(144)
    t.end_fill()
 
flag_w=eval(input("请输入国旗宽度:"))
flag_h=flag_w*2/3
t.setup(flag_w+60,flag_h+40,0,0)  #设置画布大小
c_len=flag_w/30     #单元格长度
    
def grid():     #画出辅助格子函数
    t.color("white")
    for i in range(11):
        t.penup()
        t.goto(-flag_w/2,flag_h/2-i*c_len)
        t.seth(0)
        t.pendown()
        t.fd(c_len*15)
 
    for i in range(16):
        t.seth(90)
        t.penup()
        t.goto(-i*c_len,0)
        t.pendown()
        t.fd(c_len*10)
        
t.color("red")  #国旗布背景
t.penup()
t.goto(-flag_w/2,flag_h/2)
t.pendown()
t.begin_fill()
t.fd(flag_w)
t.right(90)
t.fd(flag_h)
t.right(90)
t.fd(flag_w)
t.right(90)
t.fd(flag_h)
t.end_fill()
 
#grid()  #画出格子
 
t.color("yellow")   #大五角星
t.penup()
t.bk(c_len*5)
t.rt(90)
t.fd(c_len*5)
t.left(90+72)
r=flag_h/3/2    #大圆半径
t.fd(r)
t.rt(90+72)
t.pendown()
wjx(r*m.sin(36)*2)
 
#右上角第一个星
t.penup()
t.goto(-c_len*5,c_len*8)
t.seth(m.atan(3/5)*180/m.pi+180)
r=flag_h/10/2
t.fd(r)
t.rt(162)
t.pendown()
wjx(r*m.sin(36)*2)
 
#右上角第二个星
t.penup()
t.goto(-c_len*3,c_len*6)
t.seth(m.atan(1/7)*180/m.pi+180)
r=flag_h/10/2
t.fd(r)
t.rt(162)
t.pendown()
wjx(r*m.sin(36)*2)
 
#右下角第三个星
t.penup()
t.goto(-c_len*3,c_len*3)
t.seth(180-m.atan(2/7)*180/m.pi)
r=flag_h/10/2
t.fd(r)
t.rt(162)
t.pendown()
wjx(r*m.sin(36)*2)
 
#右下角第四个星
t.penup()
t.goto(-c_len*5,c_len*1)
t.seth(180-m.atan(4/5)*180/m.pi)
r=flag_h/10/2
t.fd(r)
t.rt(162)
t.pendown()
wjx(r*m.sin(36)*2)
 
t.penup()
t.goto(-c_len*10,c_len*5)
t.done()

绘制结果展示: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值