TikZ 中的随机旋转循环(气体图片)

TikZ 中的随机旋转循环(气体图片)

我有兴趣制作一系列包含运动图形的球来代表气体。因此,我想对这组“运动中的球”(我以后将其简称为 mball)中的每一个应用旋转根据随机角度

我到目前为止的代码如下所示

\documentclass{article}
\usepackage{tikz}
\usepackage{xcolor}
\usetikzlibrary{arrows,snakes,backgrounds}

%Colors%
\definecolor{Red}{rgb}{0.922526, 0.385626, 0.209179}


%Defs%
\def\ball at (#1,#2){\draw[fill=Red!30,Red!30] (#1,#2) circle (4pt);
\draw[fill=Red!50,Red!50] (#1,#2)+(.15cm,0) circle (4pt);
\draw[fill=Red!70,Red!70] (#1,#2)+(.3cm,0) circle (4pt);}

\begin{document}
\begin{tikzpicture} 
    \foreach \x in {-2,...,2}
        \foreach \y in {-2,...,2}
        {\ball at (\x,\y)}
\end{tikzpicture}
\end{document}

产生

在此处输入图片描述

到目前为止,我尝试了几种方法,但我的问题在于,特别是让每个 mball 获得不同的角度。也就是说,角度的随机性并不是什么大问题,但如果我尝试在循环中添加角度,这可能取决于变量 \x 或 \y,它就行不通,我的意思是,我尝试了类似

    \foreach \x in {-2,...,2}
        \foreach \y in {-2,...,2}
        {[rotate=15*\x*\y]\ball at (\x,\y)}

或甚至固定角度

    \foreach \x in {-2,...,2}
        \foreach \y in {-2,...,2}
        {[rotate=30]\ball at (\x,\y)}

甚至固定角度。所以,总结一下,我的问题是:

(1) 我应该如何调整语法才能使其正常工作?也就是说,我希望仍然能够执行循环并在每个步骤中对 mball 进行旋转。

(2)不太重要,但相关,从这个角度实现随机性的最佳方法是什么?

答案1

您选择以自己的方式定义命令\ball会消除轻松将可选参数(如旋转角度)传递给构造的可能性。

这可以通过重写命令的定义来解决。但是 tikZ/pgf 为您的问题提供了现成的解决方案:pics。

来自手册:

这个想法是,图片只是一些代码,您可以使用 pic 命令将其添加到图片的不同位置,该命令的语法几乎与节点命令相同。

根据您的情况(我已根据我的个人喜好调整了您的代码),

\tikzset{balls/.pic={
    \fill[Red!30] (-.15cm,0) circle (4pt);
    \fill[Red!50] (0,0) circle (4pt);
    \fill[Red!70] (.15cm,0) circle (4pt);}
}

在您之前插入tikzpicture将允许您在任意位置插入三个球的旋转版本:

\pic[rotate=10] at (3,2) {balls};

现在,Jairo A. del Rio 的评论很容易实现:

\documentclass{article}
\usepackage{tikz}
%Colors%
\definecolor{Red}{rgb}{0.922526, 0.385626, 0.209179}

\tikzset{balls/.pic={
    \fill[Red!30] (-.15cm,0) circle (4pt);
    \fill[Red!50] (0,0) circle (4pt);
    \fill[Red!70] (.15cm,0) circle (4pt);}
}

\begin{document}

\begin{tikzpicture} 
    \foreach \x in {-2,...,2}
        \foreach \y in {-2,...,2}
        {\pgfmathsetmacro{\myangle}{360*rnd}
        \pic[rotate=\myangle] at (\x,\y) {balls};}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容