我正在尝试使用 lindenmayersystem 绘制经典的 Koch 曲线,但每次变换线段时,它向左或向右翻转的概率应该是 50/50。目标是生成一条由 Koch 曲线构造方向构成的逼真的海岸线。我对 tikz 的随机函数不太熟悉,所以我的尝试根本不起作用:
\documentclass[border=9,tikz]{standalone}
\usetikzlibrary{lindenmayersystems}
\begin{document}
\pgfdeclarelindenmayersystem{Koch curve}{
\symbol{A}{\pgflsystemdrawforward}
\symbol{B}{\pgflsystemdrawforward}
\rule{A -> A+A--A+A}
\rule{B -> B-B++B-B}
\rule{S -> (random(A,B))}
}
\tikz\draw[lindenmayer system={Koch curve,angle=60,axiom=S,order=4}]lindenmayer system;
\end{document}
编辑:我现在几乎明白了,唯一剩下的问题是,在每个序列(四条带长矛的线)之后,角度保持随机。这导致曲线的整体段不遵循科赫曲线的初始构造规则(A+A--A+A):
\documentclass[border=9,tikz]{standalone}
\usetikzlibrary{lindenmayersystems}
\begin{document}
\pgfdeclarelindenmayersystem{Koch curve}{
\symbol{A}{\pgflsystemdrawforward}
\symbol{a}{\pgfmathrandom{0}{1}\ifnum\pgfmathresult=0%
\def\pgflsystemrightangle{120}\def\pgflsystemleftangle{60}%
\else\def\pgflsystemrightangle{-120}\def\pgflsystemleftangle{-60}\fi}
\symbol{+}{\pgflsystemturnleft}
\symbol{-}{\pgflsystemturnright}
\rule{A -> Aa+A-A+A}
}
\tikz\draw[lindenmayer system={Koch curve,axiom=A,order=2}]lindenmayer system;
\end{document}
最后一个到左上角的片段应该像第一个片段一样直接到右。有人知道如何解决这个问题吗?