将随机数的结果存储在 tikzpicture 中

将随机数的结果存储在 tikzpicture 中

我正在绘制一个由刚性“分子”组成的表面,每个分子由三个球体组成。我想给表面添加一些随机性。我创建了以下代码:

\begin{tikzpicture}
  \def\nuPi{3.1459265}
  \foreach \i in {11,10,...,0}{
    \foreach \j in {5,4,...,0}{
      \def\dx{rand*0.1}
      \def\dy{rand*0.1}
      \shade[ball color=red]  (\i+\dx,{0.5*\j+\dy+0.4*sin(\i*\nuPi*10)}) circle(0.45);
      \shade[ball color=gray] (\i+\dx,{0.5*\j+\dy+0.4*sin(\i*\nuPi*10)-0.9}) circle(0.45);
      \shade[ball color=gray] (\i+\dx,{0.5*\j+\dy+0.4*sin(\i*\nuPi*10)-1.8}) circle(0.45);
    }
  }

\end{tikzpicture}

根据结果​​表面判断,\dx\dy是在每次访问时生成的,而不是在每个循环中生成一次。有没有办法存储它们?

答案1

您可以使用 存储结果\pgfmathsetmacro{<macro>}{<expression>}。请注意,像 这样的函数的参数sin(<arg>)默认应以度为单位。如果不是,则应使用“r运算符”。有关解析数学表达式的更多信息,请阅读部分63 数学表达式的语法(第 527 页起)tikz/pgf文档

我已将您的代码片段修改为 MWE,并使用(\xcoor\ycoor)来表示坐标对,因为它们对于三个阴影球基本相同。

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}% http://ctan.org/pkg/pgf
\begin{document}
\begin{tikzpicture}
  \foreach \i in {0,1,...,11}{
    \foreach \j in {5,4,...,0}{
      \pgfmathsetmacro{\xcoor}{\i+rand*0.1}% x-coordinate
      \pgfmathsetmacro{\ycoor}{0.5*\j+rand*0.1+.4*sin(\i*360/12)}% y-coordinate
      \shade[ball color=red]  (\xcoor,\ycoor) circle(0.45);
      \shade[ball color=gray] (\xcoor,\ycoor-0.9) circle(0.45);
      \shade[ball color=gray] (\xcoor,\ycoor-1.8) circle(0.45);
    }
  }
\end{tikzpicture}
\end{document}

相关内容