我需要在 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 图片中。以下代码通过用允许指定比例因子和旋转因子的\tikz
tikz 替换您的命令来实现此目标。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}