Tikz 随机放置对象组

Tikz 随机放置对象组

我想在一个三角形区域内放置几组三个对象(两个圆形路径和一个节点)。我想出了以下代码,该代码基于水平切片中三角形的细分以及切片内的随机定位。(在 环境中使用tikzpicturebeamer并且所有相关的 tikz 库 [ calc, decorations, decorations.text, decorations.pathmorphing, shapes.callouts, shapes.symbols] 都已加载并运行):

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc, decorations,decorations.text,decorations.pathmorphing,shapes.callouts,shapes.symbols}

\begin{document}
\begin{frame}{MWE}
\centering
\begin{tikzpicture}
\foreach \l in {1,2,...,10}
      {
          \coordinate (mycenterpoint) at (${(.5*\l+.1)*rand}*(1,0)+{rnd-\l-1}*(0,1)$);
          \coordinate (myangle) at (rand*180:1.4pt);
          %\node[starburst,fill=cyan,fill opacity=0.3] at (mycenterpoint) {};
          \fill[red] (mycenterpoint) ++(myangle) circle (2pt);
          \fill[green] (mycenterpoint) ++($-1*(myangle)$) circle (2pt);
      }
\end{tikzpicture}
\end{frame}
\end{document}

正如我所料,红色和绿色圆圈被放置在相应三角形切片的随机位置。不幸的是,如果我取消注释星爆线,rand 中的某些内容就会受到威胁,所有圆圈和节点都会被放置在一条“线上”,就像第一个坐标定义中的 rand 和 rnd 分别设置为 -1 和 0 一样。

有人能提示一下 rand 函数是如何以及在何处被破坏的吗?

答案1

我不知怎么发现设置一个循环变量相关的随机种子就可以解决问题。例如:

\pgfmathsetseed{\l}
\coordinate (mycenterpoint) at (${(.5*\l+.1)*rand}*(1,0)+{rnd-\l-1}*(0,1)$);
\coordinate (myangle) at (rand*180:1.4pt);
\node[starburst,fill=cyan,fill opacity=0.3] at (mycenterpoint) {};

\foreach代替上例中循环的前三行。

问题出在星爆形状上,正如@ClaudioFiandrino 所建议的那样,它显然会在内部重置种子。我认为应该有一些更简洁的方法来实现同样的效果,尽管我不知道如何获得它

相关内容