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()