You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Turtle绘制最高效的希尔伯特曲线并消除多余转向

希尔伯特曲线绘制优化方案

核心优化点

  • 关闭turtle动画追踪,跳过所有非必要的渲染计算,包括转向过程的动画渲染,这是提速幅度最大的调整
  • 消除递归逻辑中的冗余转向:原代码每次递归调用结束都会复位朝向,相邻子递归调用时会出现「复位→立刻转向」的重复操作,优化后直接通过参数传递子递归朝向,取消多余的转向指令
  • 把初始位置设置逻辑移出递归函数,避免每次递归都做参数判断和无意义的状态检查
  • 移除不必要的嵌套异常捕获,减少运行时开销

优化后代码

from turtle import *
from win32api import GetSystemMetrics

def hilbert_curve(amt, facing, n) -> None:
    if n < 1:
        return
    left(facing * 90)
    hilbert_curve(amt, -facing, n - 1)
    fd(amt)
    right(facing * 90)
    hilbert_curve(amt, facing, n - 1)
    fd(amt)
    hilbert_curve(amt, facing, n - 1)
    right(facing * 90)
    fd(amt)
    hilbert_curve(amt, -facing, n - 1)
    left(facing * 90)

if __name__ == "__main__":
    screen = getscreen()
    # 完全关闭动画追踪,跳过所有中间渲染帧
    tracer(0, 0)
    ht()
    up()
    # 初始定位仅执行一次
    goto(x=(- (GetSystemMetrics(0) - 30) / 2), y=(- (GetSystemMetrics(1) / 2 - 50)))
    down()
    try:
        hilbert_curve(5, 1, 15)
    except Terminator:
        from sys import exit
        exit()
    # 所有绘制完成后一次性刷新结果
    update()
    screen.mainloop()

效果说明

调整后15阶希尔伯特曲线的绘制耗时可以压缩到1秒以内,所有不必要的转向操作都被移除,不会再出现绘制过程中反复空转方向的问题。如果需要绘制更高阶的曲线,还可以继续调整步长amt的数值适配屏幕尺寸。

内容的提问来源于stack exchange,提问作者Codeman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:06:04