Python123画一个五星红旗

点击查看代码
import turtle
import math

# 初始化画布(推荐设置600x400显示区域)
screen = turtle.Screen()
screen.colormode(1.0)
t = turtle.Turtle()
t.speed(10)
t.hideturtle()

# 国旗标准参数
FLAG_WIDTH = 600       # 旗面宽度
FLAG_HEIGHT = 400      # 严格3:2比例
MAIN_STAR_DIA = 80     # 大星外接圆直径(原120的2/3)
STAR_RATIO = 0.3       # 小星比例系数
STAR_SPACING = 60      # 最小间距参数(同比缩小)

# 颜色标准(GB 12983-2004)
FLAG_RED = (222/255, 41/255, 16/255)
STAR_YELLOW = (1.0, 222/255, 0.0)

# 绘制红色旗面
t.penup()
t.goto(-FLAG_WIDTH/2, FLAG_HEIGHT/2)
t.pendown()
t.color(FLAG_RED)
t.begin_fill()
for _ in range(2):
    t.forward(FLAG_WIDTH)
    t.right(90)
    t.forward(FLAG_HEIGHT)
    t.right(90)
t.end_fill()

def draw_star(x, y, size, direction):
    """黄金比例五角星绘制函数"""
    t.penup()
    t.goto(x, y)
    t.setheading(direction)
    
    # 精确几何参数
    radius = size / 2
    edge = radius * math.sin(math.radians(72))  # 边长公式
    
    t.color(STAR_YELLOW)
    t.begin_fill()
    for _ in range(5):
        t.forward(edge)
        t.right(144)
        t.forward(edge)
        t.left(72)
    t.end_fill()

# 大星定位(标准位置:左上四分之一中心)
main_x = -FLAG_WIDTH//2 + FLAG_WIDTH//4
main_y = FLAG_HEIGHT//2 - FLAG_HEIGHT//4
draw_star(main_x, main_y, MAIN_STAR_DIA, 90)

# 小星定位参数(按比例缩小后的坐标)
star_params = [
    # (x偏移, y偏移, 基准角度)
    (80,  53, 56.3),  # 右上第一星(原120,80缩小2/3)
    (120, 13, 42.7),  # 右上第二星(原180,20缩小2/3)
    (120, -40, -42.7),# 右下第一星(原180,-60缩小2/3)
    (80,  -80, -56.3) # 右下第二星(原120,-120缩小2/3)
]

# 绘制四颗小星(保持标准拱卫布局)
for dx, dy, base_angle in star_params:
    star_x = main_x + dx
    star_y = main_y + dy
    
    # 动态计算指向角度
    target_angle = math.degrees(
        math.atan2(main_y - star_y, main_x - star_x)
    ) - 90
    
    # 绘制缩小后的五角星
    draw_star(star_x, star_y, MAIN_STAR_DIA*STAR_RATIO, target_angle)

turtle.done()
posted @ 2025-03-01 14:42  昔桯  阅读(251)  评论(0)    收藏  举报