Python结合Turtle与三角函数绘制勾股树完整教程

陆景行
陆景行
发布时间:2026-10-16| 5人浏览过
原创

本文详细介绍如何使用Python的Turtle模块结合三角函数绘制勾股树。通过定义递归函数tree,利用角度旋转和边长缩放生成分形图形。代码包含模块导入、角度参数设置、递归绘制逻辑及性能优化设置(如加速和隐藏画笔),提供完整可运行代码及参数调整建议,适合Python初学者学习递归与图形编程。

Python Turtle绘制勾股树概述

本文将演示如何利用Python的Turtle模块配合三角函数,绘制出如图所示的勾股树图形:

模块导入与角度定义

第一步,导入所需的Python模块。

from turtle import *
from math import sin,cos,radians

接下来,定义勾股树每次分支旋转所需的角度参数。

angle1=70
angle2=90-angle1

递归函数tree实现原理

随后定义核心函数tree,该函数负责绘制正方形,并计算生成新正方形所需的坐标、角度及边长。此处采用递归方式实现分形结构的生成。

在函数参数中,ln代表当前正方形的边长,mode用于标识当前正方形位于前一个正方形的左侧或右侧,h表示当前画笔的朝向角度,p则代表当前绘制的坐标位置。

def tree(ln,mode="left",h=90,p=(0,0)):
    pu()
    seth(h)
    goto(p)
    if ln>1:
        pd()
        for i in range(4):
            if i==1 and mode=="left":
                pos1=pos()
            if i==2 and mode=="left":
                pos2=pos()
            if i==2 and mode=="right":
                pos1=pos()
            if i==3 and mode=="right":
                pos2=pos()
            fd(ln)
            right(90)
        h=heading()
        tree(ln*cos(radians(angle1)),"left",h+angle1 if mode=="left" else h-angle1,pos1)
        tree(ln*cos(radians(angle2)),"right",h+90-angle2 if mode=="left" else h-angle2,pos2) 

主程序设置与性能优化

在主程序部分,首先设置绘图速度。由于递归过程会消耗大量内存导致绘制卡顿,因此将速度设置为加速1000倍,并取消绘图延迟。同时,将画笔颜色设为绿色,笔触大小设为2。执行抬笔操作,设定初始方向,调用递归函数开始绘制,最后隐藏画笔光标并保持窗口显示。

speed(0)
tracer(1000)
delay(0)
color("green")
pensize(2)
pu()
seth(90)
tree(70,p=(-100,-300))
 
ht()
done()

完整代码示例

完整的实现代码如下:

from turtle import *
from math import sin,cos,radians
 
angle1=45 # 自行修改
angle2=90-angle1
 
def tree(ln,mode="left",h=90,p=(0,0)):
    pu()
    seth(h)
    goto(p)
    if ln>1:
        pd()
        for i in range(4):
            if i==1 and mode=="left":
                pos1=pos()
            if i==2 and mode=="left":
                pos2=pos()
            if i==2 and mode=="right":
                pos1=pos()
            if i==3 and mode=="right":
                pos2=pos()
            fd(ln)
            right(90)
        h=heading()
        tree(ln*cos(radians(angle1)),"left",h+angle1 if mode=="left" else h-angle1,pos1)
        tree(ln*cos(radians(angle2)),"right",h+90-angle2 if mode=="left" else h-angle2,pos2)
 
speed(0)
tracer(1000)
delay(0)
color("green")
pensize(2)
pu()
seth(90)
tree(70,p=(-100,-300))
 
ht()
done()

至此,关于使用Python和Turtle模块绘制勾股树的教程介绍完毕。如需了解更多Python Turtle相关技巧,可查阅本站往期文章或继续浏览后续内容,感谢您的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。