L-System分形生成器
根据Lindenmayer系统(L-System)规则生成美丽的分形。选择一个经典预设(科赫雪花、科赫正方形、谢尔宾斯基三角形、龙形曲线、分形树、植物),或编写您自己的公理、产生式规则和海龟步进角度 —— 本工具可以扩展字符串、控制海龟移动,并渲染出带有动画绘制效果、按深度着色的SVG。
检测到广告拦截,导致我们无法展示广告
MiniWebtool 依靠广告收入免费提供服务。如果这个工具帮到了你,欢迎开通 Premium(无广告 + 更快),或将 MiniWebtool.com 加入白名单后刷新页面。
- 或升级 Premium(无广告)
- 允许 MiniWebtool.com 显示广告,然后刷新
L-System分形生成器
L-System分形生成器将 Lindenmayer 系统的语法转换为美观的、基于深度着色的动态 SVG 分形。选择一个预设 — 科赫雪花 (Koch snowflake)、谢尔宾斯基三角形 (Sierpinski triangle)、龙曲线 (Heighway dragon)、希尔伯特曲线 (Hilbert curve)、分形植物、树木或灌木 — 或编写您自己的公理和产生式规则,观看字符串爆炸式增长为自相似的形状。该工具在服务端扩展字符串,让虚拟海龟遍历每个符号,并将结果渲染为可缩放的 SVG,您可以下载、编辑或粘贴到幻灯片中。
什么是 L-System?
L-System(或 Lindenmayer 系统)是一种并行字符串重写语法,由匈牙利生物学家阿里斯蒂德·林登迈尔 (Aristid Lindenmayer) 于 1968 年发明,用于对植物和微生物的生长进行数学建模。它包含三个要素:一个公理(包含一个或多个符号的起始字符串)、一个或多个产生式规则(每个规则将单个符号映射到一个替换字符串)以及一种解释(在这里为海龟绘图 — 一只服从前进、左转、右转、入栈和出栈命令的虚拟画笔)。
要运行该系统,您从公理开始并并行应用规则 — 所有符号同时被替换,然后开始下一次迭代。经过几次迭代后,字符串变得极其庞大,并且呈现出明显的分形特征。当您将该字符串交给海龟时,就会呈现出具有自相似性的图形。
海龟符号一览
| 符号 | 海龟执行的操作 |
|---|---|
| F, G | 向前移动一步并绘制一条线。 |
| f | 向前移动一步但不绘制。 |
| + | 向左旋转您指定的角度(例如 25°、60°、90°)。 |
| - | 向右旋转该角度。 |
| | | 将朝向翻转 180°。 |
| [ | 将当前位置 and 朝向压入栈中 — 用于开始一个分支。 |
| ] | 从栈中弹出位置和朝向 — 返回到分支点。 |
| X, Y, A, … | 其他字母:纯重写符号。它们会影响下一次迭代,但自身不绘制任何内容。 |
是什么让这款 L-System 生成器与众不同
重写是如何工作的(示例)
以公理为 F、规则为 F → F+F-F-F+F、海龟角度设置为 90° 的科赫曲线 (Koch curve) 为例。以下是字符串的演变过程:
- 迭代 0:
F— 1 个字符。 - 迭代 1:
F+F-F-F+F— 9 个字符。单个 F 变成了一个方形凸起。 - 迭代 2:
F+F-F-F+F + F+F-F-F+F - F+F-F-F+F - F+F-F-F+F + F+F-F-F+F— 49 个字符。迭代 1 中的每个 F 自身都已被替换为 F+F-F-F+F。 - 迭代 3: 249 个字符。迭代 4:1,249 个字符。迭代 5:6,249 个字符。
这种增长是几何级数的:每次迭代都会将长度乘以 5(替换字符串的长度)。经过 5 次迭代后,海龟有数千个命令需要执行,结果就是清晰可辨的科赫分形 — 一条类似于海岸线的曲线,其分形维数为 log(4)/log(3) ≈ 1.26。
括号如何构建植物
如果没有括号符号 [ 和 ],每个 L-System 都只是一条连续不断的单一曲线。括号开启了分支功能:当海龟遇到 [ 时,它会将当前位置和朝向压入栈中,在括号内绘制分支,然后在遇到 ] 时弹回原处。规则 F → F[+F][-F]F 表示“每个向前笔画都会变成一个笔画、一个左分支、一个右分支和一个继续前进的笔画” — 这就是一棵树的配方。
分形植物预设极好地展示了这一点。它的规则 X = F+[[X]-X]-F[-FX]+X 使用双重括号来编码“分支中的分支”。经过 5 次迭代后,生成的字符串包含 11,000 多个符号和大约 1,000 多个括号对 — 海龟尽职尽责地执行入栈和出栈操作,绘制出一株蕨类植物。
L-System 的应用领域
- 过程式植物生成: SpeedTree 和 Houdini 生态系统使用 L-System(及其随机、参数化和上下文相关扩展)来为电影和游戏种植森林、丛林和农田。
- 建筑与城市建模: 源自 L-System 的基于规则的语法可以生成建筑物外墙、街道网络和整个过程式城市。
- 生物学与形态学: 最初的应用场景 — 对藻类细胞的发育、植物的分支以及珊瑚和晶体的结构进行建模。
- 计算机图形与 Demoscene 艺术: 用非常小的文件体积来紧凑描述复杂的分形曲线 — 一个 30 字节的规则就可以产生一个百万像素的图像。
- 数学教育: 上下文无关并行语法的典型示例;连接形式语言与分形几何的直观桥梁。
- 生成音乐与编舞: 相同的重写机制应用于音乐乐句或舞蹈动作,从而产生具有结构感且有机的作品。
设计您自己的 L-System
一些总能生成好看分形的经验法则:
- 从小的开始。 新规则的 3 次迭代足以看清结构。只有在确定形状按照预期增长后,再增加迭代次数。
- 对于曲线,选择能整除 360° 的角度(60°、72°、90°、120°)。对于植物,18° 到 30° 之间的角度可以产生看起来很自然的分支。
- 使用不绘制的符号(如 X)来控制结构。规则
F → FF只是将每个笔画加倍,但公理为X的规则X → F+X[-X]会创建一个分支形状 — F 绘制可见的线条,X 控制分支模式。 - 保持括号平衡。 每个
[必须有一个匹配的]。该工具在绘制时允许不平衡的括号,但您会遇到意想不到的跳跃。确保每个[都有一个]配对。 - 注意增长率。 如果您的规则将 F 替换为五个符号,则每次迭代都会将字符串乘以 5。
F → FF+F-F+F的 6 次迭代就已经超出了大多数渲染器的承受范围。
随机与参数化扩展
该工具中的确定性 L-System 是最简单的变体。现实世界中的植物建模者使用更丰富的语法:随机 L-System (stochastic L-systems) 为同一个符号的多个规则分配概率,因此每株植物都略有不同。参数化 L-System (parametric L-systems) 为符号附加数值(分支的长度或厚度),并允许规则读取和修改它们。上下文相关 L-System (context-sensitive L-systems) 允许规则仅在其符号具有特定邻居时才触发。这些都可以将静态分形变成一个可以生长、反应和老化的系统。
常见误区
- “迭代次数越多越好看”: 错误。超过五或六次迭代后,笔画会重叠,细节反而会丢失。最佳迭代深度取决于规则 and 显示分辨率。
- “L-System 只能画植物”: 它们可以描述任何自相似曲线。科赫曲线、龙曲线、谢尔宾斯基垫片 — 全都是 L-System。
- “必须使用括号”: 不需要。像科赫、龙曲线和莱维这样的单笔画曲线不需要括号。只有在需要分支时才需要括号。
- “所有分形都具有相同的分形维数”: 错误。科赫的维数 ≈1.26,龙曲线的维数是 2,谢尔宾斯基的是 ≈1.58,希尔伯特曲线的逼近 2 — 每个规则都有自己的维数,这取决于字符串的增长方式与海龟移动距离的对比。
常见问题解答
什么是 L-System?
L-System(或 Lindenmayer 系统)是一种并行字符串重写语法,由生物学家阿里斯蒂德·林登迈尔 (Aristid Lindenmayer) 于 1968 年发明,用于对植物生长进行建模。它从一个公理(一个短字符串)开始,重复应用将单个符号替换为更长字符串的产生式规则,然后将最终的字符串解释为海龟绘图命令。结果是一个自相似的分形。
这些符号是什么意思?
F 和 G 是绘制笔画(海龟向前移动并绘制一条线)。f 是静默移动(向前移动但不绘制)。+ 将海龟向左旋转您指定的角度,- 将其向右旋转,| 将其翻转 180 度。[ 将海龟的位置和朝向压入栈中,] 将其弹回。所有其他字母(X、Y、A、B……)都是仅重写符号 — 它们会影响下一次迭代,但不会绘制。
为什么 L-System 擅长对植物进行建模?
括号符号 [ ] 让海龟能够记住并恢复其位置,因此单个规则可以产生分支。像 F = F[+F][-F]F 这样的规则会绘制一根茎,向两个方向分支,然后继续 — 这正是植物生长的方式。通过稍微不同的规则和角度,相同的引擎可以生成蕨类植物、灌木、树木、海藻和根系。
规则中 F 和 X 有什么区别?
F 既是一个绘制符号(当海龟看到 F 时它会绘制一条线)又是一个重写符号(规则可以在左侧匹配 F)。X 是一个纯重写符号 — 当海龟在绘制过程中看到 X 时,它什么都不做。当您想要一个控制结构而不被绘制出来的符号时,X 非常有用。
我应该使用多少次迭代?
对于大多数预设,4-6 次迭代就能产生可辨认的分形。字符串长度呈指数级增长,因此从 6 次迭代增加到 7 次可能会使工作量乘以 3-5 倍。该工具将迭代次数限制为 8 次,重写后的字符串限制为 250,000 个字符,以保持渲染的响应速度。
基于深度的着色是由什么控制的?
每个 [ 都会将海龟推入更深的括号层级;每个 ] 都会弹回。达到的最深层级就是最大深度。选择“深度渐变”可以根据括号层级为每个笔画着色 — 非常适合植物,因为树干和分支自然处于不同的深度。
初始角度是如何工作的?
初始角度是海龟在第一步时所面对的方向。0° 表示正东(向右)— 大多数曲线都使用它。90° 表示正北(向上)— 植物和树木使用它,以便它们朝向画布顶部生长。尝试更改任何预设上的初始角度以旋转整个图形。
我可以下载分形吗?
可以。下载为 SVG 格式可在打印、演示和激光切割中获得清晰的缩放效果,下载为 PNG 格式便于在聊天和社交媒体上分享。“复制”按钮可复制完整的 L-System 定义(公理、规则、角度、迭代次数),以便您可以将其粘贴到笔记或其他工具中。
最大复杂度是多少?
最多支持 8 次重写迭代、扩展字符串中包含 250,000 个字符、60,000 个绘制线段以及 12 个产生式规则。这些上限使 SVG 足够轻量,从而可以流畅地渲染和下载。对于更大的网格,请考虑使用桌面端 L-System 工具,例如 cgkit 或 Houdini。
如果我的括号不平衡会怎么样?
未闭合的 ](没有匹配 of [)会被静默忽略 — 海龟会留在原处。未闭合的 [(没有结束的 ])意味着海龟永远不会执行出栈操作,因此它会一直向前绘制,而永远不会返回到分支点。该工具总是会完成绘制,但结果可能与您的预期不符。请确保每个 [ 都有一个 ] 与之匹配。
什么是海龟绘图解释器?
它是一个虚拟画笔,服从来自字符串的移动命令。这个名字源于 Logo 编程语言。海龟有一个位置和一个朝向(它面对的方向)。每个 F 都会使其在当前朝向上面前移动一步;+ 和 - 会旋转朝向。海龟正是将扁平的字符串转化为二维图形的关键所在。
为什么我的分形看起来被挤压了?
该工具会自动将图形自适应到画布中,同时保持宽高比,因此图形会缩放但不会变形。如果分形在视觉上看起来不平衡,可能是规则本身的原因 — 例如,龙曲线的宽度大于高度,这是正确的。增加迭代次数可以查看形状的收敛情况。
引用此内容、页面或工具为:
"L-System分形生成器" 于 https://MiniWebtool.com/zh-cn//,来自 MiniWebtool,https://MiniWebtool.com/
由 MiniWebtool 团队制作。更新于:2026-05-20