Python turtle分形绘制实现运行时随机选择分形类型的方法咨询
实现随机选择分形绘制的修改方案
你原有代码需要先做基础调整再添加随机逻辑,具体操作如下:
- 原代码的两个分形绘制逻辑直接写在全局作用域,运行时会依次执行,需要先分别封装为独立函数
- 原谢尔宾斯基部分存在命名冲突:Turtle实例和绘制函数都叫
triangle,需要修改避免报错 - 原代码存在缩进错误,需要先修正缩进才能正常运行
核心随机选择逻辑
你已经导入了random库,完成函数封装后,在代码末尾添加如下代码即可实现随机二选一执行:
if random.choice([True, False]): draw_koch() else: draw_sierpinski()
完整可运行参考代码
import turtle as tu, random # 科赫曲线绘制逻辑封装 def Koch(length): if length <= 2 : tu.fd(length) return Koch(length/3) tu.lt(60) Koch(length/3) tu.rt(120) Koch(length/3) tu.lt(60) Koch(length/3) def draw_koch(): tu.clear() tu.reset() tu.speed(166) length = 300.0 tu.penup() tu.backward(length/2.0) tu.pendown() Koch(length) tu.done() # 谢尔宾斯基三角形绘制逻辑封装 def getMid(p1,p2): return ( (p1[0]+p2[0]) / 2, (p1[1] + p2[1]) / 2) def draw_sierpinski(): sier_tri = tu.Turtle() sier_tri.ht() sier_tri.speed(0) sier_tri.pencolor('blue') points = [[-175,-125],[0,175],[175,-125]] def triangle(points,depth): sier_tri.up() sier_tri.goto(points[0][0],points[0][1]) sier_tri.down() sier_tri.goto(points[1][0],points[1][1]) sier_tri.goto(points[2][0],points[2][1]) sier_tri.goto(points[0][0],points[0][1]) if depth>0: triangle([points[0], getMid(points[0], points[1]), getMid(points[0], points[2])], depth-1) triangle([points[1], getMid(points[0], points[1]), getMid(points[1], points[2])], depth-1) triangle([points[2], getMid(points[2], points[1]), getMid(points[0], points[2])], depth-1) triangle(points,6) tu.done() # 随机选择执行逻辑 if random.choice([True, False]): draw_koch() else: draw_sierpinski()
内容的提问来源于stack exchange,提问作者Jisurane
相关产品推荐
相关产品推荐

