TikZ 中的随机坐标

TikZ 中的随机坐标

我需要在 TikZ 中绘制一些“细菌”。它们的坐标和方向需要在预定义的范围内随机。

我已经成功地随机化了方向,但没有随机化每个细菌的位置。

以下是我所拥有的:

\documentclass{article}  
\usepackage{pgfplots}  
\pgfplotsset{compat=newest}  
\usetikzlibrary{calc,decorations,decorations.pathreplacing}  
\begin{document}  
    \newcommand{\bacterium}[3]{\scalebox{#2}{\tikz[rotate=#3]{
    \coordinate (A) at (#1);  
    \shadedraw[shading=ball,ball color=yellow!75, white,rounded corners=10](A) rectangle++(1.5,.65);  
    \draw[decorate,decoration={snake,amplitude=1mm}](A)++(0,.75*.5)--++(-1,0);}}}


\begin{tikzpicture}  
    \foreach \x in {1,2,...,10}{
    \bacterium{rand*10,rand*10}{.2}{rand*360}}  
\end{tikzpicture}  
\end{document}

这会导致细菌的方向随机但沿着 x 轴排列。 在此处输入图片描述

答案1

问题是,在\bacterium宏中,您使用\tikz{}命令来绘制细菌。此命令创建自己的图片,因此每个细菌都有自己的坐标系。在这个坐标系中,细菌是随机放置的,但随后该图片被裁剪为细菌的大小,因此无论细菌位于 (30,10) 还是 (0,0) 都没有区别,因为裁剪后它看起来是一样的。此外,您将该图片包裹在 中\scalebox,这使得整个图片被视为单个字符。

主 for 循环调用\bacterium来创建该组图片,并将它们一个接一个地放置,就像用几个字符组成一个单词一样。

正如在其他地方所说的那样,嵌套 tikz 图片不是一个好主意。

您需要的是所有细菌共享相同的坐标系,即它们都在同一张 tikz 图片中。以下代码通过用允许指定比例因子和旋转因子的\tikztikz 替换您的命令来实现此目标。scope

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{calc,decorations,decorations.pathreplacing}
\begin{document}
\newcommand{\bacterium}[3]{
    \begin{scope}[scale=#2, rotate=#3]
    \coordinate (A) at (#1);
    \shadedraw[shading=ball,ball color=yellow!75, white,
              rounded corners=10*#2](A) rectangle++(1.5,.65);
    \draw[decorate,decoration={snake,amplitude=1mm}]
              (A)++(0,.75*.5)--++(-1,0);
\end{scope}
}


\pgfmathsetseed{1}
\begin{tikzpicture}
  \foreach \x in {1,2,...,10}{
    \bacterium{rand*10,rand*10}{.2}{rand*360}}
\end{tikzpicture}
\end{document}

结果

相关内容