我们生在红旗下,长在春风里。人民有信仰,国家有力量。

用python(turlte库)画出我们的五星红旗。

import turtle
import math

t = turtle.Pen()
width = 1000
height = 700
t.speed(6)
# 设置画笔的绘制速度 值为 --> 1(慢)-->10(快) ,0为最快
t.screen.title('祖国万岁')
# 设置图画的名称
t.screen.setup(width, height)
# 设置画布的大小 宽 高 (正好等于五星红旗的 宽高)
t.screen.bgcolor('red')
# 设置画布的颜色,此处设为五星红旗的底色红色
t.fillcolor('yellow')
# 五角星的填充颜色
t.pencolor('yellow')
# 画笔颜色 和五角星颜色一致


# 计算不同直径外接圆的五角星的边长(比如6) 当被调用的时候直接返回结果(具体的边长)
def side_length(diameter):  # diameter:直径
    return math.sin(math.radians(72)) * diameter * 30


# 将画布平均分为 宽30个单位正方形  高20个单位正方形 的坐标参考系
# 计算每一个小正方形格子的实际宽度 用以移动画笔 当被调用的时候直接返回结果
def scale(diameter):  # scale:比例尺   diameter代表格子数(五角星外接圆的直径)
    return width / 30 * diameter  # width/30代表每一个格子的实际长度


# 绘制不同大小的五角星 每个五角星的画法轨迹是一样的
def star(diameter, angle):
    # star:星星  第一个参数代表五角星的外接圆直径 第二个代表画笔旋转角度
    t.setheading(angle)
    # 当画笔来到某个五角星的中心点后,对画笔的指向进行调整,以使小五角星一角指向大五角星的中心
    t.forward(scale(diameter) / 2)
    # 画笔从五角星的中心点前进到五角星的起始绘制点 距离为外接圆直径的一半 所以要除以2
    t.setheading(angle - 180)
    # 使画笔指向180°反转 本来都是向左的 现在调成向右
    t.left(18)
    # 画笔再次进行微调18度(五角星内角的一半) 准确指向将要开始绘制第一条边的方向
    t.begin_fill()
    # 准备颜色填充  填充将要绘制出的五角星
    for i in range(5):
        t.forward(side_length(diameter))
        t.right(144)
    t.end_fill()  # 颜色填充 直到结束


def spin(x, y):
    # spin:旋转 主要是为了4个小五角星都有1个角都能对准大五角星的中心
    return math.degrees(math.atan2(x, y))


def national_flag(x, y, z, h):
    # x:从往左移格数 y:往上移格数 z:五角星直径 h:画笔旋转角度
    t.up()
    t.goto(-scale(x), scale(y))
    t.down()
    star(z, h)


national_flag(10, 5, 6, 180 - 18)
# (五角星中心点位置:从画布中心左移距离,上移格数,尺寸,画笔旋转角度)
national_flag(5, 8, 2, spin(3, 5) + 180)
# 第一个小五角星
national_flag(3, 6, 2, spin(1, 7) + 180)
# 第二个小五角星
national_flag(3, 3, 2, 180 - spin(2, 7))
# 第三个小五角星
national_flag(5, 1, 2, 180 - spin(4, 5))
# 第四个小五角星

t.hideturtle()
turtle.done()

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐