Python Turtle绘制k次递归正方形后实现螺旋效果的函数实现问题
Python Turtle 螺旋函数实现方案
首先补全你代码中缺失的基础依赖(画笔、画布初始化、square函数定义),再实现螺旋逻辑即可,完整可运行代码如下:
from turtle import Turtle, Screen import math # 初始化画笔与画布 t = Turtle() t.speed(0) s = Screen() # 基础正方形绘制函数 def square(x, y, side): t.penup() t.goto(x, y) t.pendown() for _ in range(4): t.forward(side) t.right(90) def squareinsquare(x, y, side): square(x, y, side) half = side / 2 b = math.sqrt(half**2 + half**2) # 原代码中的tiltsquare可参考下方逻辑实现:增加初始45度旋转即可 # t.penup() # t.goto(x, y - side/2) # t.setheading(45) # t.pendown() # for _ in range(4): # t.forward(b) # t.right(90) def fractal(x, y, startSide, k): t.setpos(x, y) t.setheading(0) for i in range(k): square(*t.pos(), startSide) t.forward(startSide / 2) t.right(45) startSide /= math.sqrt(2) # 螺旋实现函数 def spl(x, y, stLength, k): t.penup() t.goto(x, y) t.pendown() # 可单独设置螺旋颜色,和正方形区分 t.pencolor("red") t.setheading(0) current_len = stLength # k层分形对应4*k段螺旋线段 for _ in range(4 * k): t.forward(current_len) t.right(90) # 缩放比例和分形正方形的缩放比例保持一致,保证螺旋贴合分形结构 current_len /= math.sqrt(2) # 调用绘制 fractal(0, 0, 200, 5) spl(0, 0, 200, 5) s.exitonclick()
实现逻辑说明
- 螺旋线段的缩放比例和分形正方形的缩放比例完全匹配(每次缩小为原来的
1/√2),可以完美贴合你之前绘制的多层嵌套倾斜正方形结构 - 每次旋转90度符合正方形的转角规则,4*k次迭代刚好可以走完k层分形对应的完整螺旋
- 如果需要调整螺旋的松紧程度,可以修改旋转角度,比如转45度会得到更密的螺旋
内容的提问来源于stack exchange,提问作者iamjr15
相关产品推荐
相关产品推荐

