使用Python Turtle绘制外方内斜嵌套正方形无法得到预期效果如何解决
Python Turtle 嵌套正方形绘制修复方案
原代码问题梳理
- 画笔移动前未抬笔,会生成多余的拖拽线条
- 绘制图形前未重置画笔朝向与角度,前序绘制的状态会干扰后续图形
- 倾斜正方形的坐标、边长计算错误,无法实现内嵌对齐效果
- 封装函数硬编码参数,未使用入参导致复用性差
修复后完整代码
import turtle as t t.speed(1) def square(x, y, side): t.penup() t.setpos(x, y) t.pendown() t.setheading(0) # 重置画笔朝向右方 for i in range(4): t.forward(side) t.right(90) def tiltsquare(x, y, side): t.penup() t.setpos(x, y) t.pendown() t.setheading(45) # 直接设置为45度,避免累计旋转 for i in range(4): t.forward(side) t.right(90) def squareinsquare(x, y, outer_side): # 绘制外正方形 square(x - outer_side/2, y + outer_side/2, outer_side) # 计算内倾斜正方形边长:外边长/√2 ≈ 外边长*0.7071 inner_side = outer_side * (2 ** 0.5) / 2 # 倾斜正方形起点刚好和外正方形边中点对齐 tiltsquare(x, y + outer_side/2, inner_side) # 调用示例:原点为中心,外正方形边长200 squareinsquare(0, 0, 200) t.done() # 保持窗口不自动关闭
修改说明
- 所有绘制函数开头增加抬笔移动、落笔绘制的逻辑,消除多余轨迹
- 每次绘制前调用
setheading重置朝向,避免角度累计偏移 - 重新计算了倾斜正方形的边长与坐标,确保四个顶点刚好落于外正方形的四条边中点,实现完美内嵌效果
- 移除硬编码参数,支持自定义中心坐标与外正方形边长,灵活性更高
- 末尾增加
t.done()避免绘制完成后窗口自动关闭
内容的提问来源于stack exchange,提问作者iamjr15
相关产品推荐
相关产品推荐

