用Python绘制青天白日旗和青天白日满地红旗

Posted zhangziyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Python绘制青天白日旗和青天白日满地红旗相关的知识,希望对你有一定的参考价值。

青天白日旗:

import turtle as t
import math
t.colormode(255)
rcblue=(4,0,174)

def ol(r,n):
    na = 15 / 180 * math.pi
    ol=2*r*math.cos(na)
    ol=int(round(ol))
    return ol

def loop(r,n):
    t.fd(ol(r,n))
    t.right(150)

def main1(a,b):
    t.color(gray,rcblue)
    t.penup()
    t.right(90)
    t.fd(b/2)
    t.left(90)
    t.pendown()
    t.begin_fill()
    t.fd(a/2)
    t.left(90)
    t.fd(b)
    t.left(90)
    t.fd(a)
    t.left(90)
    t.fd(b)
    t.left(90)
    t.fd(a/2)
    t.end_fill()
    t.penup()
    t.goto(0,0)
    t.seth(0)
    t.pendown()

def main2(r,n):
    t.pensize = 20
    t.color(white, white)
    t.penup()
    t.fd(r)
    t.right(180 - 30 / 2)
    t.pendown()
    t.begin_fill()
    for i in range(12):
        loop(r,n)
    t.end_fill()
    t.penup()
    t.goto(0,0)
    t.seth(0)
    t.pendown()

def main3(r1,r2):
    t.color(rcblue, rcblue)  # t.color(),not t.pencolor()
    t.begin_fill()
    t.up()
    t.right(90)
    t.fd(r1)
    t.left(90)
    t.pd()
    t.circle(r1)
    t.goto(0, 0)
    t.end_fill()
    t.color(white, white)
    t.begin_fill()
    t.pu()
    t.right(90)
    t.fd(r2)
    t.left(90)
    t.pd()
    t.circle(r2)
    t.end_fill()
    t.penup()
    t.goto(0, 0)
    t.seth(0)
    t.pendown()

def main():
    r=a/4
    n=8
    r2=a/8
    r1=b*17/80
    main1(a,b)
    main2(r,n)
    main3(r1,r2)

a=1020
b=680
t.setup(1000,700,100,0)
main()
t.done()

旗图:

技术分享图片

 

青天白日满地红旗的核心还是绘制青天白日旗,需要注意坐标:

import turtle as t
import math
t.colormode(255)
rcblue=(4,0,174)
rcred=(254,0,0)

def ol(r,n):
    na = 15 / 180 * math.pi
    ol=2*r*math.cos(na)
    ol=int(round(ol))
    return ol

def loop(r,n):
    t.fd(ol(r,n))
    t.right(150)

def main0(a,b):  #没有循环和复杂角度操作的时候用goto比较快
    t.color(rcred)
    t.penup()
    t.goto(-a/2,b/2)
    t.pendown()
    t.begin_fill()
    t.goto(-a/2,-b/2)
    t.goto(a/2,-b/2)
    t.goto(a/2,b/2)
    t.end_fill()
    t.penup()
    t.goto(-a/4,b/4)
    t.pendown()

def main1(a1,b1):
    t.color(gray,rcblue)
    t.penup()
    t.right(90)
    t.fd(b1/2)
    t.left(90)
    t.pendown()
    t.begin_fill()
    t.fd(a1/2)
    t.left(90)
    t.fd(b1)
    t.left(90)
    t.fd(a1)
    t.left(90)
    t.fd(b1)
    t.left(90)
    t.fd(a1/2)
    t.end_fill()
    t.penup()
    t.goto(-a/4,b/4)
    t.seth(0)
    t.pendown()

def main2(r,n):
    t.pensize = 20
    t.color(white, white)
    t.penup()
    t.fd(r)
    t.right(180 - 30 / 2)
    t.pendown()
    t.begin_fill()
    for i in range(12):
        loop(r,n)
    t.end_fill()
    t.penup()
    t.goto(-a/4,b/4)
    t.seth(0)
    t.pendown()

def main3(r1,r2):
    t.color(rcblue, rcblue)  # t.color(),not t.pencolor()
    t.begin_fill()
    t.up()
    t.right(90)
    t.fd(r1)
    t.left(90)
    t.pd()
    t.circle(r1)
    t.end_fill()
    t.penup()
    t.goto(-a/4,b/4)
    t.pendown()
    t.color(white, white)
    t.begin_fill()
    t.pu()
    t.right(90)
    t.fd(r2)
    t.left(90)
    t.pd()
    t.circle(r2)
    t.end_fill()
    t.penup()
    t.goto(-a/4,b/4)
    t.seth(0)
    t.pendown()

def main(a,b):
    a1 = a / 2
    b1 = b / 2
    r = a1 / 4
    n = 8
    r2 = a1 / 8
    r1 = b1 * 17 / 80
    main0(a,b)
    main1(a1,b1)
    main2(r,n)
    main3(r1,r2)

a=1020
b=680
t.setup(1100,700,100,0)
main(a,b)
t.done()

旗图:

技术分享图片

以上是关于用Python绘制青天白日旗和青天白日满地红旗的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASP.Net 的优雅语义 CSS 仍然是白日梦吗?

Daydream a Little+偶尔做一下白日梦

青天揽星辰团队-冲刺日志第二天

青天揽星辰团队-冲刺日志第一天

工业4.0是个白日梦吗?

青天揽星辰团队——需求分析规格说明书