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

基于TikZ与Lindenmayer系统绘制空间填充曲线的问题求助

解决TikZ Lindenmayer系统绘制空间填充曲线的问题

问题分析与修正

1. 核心问题根源

你当前的L-system规则仅生成单向延伸的折线,不具备空间填充的迭代逻辑,同时规则末尾的未闭合结构导致右下角出现多余短线。若目标为Hilbert曲线(典型空间填充曲线),需替换为符合填充逻辑的规则。

2. 修正后的完整代码

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary[lindenmayersystems]

\begin{document}

% 定义Hilbert曲线的Lindenmayer系统规则
\pgfdeclarelindenmayersystem{Hilbert}{
    \rule{L -> +RF-LFL-FR+}
    \rule{R -> -LF+RFR+FL-}
}

% 自动计算自适应参数:阶数、步长、网格边长
\pgfmathsetmacro{\order}{6}
\pgfmathsetmacro{\step}{0.25}
\pgfmathsetmacro{\side}{pow(2,\order)*\step}

\begin{tikzpicture}
    % 绘制匹配曲线尺寸的背景网格
    \draw[gray!30] (0,0) grid (\side,\side);
    % 绘制空间填充曲线
    \draw[black]
        [l-system={Hilbert, axiom=L, order=\order, step=\step cm, angle=90}]
        lindenmayer system;
\end{tikzpicture}

\end{document}

关键调整说明

  • 规则修正:新规则通过L和R的交替替换生成折返、嵌套的填充结构,确保每阶迭代都在正方形区域内扩展,而非单向延伸。
  • 多余短线消除:修正后的规则为闭合迭代逻辑,不会产生残留的未绘制线段。
  • 自适应网格:通过\pgfmathsetmacro基于阶数计算正方形边长,网格会随阶数和步长自动缩放,曲线刚好填满整个网格空间。

额外建议

  • 若目标曲线非Hilbert曲线,可替换\pgfdeclarelindenmayersystem内的规则,Peano、Sierpiński等空间填充曲线均有标准L-system定义。
  • 阶数越高,建议调小\step值,避免生成的图形尺寸过大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:25:11