有没有办法让 Lindenmayer 系统随机化?

有没有办法让 Lindenmayer 系统随机化?

我正在尝试使用 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}

在此处输入图片描述

最后一个到左上角的片段应该像第一个片段一样直接到右。有人知道如何解决这个问题吗?

相关内容