![]()
点击查看代码
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()