我正在研究图论,我必须绘制一些看起来很随机的路径,比如第一张图片上的路径。我创建了路径、问在第二张图片上使用下面的代码。
但是,为了获得更清晰的定义而必须添加更多的点,并且必须改变路径的“入口”和“出口”来“产生随机性”,这似乎真的令人沮丧。
我真正想要的是是一种更实用的生成路径的方法,例如、问,然后当然可以实现生成类似第一幅图像上的图形。
\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}