import turtle import math def midpoint(p, q): """返回两点中点""" return ((p[0] + q[0]) / 2, (p[1] + q[1]) / 2) def midpoint_triangle(pts): """返回三角形三边中点组成的三角形(顶点顺序与原三角形一致)""" return [midpoint(pts[i], pts[(i + 1) % 3]) for i in range(3)] def draw_polygon(t, pts, fill=None, pen_color="black"): """按给定顶点绘制多边形,可选填充颜色""" t.penup() t.goto(pts[0]) t.pendown() t.pencolor(pen_color) if fill is not None: t.fillcolor(fill) t.begin_fill() for p in pts[1:]: t.goto(p) t.goto(pts[0]) if fill is not None: t.end_fill() def main(): turtle.setup(700, 600) turtle.title("嵌套正三角形") t = turtle.Turtle() t.speed(4) t.pensize(2) # 外三角形:边长 200,质心置于原点 s = 200 h = s * math.sqrt(3) / 2 # 高 T1 = [(-s / 2, -h / 3), (s / 2, -h / 3), (0, 2 * h / 3)] # 中三角形:边长为 100,顶点为外三角形三边中点 T2 = midpoint_triangle(T1) # 内三角形:边长为 50,顶点为中三角形三边中点 T3 = midpoint_triangle(T2) # 1. 画外三角形(只描边) draw_polygon(t, T1) # 2. 画中三角形并整体填充黄色 draw_polygon(t, T2, fill="yellow") # 3. 画内三角形并用背景色(白色)覆盖, # 这样中三角形中“不与内三角形重叠”的部分就留下黄色 draw_polygon(t, T3, fill="white") t.hideturtle() turtle.done() if __name__ == "__main__": main()