一款交互式分形探索工具,专注于 Lindenmayer-系统 (L-system) 与 奇异吸引子 (Strange Attractor) 的实时生成、可视化和视频导出。无需编程,通过图形界面即可调整参数、观察演化、导出图像和动画,适合教学、科普和快速原型验证。
- 内置十余种经典分形(科赫曲线、谢尔宾斯基三角、分形树、龙曲线、希尔伯特曲线、植物等)
- 支持自定义迭代次数、边数(科赫雪花)
- 实时显示线段数量与生成耗时
- 导出绘制过程视频:展示分形从初始状态逐步展开的完整动画
- 预设系统:Lorenz、Rössler、Chua、Chen、Hénon、Duffing
- 自定义微分方程系统:支持用户以字符串形式输入任意三维 ODE(如
dx/dt = sigma*(y-x)),参数可自由定义 - 2D/3D 投影切换(XY、XZ、YZ、三维自由视角)
- 多种渲染风格(按深度着色、彩虹、金秋等)
- 导出轨迹生长视频:展示吸引子从初始点逐渐演化的完整过程
- 左键框选放大(2D 视图),右键复位
- 保存当前画面为高清 JPG 图像(自动命名、存放于
outputs/) - 进度条与状态提示,数值发散时给出友好错误信息
- Python 3.8 或更高版本
- 推荐使用 Anaconda 或虚拟环境
pip install -r requirements.txt如果希望启用 Numba 加速(显著提升 L-系统性能),请额外安装:
pip install numbapython src/gui_app.py- 从下拉列表选择分形类型。
- 调整迭代次数(数值越大图形越精细,但计算量增加)。
- 若分形支持参数调整(如科赫雪花),可设置边数
n。 - 点击 计算生成分形。
- 可切换渲染方式(深度着色、单色、彩虹等)。
- 点击 导出绘制过程 生成 MP4 视频(需安装
imageio和ffmpeg)。
- 选择预设吸引子,或选择 自定义混沌系统 手动输入方程。
- 调整积分参数:
- 步长 dt:积分时间步长(越小越精确,但计算量增大)。
- 总步数:轨迹点数。
- 初始条件 (x0, y0, z0)。
- 若为预设系统,可直接调整系统参数(如 Lorenz 的 σ、ρ、β)。
- 若为自定义系统,在方程框中输入
dx/dt、dy/dt、dz/dt的表达式,并在参数定义框中以分号分隔参数,如:支持的数学函数:sigma=10.0; rho=28.0; beta=2.6667sin、cos、exp、log、sqrt、abs、min、max以及常量pi、e。 - 选择投影方式(XY、XZ、YZ、3D)。
- 点击 计算生成分形。
- 可切换渲染方式。
- 点击 导出轨迹变化 生成 MP4 视频。
- 保存图像:点击任一标签页的 保存图像 按钮,图像将自动存入
outputs/文件夹,文件名包含分形名和参数信息。 - 框选放大:在 2D 视图中,按住鼠标左键拖动矩形框选区域,释放后视图自动放大到该区域。
- 复位:在 2D 视图中,单击鼠标右键恢复全局视图。
所有输出文件(图像 .jpg、视频 .mp4)均保存在项目根目录的 outputs/ 文件夹中,文件名自动包含分形名、迭代次数/时间长度和流水号,便于整理。
LSystemAttractorLab/
├── src/
│ ├── gui_app.py # 主界面
│ ├── fractal_engine.py # 分形引擎抽象基类
│ ├── lsystem_engine.py # L-系统引擎
│ ├── lsystem_definitions.py # L-系统预设库
│ ├── lsystem_growth.py # L-系统生长过程生成器
│ ├── attractor_engine.py # 奇异吸引子引擎(含自定义系统)
│ ├── attractor_definitions.py # 预设吸引子库
│ ├── rendering.py # 颜色映射、归一化工具、共享常量
│ └── video_exporter.py # 视频导出器(吸引子 & L-系统)
├── outputs/ # 输出文件夹(自动创建)
├── requirements.txt
├── .gitignore
├── demo.png
└── README.md
tkinter(Python 内置)matplotlibnumpyPillowimageio+imageio-ffmpeg(视频导出,可选)numba(加速,可选)
- 自定义微分方程中若出现数值溢出或发散,程序会弹出友好错误提示,建议减小步长
dt或调整参数。 - 视频导出需要安装
imageio和imageio-ffmpeg,并确保系统已安装ffmpeg可执行文件。 - 3D 视图支持鼠标旋转视角(通过 Matplotlib 工具栏)。
本项目基于 Python 科学计算生态构建,感谢所有开源社区贡献者。
