Tikz:在 TikZ 中绘制“随机”路径

Tikz:在 TikZ 中绘制“随机”路径

我正在研究图论,我必须绘制一些看起来很随机的路径,比如第一张图片上的路径。我创建了路径、问在第二张图片上使用下面的代码。

但是,为了获得更清晰的定义而必须添加更多的点,并且必须改变路径的“入口”和“出口”来“产生随机性”,这似乎真的令人沮丧。

我真正想要的是是一种更实用的生成路径的方法,例如、问,然后当然可以实现生成类似第一幅图像上的图形。

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\begin{document}

\begin{tikzpicture}[line cap=round]

%  Path P
\draw[thick]
    (-5,2) to[out=20, in=170] ++(0.5,0.1)
           to[out=-2, in=130] ++(0.5,+0)
           to[out=-40, in=168] ++(0.5,-0.07)          
           to[out=-10, in=170] ++(0.5,+0.05)       
           to[out=-10, in=120] ++(0.5,0) 
           to[out=300, in=170] ++(0.5,+0.05)       
           to[out=-20, in=120] ++(0.5,+0.05) coordinate (u)    
           to[out=-20, in=170] ++(0.5,0) 
           to[out=-10, in=170] ++(0.5,+0.05) coordinate (P)  
    ;
    
    \node[shift={(0.2,0)}] at (P) {$\mathrm{P}$};
% Path Q
\draw[thick]
    (-5,0) to[out=300, in=160] ++(0.5,-0.1)
           to[out=-10, in=170] ++(0.5,0)  
           to[out=-2, in=175] ++(0.5,+0.1) coordinate (y)
           to[out=-4, in=178] ++(0.5,-0.1) 
           to[out=-2, in=210] ++(0.5,+0) 
           to[out=30, in=190] ++(0.5,0.05) coordinate (v)
           to[out=+10, in=130] ++(0.5,+0.05)       
           to[out=-30, in=160] ++(0.5,0) 
           to[out=-20, in=220] ++(0.5,+0.05) coordinate (Q)
    ;
    \node[shift={(0.2,0)}] at (Q) {$\mathrm{Q}$};

\end{tikzpicture}
\end{document}

答案1

这是实现此目的的一种方法。

  • \usetikzlibrary{decorations.pathmorphing}
  • 定义decoration,并对 Q ( rounded corners)进行一些覆盖
  • 用于relative polar coordinates设置终点
  • 存储coordinates端点
  • 放置nodes标签

然而,当改变线段长度和圆角的参数时,tikz 有时需要大量资源。

结果


\documentclass[10pt,border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}

\begin{document}

\begin{tikzpicture}
% see 50.3.1 Decorations Producing Straight Line Paths
    [decoration={random steps,segment length=3mm}]
    % paths
    \draw [decorate]                (0,0) -- (10:5)     coordinate (P);
    \draw [decorate,
            rounded corners=1mm]    (0,-1) -- ++(-5:5)  coordinate (Q);
    % labels
    \node at (P) [xshift=5mm] {P};
    \node at (Q) [xshift=5mm] {Q};
\end{tikzpicture}

\end{document}

相关内容